xref: /aoo42x/main/cui/source/tabpages/tabstpge.cxx (revision cdf0e10c)
1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
29*cdf0e10cSrcweir #include "precompiled_cui.hxx"
30*cdf0e10cSrcweir 
31*cdf0e10cSrcweir // include ---------------------------------------------------------------
32*cdf0e10cSrcweir 
33*cdf0e10cSrcweir #include <sfx2/app.hxx>
34*cdf0e10cSrcweir #include <tools/shl.hxx>
35*cdf0e10cSrcweir #include <svtools/ruler.hxx>
36*cdf0e10cSrcweir #include <svx/dialogs.hrc>
37*cdf0e10cSrcweir #include <svx/dialogs.hrc>
38*cdf0e10cSrcweir 
39*cdf0e10cSrcweir #define _SVX_TABSTPGE_CXX
40*cdf0e10cSrcweir 
41*cdf0e10cSrcweir #include <cuires.hrc>
42*cdf0e10cSrcweir #include "tabstpge.hrc"
43*cdf0e10cSrcweir #include <editeng/lrspitem.hxx>
44*cdf0e10cSrcweir #include "tabstpge.hxx"
45*cdf0e10cSrcweir #include <dialmgr.hxx>
46*cdf0e10cSrcweir #include "svx/dlgutil.hxx"
47*cdf0e10cSrcweir #include <sfx2/module.hxx>
48*cdf0e10cSrcweir #include <svl/cjkoptions.hxx>
49*cdf0e10cSrcweir #include <unotools/localedatawrapper.hxx>
50*cdf0e10cSrcweir #include <comphelper/processfactory.hxx>
51*cdf0e10cSrcweir #include <sfx2/request.hxx> //CHINA001
52*cdf0e10cSrcweir #include <svl/intitem.hxx> //add CHINA001
53*cdf0e10cSrcweir 
54*cdf0e10cSrcweir // class TabWin_Impl -----------------------------------------------------
55*cdf0e10cSrcweir 
56*cdf0e10cSrcweir class TabWin_Impl : public Window
57*cdf0e10cSrcweir {
58*cdf0e10cSrcweir private:
59*cdf0e10cSrcweir 	sal_uInt16  nTabStyle;
60*cdf0e10cSrcweir 
61*cdf0e10cSrcweir public:
62*cdf0e10cSrcweir 	TabWin_Impl( Window* pParent, const ResId& rId, sal_uInt16 nStyle ) :
63*cdf0e10cSrcweir 		Window( pParent, rId ),
64*cdf0e10cSrcweir 		nTabStyle( nStyle ) {}
65*cdf0e10cSrcweir 
66*cdf0e10cSrcweir 	virtual void    Paint( const Rectangle& rRect );
67*cdf0e10cSrcweir };
68*cdf0e10cSrcweir 
69*cdf0e10cSrcweir // static ----------------------------------------------------------------
70*cdf0e10cSrcweir 
71*cdf0e10cSrcweir static sal_uInt16 pRanges[] =
72*cdf0e10cSrcweir {
73*cdf0e10cSrcweir 	SID_ATTR_TABSTOP,
74*cdf0e10cSrcweir 	SID_ATTR_TABSTOP_OFFSET,
75*cdf0e10cSrcweir 	0
76*cdf0e10cSrcweir };
77*cdf0e10cSrcweir 
78*cdf0e10cSrcweir // C-Funktion ------------------------------------------------------------
79*cdf0e10cSrcweir 
80*cdf0e10cSrcweir void FillUpWithDefTabs_Impl( long nDefDist, SvxTabStopItem& rTabs )
81*cdf0e10cSrcweir {
82*cdf0e10cSrcweir 	if( rTabs.Count() )
83*cdf0e10cSrcweir 		return;
84*cdf0e10cSrcweir 	{
85*cdf0e10cSrcweir 		SvxTabStop aSwTabStop( nDefDist, SVX_TAB_ADJUST_DEFAULT );
86*cdf0e10cSrcweir 		rTabs.Insert( aSwTabStop );
87*cdf0e10cSrcweir 	}
88*cdf0e10cSrcweir }
89*cdf0e10cSrcweir 
90*cdf0e10cSrcweir // class TabWin_Impl -----------------------------------------------------
91*cdf0e10cSrcweir 
92*cdf0e10cSrcweir void TabWin_Impl::Paint( const Rectangle& )
93*cdf0e10cSrcweir {
94*cdf0e10cSrcweir 	// Tabulatoren malen
95*cdf0e10cSrcweir 	Point aPnt;
96*cdf0e10cSrcweir 	Size aSize = GetOutputSizePixel();
97*cdf0e10cSrcweir 	aPnt.X() = aSize.Width() / 2;
98*cdf0e10cSrcweir 	aPnt.Y() = aSize.Height() / 2;
99*cdf0e10cSrcweir 	Ruler::DrawTab( this, aPnt, nTabStyle );
100*cdf0e10cSrcweir }
101*cdf0e10cSrcweir 
102*cdf0e10cSrcweir // class SvxTabulatorTabPage ---------------------------------------------
103*cdf0e10cSrcweir 
104*cdf0e10cSrcweir SvxTabulatorTabPage::SvxTabulatorTabPage( Window* pParent,
105*cdf0e10cSrcweir 										  const SfxItemSet& rAttr ):
106*cdf0e10cSrcweir 
107*cdf0e10cSrcweir 	SfxTabPage( pParent, CUI_RES( RID_SVXPAGE_TABULATOR ), rAttr ),
108*cdf0e10cSrcweir 
109*cdf0e10cSrcweir     aTabLabel       ( this, CUI_RES( FL_TABPOS ) ),
110*cdf0e10cSrcweir 	aTabBox         ( this, CUI_RES( ED_TABPOS ) ),
111*cdf0e10cSrcweir     aTabLabelVert   ( this, CUI_RES( FL_TABPOS_VERT ) ),
112*cdf0e10cSrcweir     aTabTypeLabel   ( this, CUI_RES( FL_TABTYPE ) ),
113*cdf0e10cSrcweir 	aLeftTab        ( this, CUI_RES( BTN_TABTYPE_LEFT ) ),
114*cdf0e10cSrcweir 	aRightTab       ( this, CUI_RES( BTN_TABTYPE_RIGHT ) ),
115*cdf0e10cSrcweir 	aCenterTab      ( this, CUI_RES( BTN_TABTYPE_CENTER ) ),
116*cdf0e10cSrcweir 	aDezTab         ( this, CUI_RES( BTN_TABTYPE_DECIMAL ) ),
117*cdf0e10cSrcweir     pLeftWin        ( new TabWin_Impl( this, CUI_RES( WIN_TABLEFT ), (sal_uInt16)(RULER_TAB_LEFT|WB_HORZ) ) ),
118*cdf0e10cSrcweir     pRightWin       ( new TabWin_Impl( this, CUI_RES( WIN_TABRIGHT ), (sal_uInt16)(RULER_TAB_RIGHT|WB_HORZ) ) ),
119*cdf0e10cSrcweir     pCenterWin      ( new TabWin_Impl( this, CUI_RES( WIN_TABCENTER ), (sal_uInt16)(RULER_TAB_CENTER|WB_HORZ) ) ),
120*cdf0e10cSrcweir     pDezWin         ( new TabWin_Impl( this, CUI_RES( WIN_TABDECIMAL ), (sal_uInt16)(RULER_TAB_DECIMAL|WB_HORZ) ) ),
121*cdf0e10cSrcweir     aDezCharLabel   ( this, CUI_RES( FT_TABTYPE_DECCHAR ) ),
122*cdf0e10cSrcweir     aDezChar        ( this, CUI_RES( ED_TABTYPE_DECCHAR ) ),
123*cdf0e10cSrcweir     aFillLabel      ( this, CUI_RES( FL_FILLCHAR ) ),
124*cdf0e10cSrcweir 	aNoFillChar     ( this, CUI_RES( BTN_FILLCHAR_NO ) ),
125*cdf0e10cSrcweir 	aFillPoints     ( this, CUI_RES( BTN_FILLCHAR_POINTS ) ),
126*cdf0e10cSrcweir 	aFillDashLine   ( this, CUI_RES( BTN_FILLCHAR_DASHLINE ) ),
127*cdf0e10cSrcweir 	aFillSolidLine  ( this, CUI_RES( BTN_FILLCHAR_UNDERSCORE ) ),
128*cdf0e10cSrcweir 	aFillSpecial    ( this, CUI_RES( BTN_FILLCHAR_OTHER ) ),
129*cdf0e10cSrcweir 	aFillChar       ( this, CUI_RES( ED_FILLCHAR_OTHER ) ),
130*cdf0e10cSrcweir 	aNewBtn         ( this, CUI_RES( BTN_NEW ) ),
131*cdf0e10cSrcweir 	aDelAllBtn      ( this, CUI_RES( BTN_DELALL ) ),
132*cdf0e10cSrcweir 	aDelBtn         ( this, CUI_RES( BTN_DEL ) ),
133*cdf0e10cSrcweir 
134*cdf0e10cSrcweir     aAktTab     ( 0 ),
135*cdf0e10cSrcweir     aNewTabs    ( 0, 0, SVX_TAB_ADJUST_LEFT, GetWhich( SID_ATTR_TABSTOP ) ),
136*cdf0e10cSrcweir     nDefDist    ( 0 ),
137*cdf0e10cSrcweir     eDefUnit( FUNIT_100TH_MM ),
138*cdf0e10cSrcweir     bCheck      ( sal_False )
139*cdf0e10cSrcweir 
140*cdf0e10cSrcweir {
141*cdf0e10cSrcweir     SvtCJKOptions aCJKOptions;
142*cdf0e10cSrcweir     if(aCJKOptions.IsAsianTypographyEnabled())
143*cdf0e10cSrcweir     {
144*cdf0e10cSrcweir         aLeftTab  .SetText(String(CUI_RES(   ST_LEFTTAB_ASIAN )));
145*cdf0e10cSrcweir         aRightTab .SetText(String(CUI_RES(   ST_RIGHTTAB_ASIAN )));
146*cdf0e10cSrcweir     }
147*cdf0e10cSrcweir 
148*cdf0e10cSrcweir 	aFillChar.SetAccessibleName(String(CUI_RES(   ST_FILLCHAR_OTHER )));
149*cdf0e10cSrcweir     // diese Page braucht ExchangeSupport
150*cdf0e10cSrcweir 	SetExchangeSupport();
151*cdf0e10cSrcweir 
152*cdf0e10cSrcweir 
153*cdf0e10cSrcweir 	// Metrik einstellen
154*cdf0e10cSrcweir 	FieldUnit eFUnit = GetModuleFieldUnit( rAttr );
155*cdf0e10cSrcweir 	SetFieldUnit( aTabBox, eFUnit );
156*cdf0e10cSrcweir 
157*cdf0e10cSrcweir 	// Buttons initialisieren
158*cdf0e10cSrcweir 	aNewBtn.SetClickHdl( LINK( this,SvxTabulatorTabPage, NewHdl_Impl ) );
159*cdf0e10cSrcweir 	aDelBtn.SetClickHdl( LINK( this,SvxTabulatorTabPage, DelHdl_Impl ) );
160*cdf0e10cSrcweir 	aDelAllBtn.SetClickHdl( LINK( this,SvxTabulatorTabPage, DelAllHdl_Impl ) );
161*cdf0e10cSrcweir 
162*cdf0e10cSrcweir 	Link aLink = LINK( this, SvxTabulatorTabPage, TabTypeCheckHdl_Impl );
163*cdf0e10cSrcweir 	aLeftTab.SetClickHdl( aLink );
164*cdf0e10cSrcweir 	aRightTab.SetClickHdl( aLink );
165*cdf0e10cSrcweir 	aDezTab.SetClickHdl( aLink );
166*cdf0e10cSrcweir 	aCenterTab.SetClickHdl( aLink );
167*cdf0e10cSrcweir 
168*cdf0e10cSrcweir 	aDezChar.SetLoseFocusHdl( LINK( this,  SvxTabulatorTabPage, GetDezCharHdl_Impl ) );
169*cdf0e10cSrcweir 	aDezChar.SetMaxTextLen(1);
170*cdf0e10cSrcweir 	aDezChar.Disable();
171*cdf0e10cSrcweir 	aDezCharLabel.Disable();
172*cdf0e10cSrcweir 
173*cdf0e10cSrcweir 	aLink = LINK( this, SvxTabulatorTabPage, FillTypeCheckHdl_Impl );
174*cdf0e10cSrcweir 	aNoFillChar.SetClickHdl( aLink );
175*cdf0e10cSrcweir 	aFillPoints.SetClickHdl( aLink );
176*cdf0e10cSrcweir 	aFillDashLine.SetClickHdl( aLink );
177*cdf0e10cSrcweir 	aFillSolidLine.SetClickHdl( aLink );
178*cdf0e10cSrcweir 	aFillSpecial.SetClickHdl( aLink );
179*cdf0e10cSrcweir 	aFillChar.SetLoseFocusHdl( LINK( this,  SvxTabulatorTabPage, GetFillCharHdl_Impl ) );
180*cdf0e10cSrcweir 	aFillChar.SetMaxTextLen(1);
181*cdf0e10cSrcweir 	aFillChar.Disable();
182*cdf0e10cSrcweir 
183*cdf0e10cSrcweir 	aTabBox.SetDoubleClickHdl( LINK( this, SvxTabulatorTabPage, SelectHdl_Impl ) );
184*cdf0e10cSrcweir 	aTabBox.SetModifyHdl( LINK( this, SvxTabulatorTabPage, ModifyHdl_Impl ) );
185*cdf0e10cSrcweir 
186*cdf0e10cSrcweir 	aLeftTab.SetAccessibleRelationMemberOf( &aTabTypeLabel );
187*cdf0e10cSrcweir 	aRightTab.SetAccessibleRelationMemberOf( &aTabTypeLabel );
188*cdf0e10cSrcweir 	aCenterTab.SetAccessibleRelationMemberOf( &aTabTypeLabel );
189*cdf0e10cSrcweir 	aDezTab.SetAccessibleRelationMemberOf( &aTabTypeLabel );
190*cdf0e10cSrcweir 	aDezCharLabel.SetAccessibleRelationMemberOf( &aTabTypeLabel );
191*cdf0e10cSrcweir 	aDezChar.SetAccessibleRelationMemberOf( &aTabTypeLabel );
192*cdf0e10cSrcweir 
193*cdf0e10cSrcweir 	aNoFillChar.SetAccessibleRelationMemberOf( &aFillLabel );
194*cdf0e10cSrcweir 	aFillPoints.SetAccessibleRelationMemberOf( &aFillLabel );
195*cdf0e10cSrcweir 	aFillDashLine.SetAccessibleRelationMemberOf( &aFillLabel );
196*cdf0e10cSrcweir 	aFillSolidLine.SetAccessibleRelationMemberOf( &aFillLabel );
197*cdf0e10cSrcweir 	aFillSpecial.SetAccessibleRelationMemberOf( &aFillLabel );
198*cdf0e10cSrcweir 	aFillChar.SetAccessibleRelationMemberOf( &aFillLabel );
199*cdf0e10cSrcweir 
200*cdf0e10cSrcweir 	aFillChar.SetAccessibleRelationLabeledBy(&aFillSpecial);
201*cdf0e10cSrcweir 
202*cdf0e10cSrcweir     // das Default-Dezimalzeichen vom System holen
203*cdf0e10cSrcweir 	LocaleDataWrapper aLocaleWrapper( ::comphelper::getProcessServiceFactory(), Application::GetSettings().GetLocale() );
204*cdf0e10cSrcweir 	aAktTab.GetDecimal() = aLocaleWrapper.getNumDecimalSep().GetChar(0);
205*cdf0e10cSrcweir 	FreeResource();
206*cdf0e10cSrcweir }
207*cdf0e10cSrcweir 
208*cdf0e10cSrcweir // -----------------------------------------------------------------------
209*cdf0e10cSrcweir 
210*cdf0e10cSrcweir SvxTabulatorTabPage::~SvxTabulatorTabPage()
211*cdf0e10cSrcweir {
212*cdf0e10cSrcweir 	delete pLeftWin;
213*cdf0e10cSrcweir 	delete pRightWin;
214*cdf0e10cSrcweir 	delete pCenterWin;
215*cdf0e10cSrcweir 	delete pDezWin;
216*cdf0e10cSrcweir }
217*cdf0e10cSrcweir 
218*cdf0e10cSrcweir // -----------------------------------------------------------------------
219*cdf0e10cSrcweir 
220*cdf0e10cSrcweir sal_uInt16* SvxTabulatorTabPage::GetRanges()
221*cdf0e10cSrcweir {
222*cdf0e10cSrcweir 	return pRanges;
223*cdf0e10cSrcweir }
224*cdf0e10cSrcweir 
225*cdf0e10cSrcweir // -----------------------------------------------------------------------
226*cdf0e10cSrcweir 
227*cdf0e10cSrcweir sal_Bool SvxTabulatorTabPage::FillItemSet( SfxItemSet& rSet )
228*cdf0e10cSrcweir {
229*cdf0e10cSrcweir 	sal_Bool bModified = sal_False;
230*cdf0e10cSrcweir 
231*cdf0e10cSrcweir 	// Hier die Werte aus den Controls eintueten
232*cdf0e10cSrcweir 	if ( aNewBtn.IsEnabled() )
233*cdf0e10cSrcweir 		NewHdl_Impl( 0 );
234*cdf0e10cSrcweir 
235*cdf0e10cSrcweir 	// call at first the LoseFocus-Handler
236*cdf0e10cSrcweir 	GetDezCharHdl_Impl( &aDezChar );
237*cdf0e10cSrcweir 	GetFillCharHdl_Impl( &aFillChar );
238*cdf0e10cSrcweir 
239*cdf0e10cSrcweir 	FillUpWithDefTabs_Impl( nDefDist, aNewTabs );
240*cdf0e10cSrcweir 	SfxItemPool* pPool = rSet.GetPool();
241*cdf0e10cSrcweir 	MapUnit eUnit = (MapUnit)pPool->GetMetric( GetWhich( SID_ATTR_TABSTOP ) );
242*cdf0e10cSrcweir 	const SfxPoolItem* pOld = GetOldItem( rSet, SID_ATTR_TABSTOP );
243*cdf0e10cSrcweir 
244*cdf0e10cSrcweir     if ( MAP_100TH_MM != eUnit )
245*cdf0e10cSrcweir 	{
246*cdf0e10cSrcweir 		// Wenn sich im ItemSet ein LRSpaceItem mit negativen Erstzeileneinzug
247*cdf0e10cSrcweir 		// befindet, muss im TabStopItem auf der Position 0 ein DefTab sein.
248*cdf0e10cSrcweir 		const SfxPoolItem* pLRSpace;
249*cdf0e10cSrcweir 		// wenn nicht im neuen Set, dann vielleicht im alten
250*cdf0e10cSrcweir 		if ( SFX_ITEM_SET !=
251*cdf0e10cSrcweir 			 rSet.GetItemState( GetWhich( SID_ATTR_LRSPACE ), sal_True, &pLRSpace ) )
252*cdf0e10cSrcweir 			pLRSpace = GetOldItem( rSet, SID_ATTR_LRSPACE );
253*cdf0e10cSrcweir 
254*cdf0e10cSrcweir 		if ( pLRSpace && ( (SvxLRSpaceItem*)pLRSpace )->GetTxtFirstLineOfst() < 0 )
255*cdf0e10cSrcweir 		{
256*cdf0e10cSrcweir 			SvxTabStop aNull( 0, SVX_TAB_ADJUST_DEFAULT );
257*cdf0e10cSrcweir 			aNewTabs.Insert( aNull );
258*cdf0e10cSrcweir 		}
259*cdf0e10cSrcweir 
260*cdf0e10cSrcweir 		SvxTabStopItem aTmp( aNewTabs );
261*cdf0e10cSrcweir 		aTmp.Remove( 0, aTmp.Count() );
262*cdf0e10cSrcweir 
263*cdf0e10cSrcweir 		for ( sal_uInt16 i = 0; i < aNewTabs.Count(); ++i )
264*cdf0e10cSrcweir 		{
265*cdf0e10cSrcweir 			SvxTabStop aTmpStop = aNewTabs[i];
266*cdf0e10cSrcweir 			aTmpStop.GetTabPos() =
267*cdf0e10cSrcweir                 LogicToLogic( aTmpStop.GetTabPos(), MAP_100TH_MM, eUnit );
268*cdf0e10cSrcweir 			aTmp.Insert( aTmpStop );
269*cdf0e10cSrcweir 		}
270*cdf0e10cSrcweir 
271*cdf0e10cSrcweir 		if ( !pOld || !( *( (SvxTabStopItem*)pOld ) == aTmp ) )
272*cdf0e10cSrcweir 		{
273*cdf0e10cSrcweir 			rSet.Put( aTmp );
274*cdf0e10cSrcweir 			bModified = sal_True;
275*cdf0e10cSrcweir 		}
276*cdf0e10cSrcweir 	}
277*cdf0e10cSrcweir 	else if ( !pOld || !( *( (SvxTabStopItem*)pOld ) == aNewTabs ) )
278*cdf0e10cSrcweir 	{
279*cdf0e10cSrcweir 		rSet.Put( aNewTabs );
280*cdf0e10cSrcweir 		bModified = sal_True;
281*cdf0e10cSrcweir 	}
282*cdf0e10cSrcweir 	return bModified;
283*cdf0e10cSrcweir }
284*cdf0e10cSrcweir 
285*cdf0e10cSrcweir // -----------------------------------------------------------------------
286*cdf0e10cSrcweir 
287*cdf0e10cSrcweir SfxTabPage* SvxTabulatorTabPage::Create( Window* pParent,
288*cdf0e10cSrcweir 										 const SfxItemSet& rSet)
289*cdf0e10cSrcweir {
290*cdf0e10cSrcweir 	return ( new SvxTabulatorTabPage( pParent, rSet ) );
291*cdf0e10cSrcweir }
292*cdf0e10cSrcweir 
293*cdf0e10cSrcweir // -----------------------------------------------------------------------
294*cdf0e10cSrcweir 
295*cdf0e10cSrcweir void SvxTabulatorTabPage::Reset( const SfxItemSet& rSet )
296*cdf0e10cSrcweir {
297*cdf0e10cSrcweir 	SfxItemPool* pPool = rSet.GetPool();
298*cdf0e10cSrcweir 	MapUnit eUnit = (MapUnit)pPool->GetMetric( GetWhich( SID_ATTR_TABSTOP ) );
299*cdf0e10cSrcweir 
300*cdf0e10cSrcweir 	// Aktuelle Tabs
301*cdf0e10cSrcweir 	const SfxPoolItem* pItem = GetItem( rSet, SID_ATTR_TABSTOP );
302*cdf0e10cSrcweir 
303*cdf0e10cSrcweir 	if ( pItem )
304*cdf0e10cSrcweir 	{
305*cdf0e10cSrcweir         if ( MAP_100TH_MM != eUnit )
306*cdf0e10cSrcweir 		{
307*cdf0e10cSrcweir 			SvxTabStopItem aTmp( *( (const SvxTabStopItem*)pItem ) );
308*cdf0e10cSrcweir 			aNewTabs.Remove( 0, aNewTabs.Count() );
309*cdf0e10cSrcweir 
310*cdf0e10cSrcweir 			for ( sal_uInt16 i = 0; i < aTmp.Count(); ++i )
311*cdf0e10cSrcweir 			{
312*cdf0e10cSrcweir 				SvxTabStop aTmpStop = aTmp[i];
313*cdf0e10cSrcweir 				aTmpStop.GetTabPos() =
314*cdf0e10cSrcweir                     LogicToLogic( aTmpStop.GetTabPos(), eUnit, MAP_100TH_MM );
315*cdf0e10cSrcweir 				aNewTabs.Insert( aTmpStop );
316*cdf0e10cSrcweir 			}
317*cdf0e10cSrcweir 		}
318*cdf0e10cSrcweir 		else
319*cdf0e10cSrcweir 			aNewTabs = *( (const SvxTabStopItem*)pItem );
320*cdf0e10cSrcweir 	}
321*cdf0e10cSrcweir 	else
322*cdf0e10cSrcweir 		aNewTabs.Remove( 0, aNewTabs.Count() );
323*cdf0e10cSrcweir 
324*cdf0e10cSrcweir 	// Default-Tab - Abstand
325*cdf0e10cSrcweir 	nDefDist = SVX_TAB_DEFDIST;
326*cdf0e10cSrcweir 	pItem = GetItem( rSet, SID_ATTR_TABSTOP_DEFAULTS );
327*cdf0e10cSrcweir 
328*cdf0e10cSrcweir 	if ( pItem )
329*cdf0e10cSrcweir 		nDefDist = LogicToLogic(
330*cdf0e10cSrcweir             (long)((const SfxUInt16Item*)pItem)->GetValue(), eUnit, MAP_100TH_MM );
331*cdf0e10cSrcweir 
332*cdf0e10cSrcweir 	// Aktuell selektierte Tab-Pos
333*cdf0e10cSrcweir 	sal_uInt16 nTabPos = 0;
334*cdf0e10cSrcweir 	pItem = GetItem( rSet, SID_ATTR_TABSTOP_POS );
335*cdf0e10cSrcweir 
336*cdf0e10cSrcweir 	if ( pItem )
337*cdf0e10cSrcweir 		nTabPos = ( (const SfxUInt16Item*)pItem )->GetValue();
338*cdf0e10cSrcweir 
339*cdf0e10cSrcweir 	InitTabPos_Impl( nTabPos );
340*cdf0e10cSrcweir }
341*cdf0e10cSrcweir 
342*cdf0e10cSrcweir // -----------------------------------------------------------------------
343*cdf0e10cSrcweir 
344*cdf0e10cSrcweir void SvxTabulatorTabPage::DisableControls( const sal_uInt16 nFlag )
345*cdf0e10cSrcweir {
346*cdf0e10cSrcweir 	if ( ( TABTYPE_LEFT & nFlag ) == TABTYPE_LEFT )
347*cdf0e10cSrcweir 	{
348*cdf0e10cSrcweir 		aLeftTab.Disable();
349*cdf0e10cSrcweir 		pLeftWin->Disable();
350*cdf0e10cSrcweir 	}
351*cdf0e10cSrcweir 	if ( ( TABTYPE_RIGHT & nFlag ) == TABTYPE_RIGHT )
352*cdf0e10cSrcweir 	{
353*cdf0e10cSrcweir 		aRightTab.Disable();
354*cdf0e10cSrcweir 		pRightWin->Disable();
355*cdf0e10cSrcweir 	}
356*cdf0e10cSrcweir 	if ( ( TABTYPE_CENTER & nFlag ) == TABTYPE_CENTER )
357*cdf0e10cSrcweir 	{
358*cdf0e10cSrcweir 		aCenterTab.Disable();
359*cdf0e10cSrcweir 		pCenterWin->Disable();
360*cdf0e10cSrcweir 	}
361*cdf0e10cSrcweir 	if ( ( TABTYPE_DEZIMAL & nFlag ) == TABTYPE_DEZIMAL )
362*cdf0e10cSrcweir 	{
363*cdf0e10cSrcweir 		aDezTab.Disable();
364*cdf0e10cSrcweir 		pDezWin->Disable();
365*cdf0e10cSrcweir 		aDezCharLabel.Disable();
366*cdf0e10cSrcweir 		aDezChar.Disable();
367*cdf0e10cSrcweir 	}
368*cdf0e10cSrcweir 	if ( ( TABTYPE_ALL & nFlag ) == TABTYPE_ALL )
369*cdf0e10cSrcweir 		aTabTypeLabel.Disable();
370*cdf0e10cSrcweir 	if ( ( TABFILL_NONE & nFlag ) == TABFILL_NONE )
371*cdf0e10cSrcweir 		aNoFillChar.Disable();
372*cdf0e10cSrcweir 	if ( ( TABFILL_POINT & nFlag ) == TABFILL_POINT )
373*cdf0e10cSrcweir 		aFillPoints.Disable();
374*cdf0e10cSrcweir 	if ( ( TABFILL_DASHLINE & nFlag ) == TABFILL_DASHLINE )
375*cdf0e10cSrcweir 		aFillDashLine.Disable();
376*cdf0e10cSrcweir 	if ( ( TABFILL_SOLIDLINE & nFlag ) == TABFILL_SOLIDLINE )
377*cdf0e10cSrcweir 		aFillSolidLine.Disable();
378*cdf0e10cSrcweir 	if ( ( TABFILL_SPECIAL & nFlag ) == TABFILL_SPECIAL )
379*cdf0e10cSrcweir 	{
380*cdf0e10cSrcweir 		aFillSpecial.Disable();
381*cdf0e10cSrcweir 		aFillChar.Disable();
382*cdf0e10cSrcweir 	}
383*cdf0e10cSrcweir 	if ( ( TABFILL_ALL & nFlag ) == TABFILL_ALL )
384*cdf0e10cSrcweir 		aFillLabel.Disable();
385*cdf0e10cSrcweir }
386*cdf0e10cSrcweir 
387*cdf0e10cSrcweir // -----------------------------------------------------------------------
388*cdf0e10cSrcweir 
389*cdf0e10cSrcweir int SvxTabulatorTabPage::DeactivatePage( SfxItemSet* _pSet )
390*cdf0e10cSrcweir {
391*cdf0e10cSrcweir     if ( _pSet )
392*cdf0e10cSrcweir         FillItemSet( *_pSet );
393*cdf0e10cSrcweir 	return LEAVE_PAGE;
394*cdf0e10cSrcweir }
395*cdf0e10cSrcweir 
396*cdf0e10cSrcweir // -----------------------------------------------------------------------
397*cdf0e10cSrcweir 
398*cdf0e10cSrcweir void SvxTabulatorTabPage::InitTabPos_Impl( sal_uInt16 nTabPos )
399*cdf0e10cSrcweir {
400*cdf0e10cSrcweir 	aTabBox.Clear();
401*cdf0e10cSrcweir 
402*cdf0e10cSrcweir     long nOffset = 0;
403*cdf0e10cSrcweir     const SfxPoolItem* pItem = 0;
404*cdf0e10cSrcweir     if ( GetItemSet().GetItemState( SID_ATTR_TABSTOP_OFFSET, sal_True, &pItem )
405*cdf0e10cSrcweir             == SFX_ITEM_SET )
406*cdf0e10cSrcweir     {
407*cdf0e10cSrcweir         nOffset = ( (const SfxInt32Item*)pItem )->GetValue();
408*cdf0e10cSrcweir         MapUnit eUnit = (MapUnit)GetItemSet().GetPool()->GetMetric( GetWhich( SID_ATTR_TABSTOP ) );
409*cdf0e10cSrcweir         nOffset = OutputDevice::LogicToLogic( nOffset, eUnit, MAP_100TH_MM  );
410*cdf0e10cSrcweir     }
411*cdf0e10cSrcweir 
412*cdf0e10cSrcweir     // Aktuelle TabPos korrigieren und Defaults-Tabs
413*cdf0e10cSrcweir 	for ( sal_uInt16 i = 0; i < aNewTabs.Count(); i++ )
414*cdf0e10cSrcweir 	{
415*cdf0e10cSrcweir 		if ( aNewTabs[i].GetAdjustment() != SVX_TAB_ADJUST_DEFAULT )
416*cdf0e10cSrcweir 		{
417*cdf0e10cSrcweir             aTabBox.InsertValue( aTabBox.Normalize(
418*cdf0e10cSrcweir 				aNewTabs[i].GetTabPos() + nOffset ), eDefUnit );
419*cdf0e10cSrcweir 		}
420*cdf0e10cSrcweir 		else
421*cdf0e10cSrcweir 			aNewTabs.Remove( i-- );
422*cdf0e10cSrcweir 	}
423*cdf0e10cSrcweir 
424*cdf0e10cSrcweir 	// aktuellen Tabulator auswaehlen
425*cdf0e10cSrcweir 	const sal_uInt16 nSize = aNewTabs.Count();
426*cdf0e10cSrcweir 
427*cdf0e10cSrcweir 	if ( nTabPos >= nSize )
428*cdf0e10cSrcweir 		nTabPos = 0;
429*cdf0e10cSrcweir 
430*cdf0e10cSrcweir 	// alle RadioButtons erstmal ausschalten
431*cdf0e10cSrcweir 	aLeftTab.Check( sal_True );
432*cdf0e10cSrcweir 	aNoFillChar.Check( sal_True );
433*cdf0e10cSrcweir 
434*cdf0e10cSrcweir 	if( aTabBox.GetEntryCount() > 0 )
435*cdf0e10cSrcweir 	{
436*cdf0e10cSrcweir 		aTabBox.SetText( aTabBox.GetEntry( nTabPos ) );
437*cdf0e10cSrcweir 		aAktTab = aNewTabs[nTabPos];
438*cdf0e10cSrcweir 
439*cdf0e10cSrcweir 		SetFillAndTabType_Impl();
440*cdf0e10cSrcweir 		aNewBtn.Disable();
441*cdf0e10cSrcweir 		aDelBtn.Enable();
442*cdf0e10cSrcweir 	}
443*cdf0e10cSrcweir 	else
444*cdf0e10cSrcweir 	{   // kein Eintrag dann ist 0 der Default-Wert
445*cdf0e10cSrcweir 		aTabBox.SetValue( 0, eDefUnit );
446*cdf0e10cSrcweir 
447*cdf0e10cSrcweir 		aNewBtn.Enable();
448*cdf0e10cSrcweir 		aDelBtn.Disable();
449*cdf0e10cSrcweir 	}
450*cdf0e10cSrcweir }
451*cdf0e10cSrcweir 
452*cdf0e10cSrcweir // -----------------------------------------------------------------------
453*cdf0e10cSrcweir 
454*cdf0e10cSrcweir void SvxTabulatorTabPage::SetFillAndTabType_Impl()
455*cdf0e10cSrcweir {
456*cdf0e10cSrcweir 	RadioButton* pTypeBtn = 0;
457*cdf0e10cSrcweir 	RadioButton* pFillBtn = 0;
458*cdf0e10cSrcweir 
459*cdf0e10cSrcweir 	aDezChar.Disable();
460*cdf0e10cSrcweir 	aDezCharLabel.Disable();
461*cdf0e10cSrcweir 
462*cdf0e10cSrcweir 	if ( aAktTab.GetAdjustment() == SVX_TAB_ADJUST_LEFT )
463*cdf0e10cSrcweir 		pTypeBtn = &aLeftTab;
464*cdf0e10cSrcweir 	else if ( aAktTab.GetAdjustment() == SVX_TAB_ADJUST_RIGHT )
465*cdf0e10cSrcweir 		pTypeBtn = &aRightTab;
466*cdf0e10cSrcweir 	else if ( aAktTab.GetAdjustment() == SVX_TAB_ADJUST_DECIMAL )
467*cdf0e10cSrcweir 	{
468*cdf0e10cSrcweir 		pTypeBtn = &aDezTab;
469*cdf0e10cSrcweir 		aDezChar.Enable();
470*cdf0e10cSrcweir 		aDezCharLabel.Enable();
471*cdf0e10cSrcweir 		aDezChar.SetText( String( (sal_Unicode)aAktTab.GetDecimal() ) );
472*cdf0e10cSrcweir 	}
473*cdf0e10cSrcweir 	else if ( aAktTab.GetAdjustment() == SVX_TAB_ADJUST_CENTER )
474*cdf0e10cSrcweir 		pTypeBtn = &aCenterTab;
475*cdf0e10cSrcweir 
476*cdf0e10cSrcweir 	if ( pTypeBtn )
477*cdf0e10cSrcweir 		pTypeBtn->Check();
478*cdf0e10cSrcweir 
479*cdf0e10cSrcweir 	aFillChar.Disable();
480*cdf0e10cSrcweir 	aFillChar.SetText( String() );
481*cdf0e10cSrcweir 
482*cdf0e10cSrcweir 	if ( aAktTab.GetFill() == ' ' )
483*cdf0e10cSrcweir 		pFillBtn = &aNoFillChar;
484*cdf0e10cSrcweir 	else if ( aAktTab.GetFill() == '-' )
485*cdf0e10cSrcweir 		pFillBtn = &aFillDashLine;
486*cdf0e10cSrcweir 	else if ( aAktTab.GetFill() == '_' )
487*cdf0e10cSrcweir 		pFillBtn = &aFillSolidLine;
488*cdf0e10cSrcweir 	else if ( aAktTab.GetFill() == '.' )
489*cdf0e10cSrcweir 		pFillBtn = &aFillPoints;
490*cdf0e10cSrcweir 	else
491*cdf0e10cSrcweir 	{
492*cdf0e10cSrcweir 		pFillBtn = &aFillSpecial;
493*cdf0e10cSrcweir 		aFillChar.Enable();
494*cdf0e10cSrcweir 		aFillChar.SetText( String( (sal_Unicode)aAktTab.GetFill() ) );
495*cdf0e10cSrcweir 	}
496*cdf0e10cSrcweir 	pFillBtn->Check();
497*cdf0e10cSrcweir }
498*cdf0e10cSrcweir 
499*cdf0e10cSrcweir // -----------------------------------------------------------------------
500*cdf0e10cSrcweir 
501*cdf0e10cSrcweir IMPL_LINK( SvxTabulatorTabPage, NewHdl_Impl, Button *, pBtn )
502*cdf0e10cSrcweir {
503*cdf0e10cSrcweir 	// Einen neuen Hinzufuegen und Selectieren
504*cdf0e10cSrcweir 	// Wert aus der Anzeige holen
505*cdf0e10cSrcweir 	long nVal = static_cast<long>(aTabBox.Denormalize( aTabBox.GetValue( eDefUnit ) ));
506*cdf0e10cSrcweir 
507*cdf0e10cSrcweir 	// Wenn der pBtn == 0 && der Value == 0 dann keinen Tab Erzeugen
508*cdf0e10cSrcweir 	// weil ueber OK erzeugt
509*cdf0e10cSrcweir 	if ( nVal == 0 && pBtn == 0 )
510*cdf0e10cSrcweir 		return 0;
511*cdf0e10cSrcweir 
512*cdf0e10cSrcweir 	long nOffset = 0;
513*cdf0e10cSrcweir 	const SfxPoolItem* pItem = 0;
514*cdf0e10cSrcweir 
515*cdf0e10cSrcweir 	if ( GetItemSet().GetItemState( SID_ATTR_TABSTOP_OFFSET, sal_True, &pItem ) ==
516*cdf0e10cSrcweir 		 SFX_ITEM_SET )
517*cdf0e10cSrcweir 	{
518*cdf0e10cSrcweir 		nOffset = ( (const SfxInt32Item*)pItem )->GetValue();
519*cdf0e10cSrcweir         MapUnit eUnit = (MapUnit)GetItemSet().GetPool()->GetMetric( GetWhich( SID_ATTR_TABSTOP ) );
520*cdf0e10cSrcweir         nOffset = OutputDevice::LogicToLogic( nOffset, eUnit, MAP_100TH_MM  );
521*cdf0e10cSrcweir 	}
522*cdf0e10cSrcweir 	const long nReal = nVal - nOffset;
523*cdf0e10cSrcweir 	sal_uInt16 nSize = aTabBox.GetEntryCount();
524*cdf0e10cSrcweir 
525*cdf0e10cSrcweir 	sal_uInt16 i;
526*cdf0e10cSrcweir 	for( i = 0; i < nSize; i++ )
527*cdf0e10cSrcweir 	{
528*cdf0e10cSrcweir 		if ( nReal < aNewTabs[i].GetTabPos() )
529*cdf0e10cSrcweir 			break;
530*cdf0e10cSrcweir 	}
531*cdf0e10cSrcweir 
532*cdf0e10cSrcweir 	// ListBox-Eintrag vornehmen
533*cdf0e10cSrcweir 	aTabBox.InsertValue( aTabBox.Normalize( nVal ), eDefUnit, i );
534*cdf0e10cSrcweir 	aAktTab.GetTabPos() = nReal;
535*cdf0e10cSrcweir 	SvxTabAdjust eAdj = SVX_TAB_ADJUST_LEFT;
536*cdf0e10cSrcweir 
537*cdf0e10cSrcweir 	if ( aRightTab.IsChecked() )
538*cdf0e10cSrcweir 		eAdj = SVX_TAB_ADJUST_RIGHT;
539*cdf0e10cSrcweir 	else if ( aCenterTab.IsChecked() )
540*cdf0e10cSrcweir 		eAdj = SVX_TAB_ADJUST_CENTER;
541*cdf0e10cSrcweir 	else if ( aDezTab.IsChecked() )
542*cdf0e10cSrcweir 		eAdj = SVX_TAB_ADJUST_DECIMAL;
543*cdf0e10cSrcweir 
544*cdf0e10cSrcweir 	aAktTab.GetAdjustment() = eAdj;
545*cdf0e10cSrcweir 	aNewTabs.Insert( aAktTab );
546*cdf0e10cSrcweir 
547*cdf0e10cSrcweir 	aNewBtn.Disable();
548*cdf0e10cSrcweir 	aDelBtn.Enable();
549*cdf0e10cSrcweir 	aTabBox.GrabFocus();
550*cdf0e10cSrcweir 
551*cdf0e10cSrcweir 	// falls kein RadioButton geclickt wurde,
552*cdf0e10cSrcweir 	// muss trotzdem geputtet werden
553*cdf0e10cSrcweir 	bCheck |= sal_True;
554*cdf0e10cSrcweir     // set the selection into the position Edit
555*cdf0e10cSrcweir     aTabBox.SetSelection(Selection(0, aTabBox.GetText().Len()));
556*cdf0e10cSrcweir 	return 0;
557*cdf0e10cSrcweir }
558*cdf0e10cSrcweir 
559*cdf0e10cSrcweir // -----------------------------------------------------------------------
560*cdf0e10cSrcweir 
561*cdf0e10cSrcweir IMPL_LINK( SvxTabulatorTabPage, DelHdl_Impl, Button *, EMPTYARG )
562*cdf0e10cSrcweir {
563*cdf0e10cSrcweir 	sal_uInt16 nPos = aTabBox.GetValuePos( aTabBox.GetValue() );
564*cdf0e10cSrcweir 
565*cdf0e10cSrcweir 	if ( nPos == COMBOBOX_ENTRY_NOTFOUND )
566*cdf0e10cSrcweir 		return 0;
567*cdf0e10cSrcweir 
568*cdf0e10cSrcweir 	if ( aTabBox.GetEntryCount() == 1 )
569*cdf0e10cSrcweir 	{
570*cdf0e10cSrcweir 		DelAllHdl_Impl( 0 );
571*cdf0e10cSrcweir 		return 0;
572*cdf0e10cSrcweir 	}
573*cdf0e10cSrcweir 
574*cdf0e10cSrcweir 	// Tab loeschen
575*cdf0e10cSrcweir 	aTabBox.RemoveEntry( nPos );
576*cdf0e10cSrcweir 	aNewTabs.Remove( nPos );
577*cdf0e10cSrcweir 
578*cdf0e10cSrcweir 	// aAktTab neu setzen
579*cdf0e10cSrcweir 	const sal_uInt16 nSize = aNewTabs.Count();
580*cdf0e10cSrcweir 
581*cdf0e10cSrcweir 	if ( nSize > 0 )
582*cdf0e10cSrcweir 	{
583*cdf0e10cSrcweir 		// Pos korrigieren
584*cdf0e10cSrcweir 		nPos = ( ( nSize - 1 ) >= nPos) ? nPos : nPos - 1;
585*cdf0e10cSrcweir 		aTabBox.SetValue( aTabBox.GetValue( nPos ) );
586*cdf0e10cSrcweir 		aAktTab = aNewTabs[nPos];
587*cdf0e10cSrcweir 	}
588*cdf0e10cSrcweir 
589*cdf0e10cSrcweir 	// Falls keine Tabs Enable Disable Controls
590*cdf0e10cSrcweir 	if ( aTabBox.GetEntryCount() == 0 )
591*cdf0e10cSrcweir 	{
592*cdf0e10cSrcweir 		aDelBtn.Disable();
593*cdf0e10cSrcweir 		aNewBtn.Enable();
594*cdf0e10cSrcweir 		aTabBox.GrabFocus();
595*cdf0e10cSrcweir 	}
596*cdf0e10cSrcweir 
597*cdf0e10cSrcweir 	// falls kein RadioButton geclickt wurde,
598*cdf0e10cSrcweir 	// muss trotzdem geputtet werden
599*cdf0e10cSrcweir 	bCheck |= sal_True;
600*cdf0e10cSrcweir 	return 0;
601*cdf0e10cSrcweir }
602*cdf0e10cSrcweir 
603*cdf0e10cSrcweir // -----------------------------------------------------------------------
604*cdf0e10cSrcweir 
605*cdf0e10cSrcweir IMPL_LINK( SvxTabulatorTabPage, DelAllHdl_Impl, Button *, EMPTYARG )
606*cdf0e10cSrcweir {
607*cdf0e10cSrcweir 	if ( aNewTabs.Count() )
608*cdf0e10cSrcweir 	{
609*cdf0e10cSrcweir 		aNewTabs = SvxTabStopItem( 0 );
610*cdf0e10cSrcweir 		InitTabPos_Impl();
611*cdf0e10cSrcweir 
612*cdf0e10cSrcweir 		// damit in FillItemSet() geputtet wird
613*cdf0e10cSrcweir 		bCheck |= sal_True;
614*cdf0e10cSrcweir 	}
615*cdf0e10cSrcweir 	return 0;
616*cdf0e10cSrcweir }
617*cdf0e10cSrcweir 
618*cdf0e10cSrcweir // -----------------------------------------------------------------------
619*cdf0e10cSrcweir 
620*cdf0e10cSrcweir IMPL_LINK( SvxTabulatorTabPage, TabTypeCheckHdl_Impl, RadioButton *, pBox )
621*cdf0e10cSrcweir {
622*cdf0e10cSrcweir 	bCheck |= sal_True;
623*cdf0e10cSrcweir 	SvxTabAdjust eAdj;
624*cdf0e10cSrcweir 	aDezChar.Disable();
625*cdf0e10cSrcweir 	aDezCharLabel.Disable();
626*cdf0e10cSrcweir 	aDezChar.SetText( String() );
627*cdf0e10cSrcweir 
628*cdf0e10cSrcweir 	if ( pBox == &aLeftTab )
629*cdf0e10cSrcweir 		eAdj = SVX_TAB_ADJUST_LEFT;
630*cdf0e10cSrcweir 	else if ( pBox == &aRightTab )
631*cdf0e10cSrcweir 		eAdj = SVX_TAB_ADJUST_RIGHT;
632*cdf0e10cSrcweir 	else if ( pBox == &aCenterTab )
633*cdf0e10cSrcweir 		eAdj = SVX_TAB_ADJUST_CENTER;
634*cdf0e10cSrcweir 	else
635*cdf0e10cSrcweir 	{
636*cdf0e10cSrcweir 		eAdj = SVX_TAB_ADJUST_DECIMAL;
637*cdf0e10cSrcweir 		aDezChar.Enable();
638*cdf0e10cSrcweir 		aDezCharLabel.Enable();
639*cdf0e10cSrcweir 		aDezChar.SetText( String( (sal_Unicode)aAktTab.GetDecimal() ) );
640*cdf0e10cSrcweir 	}
641*cdf0e10cSrcweir 
642*cdf0e10cSrcweir 	aAktTab.GetAdjustment() = eAdj;
643*cdf0e10cSrcweir 	sal_uInt16 nPos = aTabBox.GetValuePos( aTabBox.GetValue( eDefUnit ), eDefUnit );
644*cdf0e10cSrcweir 
645*cdf0e10cSrcweir 	if ( nPos != COMBOBOX_ENTRY_NOTFOUND )
646*cdf0e10cSrcweir 	{
647*cdf0e10cSrcweir 		aNewTabs.Remove( nPos );
648*cdf0e10cSrcweir 		aNewTabs.Insert( aAktTab );
649*cdf0e10cSrcweir 	}
650*cdf0e10cSrcweir 	return 0;
651*cdf0e10cSrcweir }
652*cdf0e10cSrcweir 
653*cdf0e10cSrcweir // -----------------------------------------------------------------------
654*cdf0e10cSrcweir 
655*cdf0e10cSrcweir IMPL_LINK( SvxTabulatorTabPage, FillTypeCheckHdl_Impl, RadioButton *, pBox )
656*cdf0e10cSrcweir {
657*cdf0e10cSrcweir 	bCheck |= sal_True;
658*cdf0e10cSrcweir 	sal_uInt8 cFill = ' ';
659*cdf0e10cSrcweir 	aFillChar.SetText( String() );
660*cdf0e10cSrcweir 	aFillChar.Disable();
661*cdf0e10cSrcweir 
662*cdf0e10cSrcweir 	if( pBox == &aFillSpecial )
663*cdf0e10cSrcweir 		aFillChar.Enable();
664*cdf0e10cSrcweir 	else if ( pBox == &aNoFillChar )
665*cdf0e10cSrcweir 		cFill = ' ';
666*cdf0e10cSrcweir 	else if ( pBox == &aFillSolidLine )
667*cdf0e10cSrcweir 		cFill = '_';
668*cdf0e10cSrcweir 	else if ( pBox == &aFillPoints )
669*cdf0e10cSrcweir 		cFill = '.';
670*cdf0e10cSrcweir 	else if ( pBox == &aFillDashLine )
671*cdf0e10cSrcweir 		cFill = '-';
672*cdf0e10cSrcweir 
673*cdf0e10cSrcweir 	aAktTab.GetFill() = cFill;
674*cdf0e10cSrcweir 	sal_uInt16 nPos = aTabBox.GetValuePos( aTabBox.GetValue( eDefUnit ), eDefUnit );
675*cdf0e10cSrcweir 
676*cdf0e10cSrcweir 	if ( nPos != COMBOBOX_ENTRY_NOTFOUND )
677*cdf0e10cSrcweir 	{
678*cdf0e10cSrcweir 		aNewTabs.Remove( nPos );
679*cdf0e10cSrcweir 		aNewTabs.Insert( aAktTab );
680*cdf0e10cSrcweir 	}
681*cdf0e10cSrcweir 	return 0;
682*cdf0e10cSrcweir }
683*cdf0e10cSrcweir 
684*cdf0e10cSrcweir // -----------------------------------------------------------------------
685*cdf0e10cSrcweir 
686*cdf0e10cSrcweir IMPL_LINK( SvxTabulatorTabPage, GetFillCharHdl_Impl, Edit *, pEdit )
687*cdf0e10cSrcweir {
688*cdf0e10cSrcweir 	String aChar( pEdit->GetText() );
689*cdf0e10cSrcweir 
690*cdf0e10cSrcweir 	if ( aChar.Len() > 0 )
691*cdf0e10cSrcweir 		aAktTab.GetFill() = aChar.GetChar( 0 );
692*cdf0e10cSrcweir 
693*cdf0e10cSrcweir 	const sal_uInt16 nPos = aTabBox.GetValuePos( aTabBox.GetValue( eDefUnit ), eDefUnit);
694*cdf0e10cSrcweir 	if ( nPos != COMBOBOX_ENTRY_NOTFOUND )
695*cdf0e10cSrcweir 	{
696*cdf0e10cSrcweir 		aNewTabs.Remove( nPos );
697*cdf0e10cSrcweir 		aNewTabs.Insert( aAktTab );
698*cdf0e10cSrcweir 	}
699*cdf0e10cSrcweir 	return 0;
700*cdf0e10cSrcweir }
701*cdf0e10cSrcweir 
702*cdf0e10cSrcweir // -----------------------------------------------------------------------
703*cdf0e10cSrcweir 
704*cdf0e10cSrcweir IMPL_LINK( SvxTabulatorTabPage, GetDezCharHdl_Impl, Edit *, pEdit )
705*cdf0e10cSrcweir {
706*cdf0e10cSrcweir 	String aChar( pEdit->GetText() );
707*cdf0e10cSrcweir     if ( aChar.Len() > 0 && ( aChar.GetChar( 0 ) >= ' '))
708*cdf0e10cSrcweir 		aAktTab.GetDecimal() = aChar.GetChar( 0 );
709*cdf0e10cSrcweir 
710*cdf0e10cSrcweir 	sal_uInt16 nPos = aTabBox.GetValuePos( aTabBox.GetValue( eDefUnit ), eDefUnit );
711*cdf0e10cSrcweir 	if ( nPos != COMBOBOX_ENTRY_NOTFOUND )
712*cdf0e10cSrcweir 	{
713*cdf0e10cSrcweir 		aNewTabs.Remove( nPos );
714*cdf0e10cSrcweir 		aNewTabs.Insert( aAktTab );
715*cdf0e10cSrcweir 	}
716*cdf0e10cSrcweir 	return 0;
717*cdf0e10cSrcweir }
718*cdf0e10cSrcweir 
719*cdf0e10cSrcweir // -----------------------------------------------------------------------
720*cdf0e10cSrcweir 
721*cdf0e10cSrcweir IMPL_LINK( SvxTabulatorTabPage, SelectHdl_Impl, MetricBox *, EMPTYARG )
722*cdf0e10cSrcweir {
723*cdf0e10cSrcweir 	sal_uInt16 nPos = aTabBox.GetValuePos( aTabBox.GetValue( eDefUnit ), eDefUnit );
724*cdf0e10cSrcweir 	if ( nPos != COMBOBOX_ENTRY_NOTFOUND )
725*cdf0e10cSrcweir 	{
726*cdf0e10cSrcweir 		aAktTab = aNewTabs[nPos];
727*cdf0e10cSrcweir 		aNewBtn.Disable();
728*cdf0e10cSrcweir 		SetFillAndTabType_Impl();
729*cdf0e10cSrcweir 	}
730*cdf0e10cSrcweir 	return 0;
731*cdf0e10cSrcweir }
732*cdf0e10cSrcweir 
733*cdf0e10cSrcweir // -----------------------------------------------------------------------
734*cdf0e10cSrcweir 
735*cdf0e10cSrcweir IMPL_LINK( SvxTabulatorTabPage, ModifyHdl_Impl, MetricBox *, EMPTYARG )
736*cdf0e10cSrcweir {
737*cdf0e10cSrcweir 	sal_uInt16 nPos = aTabBox.GetValuePos( aTabBox.GetValue( eDefUnit ), eDefUnit );
738*cdf0e10cSrcweir 	if ( nPos != COMBOBOX_ENTRY_NOTFOUND )
739*cdf0e10cSrcweir 	{
740*cdf0e10cSrcweir 		aAktTab = aNewTabs[nPos];
741*cdf0e10cSrcweir 		SetFillAndTabType_Impl();
742*cdf0e10cSrcweir 
743*cdf0e10cSrcweir 		aAktTab.GetTabPos() =
744*cdf0e10cSrcweir 			static_cast<long>(aTabBox.Denormalize( aTabBox.GetValue( eDefUnit ) ));
745*cdf0e10cSrcweir 
746*cdf0e10cSrcweir 		aNewBtn.Disable();
747*cdf0e10cSrcweir 		aDelBtn.Enable();
748*cdf0e10cSrcweir 		return 0;
749*cdf0e10cSrcweir 	}
750*cdf0e10cSrcweir 	aNewBtn.Enable();
751*cdf0e10cSrcweir 	aDelBtn.Disable();
752*cdf0e10cSrcweir 	return 0;
753*cdf0e10cSrcweir }
754*cdf0e10cSrcweir //add CHINA001 Begin
755*cdf0e10cSrcweir void		SvxTabulatorTabPage::PageCreated(SfxAllItemSet aSet)
756*cdf0e10cSrcweir {
757*cdf0e10cSrcweir 	SFX_ITEMSET_ARG	(&aSet,pControlItem,SfxUInt16Item,SID_SVXTABULATORTABPAGE_CONTROLFLAGS,sal_False);
758*cdf0e10cSrcweir 	if (pControlItem)
759*cdf0e10cSrcweir 		DisableControls(pControlItem->GetValue());
760*cdf0e10cSrcweir }
761*cdf0e10cSrcweir //end of CHINA001
762