xref: /trunk/main/cui/source/tabpages/tphatch.cxx (revision 2ee96f1c)
1*2ee96f1cSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*2ee96f1cSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*2ee96f1cSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*2ee96f1cSAndrew Rist  * distributed with this work for additional information
6*2ee96f1cSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*2ee96f1cSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*2ee96f1cSAndrew Rist  * "License"); you may not use this file except in compliance
9*2ee96f1cSAndrew Rist  * with the License.  You may obtain a copy of the License at
10*2ee96f1cSAndrew Rist  *
11*2ee96f1cSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*2ee96f1cSAndrew Rist  *
13*2ee96f1cSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*2ee96f1cSAndrew Rist  * software distributed under the License is distributed on an
15*2ee96f1cSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*2ee96f1cSAndrew Rist  * KIND, either express or implied.  See the License for the
17*2ee96f1cSAndrew Rist  * specific language governing permissions and limitations
18*2ee96f1cSAndrew Rist  * under the License.
19*2ee96f1cSAndrew Rist  *
20*2ee96f1cSAndrew Rist  *************************************************************/
21*2ee96f1cSAndrew Rist 
22*2ee96f1cSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_cui.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir // include ---------------------------------------------------------------
28cdf0e10cSrcweir #include <tools/shl.hxx>
29cdf0e10cSrcweir #include <tools/urlobj.hxx>
30cdf0e10cSrcweir #include <vcl/msgbox.hxx>
31cdf0e10cSrcweir #include <unotools/pathoptions.hxx>
32cdf0e10cSrcweir #include <sfx2/app.hxx>
33cdf0e10cSrcweir #include <sfx2/module.hxx>
34cdf0e10cSrcweir #include <sfx2/filedlghelper.hxx>
35cdf0e10cSrcweir #include "com/sun/star/ui/dialogs/TemplateDescription.hpp"
36cdf0e10cSrcweir 
37cdf0e10cSrcweir #define _SVX_TPHATCH_CXX
38cdf0e10cSrcweir 
39cdf0e10cSrcweir #include <cuires.hrc>
40cdf0e10cSrcweir #include "tabarea.hrc"
41cdf0e10cSrcweir //#include "dlgname.hrc"
42cdf0e10cSrcweir #include "helpid.hrc"
43cdf0e10cSrcweir #include "svx/xattr.hxx"
44cdf0e10cSrcweir #include <svx/xpool.hxx>
45cdf0e10cSrcweir #include <svx/xtable.hxx>
46cdf0e10cSrcweir #include "svx/drawitem.hxx"
47cdf0e10cSrcweir #include "cuitabarea.hxx"
48cdf0e10cSrcweir #include "defdlgname.hxx" //CHINA001 #include "dlgname.hxx"
49cdf0e10cSrcweir #include <svx/svxdlg.hxx> //CHINA001
50cdf0e10cSrcweir #include <dialmgr.hxx>
51cdf0e10cSrcweir #include "svx/dlgutil.hxx"
52cdf0e10cSrcweir #include <svx/dialmgr.hxx>
53cdf0e10cSrcweir #include "paragrph.hrc"
54cdf0e10cSrcweir #include <svx/dialogs.hrc>
55cdf0e10cSrcweir 
56cdf0e10cSrcweir #define DLGWIN this->GetParent()->GetParent()
57cdf0e10cSrcweir 
58cdf0e10cSrcweir #define BITMAP_WIDTH  32
59cdf0e10cSrcweir #define BITMAP_HEIGHT 12
60cdf0e10cSrcweir 
61cdf0e10cSrcweir /*************************************************************************
62cdf0e10cSrcweir |*
63cdf0e10cSrcweir |*	Dialog zum Aendern und Definieren der Schraffuren
64cdf0e10cSrcweir |*
65cdf0e10cSrcweir \************************************************************************/
66cdf0e10cSrcweir 
67cdf0e10cSrcweir SvxHatchTabPage::SvxHatchTabPage
68cdf0e10cSrcweir (
69cdf0e10cSrcweir 	Window* pParent,
70cdf0e10cSrcweir 	const SfxItemSet& rInAttrs
71cdf0e10cSrcweir ) :
72cdf0e10cSrcweir 
73cdf0e10cSrcweir 	SvxTabPage			( pParent, CUI_RES( RID_SVXPAGE_HATCH ), rInAttrs ),
74cdf0e10cSrcweir 
75cdf0e10cSrcweir     aFtDistance         ( this, CUI_RES( FT_LINE_DISTANCE ) ),
76cdf0e10cSrcweir 	aMtrDistance		( this, CUI_RES( MTR_FLD_DISTANCE ) ),
77cdf0e10cSrcweir 	aFtAngle			( this, CUI_RES( FT_LINE_ANGLE ) ),
78cdf0e10cSrcweir 	aMtrAngle			( this, CUI_RES( MTR_FLD_ANGLE ) ),
79cdf0e10cSrcweir 	aCtlAngle			( this, CUI_RES( CTL_ANGLE ),
80cdf0e10cSrcweir 									RP_RB, 200, 80, CS_ANGLE ),
81cdf0e10cSrcweir     aFlProp             ( this, CUI_RES( FL_PROP ) ),
82cdf0e10cSrcweir 	aFtLineType			( this, CUI_RES( FT_LINE_TYPE ) ),
83cdf0e10cSrcweir 	aLbLineType			( this, CUI_RES( LB_LINE_TYPE ) ),
84cdf0e10cSrcweir 	aFtLineColor		( this, CUI_RES( FT_LINE_COLOR ) ),
85cdf0e10cSrcweir 	aLbLineColor		( this, CUI_RES( LB_LINE_COLOR ) ),
86cdf0e10cSrcweir 	aLbHatchings		( this, CUI_RES( LB_HATCHINGS ) ),
87cdf0e10cSrcweir 	aCtlPreview			( this, CUI_RES( CTL_PREVIEW ) ),
88cdf0e10cSrcweir 	aBtnAdd				( this, CUI_RES( BTN_ADD ) ),
89cdf0e10cSrcweir 	aBtnModify			( this, CUI_RES( BTN_MODIFY ) ),
90cdf0e10cSrcweir 	aBtnDelete			( this, CUI_RES( BTN_DELETE ) ),
91cdf0e10cSrcweir 	aBtnLoad			( this, CUI_RES( BTN_LOAD ) ),
92cdf0e10cSrcweir 	aBtnSave			( this, CUI_RES( BTN_SAVE ) ),
93cdf0e10cSrcweir 
94cdf0e10cSrcweir     rOutAttrs           ( rInAttrs ),
95cdf0e10cSrcweir     pColorTab( NULL ),
96cdf0e10cSrcweir     pHatchingList( NULL ),
97cdf0e10cSrcweir 
98cdf0e10cSrcweir     pXPool              ( (XOutdevItemPool*) rInAttrs.GetPool() ),
99cdf0e10cSrcweir     aXFStyleItem        ( XFILL_HATCH ),
100cdf0e10cSrcweir     aXHatchItem         ( String(), XHatch() ),
101cdf0e10cSrcweir     aXFillAttr          ( pXPool ),
102cdf0e10cSrcweir     rXFSet              ( aXFillAttr.GetItemSet() )
103cdf0e10cSrcweir 
104cdf0e10cSrcweir {
105cdf0e10cSrcweir 	aBtnLoad.SetModeImage( Image( CUI_RES( RID_SVXIMG_LOAD_H ) ), BMP_COLOR_HIGHCONTRAST );
106cdf0e10cSrcweir 	aBtnSave.SetModeImage( Image( CUI_RES( RID_SVXIMG_SAVE_H ) ), BMP_COLOR_HIGHCONTRAST );
107cdf0e10cSrcweir 
108cdf0e10cSrcweir 	FreeResource();
109cdf0e10cSrcweir 
110cdf0e10cSrcweir 	// diese Page braucht ExchangeSupport
111cdf0e10cSrcweir 	SetExchangeSupport();
112cdf0e10cSrcweir 
113cdf0e10cSrcweir 	// Metrik einstellen
114cdf0e10cSrcweir 	FieldUnit eFUnit = GetModuleFieldUnit( rInAttrs );
115cdf0e10cSrcweir 
116cdf0e10cSrcweir 	switch ( eFUnit )
117cdf0e10cSrcweir 	{
118cdf0e10cSrcweir 		case FUNIT_M:
119cdf0e10cSrcweir 		case FUNIT_KM:
120cdf0e10cSrcweir 			eFUnit = FUNIT_MM;
121cdf0e10cSrcweir 			break;
122cdf0e10cSrcweir         default: ;//prevent warning
123cdf0e10cSrcweir 	}
124cdf0e10cSrcweir 	SetFieldUnit( aMtrDistance, eFUnit );
125cdf0e10cSrcweir 
126cdf0e10cSrcweir 	// PoolUnit ermitteln
127cdf0e10cSrcweir 	SfxItemPool* pPool = rOutAttrs.GetPool();
128cdf0e10cSrcweir 	DBG_ASSERT( pPool, "Wo ist der Pool?" );
129cdf0e10cSrcweir 	ePoolUnit = pPool->GetMetric( SID_ATTR_FILL_HATCH );
130cdf0e10cSrcweir 
131cdf0e10cSrcweir 	// Setzen des Output-Devices
132cdf0e10cSrcweir 	rXFSet.Put( aXFStyleItem );
133cdf0e10cSrcweir 	rXFSet.Put( aXHatchItem );
134cdf0e10cSrcweir 	aCtlPreview.SetAttributes( aXFillAttr.GetItemSet() );
135cdf0e10cSrcweir 
136cdf0e10cSrcweir 	aLbHatchings.SetSelectHdl( LINK( this, SvxHatchTabPage, ChangeHatchHdl_Impl ) );
137cdf0e10cSrcweir 
138cdf0e10cSrcweir 	Link aLink = LINK( this, SvxHatchTabPage, ModifiedHdl_Impl );
139cdf0e10cSrcweir 	aMtrDistance.SetModifyHdl( aLink );
140cdf0e10cSrcweir 	aMtrAngle.SetModifyHdl( aLink );
141cdf0e10cSrcweir 	aLbLineType.SetSelectHdl( aLink );
142cdf0e10cSrcweir 	aLbLineColor.SetSelectHdl( aLink );
143cdf0e10cSrcweir 
144cdf0e10cSrcweir 	aBtnAdd.SetClickHdl( LINK( this, SvxHatchTabPage, ClickAddHdl_Impl ) );
145cdf0e10cSrcweir 	aBtnModify.SetClickHdl(
146cdf0e10cSrcweir 		LINK( this, SvxHatchTabPage, ClickModifyHdl_Impl ) );
147cdf0e10cSrcweir 	aBtnDelete.SetClickHdl(
148cdf0e10cSrcweir 		LINK( this, SvxHatchTabPage, ClickDeleteHdl_Impl ) );
149cdf0e10cSrcweir 	aBtnLoad.SetClickHdl( LINK( this, SvxHatchTabPage, ClickLoadHdl_Impl ) );
150cdf0e10cSrcweir 	aBtnSave.SetClickHdl( LINK( this, SvxHatchTabPage, ClickSaveHdl_Impl ) );
151cdf0e10cSrcweir 
152cdf0e10cSrcweir 	aCtlPreview.SetDrawMode( GetSettings().GetStyleSettings().GetHighContrastMode() ? OUTPUT_DRAWMODE_CONTRAST : OUTPUT_DRAWMODE_COLOR );
153cdf0e10cSrcweir 
154cdf0e10cSrcweir 	aCtlPreview.SetAccessibleName(String(CUI_RES(STR_EXAMPLE)));
155cdf0e10cSrcweir 	aLbHatchings.SetAccessibleName( String(CUI_RES(STR_LB_HATCHINGSTYLE)) );
156cdf0e10cSrcweir 	aCtlAngle.SetAccessibleRelationMemberOf( &aFlProp );
157cdf0e10cSrcweir 	aLbHatchings.SetAccessibleRelationMemberOf( &aFlProp );
158cdf0e10cSrcweir 	aBtnAdd.SetAccessibleRelationMemberOf( &aFlProp );
159cdf0e10cSrcweir 	aBtnModify.SetAccessibleRelationMemberOf( &aFlProp );
160cdf0e10cSrcweir 	aBtnDelete.SetAccessibleRelationMemberOf( &aFlProp );
161cdf0e10cSrcweir 	aLbHatchings.SetAccessibleRelationLabeledBy(&aLbHatchings);
162cdf0e10cSrcweir }
163cdf0e10cSrcweir 
164cdf0e10cSrcweir // -----------------------------------------------------------------------
165cdf0e10cSrcweir 
166cdf0e10cSrcweir void SvxHatchTabPage::Construct()
167cdf0e10cSrcweir {
168cdf0e10cSrcweir 	// Farbtabelle
169cdf0e10cSrcweir 	aLbLineColor.Fill( pColorTab );
170cdf0e10cSrcweir 
171cdf0e10cSrcweir 	// Schraffurentabelle
172cdf0e10cSrcweir 	aLbHatchings.Fill( pHatchingList );
173cdf0e10cSrcweir }
174cdf0e10cSrcweir 
175cdf0e10cSrcweir // -----------------------------------------------------------------------
176cdf0e10cSrcweir 
177cdf0e10cSrcweir void SvxHatchTabPage::ActivatePage( const SfxItemSet& rSet )
178cdf0e10cSrcweir {
179cdf0e10cSrcweir 	sal_uInt16 nPos;
180cdf0e10cSrcweir 	sal_uInt16 nCount;
181cdf0e10cSrcweir 
182cdf0e10cSrcweir 	if( *pDlgType == 0 ) // Flaechen-Dialog
183cdf0e10cSrcweir 	{
184cdf0e10cSrcweir 		*pbAreaTP = sal_False;
185cdf0e10cSrcweir 
186cdf0e10cSrcweir 		if( pColorTab )
187cdf0e10cSrcweir 		{
188cdf0e10cSrcweir 			// ColorTable
189cdf0e10cSrcweir 			if( *pnColorTableState & CT_CHANGED ||
190cdf0e10cSrcweir 				*pnColorTableState & CT_MODIFIED )
191cdf0e10cSrcweir 			{
192cdf0e10cSrcweir 				if( *pnColorTableState & CT_CHANGED )
193cdf0e10cSrcweir 					pColorTab = ( (SvxAreaTabDialog*) DLGWIN )->GetNewColorTable();
194cdf0e10cSrcweir 
195cdf0e10cSrcweir 				// LbLineColor
196cdf0e10cSrcweir 				nPos = aLbLineColor.GetSelectEntryPos();
197cdf0e10cSrcweir 				aLbLineColor.Clear();
198cdf0e10cSrcweir 				aLbLineColor.Fill( pColorTab );
199cdf0e10cSrcweir 				nCount = aLbLineColor.GetEntryCount();
200cdf0e10cSrcweir 				if( nCount == 0 )
201cdf0e10cSrcweir 					; // Dieser Fall sollte nicht auftreten
202cdf0e10cSrcweir 				else if( nCount <= nPos )
203cdf0e10cSrcweir 					aLbLineColor.SelectEntryPos( 0 );
204cdf0e10cSrcweir 				else
205cdf0e10cSrcweir 					aLbLineColor.SelectEntryPos( nPos );
206cdf0e10cSrcweir 
207cdf0e10cSrcweir 				ModifiedHdl_Impl( this );
208cdf0e10cSrcweir 			}
209cdf0e10cSrcweir 
210cdf0e10cSrcweir 			// Ermitteln (evtl. abschneiden) des Namens und in
211cdf0e10cSrcweir 			// der GroupBox darstellen
212cdf0e10cSrcweir 			String			aString( CUI_RES( RID_SVXSTR_TABLE ) ); aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ": " ) );
213cdf0e10cSrcweir 			INetURLObject	aURL( pHatchingList->GetPath() );
214cdf0e10cSrcweir 
215cdf0e10cSrcweir 			aURL.Append( pHatchingList->GetName() );
216cdf0e10cSrcweir 			DBG_ASSERT( aURL.GetProtocol() != INET_PROT_NOT_VALID, "invalid URL" );
217cdf0e10cSrcweir 
218cdf0e10cSrcweir 			if ( aURL.getBase().getLength() > 18 )
219cdf0e10cSrcweir 			{
220cdf0e10cSrcweir 				aString += String(aURL.getBase()).Copy( 0, 15 );
221cdf0e10cSrcweir 				aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "..." ) );
222cdf0e10cSrcweir 			}
223cdf0e10cSrcweir 			else
224cdf0e10cSrcweir 				aString += String(aURL.getBase());
225cdf0e10cSrcweir 
226cdf0e10cSrcweir 			if( *pPageType == PT_HATCH && *pPos != LISTBOX_ENTRY_NOTFOUND )
227cdf0e10cSrcweir 			{
228cdf0e10cSrcweir 				aLbHatchings.SelectEntryPos( *pPos );
229cdf0e10cSrcweir 			}
230cdf0e10cSrcweir 			// Farben koennten geloescht worden sein
231cdf0e10cSrcweir 			ChangeHatchHdl_Impl( this );
232cdf0e10cSrcweir 
233cdf0e10cSrcweir 			*pPageType = PT_HATCH;
234cdf0e10cSrcweir 			*pPos = LISTBOX_ENTRY_NOTFOUND;
235cdf0e10cSrcweir 		}
236cdf0e10cSrcweir 	}
237cdf0e10cSrcweir 
238cdf0e10cSrcweir 	rXFSet.Put ( ( XFillColorItem& )    rSet.Get(XATTR_FILLCOLOR) );
239cdf0e10cSrcweir 	rXFSet.Put ( ( XFillBackgroundItem&)rSet.Get(XATTR_FILLBACKGROUND) );
240cdf0e10cSrcweir 	aCtlPreview.SetAttributes( aXFillAttr.GetItemSet() );
241cdf0e10cSrcweir 	aCtlPreview.Invalidate();
242cdf0e10cSrcweir }
243cdf0e10cSrcweir 
244cdf0e10cSrcweir // -----------------------------------------------------------------------
245cdf0e10cSrcweir 
246cdf0e10cSrcweir int SvxHatchTabPage::DeactivatePage( SfxItemSet* _pSet )
247cdf0e10cSrcweir {
248cdf0e10cSrcweir 	if ( CheckChanges_Impl() == -1L )
249cdf0e10cSrcweir 		return KEEP_PAGE;
250cdf0e10cSrcweir 
251cdf0e10cSrcweir     if( _pSet )
252cdf0e10cSrcweir         FillItemSet( *_pSet );
253cdf0e10cSrcweir 
254cdf0e10cSrcweir 	return LEAVE_PAGE;
255cdf0e10cSrcweir }
256cdf0e10cSrcweir 
257cdf0e10cSrcweir // -----------------------------------------------------------------------
258cdf0e10cSrcweir 
259cdf0e10cSrcweir long SvxHatchTabPage::CheckChanges_Impl()
260cdf0e10cSrcweir {
261cdf0e10cSrcweir 	if( aMtrDistance.GetText()			 != aMtrDistance.GetSavedValue() ||
262cdf0e10cSrcweir 		aMtrAngle.GetText()				 != aMtrAngle.GetSavedValue() ||
263cdf0e10cSrcweir 		aLbLineType.GetSelectEntryPos()	 != aLbLineType.GetSavedValue()  ||
264cdf0e10cSrcweir 		aLbLineColor.GetSelectEntryPos() != aLbLineColor.GetSavedValue() ||
265cdf0e10cSrcweir 		aLbHatchings.GetSelectEntryPos() != aLbHatchings.GetSavedValue() )
266cdf0e10cSrcweir 	{
267cdf0e10cSrcweir 		ResMgr& rMgr = CUI_MGR();
268cdf0e10cSrcweir         Image aWarningBoxImage = WarningBox::GetStandardImage();
269cdf0e10cSrcweir 		SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
270cdf0e10cSrcweir 		DBG_ASSERT(pFact, "Dialogdiet fail!");//CHINA001
271cdf0e10cSrcweir 		AbstractSvxMessDialog* aMessDlg = pFact->CreateSvxMessDialog( DLGWIN, RID_SVXDLG_MESSBOX,
272cdf0e10cSrcweir 														SVX_RESSTR( RID_SVXSTR_HATCH ),
273cdf0e10cSrcweir 														CUI_RESSTR( RID_SVXSTR_ASK_CHANGE_HATCH ),
274cdf0e10cSrcweir 														&aWarningBoxImage );
275cdf0e10cSrcweir 		DBG_ASSERT(aMessDlg, "Dialogdiet fail!");//CHINA001
276cdf0e10cSrcweir 		aMessDlg->SetButtonText( MESS_BTN_1, //CHINA001 aMessDlg.SetButtonText( MESS_BTN_1,
277cdf0e10cSrcweir 								String( ResId( RID_SVXSTR_CHANGE, rMgr ) ) );
278cdf0e10cSrcweir 		aMessDlg->SetButtonText( MESS_BTN_2, //CHINA001 aMessDlg.SetButtonText( MESS_BTN_2,
279cdf0e10cSrcweir 								String( ResId( RID_SVXSTR_ADD, rMgr ) ) );
280cdf0e10cSrcweir 
281cdf0e10cSrcweir 		short nRet = aMessDlg->Execute(); //CHINA001 short nRet = aMessDlg.Execute();
282cdf0e10cSrcweir 
283cdf0e10cSrcweir 		switch( nRet )
284cdf0e10cSrcweir 		{
285cdf0e10cSrcweir 			case RET_BTN_1: // Aendern
286cdf0e10cSrcweir 			{
287cdf0e10cSrcweir 				ClickModifyHdl_Impl( this );
288cdf0e10cSrcweir 			}
289cdf0e10cSrcweir 			break;
290cdf0e10cSrcweir 
291cdf0e10cSrcweir 			case RET_BTN_2: // Hinzufuegen
292cdf0e10cSrcweir 			{
293cdf0e10cSrcweir 				ClickAddHdl_Impl( this );
294cdf0e10cSrcweir 			}
295cdf0e10cSrcweir 			break;
296cdf0e10cSrcweir 
297cdf0e10cSrcweir 			case RET_CANCEL:
298cdf0e10cSrcweir 				// return( -1L ); <-- wuerde die Seite nicht verlassen
299cdf0e10cSrcweir 			break;
300cdf0e10cSrcweir 			// return( sal_True ); // Abbruch
301cdf0e10cSrcweir 		}
302cdf0e10cSrcweir 		delete aMessDlg; //add by CHINA001
303cdf0e10cSrcweir 	}
304cdf0e10cSrcweir 
305cdf0e10cSrcweir 	sal_uInt16 nPos = aLbHatchings.GetSelectEntryPos();
306cdf0e10cSrcweir 	if( nPos != LISTBOX_ENTRY_NOTFOUND )
307cdf0e10cSrcweir 		*pPos = nPos;
308cdf0e10cSrcweir 	return 0L;
309cdf0e10cSrcweir }
310cdf0e10cSrcweir 
311cdf0e10cSrcweir // -----------------------------------------------------------------------
312cdf0e10cSrcweir 
313cdf0e10cSrcweir sal_Bool SvxHatchTabPage::FillItemSet( SfxItemSet& rSet )
314cdf0e10cSrcweir {
315cdf0e10cSrcweir 	if( *pDlgType == 0 && *pbAreaTP == sal_False ) // Flaechen-Dialog
316cdf0e10cSrcweir 	{
317cdf0e10cSrcweir 		if( *pPageType == PT_HATCH )
318cdf0e10cSrcweir 		{
319cdf0e10cSrcweir 			// CheckChanges(); <-- doppelte Abfrage ?
320cdf0e10cSrcweir 
321cdf0e10cSrcweir 			XHatch*	pXHatch = NULL;
322cdf0e10cSrcweir 			String	aString;
323cdf0e10cSrcweir 			sal_uInt16	nPos = aLbHatchings.GetSelectEntryPos();
324cdf0e10cSrcweir 			if( nPos != LISTBOX_ENTRY_NOTFOUND )
325cdf0e10cSrcweir 			{
326cdf0e10cSrcweir                 pXHatch = new XHatch( pHatchingList->GetHatch( nPos )->GetHatch() );
327cdf0e10cSrcweir 				aString = aLbHatchings.GetSelectEntry();
328cdf0e10cSrcweir 			}
329cdf0e10cSrcweir 			// Farbverlauf wurde (unbekannt) uebergeben
330cdf0e10cSrcweir 			else
331cdf0e10cSrcweir 			{
332cdf0e10cSrcweir 				pXHatch = new XHatch( aLbLineColor.GetSelectEntryColor(),
333cdf0e10cSrcweir 								 (XHatchStyle) aLbLineType.GetSelectEntryPos(),
334cdf0e10cSrcweir 								 GetCoreValue( aMtrDistance, ePoolUnit ),
335cdf0e10cSrcweir 								 static_cast<long>(aMtrAngle.GetValue() * 10) );
336cdf0e10cSrcweir 			}
337cdf0e10cSrcweir 			DBG_ASSERT( pXHatch, "XHatch konnte nicht erzeugt werden" );
338cdf0e10cSrcweir             rSet.Put( XFillStyleItem( XFILL_HATCH ) );
339cdf0e10cSrcweir             rSet.Put( XFillHatchItem( aString, *pXHatch ) );
340cdf0e10cSrcweir 
341cdf0e10cSrcweir 			delete pXHatch;
342cdf0e10cSrcweir 		}
343cdf0e10cSrcweir 	}
344cdf0e10cSrcweir 	return sal_True;
345cdf0e10cSrcweir }
346cdf0e10cSrcweir 
347cdf0e10cSrcweir // -----------------------------------------------------------------------
348cdf0e10cSrcweir 
349cdf0e10cSrcweir void SvxHatchTabPage::Reset( const SfxItemSet& rSet )
350cdf0e10cSrcweir {
351cdf0e10cSrcweir 	// aLbHatchings.SelectEntryPos( 0 );
352cdf0e10cSrcweir 	ChangeHatchHdl_Impl( this );
353cdf0e10cSrcweir 
354cdf0e10cSrcweir 	// Status der Buttons ermitteln
355cdf0e10cSrcweir 	if( pHatchingList->Count() )
356cdf0e10cSrcweir 	{
357cdf0e10cSrcweir 		aBtnModify.Enable();
358cdf0e10cSrcweir 		aBtnDelete.Enable();
359cdf0e10cSrcweir 		aBtnSave.Enable();
360cdf0e10cSrcweir 	}
361cdf0e10cSrcweir 	else
362cdf0e10cSrcweir 	{
363cdf0e10cSrcweir 		aBtnModify.Disable();
364cdf0e10cSrcweir 		aBtnDelete.Disable();
365cdf0e10cSrcweir 		aBtnSave.Disable();
366cdf0e10cSrcweir 	}
367cdf0e10cSrcweir 
368cdf0e10cSrcweir     rXFSet.Put ( ( XFillColorItem& )    rSet.Get(XATTR_FILLCOLOR) );
369cdf0e10cSrcweir     rXFSet.Put ( ( XFillBackgroundItem&)rSet.Get(XATTR_FILLBACKGROUND) );
370cdf0e10cSrcweir 	aCtlPreview.SetAttributes( aXFillAttr.GetItemSet() );
371cdf0e10cSrcweir 	aCtlPreview.Invalidate();
372cdf0e10cSrcweir }
373cdf0e10cSrcweir 
374cdf0e10cSrcweir // -----------------------------------------------------------------------
375cdf0e10cSrcweir 
376cdf0e10cSrcweir SfxTabPage* SvxHatchTabPage::Create( Window* pWindow,
377cdf0e10cSrcweir                 const SfxItemSet& rSet )
378cdf0e10cSrcweir {
379cdf0e10cSrcweir     return new SvxHatchTabPage( pWindow, rSet );
380cdf0e10cSrcweir }
381cdf0e10cSrcweir 
382cdf0e10cSrcweir //------------------------------------------------------------------------
383cdf0e10cSrcweir 
384cdf0e10cSrcweir IMPL_LINK( SvxHatchTabPage, ModifiedHdl_Impl, void *, p )
385cdf0e10cSrcweir {
386cdf0e10cSrcweir 	if( p == &aMtrAngle )
387cdf0e10cSrcweir 	{
388cdf0e10cSrcweir 		// Setzen des Winkels im AngleControl
389cdf0e10cSrcweir 		switch( aMtrAngle.GetValue() )
390cdf0e10cSrcweir 		{
391cdf0e10cSrcweir 			case 135: aCtlAngle.SetActualRP( RP_LT ); break;
392cdf0e10cSrcweir 			case  90: aCtlAngle.SetActualRP( RP_MT ); break;
393cdf0e10cSrcweir 			case  45: aCtlAngle.SetActualRP( RP_RT ); break;
394cdf0e10cSrcweir 			case 180: aCtlAngle.SetActualRP( RP_LM ); break;
395cdf0e10cSrcweir 			case   0: aCtlAngle.SetActualRP( RP_RM ); break;
396cdf0e10cSrcweir 			case 225: aCtlAngle.SetActualRP( RP_LB ); break;
397cdf0e10cSrcweir 			case 270: aCtlAngle.SetActualRP( RP_MB ); break;
398cdf0e10cSrcweir 			case 315: aCtlAngle.SetActualRP( RP_RB ); break;
399cdf0e10cSrcweir 			default:  aCtlAngle.SetActualRP( RP_MM ); break;
400cdf0e10cSrcweir 		}
401cdf0e10cSrcweir 	}
402cdf0e10cSrcweir 
403cdf0e10cSrcweir 	XHatch aXHatch( aLbLineColor.GetSelectEntryColor(),
404cdf0e10cSrcweir 					(XHatchStyle) aLbLineType.GetSelectEntryPos(),
405cdf0e10cSrcweir 					GetCoreValue( aMtrDistance, ePoolUnit ),
406cdf0e10cSrcweir 					static_cast<long>(aMtrAngle.GetValue() * 10) );
407cdf0e10cSrcweir 
408cdf0e10cSrcweir 	rXFSet.Put( XFillHatchItem( String(), aXHatch ) );
409cdf0e10cSrcweir 	aCtlPreview.SetAttributes( aXFillAttr.GetItemSet() );
410cdf0e10cSrcweir 
411cdf0e10cSrcweir 	aCtlPreview.Invalidate();
412cdf0e10cSrcweir 
413cdf0e10cSrcweir 	return 0L;
414cdf0e10cSrcweir }
415cdf0e10cSrcweir 
416cdf0e10cSrcweir //------------------------------------------------------------------------
417cdf0e10cSrcweir 
418cdf0e10cSrcweir IMPL_LINK( SvxHatchTabPage, ChangeHatchHdl_Impl, void *, EMPTYARG )
419cdf0e10cSrcweir {
420cdf0e10cSrcweir 	XHatch* pHatch = NULL;
421cdf0e10cSrcweir 	int nPos = aLbHatchings.GetSelectEntryPos();
422cdf0e10cSrcweir 
423cdf0e10cSrcweir 	if( nPos != LISTBOX_ENTRY_NOTFOUND )
424cdf0e10cSrcweir         pHatch = new XHatch( ( (XHatchEntry*) pHatchingList->GetHatch( nPos ) )->GetHatch() );
425cdf0e10cSrcweir 	else
426cdf0e10cSrcweir 	{
427cdf0e10cSrcweir 		const SfxPoolItem* pPoolItem = NULL;
428cdf0e10cSrcweir 		if( SFX_ITEM_SET == rOutAttrs.GetItemState( GetWhich( XATTR_FILLSTYLE ), sal_True, &pPoolItem ) )
429cdf0e10cSrcweir 		{
430cdf0e10cSrcweir 			if( ( XFILL_HATCH == (XFillStyle) ( ( const XFillStyleItem* ) pPoolItem )->GetValue() ) &&
431cdf0e10cSrcweir 				( SFX_ITEM_SET == rOutAttrs.GetItemState( GetWhich( XATTR_FILLHATCH ), sal_True, &pPoolItem ) ) )
432cdf0e10cSrcweir 			{
433cdf0e10cSrcweir                 pHatch = new XHatch( ( ( const XFillHatchItem* ) pPoolItem )->GetHatchValue() );
434cdf0e10cSrcweir 			}
435cdf0e10cSrcweir 		}
436cdf0e10cSrcweir 		if( !pHatch )
437cdf0e10cSrcweir 		{
438cdf0e10cSrcweir 			aLbHatchings.SelectEntryPos( 0 );
439cdf0e10cSrcweir 			nPos = aLbHatchings.GetSelectEntryPos();
440cdf0e10cSrcweir 			if( nPos != LISTBOX_ENTRY_NOTFOUND )
441cdf0e10cSrcweir                 pHatch = new XHatch( ( (XHatchEntry*) pHatchingList->GetHatch( nPos ) )->GetHatch() );
442cdf0e10cSrcweir 		}
443cdf0e10cSrcweir 	}
444cdf0e10cSrcweir 	if( pHatch )
445cdf0e10cSrcweir 	{
446cdf0e10cSrcweir 		aLbLineType.SelectEntryPos(
447cdf0e10cSrcweir             sal::static_int_cast< sal_uInt16 >( pHatch->GetHatchStyle() ) );
448cdf0e10cSrcweir 		// Wenn der Eintrag nicht in der Listbox ist, wird die Farbe
449cdf0e10cSrcweir 		// temporaer hinzugenommen
450cdf0e10cSrcweir 		aLbLineColor.SetNoSelection();
451cdf0e10cSrcweir 		aLbLineColor.SelectEntry( pHatch->GetColor() );
452cdf0e10cSrcweir 		if( aLbLineColor.GetSelectEntryCount() == 0 )
453cdf0e10cSrcweir 		{
454cdf0e10cSrcweir 			aLbLineColor.InsertEntry( pHatch->GetColor(), String() );
455cdf0e10cSrcweir 			aLbLineColor.SelectEntry( pHatch->GetColor() );
456cdf0e10cSrcweir 		}
457cdf0e10cSrcweir 		SetMetricValue( aMtrDistance, pHatch->GetDistance(), ePoolUnit );
458cdf0e10cSrcweir 		aMtrAngle.SetValue( pHatch->GetAngle() / 10 );
459cdf0e10cSrcweir 
460cdf0e10cSrcweir 		// Setzen des Winkels im AngleControl
461cdf0e10cSrcweir 		switch( aMtrAngle.GetValue() )
462cdf0e10cSrcweir 		{
463cdf0e10cSrcweir 			case 135: aCtlAngle.SetActualRP( RP_LT ); break;
464cdf0e10cSrcweir 			case  90: aCtlAngle.SetActualRP( RP_MT ); break;
465cdf0e10cSrcweir 			case  45: aCtlAngle.SetActualRP( RP_RT ); break;
466cdf0e10cSrcweir 			case 180: aCtlAngle.SetActualRP( RP_LM ); break;
467cdf0e10cSrcweir 			case   0: aCtlAngle.SetActualRP( RP_RM ); break;
468cdf0e10cSrcweir 			case 225: aCtlAngle.SetActualRP( RP_LB ); break;
469cdf0e10cSrcweir 			case 270: aCtlAngle.SetActualRP( RP_MB ); break;
470cdf0e10cSrcweir 			case 315: aCtlAngle.SetActualRP( RP_RB ); break;
471cdf0e10cSrcweir 			default:  aCtlAngle.SetActualRP( RP_MM ); break;
472cdf0e10cSrcweir 		}
473cdf0e10cSrcweir 
474cdf0e10cSrcweir 		// Backgroundcolor
475cdf0e10cSrcweir 		/*
476cdf0e10cSrcweir 		const SfxPoolItem* pPoolItem = NULL;
477cdf0e10cSrcweir 		if( SFX_ITEM_SET == rOutAttrs.GetItemState( GetWhich( XATTR_FILLBACKGROUND ), sal_True, &pPoolItem ) )
478cdf0e10cSrcweir 		{
479cdf0e10cSrcweir 			rXFSet.Put ( XFillBackgroundItem( ( ( XFillBackgroundItem* )pPoolItem)->GetValue() ) );
480cdf0e10cSrcweir 			if( SFX_ITEM_SET == rOutAttrs.GetItemState( GetWhich( XATTR_FILLCOLOR ), sal_True, &pPoolItem ) )
481cdf0e10cSrcweir 			{
482cdf0e10cSrcweir 				Color aColor( ( ( const XFillColorItem* ) pPoolItem )->GetValue() );
483cdf0e10cSrcweir 				rXFSet.Put( XFillColorItem( String(), aColor ) );
484cdf0e10cSrcweir 			}
485cdf0e10cSrcweir 		}
486cdf0e10cSrcweir 		*/
487cdf0e10cSrcweir 		// ItemSet fuellen und an aCtlPreview weiterleiten
488cdf0e10cSrcweir 		rXFSet.Put( XFillHatchItem( String(), *pHatch ) );
489cdf0e10cSrcweir 		aCtlPreview.SetAttributes( aXFillAttr.GetItemSet() );
490cdf0e10cSrcweir 
491cdf0e10cSrcweir 		aCtlPreview.Invalidate();
492cdf0e10cSrcweir 		delete pHatch;
493cdf0e10cSrcweir 	}
494cdf0e10cSrcweir 	aMtrDistance.SaveValue();
495cdf0e10cSrcweir 	aMtrAngle.SaveValue();
496cdf0e10cSrcweir 	aLbLineType.SaveValue();
497cdf0e10cSrcweir 	aLbLineColor.SaveValue();
498cdf0e10cSrcweir 	aLbHatchings.SaveValue();
499cdf0e10cSrcweir 
500cdf0e10cSrcweir 	return 0L;
501cdf0e10cSrcweir }
502cdf0e10cSrcweir 
503cdf0e10cSrcweir //------------------------------------------------------------------------
504cdf0e10cSrcweir 
505cdf0e10cSrcweir IMPL_LINK( SvxHatchTabPage, ClickAddHdl_Impl, void *, EMPTYARG )
506cdf0e10cSrcweir {
507cdf0e10cSrcweir 	ResMgr& rMgr = CUI_MGR();
508cdf0e10cSrcweir 	String aNewName( SVX_RES( RID_SVXSTR_HATCH ) );
509cdf0e10cSrcweir 	String aDesc( CUI_RES( RID_SVXSTR_DESC_HATCH ) );
510cdf0e10cSrcweir 	String aName;
511cdf0e10cSrcweir 
512cdf0e10cSrcweir 	long nCount = pHatchingList->Count();
513cdf0e10cSrcweir 	long j = 1;
514cdf0e10cSrcweir 	sal_Bool bDifferent = sal_False;
515cdf0e10cSrcweir 
516cdf0e10cSrcweir 	while( !bDifferent )
517cdf0e10cSrcweir 	{
518cdf0e10cSrcweir 		aName  = aNewName;
519cdf0e10cSrcweir 		aName += sal_Unicode(' ');
520cdf0e10cSrcweir 		aName += UniString::CreateFromInt32( j++ );
521cdf0e10cSrcweir 		bDifferent = sal_True;
522cdf0e10cSrcweir 
523cdf0e10cSrcweir 		for( long i = 0; i < nCount && bDifferent; i++ )
524cdf0e10cSrcweir             if( aName == pHatchingList->GetHatch( i )->GetName() )
525cdf0e10cSrcweir 				bDifferent = sal_False;
526cdf0e10cSrcweir 	}
527cdf0e10cSrcweir 
528cdf0e10cSrcweir 	SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
529cdf0e10cSrcweir 	DBG_ASSERT(pFact, "Dialogdiet fail!");//CHINA001
530cdf0e10cSrcweir 	AbstractSvxNameDialog* pDlg = pFact->CreateSvxNameDialog( DLGWIN, aName, aDesc );
531cdf0e10cSrcweir 	DBG_ASSERT(pDlg, "Dialogdiet fail!");//CHINA001
532cdf0e10cSrcweir 	WarningBox*    pWarnBox = NULL;
533cdf0e10cSrcweir 	sal_uInt16         nError   = RID_SVXSTR_WARN_NAME_DUPLICATE;
534cdf0e10cSrcweir 
535cdf0e10cSrcweir 	while( pDlg->Execute() == RET_OK )
536cdf0e10cSrcweir 	{
537cdf0e10cSrcweir 		pDlg->GetName( aName );
538cdf0e10cSrcweir 
539cdf0e10cSrcweir 		bDifferent = sal_True;
540cdf0e10cSrcweir 
541cdf0e10cSrcweir 		for( long i = 0; i < nCount && bDifferent; i++ )
542cdf0e10cSrcweir             if( aName == pHatchingList->GetHatch( i )->GetName() )
543cdf0e10cSrcweir 				bDifferent = sal_False;
544cdf0e10cSrcweir 
545cdf0e10cSrcweir 		if( bDifferent ) {
546cdf0e10cSrcweir 			nError = 0;
547cdf0e10cSrcweir 			break;
548cdf0e10cSrcweir 		}
549cdf0e10cSrcweir 
550cdf0e10cSrcweir 		if( !pWarnBox )
551cdf0e10cSrcweir 		{
552cdf0e10cSrcweir 			pWarnBox = new WarningBox( DLGWIN,
553cdf0e10cSrcweir 									   WinBits( WB_OK_CANCEL ),
554cdf0e10cSrcweir 									   String( ResId( nError, rMgr ) ) );
555cdf0e10cSrcweir 			pWarnBox->SetHelpId( HID_WARN_NAME_DUPLICATE );
556cdf0e10cSrcweir 		}
557cdf0e10cSrcweir 
558cdf0e10cSrcweir 		if( pWarnBox->Execute() != RET_OK )
559cdf0e10cSrcweir 			break;
560cdf0e10cSrcweir 	}
561cdf0e10cSrcweir 	//Rectangle aDlgRect( pDlg->GetPosPixel(), pDlg->GetSizePixel() );
562cdf0e10cSrcweir 	delete pDlg;
563cdf0e10cSrcweir 	delete pWarnBox;
564cdf0e10cSrcweir 
565cdf0e10cSrcweir 	if( !nError )
566cdf0e10cSrcweir 	{
567cdf0e10cSrcweir 		XHatch aXHatch( aLbLineColor.GetSelectEntryColor(),
568cdf0e10cSrcweir 						(XHatchStyle) aLbLineType.GetSelectEntryPos(),
569cdf0e10cSrcweir 						GetCoreValue( aMtrDistance, ePoolUnit ),
570cdf0e10cSrcweir 						static_cast<long>(aMtrAngle.GetValue() * 10) );
571cdf0e10cSrcweir 		XHatchEntry* pEntry = new XHatchEntry( aXHatch, aName );
572cdf0e10cSrcweir 
573cdf0e10cSrcweir 		pHatchingList->Insert( pEntry, nCount );
574cdf0e10cSrcweir 
575cdf0e10cSrcweir 		aLbHatchings.Append( pEntry );
576cdf0e10cSrcweir 
577cdf0e10cSrcweir 		aLbHatchings.SelectEntryPos( aLbHatchings.GetEntryCount() - 1 );
578cdf0e10cSrcweir 
579cdf0e10cSrcweir #ifdef WNT
580cdf0e10cSrcweir 		// hack: #31355# W.P.
581cdf0e10cSrcweir 		Rectangle aRect( aLbHatchings.GetPosPixel(), aLbHatchings.GetSizePixel() );
582cdf0e10cSrcweir 		if( sal_True ) {				// ??? overlapped with pDlg
583cdf0e10cSrcweir 									// and srolling
584cdf0e10cSrcweir 			Invalidate( aRect );
585cdf0e10cSrcweir 			//aLbHatchings.Invalidate();
586cdf0e10cSrcweir 		}
587cdf0e10cSrcweir #endif
588cdf0e10cSrcweir 
589cdf0e10cSrcweir 		// Flag fuer modifiziert setzen
590cdf0e10cSrcweir 		*pnHatchingListState |= CT_MODIFIED;
591cdf0e10cSrcweir 
592cdf0e10cSrcweir 		ChangeHatchHdl_Impl( this );
593cdf0e10cSrcweir 	}
594cdf0e10cSrcweir 
595cdf0e10cSrcweir 	// Status der Buttons ermitteln
596cdf0e10cSrcweir 	if( pHatchingList->Count() )
597cdf0e10cSrcweir 	{
598cdf0e10cSrcweir 		aBtnModify.Enable();
599cdf0e10cSrcweir 		aBtnDelete.Enable();
600cdf0e10cSrcweir 		aBtnSave.Enable();
601cdf0e10cSrcweir 	}
602cdf0e10cSrcweir 	return 0L;
603cdf0e10cSrcweir }
604cdf0e10cSrcweir 
605cdf0e10cSrcweir //------------------------------------------------------------------------
606cdf0e10cSrcweir 
607cdf0e10cSrcweir IMPL_LINK( SvxHatchTabPage, ClickModifyHdl_Impl, void *, EMPTYARG )
608cdf0e10cSrcweir {
609cdf0e10cSrcweir 	sal_uInt16 nPos = aLbHatchings.GetSelectEntryPos();
610cdf0e10cSrcweir 
611cdf0e10cSrcweir 	if ( nPos != LISTBOX_ENTRY_NOTFOUND )
612cdf0e10cSrcweir 	{
613cdf0e10cSrcweir 		ResMgr& rMgr = CUI_MGR();
614cdf0e10cSrcweir 		String aNewName( SVX_RES( RID_SVXSTR_HATCH ) );
615cdf0e10cSrcweir 		String aDesc( CUI_RES( RID_SVXSTR_DESC_HATCH ) );
616cdf0e10cSrcweir         String aName( pHatchingList->GetHatch( nPos )->GetName() );
617cdf0e10cSrcweir 		String aOldName = aName;
618cdf0e10cSrcweir 
619cdf0e10cSrcweir 		SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
620cdf0e10cSrcweir 		DBG_ASSERT(pFact, "Dialogdiet fail!");//CHINA001
621cdf0e10cSrcweir 		AbstractSvxNameDialog* pDlg = pFact->CreateSvxNameDialog( DLGWIN, aName, aDesc );
622cdf0e10cSrcweir 		DBG_ASSERT(pDlg, "Dialogdiet fail!");//CHINA001
623cdf0e10cSrcweir 
624cdf0e10cSrcweir 		long nCount = pHatchingList->Count();
625cdf0e10cSrcweir 		sal_Bool bDifferent = sal_False;
626cdf0e10cSrcweir 		sal_Bool bLoop = sal_True;
627cdf0e10cSrcweir 		while( bLoop && pDlg->Execute() == RET_OK )
628cdf0e10cSrcweir 		{
629cdf0e10cSrcweir 			pDlg->GetName( aName );
630cdf0e10cSrcweir 			bDifferent = sal_True;
631cdf0e10cSrcweir 
632cdf0e10cSrcweir 			for( long i = 0; i < nCount && bDifferent; i++ )
633cdf0e10cSrcweir 			{
634cdf0e10cSrcweir                 if( aName == pHatchingList->GetHatch( i )->GetName() &&
635cdf0e10cSrcweir 					aName != aOldName )
636cdf0e10cSrcweir 					bDifferent = sal_False;
637cdf0e10cSrcweir 			}
638cdf0e10cSrcweir 
639cdf0e10cSrcweir 			if( bDifferent )
640cdf0e10cSrcweir 			{
641cdf0e10cSrcweir 				bLoop = sal_False;
642cdf0e10cSrcweir 				XHatch aXHatch( aLbLineColor.GetSelectEntryColor(),
643cdf0e10cSrcweir 								(XHatchStyle) aLbLineType.GetSelectEntryPos(),
644cdf0e10cSrcweir 								 GetCoreValue( aMtrDistance, ePoolUnit ),
645cdf0e10cSrcweir 								static_cast<long>(aMtrAngle.GetValue() * 10) );
646cdf0e10cSrcweir 
647cdf0e10cSrcweir 				XHatchEntry* pEntry = new XHatchEntry( aXHatch, aName );
648cdf0e10cSrcweir 
649cdf0e10cSrcweir 				delete pHatchingList->Replace( pEntry, nPos );
650cdf0e10cSrcweir 
651cdf0e10cSrcweir 				aLbHatchings.Modify( pEntry, nPos );
652cdf0e10cSrcweir 
653cdf0e10cSrcweir 				aLbHatchings.SelectEntryPos( nPos );
654cdf0e10cSrcweir 
655cdf0e10cSrcweir 				// Werte sichern fuer Changes-Erkennung ( -> Methode )
656cdf0e10cSrcweir 				aMtrDistance.SaveValue();
657cdf0e10cSrcweir 				aMtrAngle.SaveValue();
658cdf0e10cSrcweir 				aLbLineType.SaveValue();
659cdf0e10cSrcweir 				aLbLineColor.SaveValue();
660cdf0e10cSrcweir 				aLbHatchings.SaveValue();
661cdf0e10cSrcweir 
662cdf0e10cSrcweir 				// Flag fuer modifiziert setzen
663cdf0e10cSrcweir 				*pnHatchingListState |= CT_MODIFIED;
664cdf0e10cSrcweir 			}
665cdf0e10cSrcweir 			else
666cdf0e10cSrcweir 			{
667cdf0e10cSrcweir 				WarningBox aBox( DLGWIN, WinBits( WB_OK ),String( ResId( RID_SVXSTR_WARN_NAME_DUPLICATE, rMgr ) ) );
668cdf0e10cSrcweir 				aBox.SetHelpId( HID_WARN_NAME_DUPLICATE );
669cdf0e10cSrcweir 				aBox.Execute();
670cdf0e10cSrcweir 			}
671cdf0e10cSrcweir 		}
672cdf0e10cSrcweir 		delete( pDlg );
673cdf0e10cSrcweir 	}
674cdf0e10cSrcweir 	return 0L;
675cdf0e10cSrcweir }
676cdf0e10cSrcweir 
677cdf0e10cSrcweir //------------------------------------------------------------------------
678cdf0e10cSrcweir 
679cdf0e10cSrcweir IMPL_LINK( SvxHatchTabPage, ClickDeleteHdl_Impl, void *, EMPTYARG )
680cdf0e10cSrcweir {
681cdf0e10cSrcweir 	sal_uInt16 nPos = aLbHatchings.GetSelectEntryPos();
682cdf0e10cSrcweir 
683cdf0e10cSrcweir 	if( nPos != LISTBOX_ENTRY_NOTFOUND )
684cdf0e10cSrcweir 	{
685cdf0e10cSrcweir 		QueryBox aQueryBox( DLGWIN, WinBits( WB_YES_NO | WB_DEF_NO ),
686cdf0e10cSrcweir 			String( CUI_RES( RID_SVXSTR_ASK_DEL_HATCH ) ) );
687cdf0e10cSrcweir 
688cdf0e10cSrcweir 		if( aQueryBox.Execute() == RET_YES )
689cdf0e10cSrcweir 		{
690cdf0e10cSrcweir 			delete pHatchingList->Remove( nPos );
691cdf0e10cSrcweir 			aLbHatchings.RemoveEntry( nPos );
692cdf0e10cSrcweir 			aLbHatchings.SelectEntryPos( 0 );
693cdf0e10cSrcweir 
694cdf0e10cSrcweir 			aCtlPreview.Invalidate();
695cdf0e10cSrcweir 
696cdf0e10cSrcweir 			ChangeHatchHdl_Impl( this );
697cdf0e10cSrcweir 
698cdf0e10cSrcweir 			// Flag fuer modifiziert setzen
699cdf0e10cSrcweir 			*pnHatchingListState |= CT_MODIFIED;
700cdf0e10cSrcweir 		}
701cdf0e10cSrcweir 	}
702cdf0e10cSrcweir 	// Status der Buttons ermitteln
703cdf0e10cSrcweir 	if( !pHatchingList->Count() )
704cdf0e10cSrcweir 	{
705cdf0e10cSrcweir 		aBtnModify.Disable();
706cdf0e10cSrcweir 		aBtnDelete.Disable();
707cdf0e10cSrcweir 		aBtnSave.Disable();
708cdf0e10cSrcweir 	}
709cdf0e10cSrcweir 	return 0L;
710cdf0e10cSrcweir }
711cdf0e10cSrcweir 
712cdf0e10cSrcweir // -----------------------------------------------------------------------
713cdf0e10cSrcweir 
714cdf0e10cSrcweir IMPL_LINK( SvxHatchTabPage, ClickLoadHdl_Impl, void *, EMPTYARG )
715cdf0e10cSrcweir {
716cdf0e10cSrcweir 	ResMgr& rMgr = CUI_MGR();
717cdf0e10cSrcweir 	sal_uInt16 nReturn = RET_YES;
718cdf0e10cSrcweir 
719cdf0e10cSrcweir 	if ( *pnHatchingListState & CT_MODIFIED )
720cdf0e10cSrcweir 	{
721cdf0e10cSrcweir 		nReturn = WarningBox( DLGWIN, WinBits( WB_YES_NO_CANCEL ),
722cdf0e10cSrcweir 			String( ResId( RID_SVXSTR_WARN_TABLE_OVERWRITE, rMgr ) ) ).Execute();
723cdf0e10cSrcweir 
724cdf0e10cSrcweir 		if ( nReturn == RET_YES )
725cdf0e10cSrcweir 			pHatchingList->Save();
726cdf0e10cSrcweir 	}
727cdf0e10cSrcweir 
728cdf0e10cSrcweir 	if ( nReturn != RET_CANCEL )
729cdf0e10cSrcweir 	{
730cdf0e10cSrcweir     	::sfx2::FileDialogHelper aDlg(
731cdf0e10cSrcweir             com::sun::star::ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE,
732cdf0e10cSrcweir             0 );
733cdf0e10cSrcweir 		String aStrFilterType( RTL_CONSTASCII_USTRINGPARAM( "*.soh" ) );
734cdf0e10cSrcweir 		aDlg.AddFilter( aStrFilterType, aStrFilterType );
735cdf0e10cSrcweir 		INetURLObject aFile( SvtPathOptions().GetPalettePath() );
736cdf0e10cSrcweir 		aDlg.SetDisplayDirectory( aFile.GetMainURL( INetURLObject::NO_DECODE ) );
737cdf0e10cSrcweir 
738cdf0e10cSrcweir 		if( aDlg.Execute() == ERRCODE_NONE )
739cdf0e10cSrcweir 		{
740cdf0e10cSrcweir 			INetURLObject aURL( aDlg.GetPath() );
741cdf0e10cSrcweir 			INetURLObject aPathURL( aURL );
742cdf0e10cSrcweir 
743cdf0e10cSrcweir 			aPathURL.removeSegment();
744cdf0e10cSrcweir 			aPathURL.removeFinalSlash();
745cdf0e10cSrcweir 
746cdf0e10cSrcweir 			// Liste speichern
747cdf0e10cSrcweir 			XHatchList* pHatchList = new XHatchList( aPathURL.GetMainURL( INetURLObject::NO_DECODE ), pXPool );
748cdf0e10cSrcweir 			pHatchList->SetName( aURL.getName() );
749cdf0e10cSrcweir 			if( pHatchList->Load() )
750cdf0e10cSrcweir 			{
751cdf0e10cSrcweir 				if( pHatchList )
752cdf0e10cSrcweir 				{
753cdf0e10cSrcweir 					// Pruefen, ob Tabelle geloescht werden darf:
754cdf0e10cSrcweir 					if( pHatchingList != ( (SvxAreaTabDialog*) DLGWIN )->GetHatchingList() )
755cdf0e10cSrcweir 						delete pHatchingList;
756cdf0e10cSrcweir 
757cdf0e10cSrcweir 					pHatchingList = pHatchList;
758cdf0e10cSrcweir 					( (SvxAreaTabDialog*) DLGWIN )->SetNewHatchingList( pHatchingList );
759cdf0e10cSrcweir 
760cdf0e10cSrcweir 					aLbHatchings.Clear();
761cdf0e10cSrcweir 					aLbHatchings.Fill( pHatchingList );
762cdf0e10cSrcweir 					Reset( rOutAttrs );
763cdf0e10cSrcweir 
764cdf0e10cSrcweir 					pHatchingList->SetName( aURL.getName() );
765cdf0e10cSrcweir 
766cdf0e10cSrcweir 					// Ermitteln (evtl. abschneiden) des Namens und in
767cdf0e10cSrcweir 					// der GroupBox darstellen
768cdf0e10cSrcweir 					String aString( ResId( RID_SVXSTR_TABLE, rMgr ) );
769cdf0e10cSrcweir 					aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ": " ) );
770cdf0e10cSrcweir 
771cdf0e10cSrcweir 					if ( aURL.getBase().getLength() > 18 )
772cdf0e10cSrcweir 					{
773cdf0e10cSrcweir 						aString += String(aURL.getBase()).Copy( 0, 15 );
774cdf0e10cSrcweir 						aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "..." ) );
775cdf0e10cSrcweir 					}
776cdf0e10cSrcweir 					else
777cdf0e10cSrcweir 						aString += String(aURL.getBase());
778cdf0e10cSrcweir 
779cdf0e10cSrcweir 					// Flag fuer gewechselt setzen
780cdf0e10cSrcweir 					*pnHatchingListState |= CT_CHANGED;
781cdf0e10cSrcweir 					// Flag fuer modifiziert entfernen
782cdf0e10cSrcweir 					*pnHatchingListState &= ~CT_MODIFIED;
783cdf0e10cSrcweir 				}
784cdf0e10cSrcweir 			}
785cdf0e10cSrcweir 			else
786cdf0e10cSrcweir 				ErrorBox( DLGWIN, WinBits( WB_OK ),
787cdf0e10cSrcweir 					String( ResId( RID_SVXSTR_READ_DATA_ERROR, rMgr ) ) ).Execute();
788cdf0e10cSrcweir 		}
789cdf0e10cSrcweir 	}
790cdf0e10cSrcweir 
791cdf0e10cSrcweir 	// Status der Buttons ermitteln
792cdf0e10cSrcweir 	if ( pHatchingList->Count() )
793cdf0e10cSrcweir 	{
794cdf0e10cSrcweir 		aBtnModify.Enable();
795cdf0e10cSrcweir 		aBtnDelete.Enable();
796cdf0e10cSrcweir 		aBtnSave.Enable();
797cdf0e10cSrcweir 	}
798cdf0e10cSrcweir 	else
799cdf0e10cSrcweir 	{
800cdf0e10cSrcweir 		aBtnModify.Disable();
801cdf0e10cSrcweir 		aBtnDelete.Disable();
802cdf0e10cSrcweir 		aBtnSave.Disable();
803cdf0e10cSrcweir 	}
804cdf0e10cSrcweir 	return 0L;
805cdf0e10cSrcweir }
806cdf0e10cSrcweir 
807cdf0e10cSrcweir // -----------------------------------------------------------------------
808cdf0e10cSrcweir 
809cdf0e10cSrcweir IMPL_LINK( SvxHatchTabPage, ClickSaveHdl_Impl, void *, EMPTYARG )
810cdf0e10cSrcweir {
811cdf0e10cSrcweir    	::sfx2::FileDialogHelper aDlg(
812cdf0e10cSrcweir         com::sun::star::ui::dialogs::TemplateDescription::FILESAVE_SIMPLE, 0 );
813cdf0e10cSrcweir 	String aStrFilterType( RTL_CONSTASCII_USTRINGPARAM( "*.soh" ) );
814cdf0e10cSrcweir 	aDlg.AddFilter( aStrFilterType, aStrFilterType );
815cdf0e10cSrcweir 
816cdf0e10cSrcweir 	INetURLObject aFile( SvtPathOptions().GetPalettePath() );
817cdf0e10cSrcweir 	DBG_ASSERT( aFile.GetProtocol() != INET_PROT_NOT_VALID, "invalid URL" );
818cdf0e10cSrcweir 
819cdf0e10cSrcweir 	if( pHatchingList->GetName().Len() )
820cdf0e10cSrcweir 	{
821cdf0e10cSrcweir 		aFile.Append( pHatchingList->GetName() );
822cdf0e10cSrcweir 
823cdf0e10cSrcweir 		if( !aFile.getExtension().getLength() )
824cdf0e10cSrcweir 			aFile.SetExtension( UniString::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "soh" ) ) );
825cdf0e10cSrcweir 	}
826cdf0e10cSrcweir 
827cdf0e10cSrcweir 	aDlg.SetDisplayDirectory( aFile.GetMainURL( INetURLObject::NO_DECODE ) );
828cdf0e10cSrcweir 	if ( aDlg.Execute() == ERRCODE_NONE )
829cdf0e10cSrcweir 	{
830cdf0e10cSrcweir 		INetURLObject aURL( aDlg.GetPath() );
831cdf0e10cSrcweir 		INetURLObject aPathURL( aURL );
832cdf0e10cSrcweir 
833cdf0e10cSrcweir 		aPathURL.removeSegment();
834cdf0e10cSrcweir 		aPathURL.removeFinalSlash();
835cdf0e10cSrcweir 
836cdf0e10cSrcweir 		pHatchingList->SetName( aURL.getName() );
837cdf0e10cSrcweir 		pHatchingList->SetPath( aPathURL.GetMainURL( INetURLObject::NO_DECODE ) );
838cdf0e10cSrcweir 
839cdf0e10cSrcweir 		if( pHatchingList->Save() )
840cdf0e10cSrcweir 		{
841cdf0e10cSrcweir 			// Ermitteln (evtl. abschneiden) des Namens und in
842cdf0e10cSrcweir 			// der GroupBox darstellen
843cdf0e10cSrcweir 			String aString( CUI_RES( RID_SVXSTR_TABLE ) );
844cdf0e10cSrcweir 			aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ": " ) );
845cdf0e10cSrcweir 
846cdf0e10cSrcweir 			if ( aURL.getBase().getLength() > 18 )
847cdf0e10cSrcweir 			{
848cdf0e10cSrcweir 				aString += String(aURL.getBase()).Copy( 0, 15 );
849cdf0e10cSrcweir 				aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "..." ) );
850cdf0e10cSrcweir 			}
851cdf0e10cSrcweir 			else
852cdf0e10cSrcweir 				aString += String(aURL.getBase());
853cdf0e10cSrcweir 
854cdf0e10cSrcweir 			// Flag fuer gespeichert setzen
855cdf0e10cSrcweir 			*pnHatchingListState |= CT_SAVED;
856cdf0e10cSrcweir 			// Flag fuer modifiziert entfernen
857cdf0e10cSrcweir 			*pnHatchingListState &= ~CT_MODIFIED;
858cdf0e10cSrcweir 		}
859cdf0e10cSrcweir 		else
860cdf0e10cSrcweir 		{
861cdf0e10cSrcweir 			ErrorBox( DLGWIN, WinBits( WB_OK ),
862cdf0e10cSrcweir 				String( CUI_RES( RID_SVXSTR_WRITE_DATA_ERROR ) ) ).Execute();
863cdf0e10cSrcweir 		}
864cdf0e10cSrcweir 	}
865cdf0e10cSrcweir 
866cdf0e10cSrcweir 	return 0L;
867cdf0e10cSrcweir }
868cdf0e10cSrcweir 
869cdf0e10cSrcweir //------------------------------------------------------------------------
870cdf0e10cSrcweir 
871cdf0e10cSrcweir void SvxHatchTabPage::PointChanged( Window* pWindow, RECT_POINT eRcPt )
872cdf0e10cSrcweir {
873cdf0e10cSrcweir 	if( pWindow == &aCtlAngle )
874cdf0e10cSrcweir 	{
875cdf0e10cSrcweir 		switch( eRcPt )
876cdf0e10cSrcweir 		{
877cdf0e10cSrcweir 			case RP_LT: aMtrAngle.SetValue( 135 ); break;
878cdf0e10cSrcweir 			case RP_MT: aMtrAngle.SetValue( 90 );  break;
879cdf0e10cSrcweir 			case RP_RT: aMtrAngle.SetValue( 45 );  break;
880cdf0e10cSrcweir 			case RP_LM: aMtrAngle.SetValue( 180 ); break;
881cdf0e10cSrcweir 			case RP_RM: aMtrAngle.SetValue( 0 );   break;
882cdf0e10cSrcweir 			case RP_LB: aMtrAngle.SetValue( 225 ); break;
883cdf0e10cSrcweir 			case RP_MB: aMtrAngle.SetValue( 270 ); break;
884cdf0e10cSrcweir 			case RP_RB: aMtrAngle.SetValue( 315 ); break;
885cdf0e10cSrcweir             case RP_MM: break;
886cdf0e10cSrcweir 		}
887cdf0e10cSrcweir 		ModifiedHdl_Impl( this );
888cdf0e10cSrcweir 	}
889cdf0e10cSrcweir }
890cdf0e10cSrcweir 
891cdf0e10cSrcweir 
892cdf0e10cSrcweir void SvxHatchTabPage::DataChanged( const DataChangedEvent& rDCEvt )
893cdf0e10cSrcweir {
894cdf0e10cSrcweir 	if ( ( rDCEvt.GetType() == DATACHANGED_SETTINGS ) && ( rDCEvt.GetFlags() & SETTINGS_STYLE ) )
895cdf0e10cSrcweir 		aCtlPreview.SetDrawMode( GetSettings().GetStyleSettings().GetHighContrastMode() ? OUTPUT_DRAWMODE_CONTRAST : OUTPUT_DRAWMODE_COLOR );
896cdf0e10cSrcweir 
897cdf0e10cSrcweir 	SvxTabPage::DataChanged( rDCEvt );
898cdf0e10cSrcweir }
899cdf0e10cSrcweir 
900