xref: /trunk/main/cui/source/tabpages/tphatch.cxx (revision 3e407bd8)
12ee96f1cSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
32ee96f1cSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
42ee96f1cSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
52ee96f1cSAndrew Rist  * distributed with this work for additional information
62ee96f1cSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
72ee96f1cSAndrew Rist  * to you under the Apache License, Version 2.0 (the
82ee96f1cSAndrew Rist  * "License"); you may not use this file except in compliance
92ee96f1cSAndrew Rist  * with the License.  You may obtain a copy of the License at
102ee96f1cSAndrew Rist  *
112ee96f1cSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
122ee96f1cSAndrew Rist  *
132ee96f1cSAndrew Rist  * Unless required by applicable law or agreed to in writing,
142ee96f1cSAndrew Rist  * software distributed under the License is distributed on an
152ee96f1cSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
162ee96f1cSAndrew Rist  * KIND, either express or implied.  See the License for the
172ee96f1cSAndrew Rist  * specific language governing permissions and limitations
182ee96f1cSAndrew Rist  * under the License.
192ee96f1cSAndrew Rist  *
202ee96f1cSAndrew Rist  *************************************************************/
212ee96f1cSAndrew Rist 
222ee96f1cSAndrew 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 
SvxHatchTabPage(Window * pParent,const SfxItemSet & rInAttrs)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 ),
95c7be74b1SArmin Le Grand     maColorTab(),
96c7be74b1SArmin Le Grand     maHatchingList(),
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 
Construct()166cdf0e10cSrcweir void SvxHatchTabPage::Construct()
167cdf0e10cSrcweir {
168cdf0e10cSrcweir 	// Farbtabelle
169c7be74b1SArmin Le Grand 	aLbLineColor.Fill( maColorTab );
170cdf0e10cSrcweir 
171cdf0e10cSrcweir 	// Schraffurentabelle
172c7be74b1SArmin Le Grand 	aLbHatchings.Fill( maHatchingList );
173cdf0e10cSrcweir }
174cdf0e10cSrcweir 
175cdf0e10cSrcweir // -----------------------------------------------------------------------
176cdf0e10cSrcweir 
ActivatePage(const SfxItemSet & rSet)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 
186c7be74b1SArmin Le Grand 		if( maColorTab.get() )
187cdf0e10cSrcweir 		{
188cdf0e10cSrcweir 			// ColorTable
189cdf0e10cSrcweir 			if( *pnColorTableState & CT_CHANGED ||
190cdf0e10cSrcweir 				*pnColorTableState & CT_MODIFIED )
191cdf0e10cSrcweir 			{
192cdf0e10cSrcweir 				if( *pnColorTableState & CT_CHANGED )
193c7be74b1SArmin Le Grand 					maColorTab = ( (SvxAreaTabDialog*) DLGWIN )->GetNewColorTable();
194cdf0e10cSrcweir 
195cdf0e10cSrcweir 				// LbLineColor
196cdf0e10cSrcweir 				nPos = aLbLineColor.GetSelectEntryPos();
197cdf0e10cSrcweir 				aLbLineColor.Clear();
198c7be74b1SArmin Le Grand 				aLbLineColor.Fill( maColorTab );
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( ": " ) );
213c7be74b1SArmin Le Grand 			INetURLObject	aURL( maHatchingList->GetPath() );
214cdf0e10cSrcweir 
215c7be74b1SArmin Le Grand 			aURL.Append( maHatchingList->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 
DeactivatePage(SfxItemSet * _pSet)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 
CheckChanges_Impl()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 
FillItemSet(SfxItemSet & rSet)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 			{
326c7be74b1SArmin Le Grand                 pXHatch = new XHatch( maHatchingList->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 
Reset(const SfxItemSet & rSet)349cdf0e10cSrcweir void SvxHatchTabPage::Reset( const SfxItemSet& rSet )
350cdf0e10cSrcweir {
351cdf0e10cSrcweir 	// aLbHatchings.SelectEntryPos( 0 );
352cdf0e10cSrcweir 	ChangeHatchHdl_Impl( this );
353cdf0e10cSrcweir 
354cdf0e10cSrcweir 	// Status der Buttons ermitteln
355c7be74b1SArmin Le Grand 	if( maHatchingList.get() && maHatchingList->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 
Create(Window * pWindow,const SfxItemSet & rSet)376cdf0e10cSrcweir SfxTabPage* SvxHatchTabPage::Create( Window* pWindow,
377cdf0e10cSrcweir                 const SfxItemSet& rSet )
378cdf0e10cSrcweir {
379cdf0e10cSrcweir     return new SvxHatchTabPage( pWindow, rSet );
380cdf0e10cSrcweir }
381cdf0e10cSrcweir 
382cdf0e10cSrcweir //------------------------------------------------------------------------
383cdf0e10cSrcweir 
IMPL_LINK(SvxHatchTabPage,ModifiedHdl_Impl,void *,p)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 
IMPL_LINK(SvxHatchTabPage,ChangeHatchHdl_Impl,void *,EMPTYARG)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 )
424c7be74b1SArmin Le Grand         pHatch = new XHatch( ( (XHatchEntry*) maHatchingList->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 )
441c7be74b1SArmin Le Grand                 pHatch = new XHatch( ( (XHatchEntry*) maHatchingList->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 
IMPL_LINK(SvxHatchTabPage,ClickAddHdl_Impl,void *,EMPTYARG)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 
512c7be74b1SArmin Le Grand 	long nCount = maHatchingList.get() ? maHatchingList->Count() : 0;
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++ )
524c7be74b1SArmin Le Grand             if( aName == maHatchingList->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++ )
542c7be74b1SArmin Le Grand             if( aName == maHatchingList->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 
573c7be74b1SArmin Le Grand 		maHatchingList->Insert( pEntry, nCount );
574cdf0e10cSrcweir 
575*3e407bd8SArmin Le Grand 		aLbHatchings.Append( *pEntry, maHatchingList->GetUiBitmap( nCount ) );
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
596c7be74b1SArmin Le Grand 	if( maHatchingList.get() && maHatchingList->Count() )
597cdf0e10cSrcweir 	{
598cdf0e10cSrcweir 		aBtnModify.Enable();
599cdf0e10cSrcweir 		aBtnDelete.Enable();
600cdf0e10cSrcweir 		aBtnSave.Enable();
601cdf0e10cSrcweir 	}
602cdf0e10cSrcweir 	return 0L;
603cdf0e10cSrcweir }
604cdf0e10cSrcweir 
605cdf0e10cSrcweir //------------------------------------------------------------------------
606cdf0e10cSrcweir 
IMPL_LINK(SvxHatchTabPage,ClickModifyHdl_Impl,void *,EMPTYARG)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 ) );
616c7be74b1SArmin Le Grand         String aName( maHatchingList->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 
624c7be74b1SArmin Le Grand 		long nCount = maHatchingList.get() ? maHatchingList->Count() : 0;
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 			{
634c7be74b1SArmin Le Grand                 if( aName == maHatchingList->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 
649c7be74b1SArmin Le Grand 				delete maHatchingList->Replace( pEntry, nPos );
650cdf0e10cSrcweir 
651*3e407bd8SArmin Le Grand 				aLbHatchings.Modify( *pEntry, nPos, maHatchingList->GetUiBitmap( 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 
IMPL_LINK(SvxHatchTabPage,ClickDeleteHdl_Impl,void *,EMPTYARG)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 		{
690c7be74b1SArmin Le Grand 			delete maHatchingList->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
703c7be74b1SArmin Le Grand 	if( !maHatchingList.get() || !maHatchingList->Count() )
704cdf0e10cSrcweir 	{
705cdf0e10cSrcweir 		aBtnModify.Disable();
706cdf0e10cSrcweir 		aBtnDelete.Disable();
707cdf0e10cSrcweir 		aBtnSave.Disable();
708cdf0e10cSrcweir 	}
709cdf0e10cSrcweir 	return 0L;
710cdf0e10cSrcweir }
711cdf0e10cSrcweir 
712cdf0e10cSrcweir // -----------------------------------------------------------------------
713cdf0e10cSrcweir 
IMPL_LINK(SvxHatchTabPage,ClickLoadHdl_Impl,void *,EMPTYARG)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 )
725c7be74b1SArmin Le Grand 			maHatchingList->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
747c7be74b1SArmin Le Grand 			XHatchListSharedPtr aHatchList(XPropertyListFactory::CreateSharedXHatchList(aPathURL.GetMainURL(INetURLObject::NO_DECODE)));
748c7be74b1SArmin Le Grand 			aHatchList->SetName( aURL.getName() );
749c7be74b1SArmin Le Grand 			if( aHatchList->Load() )
750cdf0e10cSrcweir 			{
751c7be74b1SArmin Le Grand 				if( aHatchList.get() )
752cdf0e10cSrcweir 				{
753c7be74b1SArmin Le Grand 					maHatchingList = aHatchList;
754c7be74b1SArmin Le Grand 					( (SvxAreaTabDialog*) DLGWIN )->SetNewHatchingList( maHatchingList );
755cdf0e10cSrcweir 
756cdf0e10cSrcweir 					aLbHatchings.Clear();
757c7be74b1SArmin Le Grand 					aLbHatchings.Fill( maHatchingList );
758cdf0e10cSrcweir 					Reset( rOutAttrs );
759cdf0e10cSrcweir 
760c7be74b1SArmin Le Grand 					maHatchingList->SetName( aURL.getName() );
761cdf0e10cSrcweir 
762cdf0e10cSrcweir 					// Ermitteln (evtl. abschneiden) des Namens und in
763cdf0e10cSrcweir 					// der GroupBox darstellen
764cdf0e10cSrcweir 					String aString( ResId( RID_SVXSTR_TABLE, rMgr ) );
765cdf0e10cSrcweir 					aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ": " ) );
766cdf0e10cSrcweir 
767cdf0e10cSrcweir 					if ( aURL.getBase().getLength() > 18 )
768cdf0e10cSrcweir 					{
769cdf0e10cSrcweir 						aString += String(aURL.getBase()).Copy( 0, 15 );
770cdf0e10cSrcweir 						aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "..." ) );
771cdf0e10cSrcweir 					}
772cdf0e10cSrcweir 					else
773cdf0e10cSrcweir 						aString += String(aURL.getBase());
774cdf0e10cSrcweir 
775cdf0e10cSrcweir 					// Flag fuer gewechselt setzen
776cdf0e10cSrcweir 					*pnHatchingListState |= CT_CHANGED;
777cdf0e10cSrcweir 					// Flag fuer modifiziert entfernen
778cdf0e10cSrcweir 					*pnHatchingListState &= ~CT_MODIFIED;
779cdf0e10cSrcweir 				}
780cdf0e10cSrcweir 			}
781cdf0e10cSrcweir 			else
782cdf0e10cSrcweir 				ErrorBox( DLGWIN, WinBits( WB_OK ),
783cdf0e10cSrcweir 					String( ResId( RID_SVXSTR_READ_DATA_ERROR, rMgr ) ) ).Execute();
784cdf0e10cSrcweir 		}
785cdf0e10cSrcweir 	}
786cdf0e10cSrcweir 
787cdf0e10cSrcweir 	// Status der Buttons ermitteln
788c7be74b1SArmin Le Grand 	if ( maHatchingList.get() && maHatchingList->Count() )
789cdf0e10cSrcweir 	{
790cdf0e10cSrcweir 		aBtnModify.Enable();
791cdf0e10cSrcweir 		aBtnDelete.Enable();
792cdf0e10cSrcweir 		aBtnSave.Enable();
793cdf0e10cSrcweir 	}
794cdf0e10cSrcweir 	else
795cdf0e10cSrcweir 	{
796cdf0e10cSrcweir 		aBtnModify.Disable();
797cdf0e10cSrcweir 		aBtnDelete.Disable();
798cdf0e10cSrcweir 		aBtnSave.Disable();
799cdf0e10cSrcweir 	}
800cdf0e10cSrcweir 	return 0L;
801cdf0e10cSrcweir }
802cdf0e10cSrcweir 
803cdf0e10cSrcweir // -----------------------------------------------------------------------
804cdf0e10cSrcweir 
IMPL_LINK(SvxHatchTabPage,ClickSaveHdl_Impl,void *,EMPTYARG)805cdf0e10cSrcweir IMPL_LINK( SvxHatchTabPage, ClickSaveHdl_Impl, void *, EMPTYARG )
806cdf0e10cSrcweir {
807cdf0e10cSrcweir    	::sfx2::FileDialogHelper aDlg(
808cdf0e10cSrcweir         com::sun::star::ui::dialogs::TemplateDescription::FILESAVE_SIMPLE, 0 );
809cdf0e10cSrcweir 	String aStrFilterType( RTL_CONSTASCII_USTRINGPARAM( "*.soh" ) );
810cdf0e10cSrcweir 	aDlg.AddFilter( aStrFilterType, aStrFilterType );
811cdf0e10cSrcweir 
812cdf0e10cSrcweir 	INetURLObject aFile( SvtPathOptions().GetPalettePath() );
813cdf0e10cSrcweir 	DBG_ASSERT( aFile.GetProtocol() != INET_PROT_NOT_VALID, "invalid URL" );
814cdf0e10cSrcweir 
815c7be74b1SArmin Le Grand 	if( maHatchingList.get() && maHatchingList->GetName().Len() )
816cdf0e10cSrcweir 	{
817c7be74b1SArmin Le Grand 		aFile.Append( maHatchingList->GetName() );
818cdf0e10cSrcweir 
819cdf0e10cSrcweir 		if( !aFile.getExtension().getLength() )
820cdf0e10cSrcweir 			aFile.SetExtension( UniString::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "soh" ) ) );
821cdf0e10cSrcweir 	}
822cdf0e10cSrcweir 
823cdf0e10cSrcweir 	aDlg.SetDisplayDirectory( aFile.GetMainURL( INetURLObject::NO_DECODE ) );
824cdf0e10cSrcweir 	if ( aDlg.Execute() == ERRCODE_NONE )
825cdf0e10cSrcweir 	{
826cdf0e10cSrcweir 		INetURLObject aURL( aDlg.GetPath() );
827cdf0e10cSrcweir 		INetURLObject aPathURL( aURL );
828cdf0e10cSrcweir 
829cdf0e10cSrcweir 		aPathURL.removeSegment();
830cdf0e10cSrcweir 		aPathURL.removeFinalSlash();
831cdf0e10cSrcweir 
832c7be74b1SArmin Le Grand 		maHatchingList->SetName( aURL.getName() );
833c7be74b1SArmin Le Grand 		maHatchingList->SetPath( aPathURL.GetMainURL( INetURLObject::NO_DECODE ) );
834cdf0e10cSrcweir 
835c7be74b1SArmin Le Grand 		if( maHatchingList->Save() )
836cdf0e10cSrcweir 		{
837cdf0e10cSrcweir 			// Ermitteln (evtl. abschneiden) des Namens und in
838cdf0e10cSrcweir 			// der GroupBox darstellen
839cdf0e10cSrcweir 			String aString( CUI_RES( RID_SVXSTR_TABLE ) );
840cdf0e10cSrcweir 			aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ": " ) );
841cdf0e10cSrcweir 
842cdf0e10cSrcweir 			if ( aURL.getBase().getLength() > 18 )
843cdf0e10cSrcweir 			{
844cdf0e10cSrcweir 				aString += String(aURL.getBase()).Copy( 0, 15 );
845cdf0e10cSrcweir 				aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "..." ) );
846cdf0e10cSrcweir 			}
847cdf0e10cSrcweir 			else
848cdf0e10cSrcweir 				aString += String(aURL.getBase());
849cdf0e10cSrcweir 
850cdf0e10cSrcweir 			// Flag fuer gespeichert setzen
851cdf0e10cSrcweir 			*pnHatchingListState |= CT_SAVED;
852cdf0e10cSrcweir 			// Flag fuer modifiziert entfernen
853cdf0e10cSrcweir 			*pnHatchingListState &= ~CT_MODIFIED;
854cdf0e10cSrcweir 		}
855cdf0e10cSrcweir 		else
856cdf0e10cSrcweir 		{
857cdf0e10cSrcweir 			ErrorBox( DLGWIN, WinBits( WB_OK ),
858cdf0e10cSrcweir 				String( CUI_RES( RID_SVXSTR_WRITE_DATA_ERROR ) ) ).Execute();
859cdf0e10cSrcweir 		}
860cdf0e10cSrcweir 	}
861cdf0e10cSrcweir 
862cdf0e10cSrcweir 	return 0L;
863cdf0e10cSrcweir }
864cdf0e10cSrcweir 
865cdf0e10cSrcweir //------------------------------------------------------------------------
866cdf0e10cSrcweir 
PointChanged(Window * pWindow,RECT_POINT eRcPt)867cdf0e10cSrcweir void SvxHatchTabPage::PointChanged( Window* pWindow, RECT_POINT eRcPt )
868cdf0e10cSrcweir {
869cdf0e10cSrcweir 	if( pWindow == &aCtlAngle )
870cdf0e10cSrcweir 	{
871cdf0e10cSrcweir 		switch( eRcPt )
872cdf0e10cSrcweir 		{
873cdf0e10cSrcweir 			case RP_LT: aMtrAngle.SetValue( 135 ); break;
874cdf0e10cSrcweir 			case RP_MT: aMtrAngle.SetValue( 90 );  break;
875cdf0e10cSrcweir 			case RP_RT: aMtrAngle.SetValue( 45 );  break;
876cdf0e10cSrcweir 			case RP_LM: aMtrAngle.SetValue( 180 ); break;
877cdf0e10cSrcweir 			case RP_RM: aMtrAngle.SetValue( 0 );   break;
878cdf0e10cSrcweir 			case RP_LB: aMtrAngle.SetValue( 225 ); break;
879cdf0e10cSrcweir 			case RP_MB: aMtrAngle.SetValue( 270 ); break;
880cdf0e10cSrcweir 			case RP_RB: aMtrAngle.SetValue( 315 ); break;
881cdf0e10cSrcweir             case RP_MM: break;
882cdf0e10cSrcweir 		}
883cdf0e10cSrcweir 		ModifiedHdl_Impl( this );
884cdf0e10cSrcweir 	}
885cdf0e10cSrcweir }
886cdf0e10cSrcweir 
887cdf0e10cSrcweir 
DataChanged(const DataChangedEvent & rDCEvt)888cdf0e10cSrcweir void SvxHatchTabPage::DataChanged( const DataChangedEvent& rDCEvt )
889cdf0e10cSrcweir {
890cdf0e10cSrcweir 	if ( ( rDCEvt.GetType() == DATACHANGED_SETTINGS ) && ( rDCEvt.GetFlags() & SETTINGS_STYLE ) )
891cdf0e10cSrcweir 		aCtlPreview.SetDrawMode( GetSettings().GetStyleSettings().GetHighContrastMode() ? OUTPUT_DRAWMODE_CONTRAST : OUTPUT_DRAWMODE_COLOR );
892cdf0e10cSrcweir 
893cdf0e10cSrcweir 	SvxTabPage::DataChanged( rDCEvt );
894cdf0e10cSrcweir }
895cdf0e10cSrcweir 
896