xref: /trunk/main/cui/source/tabpages/tplnedef.cxx (revision 6202fbb6)
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_TPLNEDEF_CXX
38cdf0e10cSrcweir 
39cdf0e10cSrcweir #include <cuires.hrc>
40cdf0e10cSrcweir #include "tabline.hrc"
41cdf0e10cSrcweir //#include "dlgname.hrc"
42cdf0e10cSrcweir #include "helpid.hrc"
43cdf0e10cSrcweir 
44cdf0e10cSrcweir #include "svx/xattr.hxx"
45cdf0e10cSrcweir #include <svx/xpool.hxx>
46cdf0e10cSrcweir #include <svx/xtable.hxx>
47cdf0e10cSrcweir 
48cdf0e10cSrcweir #include "svx/drawitem.hxx"
49cdf0e10cSrcweir #include "cuitabline.hxx"
50cdf0e10cSrcweir #include "defdlgname.hxx" //CHINA001 #include "dlgname.hxx"
51cdf0e10cSrcweir #include <svx/svxdlg.hxx> //CHINA001
52cdf0e10cSrcweir #include <dialmgr.hxx>
53cdf0e10cSrcweir #include "svx/dlgutil.hxx"
54cdf0e10cSrcweir #include <svx/dialmgr.hxx>
55cdf0e10cSrcweir #include <svx/dialogs.hrc>
56cdf0e10cSrcweir 
57cdf0e10cSrcweir #define DLGWIN this->GetParent()->GetParent()
58cdf0e10cSrcweir 
59cdf0e10cSrcweir #define BITMAP_WIDTH   32
60cdf0e10cSrcweir #define BITMAP_HEIGHT  12
61cdf0e10cSrcweir #define XOUT_WIDTH    150
62cdf0e10cSrcweir 
63cdf0e10cSrcweir /*************************************************************************
64cdf0e10cSrcweir |*
65cdf0e10cSrcweir |*	Dialog zum Definieren von Linienstilen
66cdf0e10cSrcweir |*
67cdf0e10cSrcweir \************************************************************************/
68cdf0e10cSrcweir 
69cdf0e10cSrcweir SvxLineDefTabPage::SvxLineDefTabPage
70cdf0e10cSrcweir (
71cdf0e10cSrcweir 	Window* pParent,
72cdf0e10cSrcweir 	const SfxItemSet& rInAttrs
73cdf0e10cSrcweir ) :
74cdf0e10cSrcweir 
75cdf0e10cSrcweir 	SfxTabPage( pParent, CUI_RES( RID_SVXPAGE_LINE_DEF ), rInAttrs ),
76cdf0e10cSrcweir 
77cdf0e10cSrcweir     aFlDefinition   ( this, CUI_RES( FL_DEFINITION ) ),
78cdf0e10cSrcweir     aFTLinestyle    ( this, CUI_RES( FT_LINESTYLE ) ),
79cdf0e10cSrcweir     aLbLineStyles   ( this, CUI_RES( LB_LINESTYLES ) ),
80cdf0e10cSrcweir     aFtType         ( this, CUI_RES( FT_TYPE ) ),
81cdf0e10cSrcweir 	aLbType1		( this, CUI_RES( LB_TYPE_1 ) ),
82cdf0e10cSrcweir 	aLbType2		( this, CUI_RES( LB_TYPE_2 ) ),
83cdf0e10cSrcweir 	aFtNumber		( this, CUI_RES( FT_NUMBER ) ),
84cdf0e10cSrcweir 	aNumFldNumber1	( this, CUI_RES( NUM_FLD_1 ) ),
85cdf0e10cSrcweir 	aNumFldNumber2	( this, CUI_RES( NUM_FLD_2 ) ),
86cdf0e10cSrcweir     aFtLength       ( this, CUI_RES( FT_LENGTH ) ),
87cdf0e10cSrcweir     aMtrLength1     ( this, CUI_RES( MTR_FLD_LENGTH_1 ) ),
88cdf0e10cSrcweir     aMtrLength2     ( this, CUI_RES( MTR_FLD_LENGTH_2 ) ),
89cdf0e10cSrcweir     aFtDistance     ( this, CUI_RES( FT_DISTANCE ) ),
90cdf0e10cSrcweir 	aMtrDistance	( this, CUI_RES( MTR_FLD_DISTANCE ) ),
91cdf0e10cSrcweir     aCbxSynchronize ( this, CUI_RES( CBX_SYNCHRONIZE ) ),
92cdf0e10cSrcweir     aBtnAdd         ( this, CUI_RES( BTN_ADD ) ),
93cdf0e10cSrcweir 	aBtnModify		( this, CUI_RES( BTN_MODIFY ) ),
94cdf0e10cSrcweir 	aBtnDelete		( this, CUI_RES( BTN_DELETE ) ),
95cdf0e10cSrcweir     aBtnLoad        ( this, CUI_RES( BTN_LOAD ) ),
96cdf0e10cSrcweir 	aBtnSave		( this, CUI_RES( BTN_SAVE ) ),
97cdf0e10cSrcweir     aCtlPreview     ( this, CUI_RES( CTL_PREVIEW ) ),
98cdf0e10cSrcweir 
99cdf0e10cSrcweir     rOutAttrs       ( rInAttrs ),
100cdf0e10cSrcweir 
101cdf0e10cSrcweir     pXPool              ( (XOutdevItemPool*) rInAttrs.GetPool() ),
102cdf0e10cSrcweir     aXLStyle            ( XLINE_DASH ),
103cdf0e10cSrcweir     aXWidth             ( XOUT_WIDTH ),
104cdf0e10cSrcweir     aXDash              ( String(), XDash( XDASH_RECT, 3, 7, 2, 40, 15 ) ),
105cdf0e10cSrcweir     aXColor             ( String(), COL_BLACK ),
106cdf0e10cSrcweir     aXLineAttr          ( pXPool ),
107cdf0e10cSrcweir     rXLSet              ( aXLineAttr.GetItemSet() )
108cdf0e10cSrcweir {
109cdf0e10cSrcweir 	aBtnLoad.SetModeImage( Image( CUI_RES( RID_SVXIMG_LOAD_H ) ), BMP_COLOR_HIGHCONTRAST );
110cdf0e10cSrcweir 	aBtnSave.SetModeImage( Image( CUI_RES( RID_SVXIMG_SAVE_H ) ), BMP_COLOR_HIGHCONTRAST );
111cdf0e10cSrcweir 
112cdf0e10cSrcweir 	aLbType1.SetAccessibleName(String(CUI_RES( STR_START_TYPE ) ) );
113cdf0e10cSrcweir 	aLbType2.SetAccessibleName(String(CUI_RES( STR_END_TYPE ) ) );
114cdf0e10cSrcweir 	aNumFldNumber1.SetAccessibleName(String(CUI_RES( STR_START_NUM ) ) );
115cdf0e10cSrcweir 	aNumFldNumber2.SetAccessibleName(String(CUI_RES( STR_END_NUM ) ) );
116cdf0e10cSrcweir 	aMtrLength1.SetAccessibleName(String(CUI_RES( STR_START_LENGTH ) ) );
117cdf0e10cSrcweir 	aMtrLength2.SetAccessibleName(String(CUI_RES( STR_END_LENGTH ) ) );
118cdf0e10cSrcweir 
119cdf0e10cSrcweir 	FreeResource();
120cdf0e10cSrcweir 
121cdf0e10cSrcweir 	// diese Page braucht ExchangeSupport
122cdf0e10cSrcweir 	SetExchangeSupport();
123cdf0e10cSrcweir 
124cdf0e10cSrcweir 	// Metrik einstellen
125cdf0e10cSrcweir 	eFUnit = GetModuleFieldUnit( rInAttrs );
126cdf0e10cSrcweir 
127cdf0e10cSrcweir 	switch ( eFUnit )
128cdf0e10cSrcweir 	{
129cdf0e10cSrcweir 		case FUNIT_M:
130cdf0e10cSrcweir 		case FUNIT_KM:
131cdf0e10cSrcweir 			eFUnit = FUNIT_MM;
132cdf0e10cSrcweir 			break;
133cdf0e10cSrcweir         default: ; //prevent warning
134cdf0e10cSrcweir 	}
135cdf0e10cSrcweir 	SetFieldUnit( aMtrDistance, eFUnit );
136cdf0e10cSrcweir 	SetFieldUnit( aMtrLength1, eFUnit );
137cdf0e10cSrcweir 	SetFieldUnit( aMtrLength2, eFUnit );
138cdf0e10cSrcweir 
139cdf0e10cSrcweir 	// PoolUnit ermitteln
140cdf0e10cSrcweir 	SfxItemPool* pPool = rOutAttrs.GetPool();
141cdf0e10cSrcweir 	DBG_ASSERT( pPool, "Wo ist der Pool?" );
142cdf0e10cSrcweir 	ePoolUnit = pPool->GetMetric( SID_ATTR_LINE_WIDTH );
143cdf0e10cSrcweir 
144cdf0e10cSrcweir 	rXLSet.Put( aXLStyle );
145cdf0e10cSrcweir 	rXLSet.Put( aXWidth );
146cdf0e10cSrcweir 	rXLSet.Put( aXDash );
147cdf0e10cSrcweir 	rXLSet.Put( aXColor );
148cdf0e10cSrcweir 
149cdf0e10cSrcweir 	// #i34740#
150cdf0e10cSrcweir 	aCtlPreview.SetLineAttributes(aXLineAttr.GetItemSet());
151cdf0e10cSrcweir 
152cdf0e10cSrcweir 	aBtnAdd.SetClickHdl( LINK( this, SvxLineDefTabPage, ClickAddHdl_Impl ) );
153cdf0e10cSrcweir 	aBtnModify.SetClickHdl(
154cdf0e10cSrcweir 		LINK( this, SvxLineDefTabPage, ClickModifyHdl_Impl ) );
155cdf0e10cSrcweir 	aBtnDelete.SetClickHdl(
156cdf0e10cSrcweir 		LINK( this, SvxLineDefTabPage, ClickDeleteHdl_Impl ) );
157cdf0e10cSrcweir 	aBtnLoad.SetClickHdl( LINK( this, SvxLineDefTabPage, ClickLoadHdl_Impl ) );
158cdf0e10cSrcweir 	aBtnSave.SetClickHdl( LINK( this, SvxLineDefTabPage, ClickSaveHdl_Impl ) );
159cdf0e10cSrcweir 
160cdf0e10cSrcweir 	aNumFldNumber1.SetModifyHdl(
161cdf0e10cSrcweir 		LINK( this, SvxLineDefTabPage, ChangeNumber1Hdl_Impl ) );
162cdf0e10cSrcweir 	aNumFldNumber2.SetModifyHdl(
163cdf0e10cSrcweir 		LINK( this, SvxLineDefTabPage, ChangeNumber2Hdl_Impl ) );
164cdf0e10cSrcweir 	aLbLineStyles.SetSelectHdl(
165cdf0e10cSrcweir 		LINK( this, SvxLineDefTabPage, SelectLinestyleHdl_Impl ) );
166cdf0e10cSrcweir 
167*6202fbb6SArmin Le Grand     // #122042# switch off default adding of 'none' and 'solid' entries
168*6202fbb6SArmin Le Grand     // for this ListBox; we want to select only editable/dashed styles
169*6202fbb6SArmin Le Grand     aLbLineStyles.setAddStandardFields(false);
170*6202fbb6SArmin Le Grand 
171cdf0e10cSrcweir 	// Absolut (in mm) oder Relativ (in %)
172cdf0e10cSrcweir 	aCbxSynchronize.SetClickHdl(
173cdf0e10cSrcweir 		LINK( this, SvxLineDefTabPage, ChangeMetricHdl_Impl ) );
174cdf0e10cSrcweir 
175cdf0e10cSrcweir 	// Wenn sich etwas aendert, muss Preview upgedatet werden werden
176cdf0e10cSrcweir 	Link aLink = LINK( this, SvxLineDefTabPage, SelectTypeHdl_Impl );
177cdf0e10cSrcweir 	aLbType1.SetSelectHdl( aLink );
178cdf0e10cSrcweir 	aLbType2.SetSelectHdl( aLink );
179cdf0e10cSrcweir 	aLink = LINK( this, SvxLineDefTabPage, ChangePreviewHdl_Impl );
180cdf0e10cSrcweir 	aMtrLength1.SetModifyHdl( aLink );
181cdf0e10cSrcweir 	aMtrLength2.SetModifyHdl( aLink );
182cdf0e10cSrcweir 	aMtrDistance.SetModifyHdl( aLink );
183cdf0e10cSrcweir 
184cdf0e10cSrcweir 	pDashList = NULL;
185cdf0e10cSrcweir 
186cdf0e10cSrcweir 	aBtnAdd.SetAccessibleRelationMemberOf( &aFlDefinition );
187cdf0e10cSrcweir 	aBtnModify.SetAccessibleRelationMemberOf( &aFlDefinition );
188cdf0e10cSrcweir 	aBtnDelete.SetAccessibleRelationMemberOf( &aFlDefinition );
189cdf0e10cSrcweir 	aBtnLoad.SetAccessibleRelationMemberOf( &aFlDefinition );
190cdf0e10cSrcweir 	aBtnSave.SetAccessibleRelationMemberOf( &aFlDefinition );
191cdf0e10cSrcweir }
192cdf0e10cSrcweir 
193cdf0e10cSrcweir 
194cdf0e10cSrcweir // -----------------------------------------------------------------------
195cdf0e10cSrcweir 
196cdf0e10cSrcweir void SvxLineDefTabPage::Construct()
197cdf0e10cSrcweir {
198*6202fbb6SArmin Le Grand 	// Line style fill; do *not* add default fields here
199cdf0e10cSrcweir 	aLbLineStyles.Fill( pDashList );
200cdf0e10cSrcweir }
201cdf0e10cSrcweir 
202cdf0e10cSrcweir // -----------------------------------------------------------------------
203cdf0e10cSrcweir 
204cdf0e10cSrcweir void SvxLineDefTabPage::ActivatePage( const SfxItemSet& )
205cdf0e10cSrcweir {
206cdf0e10cSrcweir 	if( *pDlgType == 0 ) // Flaechen-Dialog
207cdf0e10cSrcweir 	{
208cdf0e10cSrcweir 		// ActivatePage() wird aufgerufen bevor der Dialog PageCreated() erhaelt !!!
209cdf0e10cSrcweir 		if( pDashList )
210cdf0e10cSrcweir 		{
211cdf0e10cSrcweir             if( *pPageType == 1 &&
212cdf0e10cSrcweir 				*pPosDashLb != LISTBOX_ENTRY_NOTFOUND )
213cdf0e10cSrcweir 			{
214cdf0e10cSrcweir 				aLbLineStyles.SelectEntryPos( *pPosDashLb );
215cdf0e10cSrcweir 			}
216cdf0e10cSrcweir 			// Damit evtl. vorhandener Linestyle verworfen wird
217cdf0e10cSrcweir 			SelectLinestyleHdl_Impl( this );
218cdf0e10cSrcweir 
219cdf0e10cSrcweir 			// Ermitteln (evtl. abschneiden) des Namens und in
220cdf0e10cSrcweir 			// der GroupBox darstellen
221cdf0e10cSrcweir 			String			aString( CUI_RES( RID_SVXSTR_TABLE ) ); aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ": " ) );
222cdf0e10cSrcweir 			INetURLObject	aURL( pDashList->GetPath() );
223cdf0e10cSrcweir 
224cdf0e10cSrcweir 			aURL.Append( pDashList->GetName() );
225cdf0e10cSrcweir 			DBG_ASSERT( aURL.GetProtocol() != INET_PROT_NOT_VALID, "invalid URL" );
226cdf0e10cSrcweir 
227cdf0e10cSrcweir /*			if ( aURL.getBase().Len() > 18 )
228cdf0e10cSrcweir 			{
229cdf0e10cSrcweir 				aString += aURL.getBase().Copy( 0, 15 );
230cdf0e10cSrcweir 				aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "..." ) );
231cdf0e10cSrcweir 			}
232cdf0e10cSrcweir 			else
233cdf0e10cSrcweir 				aString += aURL.getBase();
234cdf0e10cSrcweir 
235cdf0e10cSrcweir 			aFTLinestyle.SetText( aString );
236cdf0e10cSrcweir */
237cdf0e10cSrcweir 			*pPageType = 0; // 2
238cdf0e10cSrcweir 			*pPosDashLb = LISTBOX_ENTRY_NOTFOUND;
239cdf0e10cSrcweir 		}
240cdf0e10cSrcweir 	}
241cdf0e10cSrcweir }
242cdf0e10cSrcweir 
243cdf0e10cSrcweir // -----------------------------------------------------------------------
244cdf0e10cSrcweir 
245cdf0e10cSrcweir int SvxLineDefTabPage::DeactivatePage( SfxItemSet* _pSet )
246cdf0e10cSrcweir {
247cdf0e10cSrcweir 	CheckChanges_Impl();
248cdf0e10cSrcweir 
249cdf0e10cSrcweir     if( _pSet )
250cdf0e10cSrcweir         FillItemSet( *_pSet );
251cdf0e10cSrcweir 
252cdf0e10cSrcweir 	return( LEAVE_PAGE );
253cdf0e10cSrcweir }
254cdf0e10cSrcweir 
255cdf0e10cSrcweir // -----------------------------------------------------------------------
256cdf0e10cSrcweir 
257cdf0e10cSrcweir void SvxLineDefTabPage::CheckChanges_Impl()
258cdf0e10cSrcweir {
259cdf0e10cSrcweir 	// wird hier benutzt, um Aenderungen NICHT zu verlieren
260cdf0e10cSrcweir 	//XDashStyle eXDS;
261cdf0e10cSrcweir 
262cdf0e10cSrcweir 	if( aNumFldNumber1.GetText() 	 != aNumFldNumber1.GetSavedValue() ||
263cdf0e10cSrcweir 		aMtrLength1.GetText() 		 != aMtrLength1.GetSavedValue() ||
264cdf0e10cSrcweir 		aLbType1.GetSelectEntryPos() != aLbType1.GetSavedValue() ||
265cdf0e10cSrcweir 		aNumFldNumber2.GetText() 	 != aNumFldNumber2.GetSavedValue() ||
266cdf0e10cSrcweir 		aMtrLength2.GetText() 		 != aMtrLength2.GetSavedValue() ||
267cdf0e10cSrcweir 		aLbType2.GetSelectEntryPos() != aLbType2.GetSavedValue() ||
268cdf0e10cSrcweir 		aMtrDistance.GetText() 		 != aMtrDistance.GetSavedValue() )
269cdf0e10cSrcweir 	{
270cdf0e10cSrcweir 		ResMgr& rMgr = CUI_MGR();
271cdf0e10cSrcweir         Image aWarningBoxImage = WarningBox::GetStandardImage();
272cdf0e10cSrcweir 		SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
273cdf0e10cSrcweir 		DBG_ASSERT(pFact, "Dialogdiet fail!");//CHINA001
274cdf0e10cSrcweir 		AbstractSvxMessDialog* aMessDlg = pFact->CreateSvxMessDialog( DLGWIN, RID_SVXDLG_MESSBOX,
275cdf0e10cSrcweir 													SVX_RESSTR( RID_SVXSTR_LINESTYLE ),
276cdf0e10cSrcweir 													String( ResId( RID_SVXSTR_ASK_CHANGE_LINESTYLE, rMgr ) ),
277cdf0e10cSrcweir 													&aWarningBoxImage );
278cdf0e10cSrcweir 		DBG_ASSERT(aMessDlg, "Dialogdiet fail!");//CHINA001
279cdf0e10cSrcweir 		aMessDlg->SetButtonText( MESS_BTN_1, //CHINA001 aMessDlg.SetButtonText( MESS_BTN_1,
280cdf0e10cSrcweir 								String( ResId( RID_SVXSTR_CHANGE, rMgr ) ) );
281cdf0e10cSrcweir 		aMessDlg->SetButtonText( MESS_BTN_2, //CHINA001 aMessDlg.SetButtonText( MESS_BTN_2,
282cdf0e10cSrcweir 								String( ResId( RID_SVXSTR_ADD, rMgr ) ) );
283cdf0e10cSrcweir 
284cdf0e10cSrcweir 		short nRet = aMessDlg->Execute(); //CHINA001 short nRet = aMessDlg.Execute();
285cdf0e10cSrcweir 
286cdf0e10cSrcweir 		switch( nRet )
287cdf0e10cSrcweir 		{
288cdf0e10cSrcweir 			case RET_BTN_1: // Aendern
289cdf0e10cSrcweir 			{
290cdf0e10cSrcweir 				ClickModifyHdl_Impl( this );
291cdf0e10cSrcweir 				//aXDash = pDashList->Get( nPos )->GetDash();
292cdf0e10cSrcweir 			}
293cdf0e10cSrcweir 			break;
294cdf0e10cSrcweir 
295cdf0e10cSrcweir 			case RET_BTN_2: // Hinzufuegen
296cdf0e10cSrcweir 			{
297cdf0e10cSrcweir 				ClickAddHdl_Impl( this );
298cdf0e10cSrcweir 				//nPos = aLbLineStyles.GetSelectEntryPos();
299cdf0e10cSrcweir 				//aXDash = pDashList->Get( nPos )->GetDash();
300cdf0e10cSrcweir 			}
301cdf0e10cSrcweir 			break;
302cdf0e10cSrcweir 
303cdf0e10cSrcweir 			case RET_CANCEL:
304cdf0e10cSrcweir 			break;
305cdf0e10cSrcweir 			// return( sal_True ); // Abbruch
306cdf0e10cSrcweir 		}
307cdf0e10cSrcweir 		delete aMessDlg; //add by CHINA001
308cdf0e10cSrcweir 	}
309cdf0e10cSrcweir 
310cdf0e10cSrcweir 
311cdf0e10cSrcweir 
312cdf0e10cSrcweir 	sal_uInt16 nPos = aLbLineStyles.GetSelectEntryPos();
313cdf0e10cSrcweir 	if( nPos != LISTBOX_ENTRY_NOTFOUND )
314cdf0e10cSrcweir 	{
315cdf0e10cSrcweir 		*pPosDashLb = nPos;
316cdf0e10cSrcweir 	}
317cdf0e10cSrcweir }
318cdf0e10cSrcweir 
319cdf0e10cSrcweir // -----------------------------------------------------------------------
320cdf0e10cSrcweir 
321cdf0e10cSrcweir sal_Bool SvxLineDefTabPage::FillItemSet( SfxItemSet& rAttrs )
322cdf0e10cSrcweir {
323cdf0e10cSrcweir 	if( *pDlgType == 0 ) // Linien-Dialog
324cdf0e10cSrcweir 	{
325cdf0e10cSrcweir 		if( *pPageType == 2 )
326cdf0e10cSrcweir 		{
327cdf0e10cSrcweir 			//CheckChanges_Impl();
328cdf0e10cSrcweir 
329cdf0e10cSrcweir 			FillDash_Impl();
330cdf0e10cSrcweir 
331cdf0e10cSrcweir 			String aString( aLbLineStyles.GetSelectEntry() );
332cdf0e10cSrcweir 			rAttrs.Put( XLineStyleItem( XLINE_DASH ) );
333cdf0e10cSrcweir 			rAttrs.Put( XLineDashItem( aString, aDash ) );
334cdf0e10cSrcweir 		}
335cdf0e10cSrcweir 	}
336cdf0e10cSrcweir 	return( sal_True );
337cdf0e10cSrcweir }
338cdf0e10cSrcweir 
339cdf0e10cSrcweir // -----------------------------------------------------------------------
340cdf0e10cSrcweir 
341cdf0e10cSrcweir void SvxLineDefTabPage::Reset( const SfxItemSet& rAttrs )
342cdf0e10cSrcweir {
343cdf0e10cSrcweir 	if( rAttrs.GetItemState( GetWhich( XATTR_LINESTYLE ) ) != SFX_ITEM_DONTCARE )
344cdf0e10cSrcweir 	{
345cdf0e10cSrcweir 		XLineStyle eXLS = (XLineStyle) ( ( const XLineStyleItem& ) rAttrs.Get( GetWhich( XATTR_LINESTYLE ) ) ).GetValue();
346cdf0e10cSrcweir 
347cdf0e10cSrcweir 		switch( eXLS )
348cdf0e10cSrcweir 		{
349cdf0e10cSrcweir 			case XLINE_NONE:
350cdf0e10cSrcweir 			case XLINE_SOLID:
351cdf0e10cSrcweir 				aLbLineStyles.SelectEntryPos( 0 );
352cdf0e10cSrcweir 				break;
353cdf0e10cSrcweir 
354cdf0e10cSrcweir 			case XLINE_DASH:
355cdf0e10cSrcweir 			{
356cdf0e10cSrcweir 				const XLineDashItem& rDashItem = ( const XLineDashItem& ) rAttrs.Get( XATTR_LINEDASH );
357cdf0e10cSrcweir                 aDash = rDashItem.GetDashValue();
358cdf0e10cSrcweir 
359cdf0e10cSrcweir 				aLbLineStyles.SetNoSelection();
360cdf0e10cSrcweir 				aLbLineStyles.SelectEntry( rDashItem.GetName() );
361cdf0e10cSrcweir 			}
362cdf0e10cSrcweir 				break;
363cdf0e10cSrcweir 
364cdf0e10cSrcweir 			default:
365cdf0e10cSrcweir 				break;
366cdf0e10cSrcweir 		}
367cdf0e10cSrcweir 	}
368cdf0e10cSrcweir 	SelectLinestyleHdl_Impl( NULL );
369cdf0e10cSrcweir 
370cdf0e10cSrcweir 	// Status der Buttons ermitteln
371cdf0e10cSrcweir 	if( pDashList->Count() )
372cdf0e10cSrcweir 	{
373cdf0e10cSrcweir 		aBtnModify.Enable();
374cdf0e10cSrcweir 		aBtnDelete.Enable();
375cdf0e10cSrcweir 		aBtnSave.Enable();
376cdf0e10cSrcweir 	}
377cdf0e10cSrcweir 	else
378cdf0e10cSrcweir 	{
379cdf0e10cSrcweir 		aBtnModify.Disable();
380cdf0e10cSrcweir 		aBtnDelete.Disable();
381cdf0e10cSrcweir 		aBtnSave.Disable();
382cdf0e10cSrcweir 	}
383cdf0e10cSrcweir }
384cdf0e10cSrcweir 
385cdf0e10cSrcweir // -----------------------------------------------------------------------
386cdf0e10cSrcweir 
387cdf0e10cSrcweir SfxTabPage* SvxLineDefTabPage::Create( Window* pWindow,
388cdf0e10cSrcweir 				const SfxItemSet& rOutAttrs )
389cdf0e10cSrcweir {
390cdf0e10cSrcweir 	return( new SvxLineDefTabPage( pWindow, rOutAttrs ) );
391cdf0e10cSrcweir }
392cdf0e10cSrcweir 
393cdf0e10cSrcweir //------------------------------------------------------------------------
394cdf0e10cSrcweir 
395cdf0e10cSrcweir IMPL_LINK( SvxLineDefTabPage, SelectLinestyleHdl_Impl, void *, p )
396cdf0e10cSrcweir {
397*6202fbb6SArmin Le Grand 	if(pDashList->Count())
398cdf0e10cSrcweir 	{
399cdf0e10cSrcweir 		int nTmp = aLbLineStyles.GetSelectEntryPos();
400*6202fbb6SArmin Le Grand 
401*6202fbb6SArmin Le Grand         if(LISTBOX_ENTRY_NOTFOUND == nTmp)
402cdf0e10cSrcweir 		{
403*6202fbb6SArmin Le Grand             OSL_ENSURE(false, "OOps, non-existent LineDash selected (!)");
404*6202fbb6SArmin Le Grand             nTmp = 1;
405cdf0e10cSrcweir 		}
406*6202fbb6SArmin Le Grand 
407*6202fbb6SArmin Le Grand         aDash = pDashList->GetDash( nTmp )->GetDash();
408cdf0e10cSrcweir 
409cdf0e10cSrcweir 		FillDialog_Impl();
410cdf0e10cSrcweir 
411cdf0e10cSrcweir 		rXLSet.Put( XLineDashItem( String(), aDash ) );
412cdf0e10cSrcweir 
413cdf0e10cSrcweir 		// #i34740#
414cdf0e10cSrcweir 		aCtlPreview.SetLineAttributes(aXLineAttr.GetItemSet());
415cdf0e10cSrcweir 
416cdf0e10cSrcweir 		aCtlPreview.Invalidate();
417cdf0e10cSrcweir 
418cdf0e10cSrcweir 		// Wird erst hier gesetzt, um den Style nur dann zu uebernehmen,
419cdf0e10cSrcweir 		// wenn in der ListBox ein Eintrag ausgewaehlt wurde
420cdf0e10cSrcweir 		// Wenn ueber Reset() gerufen wurde ist p == NULL
421cdf0e10cSrcweir 		if( p )
422cdf0e10cSrcweir 			*pPageType = 2;
423cdf0e10cSrcweir 	}
424cdf0e10cSrcweir 	return( 0L );
425cdf0e10cSrcweir }
426cdf0e10cSrcweir 
427cdf0e10cSrcweir //------------------------------------------------------------------------
428cdf0e10cSrcweir 
429cdf0e10cSrcweir IMPL_LINK_INLINE_START( SvxLineDefTabPage, ChangePreviewHdl_Impl, void *, EMPTYARG )
430cdf0e10cSrcweir {
431cdf0e10cSrcweir 	FillDash_Impl();
432cdf0e10cSrcweir 	aCtlPreview.Invalidate();
433cdf0e10cSrcweir 
434cdf0e10cSrcweir 	return( 0L );
435cdf0e10cSrcweir }
436cdf0e10cSrcweir IMPL_LINK_INLINE_END( SvxLineDefTabPage, ChangePreviewHdl_Impl, void *, EMPTYARG )
437cdf0e10cSrcweir 
438cdf0e10cSrcweir //------------------------------------------------------------------------
439cdf0e10cSrcweir 
440cdf0e10cSrcweir IMPL_LINK( SvxLineDefTabPage, ChangeNumber1Hdl_Impl, void *, EMPTYARG )
441cdf0e10cSrcweir {
442cdf0e10cSrcweir 	if( aNumFldNumber1.GetValue() == 0L )
443cdf0e10cSrcweir 	{
444cdf0e10cSrcweir         aNumFldNumber2.SetMin( 1L );
445cdf0e10cSrcweir         aNumFldNumber2.SetFirst( 1L );
446cdf0e10cSrcweir 	}
447cdf0e10cSrcweir 	else
448cdf0e10cSrcweir 	{
449cdf0e10cSrcweir         aNumFldNumber2.SetMin( 0L );
450cdf0e10cSrcweir         aNumFldNumber2.SetFirst( 0L );
451cdf0e10cSrcweir 	}
452cdf0e10cSrcweir 
453cdf0e10cSrcweir 	ChangePreviewHdl_Impl( this );
454cdf0e10cSrcweir 
455cdf0e10cSrcweir 	return( 0L );
456cdf0e10cSrcweir }
457cdf0e10cSrcweir 
458cdf0e10cSrcweir //------------------------------------------------------------------------
459cdf0e10cSrcweir 
460cdf0e10cSrcweir IMPL_LINK( SvxLineDefTabPage, ChangeNumber2Hdl_Impl, void *, EMPTYARG )
461cdf0e10cSrcweir {
462cdf0e10cSrcweir 	if( aNumFldNumber2.GetValue() == 0L )
463cdf0e10cSrcweir 	{
464cdf0e10cSrcweir         aNumFldNumber1.SetMin( 1L );
465cdf0e10cSrcweir         aNumFldNumber1.SetFirst( 1L );
466cdf0e10cSrcweir 	}
467cdf0e10cSrcweir 	else
468cdf0e10cSrcweir 	{
469cdf0e10cSrcweir         aNumFldNumber1.SetMin( 0L );
470cdf0e10cSrcweir         aNumFldNumber1.SetFirst( 0L );
471cdf0e10cSrcweir 	}
472cdf0e10cSrcweir 
473cdf0e10cSrcweir 	ChangePreviewHdl_Impl( this );
474cdf0e10cSrcweir 
475cdf0e10cSrcweir 	return( 0L );
476cdf0e10cSrcweir }
477cdf0e10cSrcweir 
478cdf0e10cSrcweir 
479cdf0e10cSrcweir //------------------------------------------------------------------------
480cdf0e10cSrcweir 
481cdf0e10cSrcweir IMPL_LINK( SvxLineDefTabPage, ChangeMetricHdl_Impl, void *, p )
482cdf0e10cSrcweir {
483cdf0e10cSrcweir 	if( !aCbxSynchronize.IsChecked() && aMtrLength1.GetUnit() != eFUnit )
484cdf0e10cSrcweir 	{
485cdf0e10cSrcweir 		long nTmp1, nTmp2, nTmp3;
486cdf0e10cSrcweir 
487cdf0e10cSrcweir 		// Wurde ueber Control geaendert
488cdf0e10cSrcweir 		if( p )
489cdf0e10cSrcweir 		{
490cdf0e10cSrcweir 			nTmp1 = GetCoreValue( aMtrLength1, ePoolUnit ) * XOUT_WIDTH / 100;
491cdf0e10cSrcweir 			nTmp2 = GetCoreValue( aMtrLength2, ePoolUnit ) * XOUT_WIDTH / 100;
492cdf0e10cSrcweir 			nTmp3 = GetCoreValue( aMtrDistance, ePoolUnit ) * XOUT_WIDTH / 100;
493cdf0e10cSrcweir 		}
494cdf0e10cSrcweir 		else
495cdf0e10cSrcweir 		{
496cdf0e10cSrcweir 			nTmp1 = GetCoreValue( aMtrLength1, ePoolUnit );
497cdf0e10cSrcweir 			nTmp2 = GetCoreValue( aMtrLength2, ePoolUnit );
498cdf0e10cSrcweir 			nTmp3 = GetCoreValue( aMtrDistance, ePoolUnit );
499cdf0e10cSrcweir 		}
500cdf0e10cSrcweir 		aMtrLength1.SetDecimalDigits( 2 );
501cdf0e10cSrcweir 		aMtrLength2.SetDecimalDigits( 2 );
502cdf0e10cSrcweir 		aMtrDistance.SetDecimalDigits( 2 );
503cdf0e10cSrcweir 
504cdf0e10cSrcweir 		// Metrik einstellen
505cdf0e10cSrcweir 		aMtrLength1.SetUnit( eFUnit );
506cdf0e10cSrcweir 		aMtrLength2.SetUnit( eFUnit );
507cdf0e10cSrcweir 		aMtrDistance.SetUnit( eFUnit );
508cdf0e10cSrcweir 
509cdf0e10cSrcweir 		SetMetricValue( aMtrLength1, nTmp1, ePoolUnit );
510cdf0e10cSrcweir 		SetMetricValue( aMtrLength2, nTmp2, ePoolUnit );
511cdf0e10cSrcweir 		SetMetricValue( aMtrDistance, nTmp3, ePoolUnit );
512cdf0e10cSrcweir 	}
513cdf0e10cSrcweir 	else if( aCbxSynchronize.IsChecked() && aMtrLength1.GetUnit() != FUNIT_CUSTOM )
514cdf0e10cSrcweir 	{
515cdf0e10cSrcweir 		long nTmp1, nTmp2, nTmp3;
516cdf0e10cSrcweir 
517cdf0e10cSrcweir 		// Wurde ueber Control geaendert
518cdf0e10cSrcweir 		if( p )
519cdf0e10cSrcweir 		{
520cdf0e10cSrcweir 			nTmp1 = GetCoreValue( aMtrLength1, ePoolUnit ) * 100 / XOUT_WIDTH;
521cdf0e10cSrcweir 			nTmp2 = GetCoreValue( aMtrLength2, ePoolUnit ) * 100 / XOUT_WIDTH;
522cdf0e10cSrcweir 			nTmp3 = GetCoreValue( aMtrDistance, ePoolUnit ) * 100 / XOUT_WIDTH;
523cdf0e10cSrcweir 		}
524cdf0e10cSrcweir 		else
525cdf0e10cSrcweir 		{
526cdf0e10cSrcweir 			nTmp1 = GetCoreValue( aMtrLength1, ePoolUnit );
527cdf0e10cSrcweir 			nTmp2 = GetCoreValue( aMtrLength2, ePoolUnit );
528cdf0e10cSrcweir 			nTmp3 = GetCoreValue( aMtrDistance, ePoolUnit );
529cdf0e10cSrcweir 		}
530cdf0e10cSrcweir 
531cdf0e10cSrcweir 		aMtrLength1.SetDecimalDigits( 0 );
532cdf0e10cSrcweir 		aMtrLength2.SetDecimalDigits( 0 );
533cdf0e10cSrcweir 		aMtrDistance.SetDecimalDigits( 0 );
534cdf0e10cSrcweir 
535cdf0e10cSrcweir 		aMtrLength1.SetUnit( FUNIT_CUSTOM );
536cdf0e10cSrcweir 		aMtrLength2.SetUnit( FUNIT_CUSTOM );
537cdf0e10cSrcweir 		aMtrDistance.SetUnit( FUNIT_CUSTOM );
538cdf0e10cSrcweir 
539cdf0e10cSrcweir 
540cdf0e10cSrcweir 		SetMetricValue( aMtrLength1, nTmp1, ePoolUnit );
541cdf0e10cSrcweir 		SetMetricValue( aMtrLength2, nTmp2, ePoolUnit );
542cdf0e10cSrcweir 		SetMetricValue( aMtrDistance, nTmp3, ePoolUnit );
543cdf0e10cSrcweir 	}
544cdf0e10cSrcweir 	SelectTypeHdl_Impl( NULL );
545cdf0e10cSrcweir 
546cdf0e10cSrcweir 	return( 0L );
547cdf0e10cSrcweir }
548cdf0e10cSrcweir 
549cdf0e10cSrcweir //------------------------------------------------------------------------
550cdf0e10cSrcweir 
551cdf0e10cSrcweir IMPL_LINK( SvxLineDefTabPage, SelectTypeHdl_Impl, void *, p )
552cdf0e10cSrcweir {
553cdf0e10cSrcweir 	if ( p == &aLbType1 || !p )
554cdf0e10cSrcweir 	{
555cdf0e10cSrcweir 		if ( aLbType1.GetSelectEntryPos() == 0 )
556cdf0e10cSrcweir 		{
557cdf0e10cSrcweir 			aMtrLength1.Disable();
558cdf0e10cSrcweir 			aMtrLength1.SetText( String() );
559cdf0e10cSrcweir 		}
560cdf0e10cSrcweir 		else if ( !aMtrLength1.IsEnabled() )
561cdf0e10cSrcweir 		{
562cdf0e10cSrcweir 			aMtrLength1.Enable();
563cdf0e10cSrcweir 			aMtrLength1.Reformat();
564cdf0e10cSrcweir 		}
565cdf0e10cSrcweir 	}
566cdf0e10cSrcweir 
567cdf0e10cSrcweir 	if ( p == &aLbType2 || !p )
568cdf0e10cSrcweir 	{
569cdf0e10cSrcweir 		if ( aLbType2.GetSelectEntryPos() == 0 )
570cdf0e10cSrcweir 		{
571cdf0e10cSrcweir 			aMtrLength2.Disable();
572cdf0e10cSrcweir 			aMtrLength2.SetText( String() );
573cdf0e10cSrcweir 		}
574cdf0e10cSrcweir 		else if ( !aMtrLength2.IsEnabled() )
575cdf0e10cSrcweir 		{
576cdf0e10cSrcweir 			aMtrLength2.Enable();
577cdf0e10cSrcweir 			aMtrLength2.Reformat();
578cdf0e10cSrcweir 		}
579cdf0e10cSrcweir 	}
580cdf0e10cSrcweir 	ChangePreviewHdl_Impl( p );
581cdf0e10cSrcweir 	return( 0L );
582cdf0e10cSrcweir }
583cdf0e10cSrcweir 
584cdf0e10cSrcweir //------------------------------------------------------------------------
585cdf0e10cSrcweir 
586cdf0e10cSrcweir IMPL_LINK( SvxLineDefTabPage, ClickAddHdl_Impl, void *, EMPTYARG )
587cdf0e10cSrcweir {
588cdf0e10cSrcweir 	ResMgr& rMgr = CUI_MGR();
589cdf0e10cSrcweir 	String aNewName( SVX_RES( RID_SVXSTR_LINESTYLE ) );
590cdf0e10cSrcweir 	String aDesc( ResId( RID_SVXSTR_DESC_LINESTYLE, rMgr ) );
591cdf0e10cSrcweir 	String aName;
592cdf0e10cSrcweir 	XDashEntry* pEntry;
593cdf0e10cSrcweir 
594cdf0e10cSrcweir 	long nCount = pDashList->Count();
595cdf0e10cSrcweir 	long j = 1;
596cdf0e10cSrcweir 	sal_Bool bDifferent = sal_False;
597cdf0e10cSrcweir 
598cdf0e10cSrcweir 	while ( !bDifferent )
599cdf0e10cSrcweir 	{
600cdf0e10cSrcweir 		aName = aNewName;
601cdf0e10cSrcweir 		aName += sal_Unicode(' ');
602cdf0e10cSrcweir 		aName += UniString::CreateFromInt32( j++ );
603cdf0e10cSrcweir 		bDifferent = sal_True;
604cdf0e10cSrcweir 
605cdf0e10cSrcweir 		for ( long i = 0; i < nCount && bDifferent; i++ )
606cdf0e10cSrcweir             if ( aName == pDashList->GetDash( i )->GetName() )
607cdf0e10cSrcweir 				bDifferent = sal_False;
608cdf0e10cSrcweir 	}
609cdf0e10cSrcweir 
610cdf0e10cSrcweir 	SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
611cdf0e10cSrcweir 	DBG_ASSERT(pFact, "Dialogdiet fail!");//CHINA001
612cdf0e10cSrcweir 	AbstractSvxNameDialog* pDlg = pFact->CreateSvxNameDialog( DLGWIN, aName, aDesc );
613cdf0e10cSrcweir 	DBG_ASSERT(pDlg, "Dialogdiet fail!");//CHINA001
614cdf0e10cSrcweir 	sal_Bool bLoop = sal_True;
615cdf0e10cSrcweir 
616cdf0e10cSrcweir 	while ( bLoop && pDlg->Execute() == RET_OK )
617cdf0e10cSrcweir 	{
618cdf0e10cSrcweir 		pDlg->GetName( aName );
619cdf0e10cSrcweir 		bDifferent = sal_True;
620cdf0e10cSrcweir 
621cdf0e10cSrcweir 		for( long i = 0; i < nCount && bDifferent; i++ )
622cdf0e10cSrcweir 		{
623cdf0e10cSrcweir             if( aName == pDashList->GetDash( i )->GetName() )
624cdf0e10cSrcweir 				bDifferent = sal_False;
625cdf0e10cSrcweir 		}
626cdf0e10cSrcweir 
627cdf0e10cSrcweir 		if( bDifferent )
628cdf0e10cSrcweir 		{
629cdf0e10cSrcweir 			bLoop = sal_False;
630cdf0e10cSrcweir 			FillDash_Impl();
631cdf0e10cSrcweir 
632cdf0e10cSrcweir 			pEntry = new XDashEntry( aDash, aName );
633cdf0e10cSrcweir 
634cdf0e10cSrcweir             long nDashCount = pDashList->Count();
635cdf0e10cSrcweir             pDashList->Insert( pEntry, nDashCount );
63697e8a929SArmin Le Grand             const Bitmap aBitmap = pDashList->GetUiBitmap( nDashCount );
63797e8a929SArmin Le Grand 			aLbLineStyles.Append( pEntry, &aBitmap );
638cdf0e10cSrcweir 
639cdf0e10cSrcweir 			aLbLineStyles.SelectEntryPos( aLbLineStyles.GetEntryCount() - 1 );
640cdf0e10cSrcweir 
641cdf0e10cSrcweir 			// Flag fuer modifiziert setzen
642cdf0e10cSrcweir 			*pnDashListState |= CT_MODIFIED;
643cdf0e10cSrcweir 
644cdf0e10cSrcweir 			*pPageType = 2;
645cdf0e10cSrcweir 
646cdf0e10cSrcweir 			// Werte sichern fuer Changes-Erkennung ( -> Methode )
647cdf0e10cSrcweir 			aNumFldNumber1.SaveValue();
648cdf0e10cSrcweir 			aMtrLength1.SaveValue();
649cdf0e10cSrcweir 			aLbType1.SaveValue();
650cdf0e10cSrcweir 			aNumFldNumber2.SaveValue();
651cdf0e10cSrcweir 			aMtrLength2.SaveValue();
652cdf0e10cSrcweir 			aLbType2.SaveValue();
653cdf0e10cSrcweir 			aMtrDistance.SaveValue();
654cdf0e10cSrcweir 		}
655cdf0e10cSrcweir 		else
656cdf0e10cSrcweir 		{
657cdf0e10cSrcweir 			WarningBox aBox( DLGWIN, WinBits( WB_OK ),String( ResId( RID_SVXSTR_WARN_NAME_DUPLICATE, rMgr ) ) );
658cdf0e10cSrcweir 			aBox.SetHelpId( HID_WARN_NAME_DUPLICATE );
659cdf0e10cSrcweir 			aBox.Execute();
660cdf0e10cSrcweir 		}
661cdf0e10cSrcweir 	}
662cdf0e10cSrcweir 	delete( pDlg );
663cdf0e10cSrcweir 
664cdf0e10cSrcweir 	// Status der Buttons ermitteln
665cdf0e10cSrcweir 	if ( pDashList->Count() )
666cdf0e10cSrcweir 	{
667cdf0e10cSrcweir 		aBtnModify.Enable();
668cdf0e10cSrcweir 		aBtnDelete.Enable();
669cdf0e10cSrcweir 		aBtnSave.Enable();
670cdf0e10cSrcweir 	}
671cdf0e10cSrcweir 	return( 0L );
672cdf0e10cSrcweir }
673cdf0e10cSrcweir 
674cdf0e10cSrcweir //------------------------------------------------------------------------
675cdf0e10cSrcweir 
676cdf0e10cSrcweir IMPL_LINK( SvxLineDefTabPage, ClickModifyHdl_Impl, void *, EMPTYARG )
677cdf0e10cSrcweir {
678cdf0e10cSrcweir 	sal_uInt16 nPos = aLbLineStyles.GetSelectEntryPos();
679cdf0e10cSrcweir 
680cdf0e10cSrcweir 	if( nPos != LISTBOX_ENTRY_NOTFOUND )
681cdf0e10cSrcweir 	{
682cdf0e10cSrcweir 		ResMgr& rMgr = CUI_MGR();
683cdf0e10cSrcweir 		String aNewName( SVX_RES( RID_SVXSTR_LINESTYLE ) );
684cdf0e10cSrcweir 		String aDesc( ResId( RID_SVXSTR_DESC_LINESTYLE, rMgr ) );
685cdf0e10cSrcweir         String aName( pDashList->GetDash( nPos )->GetName() );
686cdf0e10cSrcweir 		String aOldName = aName;
687cdf0e10cSrcweir 
688cdf0e10cSrcweir 		SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
689cdf0e10cSrcweir 		DBG_ASSERT(pFact, "Dialogdiet fail!");//CHINA001
690cdf0e10cSrcweir 		AbstractSvxNameDialog* pDlg = pFact->CreateSvxNameDialog( DLGWIN, aName, aDesc );
691cdf0e10cSrcweir 		DBG_ASSERT(pDlg, "Dialogdiet fail!");//CHINA001
692cdf0e10cSrcweir 
693cdf0e10cSrcweir 		long nCount = pDashList->Count();
694cdf0e10cSrcweir 		sal_Bool bDifferent = sal_False;
695cdf0e10cSrcweir 		sal_Bool bLoop = sal_True;
696cdf0e10cSrcweir 
697cdf0e10cSrcweir 		while ( bLoop && pDlg->Execute() == RET_OK )
698cdf0e10cSrcweir 		{
699cdf0e10cSrcweir 			pDlg->GetName( aName );
700cdf0e10cSrcweir 			bDifferent = sal_True;
701cdf0e10cSrcweir 
702cdf0e10cSrcweir 			for( long i = 0; i < nCount && bDifferent; i++ )
703cdf0e10cSrcweir 			{
704cdf0e10cSrcweir                 if( aName == pDashList->GetDash( i )->GetName() &&
705cdf0e10cSrcweir 					aName != aOldName )
706cdf0e10cSrcweir 					bDifferent = sal_False;
707cdf0e10cSrcweir 			}
708cdf0e10cSrcweir 
709cdf0e10cSrcweir 			if ( bDifferent )
710cdf0e10cSrcweir 			{
711cdf0e10cSrcweir 				bLoop = sal_False;
712cdf0e10cSrcweir 				FillDash_Impl();
713cdf0e10cSrcweir 
714cdf0e10cSrcweir 				XDashEntry* pEntry = new XDashEntry( aDash, aName );
715cdf0e10cSrcweir 
716cdf0e10cSrcweir 				delete pDashList->Replace( pEntry, nPos );
71797e8a929SArmin Le Grand 				const Bitmap aBitmap = pDashList->GetUiBitmap( nPos );
71897e8a929SArmin Le Grand 				aLbLineStyles.Modify( pEntry, nPos, &aBitmap );
719cdf0e10cSrcweir 
720cdf0e10cSrcweir 				aLbLineStyles.SelectEntryPos( nPos );
721cdf0e10cSrcweir 
722cdf0e10cSrcweir 				// Flag fuer modifiziert setzen
723cdf0e10cSrcweir 				*pnDashListState |= CT_MODIFIED;
724cdf0e10cSrcweir 
725cdf0e10cSrcweir 				*pPageType = 2;
726cdf0e10cSrcweir 
727cdf0e10cSrcweir 				// Werte sichern fuer Changes-Erkennung ( -> Methode )
728cdf0e10cSrcweir 				aNumFldNumber1.SaveValue();
729cdf0e10cSrcweir 				aMtrLength1.SaveValue();
730cdf0e10cSrcweir 				aLbType1.SaveValue();
731cdf0e10cSrcweir 				aNumFldNumber2.SaveValue();
732cdf0e10cSrcweir 				aMtrLength2.SaveValue();
733cdf0e10cSrcweir 				aLbType2.SaveValue();
734cdf0e10cSrcweir 				aMtrDistance.SaveValue();
735cdf0e10cSrcweir 			}
736cdf0e10cSrcweir 			else
737cdf0e10cSrcweir 			{
738cdf0e10cSrcweir 				WarningBox aBox( DLGWIN, WinBits( WB_OK ), String( ResId( RID_SVXSTR_WARN_NAME_DUPLICATE, rMgr ) ) );
739cdf0e10cSrcweir 				aBox.SetHelpId( HID_WARN_NAME_DUPLICATE );
740cdf0e10cSrcweir 				aBox.Execute();
741cdf0e10cSrcweir 			}
742cdf0e10cSrcweir 		}
743cdf0e10cSrcweir 		delete( pDlg );
744cdf0e10cSrcweir 	}
745cdf0e10cSrcweir 	return( 0L );
746cdf0e10cSrcweir }
747cdf0e10cSrcweir 
748cdf0e10cSrcweir //------------------------------------------------------------------------
749cdf0e10cSrcweir 
750cdf0e10cSrcweir IMPL_LINK( SvxLineDefTabPage, ClickDeleteHdl_Impl, void *, EMPTYARG )
751cdf0e10cSrcweir {
752cdf0e10cSrcweir 	sal_uInt16 nPos = aLbLineStyles.GetSelectEntryPos();
753cdf0e10cSrcweir 
754cdf0e10cSrcweir 	if ( nPos != LISTBOX_ENTRY_NOTFOUND )
755cdf0e10cSrcweir 	{
756cdf0e10cSrcweir 		QueryBox aQueryBox( DLGWIN, WinBits( WB_YES_NO | WB_DEF_NO ),
757cdf0e10cSrcweir 			String( CUI_RES( RID_SVXSTR_ASK_DEL_LINESTYLE ) ) );
758cdf0e10cSrcweir 
759cdf0e10cSrcweir 		if ( aQueryBox.Execute() == RET_YES )
760cdf0e10cSrcweir 		{
761cdf0e10cSrcweir 			delete pDashList->Remove( nPos );
762cdf0e10cSrcweir 			aLbLineStyles.RemoveEntry( nPos );
763cdf0e10cSrcweir 			aLbLineStyles.SelectEntryPos( 0 );
764cdf0e10cSrcweir 
765cdf0e10cSrcweir 			SelectLinestyleHdl_Impl( this );
766cdf0e10cSrcweir 			*pPageType = 0; // Style soll nicht uebernommen werden
767cdf0e10cSrcweir 
768cdf0e10cSrcweir 			// Flag fuer modifiziert setzen
769cdf0e10cSrcweir 			*pnDashListState |= CT_MODIFIED;
770cdf0e10cSrcweir 
771cdf0e10cSrcweir 			ChangePreviewHdl_Impl( this );
772cdf0e10cSrcweir 		}
773cdf0e10cSrcweir 	}
774cdf0e10cSrcweir 
775cdf0e10cSrcweir 	// Status der Buttons ermitteln
776cdf0e10cSrcweir 	if ( !pDashList->Count() )
777cdf0e10cSrcweir 	{
778cdf0e10cSrcweir 		aBtnModify.Disable();
779cdf0e10cSrcweir 		aBtnDelete.Disable();
780cdf0e10cSrcweir 		aBtnSave.Disable();
781cdf0e10cSrcweir 	}
782cdf0e10cSrcweir 	return( 0L );
783cdf0e10cSrcweir }
784cdf0e10cSrcweir 
785cdf0e10cSrcweir // -----------------------------------------------------------------------
786cdf0e10cSrcweir 
787cdf0e10cSrcweir IMPL_LINK( SvxLineDefTabPage, ClickLoadHdl_Impl, void *, EMPTYARG )
788cdf0e10cSrcweir {
789cdf0e10cSrcweir 	ResMgr& rMgr = CUI_MGR();
790cdf0e10cSrcweir 	sal_uInt16 nReturn = RET_YES;
791cdf0e10cSrcweir 
792cdf0e10cSrcweir 	if ( *pnDashListState & CT_MODIFIED )
793cdf0e10cSrcweir 	{
794cdf0e10cSrcweir 		nReturn = WarningBox( DLGWIN, WinBits( WB_YES_NO_CANCEL ),
795cdf0e10cSrcweir 			String( ResId( RID_SVXSTR_WARN_TABLE_OVERWRITE, rMgr ) ) ).Execute();
796cdf0e10cSrcweir 
797cdf0e10cSrcweir 		if ( nReturn == RET_YES )
798cdf0e10cSrcweir 			pDashList->Save();
799cdf0e10cSrcweir 	}
800cdf0e10cSrcweir 
801cdf0e10cSrcweir 	if ( nReturn != RET_CANCEL )
802cdf0e10cSrcweir 	{
803cdf0e10cSrcweir     	::sfx2::FileDialogHelper aDlg(
804cdf0e10cSrcweir             com::sun::star::ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE,
805cdf0e10cSrcweir             0 );
806cdf0e10cSrcweir 		String aStrFilterType( RTL_CONSTASCII_USTRINGPARAM( "*.sod" ) );
807cdf0e10cSrcweir 		aDlg.AddFilter( aStrFilterType, aStrFilterType );
808cdf0e10cSrcweir 		INetURLObject aFile( SvtPathOptions().GetPalettePath() );
809cdf0e10cSrcweir 		aDlg.SetDisplayDirectory( aFile.GetMainURL( INetURLObject::NO_DECODE ) );
810cdf0e10cSrcweir 
811cdf0e10cSrcweir 		if( aDlg.Execute() == ERRCODE_NONE )
812cdf0e10cSrcweir 		{
813cdf0e10cSrcweir 			INetURLObject aURL( aDlg.GetPath() );
814cdf0e10cSrcweir 			INetURLObject aPathURL( aURL );
815cdf0e10cSrcweir 
816cdf0e10cSrcweir 			aPathURL.removeSegment();
817cdf0e10cSrcweir 			aPathURL.removeFinalSlash();
818cdf0e10cSrcweir 
819cdf0e10cSrcweir 			// Liste speichern
820cdf0e10cSrcweir 			XDashList* pDshLst = new XDashList( aPathURL.GetMainURL( INetURLObject::NO_DECODE ), pXPool );
821cdf0e10cSrcweir 			pDshLst->SetName( aURL.getName() );
822cdf0e10cSrcweir 
823cdf0e10cSrcweir 			if( pDshLst->Load() )
824cdf0e10cSrcweir 			{
825cdf0e10cSrcweir 				if( pDshLst )
826cdf0e10cSrcweir 				{
827cdf0e10cSrcweir 					// Pruefen, ob Tabelle geloescht werden darf:
828cdf0e10cSrcweir 					if( pDashList != ( (SvxLineTabDialog*) DLGWIN )->GetDashList() )
829cdf0e10cSrcweir 						delete pDashList;
830cdf0e10cSrcweir 
831cdf0e10cSrcweir 					pDashList = pDshLst;
832cdf0e10cSrcweir 					( (SvxLineTabDialog*) DLGWIN )->SetNewDashList( pDashList );
833cdf0e10cSrcweir 
834cdf0e10cSrcweir 					aLbLineStyles.Clear();
835cdf0e10cSrcweir 					aLbLineStyles.Fill( pDashList );
836cdf0e10cSrcweir 					Reset( rOutAttrs );
837cdf0e10cSrcweir 
838cdf0e10cSrcweir 					pDashList->SetName( aURL.getName() );
839cdf0e10cSrcweir 
840cdf0e10cSrcweir /*					// Ermitteln (evtl. abschneiden) des Namens und in
841cdf0e10cSrcweir 					// der GroupBox darstellen
842cdf0e10cSrcweir 					String aString( ResId( RID_SVXSTR_TABLE, rMgr ) );
843cdf0e10cSrcweir 					aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ": " ) );
844cdf0e10cSrcweir 
845cdf0e10cSrcweir 					if ( aURL.getBase().Len() > 18 )
846cdf0e10cSrcweir 					{
847cdf0e10cSrcweir 						aString += aURL.getBase().Copy( 0, 15 );
848cdf0e10cSrcweir 						aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "..." ) );
849cdf0e10cSrcweir 					}
850cdf0e10cSrcweir 					else
851cdf0e10cSrcweir 						aString += aURL.getBase();
852cdf0e10cSrcweir 
853cdf0e10cSrcweir 					aGrpLinestyles.SetText( aString );
854cdf0e10cSrcweir */
855cdf0e10cSrcweir 					// Flag fuer gewechselt setzen
856cdf0e10cSrcweir 					*pnDashListState |= CT_CHANGED;
857cdf0e10cSrcweir 					// Flag fuer modifiziert entfernen
858cdf0e10cSrcweir 					*pnDashListState &= ~CT_MODIFIED;
859cdf0e10cSrcweir 				}
860cdf0e10cSrcweir 			}
861cdf0e10cSrcweir 			else
862cdf0e10cSrcweir 				//aIStream.Close();
863cdf0e10cSrcweir 				ErrorBox( DLGWIN, WinBits( WB_OK ),
864cdf0e10cSrcweir 					String( ResId( RID_SVXSTR_READ_DATA_ERROR, rMgr ) ) ).Execute();
865cdf0e10cSrcweir 		}
866cdf0e10cSrcweir 	}
867cdf0e10cSrcweir 
868cdf0e10cSrcweir 	// Status der Buttons ermitteln
869cdf0e10cSrcweir 	if ( pDashList->Count() )
870cdf0e10cSrcweir 	{
871cdf0e10cSrcweir 		aBtnModify.Enable();
872cdf0e10cSrcweir 		aBtnDelete.Enable();
873cdf0e10cSrcweir 		aBtnSave.Enable();
874cdf0e10cSrcweir 	}
875cdf0e10cSrcweir 	else
876cdf0e10cSrcweir 	{
877cdf0e10cSrcweir 		aBtnModify.Disable();
878cdf0e10cSrcweir 		aBtnDelete.Disable();
879cdf0e10cSrcweir 		aBtnSave.Disable();
880cdf0e10cSrcweir 	}
881cdf0e10cSrcweir 	return( 0L );
882cdf0e10cSrcweir }
883cdf0e10cSrcweir 
884cdf0e10cSrcweir // -----------------------------------------------------------------------
885cdf0e10cSrcweir 
886cdf0e10cSrcweir IMPL_LINK( SvxLineDefTabPage, ClickSaveHdl_Impl, void *, EMPTYARG )
887cdf0e10cSrcweir {
888cdf0e10cSrcweir    	::sfx2::FileDialogHelper aDlg(
889cdf0e10cSrcweir         com::sun::star::ui::dialogs::TemplateDescription::FILESAVE_SIMPLE, 0 );
890cdf0e10cSrcweir 	String aStrFilterType( RTL_CONSTASCII_USTRINGPARAM( "*.sod" ) );
891cdf0e10cSrcweir 	aDlg.AddFilter( aStrFilterType, aStrFilterType );
892cdf0e10cSrcweir 
893cdf0e10cSrcweir 	INetURLObject aFile( SvtPathOptions().GetPalettePath() );
894cdf0e10cSrcweir 	DBG_ASSERT( aFile.GetProtocol() != INET_PROT_NOT_VALID, "invalid URL" );
895cdf0e10cSrcweir 
896cdf0e10cSrcweir 	if( pDashList->GetName().Len() )
897cdf0e10cSrcweir 	{
898cdf0e10cSrcweir 		aFile.Append( pDashList->GetName() );
899cdf0e10cSrcweir 
900cdf0e10cSrcweir 		if( !aFile.getExtension().getLength() )
901cdf0e10cSrcweir 			aFile.SetExtension( UniString::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "sod" ) ) );
902cdf0e10cSrcweir 	}
903cdf0e10cSrcweir 
904cdf0e10cSrcweir 	aDlg.SetDisplayDirectory( aFile.GetMainURL( INetURLObject::NO_DECODE ) );
905cdf0e10cSrcweir 	if ( aDlg.Execute() == ERRCODE_NONE )
906cdf0e10cSrcweir 	{
907cdf0e10cSrcweir 		INetURLObject aURL( aDlg.GetPath() );
908cdf0e10cSrcweir 		INetURLObject aPathURL( aURL );
909cdf0e10cSrcweir 
910cdf0e10cSrcweir 		aPathURL.removeSegment();
911cdf0e10cSrcweir 		aPathURL.removeFinalSlash();
912cdf0e10cSrcweir 
913cdf0e10cSrcweir 		pDashList->SetName( aURL.getName() );
914cdf0e10cSrcweir 		pDashList->SetPath( aPathURL.GetMainURL( INetURLObject::NO_DECODE ) );
915cdf0e10cSrcweir 
916cdf0e10cSrcweir 		if( pDashList->Save() )
917cdf0e10cSrcweir 		{
918cdf0e10cSrcweir /*			// Ermitteln (evtl. abschneiden) des Namens und in
919cdf0e10cSrcweir 			// der GroupBox darstellen
920cdf0e10cSrcweir 			String aString( CUI_RES( RID_SVXSTR_TABLE ) );
921cdf0e10cSrcweir 			aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ": " ) );
922cdf0e10cSrcweir 
923cdf0e10cSrcweir 			if ( aURL.getBase().Len() > 18 )
924cdf0e10cSrcweir 			{
925cdf0e10cSrcweir 				aString += aURL.getBase().Copy( 0, 15 );
926cdf0e10cSrcweir 				aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "..." ) );
927cdf0e10cSrcweir 			}
928cdf0e10cSrcweir 			else
929cdf0e10cSrcweir 				aString += aURL.getBase();
930cdf0e10cSrcweir 
931cdf0e10cSrcweir 			aGrpLinestyles.SetText( aString );
932cdf0e10cSrcweir */
933cdf0e10cSrcweir 			// Flag fuer gespeichert setzen
934cdf0e10cSrcweir 			*pnDashListState |= CT_SAVED;
935cdf0e10cSrcweir 			// Flag fuer modifiziert entfernen
936cdf0e10cSrcweir 			*pnDashListState &= ~CT_MODIFIED;
937cdf0e10cSrcweir 		}
938cdf0e10cSrcweir 		else
939cdf0e10cSrcweir 		{
940cdf0e10cSrcweir 			ErrorBox( DLGWIN, WinBits( WB_OK ),
941cdf0e10cSrcweir 				String( CUI_RES( RID_SVXSTR_WRITE_DATA_ERROR ) ) ).Execute();
942cdf0e10cSrcweir 		}
943cdf0e10cSrcweir 	}
944cdf0e10cSrcweir 
945cdf0e10cSrcweir 	return( 0L );
946cdf0e10cSrcweir }
947cdf0e10cSrcweir 
948cdf0e10cSrcweir //------------------------------------------------------------------------
949cdf0e10cSrcweir 
950cdf0e10cSrcweir void SvxLineDefTabPage::FillDash_Impl()
951cdf0e10cSrcweir {
952cdf0e10cSrcweir 	XDashStyle eXDS;
953cdf0e10cSrcweir 
954cdf0e10cSrcweir /*	Alle Stile werden z.Z. nicht benutzt
955cdf0e10cSrcweir 	if( aRbtEnds1.IsChecked() )
956cdf0e10cSrcweir 		eXDS = XDASH_ROUND;
957cdf0e10cSrcweir 	else if( aRbtEnds2.IsChecked() )
958cdf0e10cSrcweir 		eXDS = XDASH_RECT;
959cdf0e10cSrcweir 	else
960cdf0e10cSrcweir 		eXDS = XDASH_RECT;
961cdf0e10cSrcweir */
962cdf0e10cSrcweir 	if( aCbxSynchronize.IsChecked() )
963cdf0e10cSrcweir 		eXDS = XDASH_RECTRELATIVE;
964cdf0e10cSrcweir 	else
965cdf0e10cSrcweir 		eXDS = XDASH_RECT;
966cdf0e10cSrcweir 
967cdf0e10cSrcweir 	aDash.SetDashStyle( eXDS );
968cdf0e10cSrcweir 	aDash.SetDots( (sal_uInt8) aNumFldNumber1.GetValue() );
969cdf0e10cSrcweir 	aDash.SetDotLen( aLbType1.GetSelectEntryPos() == 0 ? 0 :
970cdf0e10cSrcweir 								GetCoreValue( aMtrLength1, ePoolUnit ) );
971cdf0e10cSrcweir 	aDash.SetDashes( (sal_uInt8) aNumFldNumber2.GetValue() );
972cdf0e10cSrcweir 	aDash.SetDashLen( aLbType2.GetSelectEntryPos() == 0 ? 0 :
973cdf0e10cSrcweir 								GetCoreValue( aMtrLength2, ePoolUnit ) );
974cdf0e10cSrcweir 	aDash.SetDistance( GetCoreValue( aMtrDistance, ePoolUnit ) );
975cdf0e10cSrcweir 
976cdf0e10cSrcweir 	rXLSet.Put( XLineDashItem( String(), aDash ) );
977cdf0e10cSrcweir 
978cdf0e10cSrcweir 	// #i34740#
979cdf0e10cSrcweir 	aCtlPreview.SetLineAttributes(aXLineAttr.GetItemSet());
980cdf0e10cSrcweir }
981cdf0e10cSrcweir 
982cdf0e10cSrcweir //------------------------------------------------------------------------
983cdf0e10cSrcweir 
984cdf0e10cSrcweir void SvxLineDefTabPage::FillDialog_Impl()
985cdf0e10cSrcweir {
986cdf0e10cSrcweir 	XDashStyle eXDS = aDash.GetDashStyle(); // XDASH_RECT, XDASH_ROUND
987cdf0e10cSrcweir 	if( eXDS == XDASH_RECTRELATIVE )
988cdf0e10cSrcweir 		aCbxSynchronize.Check();
989cdf0e10cSrcweir 	else
990cdf0e10cSrcweir 		aCbxSynchronize.Check( sal_False );
991cdf0e10cSrcweir 
992cdf0e10cSrcweir 	aNumFldNumber1.SetValue( aDash.GetDots() );
993cdf0e10cSrcweir 	//aMtrLength1.SetValue( aDash.GetDotLen() );
994cdf0e10cSrcweir 	SetMetricValue( aMtrLength1, aDash.GetDotLen(), ePoolUnit );
995cdf0e10cSrcweir 	aLbType1.SelectEntryPos( aDash.GetDotLen() == 0 ? 0 : 1 );
996cdf0e10cSrcweir 	aNumFldNumber2.SetValue( aDash.GetDashes() );
997cdf0e10cSrcweir 	//aMtrLength2.SetValue( aDash.GetDashLen() );
998cdf0e10cSrcweir 	SetMetricValue( aMtrLength2, aDash.GetDashLen(), ePoolUnit );
999cdf0e10cSrcweir 	aLbType2.SelectEntryPos( aDash.GetDashLen() == 0 ? 0 : 1 );
1000cdf0e10cSrcweir 	//aMtrDistance.SetValue( aDash.GetDistance() );
1001cdf0e10cSrcweir 	SetMetricValue( aMtrDistance, aDash.GetDistance(), ePoolUnit );
1002cdf0e10cSrcweir 
1003cdf0e10cSrcweir 	ChangeMetricHdl_Impl( NULL );
1004cdf0e10cSrcweir 
1005cdf0e10cSrcweir 	// Werte sichern fuer Changes-Erkennung ( -> Methode )
1006cdf0e10cSrcweir 	aNumFldNumber1.SaveValue();
1007cdf0e10cSrcweir 	aMtrLength1.SaveValue();
1008cdf0e10cSrcweir 	aLbType1.SaveValue();
1009cdf0e10cSrcweir 	aNumFldNumber2.SaveValue();
1010cdf0e10cSrcweir 	aMtrLength2.SaveValue();
1011cdf0e10cSrcweir 	aLbType2.SaveValue();
1012cdf0e10cSrcweir 	aMtrDistance.SaveValue();
1013cdf0e10cSrcweir }
1014cdf0e10cSrcweir 
1015cdf0e10cSrcweir 
1016cdf0e10cSrcweir void SvxLineDefTabPage::DataChanged( const DataChangedEvent& rDCEvt )
1017cdf0e10cSrcweir {
1018cdf0e10cSrcweir 	SfxTabPage::DataChanged( rDCEvt );
1019cdf0e10cSrcweir 
1020cdf0e10cSrcweir 	if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) && (rDCEvt.GetFlags() & SETTINGS_STYLE) )
1021cdf0e10cSrcweir 	{
1022cdf0e10cSrcweir 		sal_uInt16 nOldSelect = aLbLineStyles.GetSelectEntryPos();
1023cdf0e10cSrcweir 		aLbLineStyles.Clear();
1024cdf0e10cSrcweir 		aLbLineStyles.Fill( pDashList );
1025cdf0e10cSrcweir 		aLbLineStyles.SelectEntryPos( nOldSelect );
1026cdf0e10cSrcweir 	}
1027cdf0e10cSrcweir }
1028cdf0e10cSrcweir 
1029