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