xref: /aoo41x/main/cui/source/tabpages/numfmt.cxx (revision cdf0e10c)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 #if !ENABLE_LAYOUT_EXPERIMENTAL
29 //#undef ENABLE_LAYOUT
30 #endif
31 
32 // MARKER(update_precomp.py): autogen include statement, do not remove
33 #include "precompiled_cui.hxx"
34 
35 // include ---------------------------------------------------------------
36 #include <svl/eitem.hxx>
37 #include <svl/intitem.hxx>
38 #include <sfx2/objsh.hxx>
39 #include <vcl/svapp.hxx>
40 #include <unotools/localedatawrapper.hxx>
41 #include <i18npool/lang.h>
42 #include <svx/dialogs.hrc>
43 #define _SVSTDARR_STRINGS
44 #define _SVSTDARR_STRINGSDTOR
45 #include <svl/svstdarr.hxx>
46 #include <svtools/colorcfg.hxx>
47 
48 #define _SVX_NUMFMT_CXX
49 
50 #include <cuires.hrc>
51 #include "numfmt.hrc"
52 
53 #include <svx/numinf.hxx>
54 
55 #include "numfmt.hxx"
56 #include <svx/numfmtsh.hxx>
57 #include <dialmgr.hxx>
58 #include <sfx2/request.hxx> //CHINA001
59 #include <sfx2/app.hxx> //CHINA001
60 #include <sfx2/basedlgs.hxx>
61 #include "svx/flagsdef.hxx" //CHINA001
62 
63 #define NUMKEY_UNDEFINED SAL_MAX_UINT32
64 
65 // static ----------------------------------------------------------------
66 
67 static sal_uInt16 pRanges[] =
68 {
69 	SID_ATTR_NUMBERFORMAT_VALUE,
70 	SID_ATTR_NUMBERFORMAT_INFO,
71 	SID_ATTR_NUMBERFORMAT_NOLANGUAGE,
72 	SID_ATTR_NUMBERFORMAT_NOLANGUAGE,
73     SID_ATTR_NUMBERFORMAT_ONE_AREA,
74     SID_ATTR_NUMBERFORMAT_ONE_AREA,
75     SID_ATTR_NUMBERFORMAT_SOURCE,
76     SID_ATTR_NUMBERFORMAT_SOURCE,
77 	0
78 };
79 
80 /*************************************************************************
81 #*	Methode:		SvxNumberPreviewImpl					Datum:02.10.97
82 #*------------------------------------------------------------------------
83 #*
84 #*  Klasse:		SvxNumberPreview
85 #*
86 #*  Funktion:	Konstruktor der Klasse SvxNumberPreviewImpl
87 #*
88 #*  Input:		Fenster, Resource-ID
89 #*
90 #*	Output:		---
91 #*
92 #************************************************************************/
93 
94 SvxNumberPreviewImpl::SvxNumberPreviewImpl( Window* pParent, const ResId& rResId ) :
95 
96 	Window( pParent, rResId )
97 
98 {
99 	Font aFont( GetFont() );
100 	aFont.SetTransparent( sal_True );
101 	aFont.SetColor( Application::GetSettings().GetStyleSettings().GetFieldColor() );
102 	SetFont( aFont );
103 	InitSettings( sal_True, sal_True );
104     SetBorderStyle( WINDOW_BORDER_MONO );
105 }
106 
107 /*************************************************************************
108 #*	Methode:		SvxNumberPreviewImpl					Datum:02.10.97
109 #*------------------------------------------------------------------------
110 #*
111 #*  Klasse:		SvxNumberPreview
112 #*
113 #*  Funktion:	Destruktor der Klasse SvxNumberPreviewImpl
114 #*
115 #*  Input:		---
116 #*
117 #*	Output:		---
118 #*
119 #************************************************************************/
120 
121 SvxNumberPreviewImpl::~SvxNumberPreviewImpl()
122 {
123 }
124 
125 /*************************************************************************
126 #*	Methode:		NotifyChange							Datum:02.10.97
127 #*------------------------------------------------------------------------
128 #*
129 #*  Klasse:		SvxNumberPreviewImpl
130 #*
131 #*  Funktion:	Funktion fuer das Aendern des Preview- Strings
132 #*
133 #*  Input:		String, Farbe
134 #*
135 #*	Output:		---
136 #*
137 #************************************************************************/
138 
139 void SvxNumberPreviewImpl::NotifyChange( const String& rPrevStr,
140                                          const Color* pColor )
141 {
142 	aPrevStr = rPrevStr;
143 	svtools::ColorConfig aColorConfig;
144 	Color aWindowTextColor( aColorConfig.GetColorValue( svtools::FONTCOLOR ).nColor );
145     aPrevCol = pColor ? *pColor : aWindowTextColor;
146 	Invalidate();
147 	Update();
148 }
149 
150 /*************************************************************************
151 #*	Methode:		Paint									Datum:02.10.97
152 #*------------------------------------------------------------------------
153 #*
154 #*  Klasse:		SvxNumberPreviewImpl
155 #*
156 #*  Funktion:	Funktion fuer das neu zeichnen des Fensters.
157 #*
158 #*  Input:		---
159 #*
160 #*	Output:		---
161 #*
162 #************************************************************************/
163 
164 void SvxNumberPreviewImpl::Paint( const Rectangle& )
165 {
166 	Font	aDrawFont	= GetFont();
167 	Size	aSzWnd		= GetOutputSizePixel();
168 	Point	aPosText	= Point( (aSzWnd.Width()  - GetTextWidth( aPrevStr )) /2,
169 								 (aSzWnd.Height() - GetTextHeight())/2 );
170 
171 	aDrawFont.SetColor( aPrevCol );
172 	SetFont( aDrawFont );
173 	DrawText( aPosText, aPrevStr );
174 }
175 
176 // -----------------------------------------------------------------------
177 
178 void SvxNumberPreviewImpl::InitSettings( sal_Bool bForeground, sal_Bool bBackground )
179 {
180 	const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();
181 
182 	if ( bForeground )
183 	{
184 		svtools::ColorConfig aColorConfig;
185 		Color aTextColor( aColorConfig.GetColorValue( svtools::FONTCOLOR ).nColor );
186 
187 		if ( IsControlForeground() )
188 			aTextColor = GetControlForeground();
189 		SetTextColor( aTextColor );
190 	}
191 
192 	if ( bBackground )
193 	{
194 		if ( IsControlBackground() )
195 			SetBackground( GetControlBackground() );
196 		else
197 			SetBackground( rStyleSettings.GetWindowColor() );
198 	}
199 	Invalidate();
200 }
201 
202 // -----------------------------------------------------------------------
203 
204 void SvxNumberPreviewImpl::StateChanged( StateChangedType nType )
205 {
206 	if ( nType == STATE_CHANGE_CONTROLFOREGROUND )
207 		InitSettings( sal_True, sal_False );
208 	else if ( nType == STATE_CHANGE_CONTROLBACKGROUND )
209 		InitSettings( sal_False, sal_True );
210 
211 	Window::StateChanged( nType );
212 }
213 
214 // -----------------------------------------------------------------------
215 
216 void SvxNumberPreviewImpl::DataChanged( const DataChangedEvent& rDCEvt )
217 {
218 	Window::DataChanged( rDCEvt );
219 
220 	if ( ( rDCEvt.GetType() == DATACHANGED_SETTINGS ) && ( rDCEvt.GetFlags() & SETTINGS_STYLE ) )
221 		InitSettings( sal_True, sal_True );
222 }
223 
224 // class SvxNumberFormatTabPage ------------------------------------------
225 
226 #define REMOVE_DONTKNOW() \
227 	if ( !aFtLanguage.IsEnabled() )										\
228 	{																	\
229 		aFtLanguage	.Enable();											\
230 		aLbLanguage	.Enable();											\
231 		aLbLanguage	.SelectLanguage( pNumFmtShell->GetCurLanguage() );	\
232 	}
233 
234 #define HDL(hdl) LINK( this, SvxNumberFormatTabPage, hdl )
235 
236 #include <layout/layout-pre.hxx>
237 
238 #if ENABLE_LAYOUT
239 #undef CUI_RES
240 #define CUI_RES(x) #x
241 #define CUI_RES_PLAIN(x) ResId (x, CUI_MGR ())
242 #define THIS_CUI_RES(x) this, #x
243 #undef SfxTabPage
244 #define SfxTabPage( parent, id, args ) SfxTabPage( parent, "number-format.xml", id, &args )
245 #else /* !ENABLE_LAYOUT */
246 #define CUI_RES_PLAIN CUI_RES
247 #define THIS_CUI_RES CUI_RES
248 #endif /* !ENABLE_LAYOUT */
249 
250 SvxNumberFormatTabPage::SvxNumberFormatTabPage( Window*				pParent,
251 												const SfxItemSet&	rCoreAttrs )
252 
253 	:	SfxTabPage( pParent, CUI_RES( RID_SVXPAGE_NUMBERFORMAT ), rCoreAttrs ),
254 
255         aFtCategory     ( this, CUI_RES( FT_CATEGORY ) ),
256 		aLbCategory		( this, CUI_RES( LB_CATEGORY ) ),
257 		aFtFormat		( this, CUI_RES( FT_FORMAT ) ),
258 		aLbCurrency		( this, CUI_RES( LB_CURRENCY) ),
259 		aLbFormat		( this, CUI_RES( LB_FORMAT ) ),
260         aFtLanguage     ( this, CUI_RES( FT_LANGUAGE ) ),
261         aLbLanguage     ( this, CUI_RES( LB_LANGUAGE ), sal_False ),
262         aCbSourceFormat ( this, CUI_RES( CB_SOURCEFORMAT ) ),
263 #if ENABLE_LAYOUT
264 		aWndPreview     ( LAYOUT_THIS_WINDOW(this), CUI_RES_PLAIN( WND_NUMBER_PREVIEW ) ),
265 #else
266 		aWndPreview     ( this, CUI_RES_PLAIN( WND_NUMBER_PREVIEW ) ),
267 #endif
268         aFlOptions      ( this, CUI_RES( FL_OPTIONS ) ),
269         aFtDecimals     ( this, CUI_RES( FT_DECIMALS ) ),
270         aEdDecimals     ( this, CUI_RES( ED_DECIMALS ) ),
271         aBtnNegRed      ( this, CUI_RES( BTN_NEGRED ) ),
272         aFtLeadZeroes   ( this, CUI_RES( FT_LEADZEROES ) ),
273         aEdLeadZeroes   ( this, CUI_RES( ED_LEADZEROES ) ),
274         aBtnThousand    ( this, CUI_RES( BTN_THOUSAND ) ),
275 
276         aFtEdFormat     ( this, CUI_RES( FT_EDFORMAT ) ),
277 		aEdFormat		( this, CUI_RES( ED_FORMAT ) ),
278         aIbAdd          ( this, CUI_RES( IB_ADD       ) ),
279         aIbInfo         ( this, CUI_RES( IB_INFO      ) ),
280         aIbRemove       ( this, CUI_RES( IB_REMOVE    ) ),
281         aFtComment      ( this, CUI_RES( FT_COMMENT ) ),
282         aEdComment      ( this, CUI_RES( ED_COMMENT ) ),
283 
284         pNumItem        ( NULL ),
285         pNumFmtShell    ( NULL ),
286         nInitFormat     ( ULONG_MAX ),
287 
288         sAutomaticEntry ( THIS_CUI_RES( STR_AUTO_ENTRY)),
289         pLastActivWindow( NULL )
290 {
291 #if ENABLE_LAYOUT
292     aLbFormat.Clear ();
293 #endif /* ENABLE_LAYOUT */
294 
295 	Init_Impl();
296 	SetExchangeSupport(); // diese Page braucht ExchangeSupport
297 	FreeResource();
298 	nFixedCategory=-1;
299 }
300 
301 SvxNumberFormatTabPage::~SvxNumberFormatTabPage()
302 {
303 	delete pNumFmtShell;
304 	delete pNumItem;
305 }
306 
307 void SvxNumberFormatTabPage::Init_Impl()
308 {
309 	ImageList				aIconList( CUI_RES_PLAIN ( IL_ICON ) );
310 	ImageList				aIconListHC( CUI_RES_PLAIN ( IL_ICON_HC ) );
311 
312 	bNumItemFlag=sal_True;
313 	bOneAreaFlag=sal_False;
314 
315 	nCatHeight=aLbCategory.GetSizePixel().Height();
316 
317 	nCurFormatY		=aLbFormat.GetPosPixel().Y();
318 	nCurFormatHeight=aLbFormat.GetSizePixel().Height();
319 	nStdFormatY		=aLbCurrency.GetPosPixel().Y();
320 	nStdFormatHeight=nCurFormatY-nStdFormatY+nCurFormatHeight;
321 
322 	aIbAdd.		SetModeImage( aIconList.GetImage( IID_ADD ) );
323 	aIbAdd.		SetModeImage( aIconListHC.GetImage( IID_ADD ), BMP_COLOR_HIGHCONTRAST );
324 
325 	aIbRemove.	SetModeImage( aIconList.GetImage( IID_REMOVE ) );
326 	aIbRemove.	SetModeImage( aIconListHC.GetImage( IID_REMOVE ), BMP_COLOR_HIGHCONTRAST );
327 
328 	aIbInfo.	SetModeImage( aIconList.GetImage( IID_INFO ) );
329 	aIbInfo.	SetModeImage( aIconListHC.GetImage( IID_INFO ), BMP_COLOR_HIGHCONTRAST );
330 
331 	aIbAdd.Enable(sal_False );
332 	aIbRemove.Enable(sal_False );
333 	aIbInfo.Enable(sal_False );
334 
335 	aEdComment.SetText(aLbCategory.GetEntry(1));	//String fuer Benutzerdefiniert
336 														//holen
337 	aEdComment.Hide();
338 
339     aCbSourceFormat.Check( sal_False );
340     aCbSourceFormat.Disable();
341     aCbSourceFormat.Hide();
342 
343 // Handler verbinden
344 	Link aLink = LINK( this, SvxNumberFormatTabPage, SelFormatHdl_Impl );
345 
346 	aLbCategory		.SetSelectHdl( aLink );
347 	aLbFormat		.SetSelectHdl( aLink );
348 	aLbLanguage		.SetSelectHdl( aLink );
349 	aLbCurrency		.SetSelectHdl( aLink );
350     aCbSourceFormat .SetClickHdl( aLink );
351 
352 	aLink = LINK( this, SvxNumberFormatTabPage, OptHdl_Impl );
353 
354 	aEdDecimals		.SetModifyHdl( aLink );
355 	aEdLeadZeroes	.SetModifyHdl( aLink );
356 	aBtnNegRed		.SetClickHdl( aLink );
357 	aBtnThousand	.SetClickHdl( aLink );
358 	aLbFormat		.SetDoubleClickHdl( HDL( DoubleClickHdl_Impl ) );
359 	aEdFormat		.SetModifyHdl( HDL( EditHdl_Impl ) );
360 	aIbAdd.SetClickHdl( HDL( ClickHdl_Impl ) );
361 	aIbRemove.SetClickHdl( HDL( ClickHdl_Impl ) );
362 	aIbInfo.SetClickHdl( HDL( ClickHdl_Impl ) );
363 
364 	aLink = LINK( this, SvxNumberFormatTabPage, LostFocusHdl_Impl);
365 
366 	aEdComment		.SetLoseFocusHdl( aLink);
367 	aResetWinTimer	.SetTimeoutHdl(LINK( this, SvxNumberFormatTabPage, TimeHdl_Impl));
368 	aResetWinTimer	.SetTimeout( 10);
369 
370 	// Sprachen-ListBox initialisieren
371 
372 	aLbLanguage.InsertLanguage( LANGUAGE_SYSTEM );
373 	// Don't list ambiguous locales where we won't be able to convert the
374 	// LanguageType back to an identical Language_Country name and therefore
375 	// couldn't load the i18n LocaleData. Show DebugMsg in non-PRODUCT version.
376 	::com::sun::star::uno::Sequence< sal_uInt16 > xLang =
377 		LocaleDataWrapper::getInstalledLanguageTypes();
378 	sal_Int32 nCount = xLang.getLength();
379 	for ( sal_Int32 i=0; i<nCount; i++ )
380 	{
381 		aLbLanguage.InsertLanguage( xLang[i] );
382 	}
383 
384 	aIbAdd.SetAccessibleRelationLabeledBy( &aFtEdFormat );
385 	aIbInfo.SetAccessibleRelationLabeledBy( &aFtEdFormat );
386 	aIbRemove.SetAccessibleRelationLabeledBy( &aFtEdFormat );
387 	aIbAdd.SetAccessibleRelationMemberOf( &aIbAdd );
388 	aIbInfo.SetAccessibleRelationMemberOf( &aIbInfo );
389 	aIbRemove.SetAccessibleRelationMemberOf( &aIbRemove );
390 }
391 
392 /*************************************************************************
393 #*	Methode:		GetRanges								Datum:02.10.97
394 #*------------------------------------------------------------------------
395 #*
396 #*  Klasse:		SvxNumberFormatTabPage
397 #*
398 #*  Funktion:	Liefert Bereichsangaben zurueck.
399 #*
400 #*  Input:		---
401 #*
402 #*	Output:		Bereich
403 #*
404 #************************************************************************/
405 
406 sal_uInt16* SvxNumberFormatTabPage::GetRanges()
407 {
408 	return pRanges;
409 }
410 
411 
412 /*************************************************************************
413 #*	Methode:		Create									Datum:02.10.97
414 #*------------------------------------------------------------------------
415 #*
416 #*  Klasse:		SvxNumberFormatTabPage
417 #*
418 #*  Funktion:	Erzeugt eine neue Zahlenformat- Seite.
419 #*
420 #*  Input:		Fenster, SfxItemSet
421 #*
422 #*	Output:		neue TabPage
423 #*
424 #************************************************************************/
425 
426 SfxTabPage*	SvxNumberFormatTabPage::Create( Window* pParent,
427 											const SfxItemSet& rAttrSet )
428 {
429 	return ( new SvxNumberFormatTabPage( pParent, rAttrSet ) );
430 }
431 
432 
433 /*************************************************************************
434 #*	Methode:		Reset									Datum:02.10.97
435 #*------------------------------------------------------------------------
436 #*
437 #*  Klasse:		SvxNumberFormatTabPage
438 #*
439 #*  Funktion:	Die Attribute des Dialogs werden mit Hilfe
440 #*				des Itemsets neu eingestellt.
441 #*
442 #*  Input:		SfxItemSet
443 #*
444 #*	Output:		---
445 #*
446 #************************************************************************/
447 
448 void SvxNumberFormatTabPage::Reset( const SfxItemSet& rSet )
449 {
450 	const SfxUInt32Item*		pValFmtAttr		= NULL;
451 	const SfxPoolItem*			pItem			= NULL;
452     const SfxBoolItem*          pAutoEntryAttr = NULL;
453 
454 	sal_uInt16						nCatLbSelPos	= 0;
455 	sal_uInt16						nFmtLbSelPos	= 0;
456 	LanguageType				eLangType		= LANGUAGE_DONTKNOW;
457 	SvxDelStrgs					aFmtEntryList;
458 	SvxNumberValueType			eValType		= SVX_VALUE_TYPE_UNDEFINED;
459 	double						nValDouble		= 0;
460 	String						aValString;
461 	SfxItemState				eState			= SFX_ITEM_DONTCARE;
462 
463 
464 	eState = rSet.GetItemState( GetWhich( SID_ATTR_NUMBERFORMAT_NOLANGUAGE ),sal_True,&pItem);
465 
466 	if(eState==SFX_ITEM_SET)
467 	{
468         const SfxBoolItem* pBoolLangItem = (const SfxBoolItem*)
469 					  GetItem( rSet, SID_ATTR_NUMBERFORMAT_NOLANGUAGE);
470 
471 		if(pBoolLangItem!=NULL && pBoolLangItem->GetValue())
472 		{
473 			HideLanguage();
474 		}
475 		else
476 		{
477 			HideLanguage(sal_False);
478 		}
479 
480 	}
481 
482 	eState = rSet.GetItemState( GetWhich( SID_ATTR_NUMBERFORMAT_INFO ),sal_True,&pItem);
483 
484 	if(eState==SFX_ITEM_SET)
485 	{
486 		if(pNumItem==NULL)
487 		{
488 			bNumItemFlag=sal_True;
489 			pNumItem= (SvxNumberInfoItem *) pItem->Clone();
490 		}
491 		else
492 		{
493 			bNumItemFlag=sal_False;
494 		}
495 	}
496 	else
497 	{
498 		bNumItemFlag=sal_False;
499 	}
500 
501 
502 	eState = rSet.GetItemState( GetWhich( SID_ATTR_NUMBERFORMAT_ONE_AREA ));
503 
504 	if(eState==SFX_ITEM_SET)
505 	{
506         const SfxBoolItem* pBoolItem = (const SfxBoolItem*)
507 					  GetItem( rSet, SID_ATTR_NUMBERFORMAT_ONE_AREA);
508 
509 		if(pBoolItem!=NULL)
510 		{
511 			bOneAreaFlag= pBoolItem->GetValue();
512 		}
513 	}
514 	//bOneAreaFlag=sal_True; //@@ Debug-Test
515 
516     eState = rSet.GetItemState( GetWhich( SID_ATTR_NUMBERFORMAT_SOURCE ) );
517 
518     if ( eState == SFX_ITEM_SET )
519 	{
520         const SfxBoolItem* pBoolItem = (const SfxBoolItem*)
521                       GetItem( rSet, SID_ATTR_NUMBERFORMAT_SOURCE );
522         if ( pBoolItem )
523             aCbSourceFormat.Check( pBoolItem->GetValue() );
524         else
525             aCbSourceFormat.Check( sal_False );
526         aCbSourceFormat.Enable();
527         aCbSourceFormat.Show();
528 	}
529     else
530     {
531         sal_Bool bInit = sal_False;     // set to sal_True for debug test
532         aCbSourceFormat.Check( bInit );
533         aCbSourceFormat.Enable( bInit );
534         aCbSourceFormat.Show( bInit );
535     }
536 
537 	// pNumItem muss von aussen gesetzt worden sein!
538 	DBG_ASSERT( pNumItem, "No NumberInfo, no NumberFormatter, good bye.CRASH. :-(" );
539 
540 	// aktuellen Zahlenformat-Tabellenindex holen
541 	eState = rSet.GetItemState( GetWhich( SID_ATTR_NUMBERFORMAT_VALUE ) );
542 
543 	if ( SFX_ITEM_DONTCARE != eState )
544 		pValFmtAttr = (const SfxUInt32Item*)
545 					  GetItem( rSet, SID_ATTR_NUMBERFORMAT_VALUE );
546 
547 	eValType = pNumItem->GetValueType();
548 
549 	switch ( eValType )
550 	{
551 		case SVX_VALUE_TYPE_STRING:
552 			aValString = pNumItem->GetValueString();
553 			break;
554 		case SVX_VALUE_TYPE_NUMBER:
555 			//	#50441# string may be set in addition to the value
556 			aValString = pNumItem->GetValueString();
557 			nValDouble = pNumItem->GetValueDouble();
558 			break;
559 		case SVX_VALUE_TYPE_UNDEFINED:
560 		default:
561 			break;
562 	}
563 
564 	// nun sind alle Informationen fuer die Formatierer-Shell beisammen:
565 
566 	if ( pNumFmtShell )
567 		 delete pNumFmtShell;	// ggF. alte Shell loeschen (==Reset)
568 
569 	nInitFormat = ( pValFmtAttr )				// Init-Key merken
570 					? pValFmtAttr->GetValue()	// (fuer FillItemSet())
571 					: ULONG_MAX;				// == DONT_KNOW
572 
573 
574 	if ( eValType == SVX_VALUE_TYPE_STRING )
575 		pNumFmtShell =SvxNumberFormatShell::Create(
576 								pNumItem->GetNumberFormatter(),
577 								(pValFmtAttr) ? nInitFormat : 0L,
578 								eValType,
579 								aValString );
580 	else
581 		pNumFmtShell =SvxNumberFormatShell::Create(
582 								pNumItem->GetNumberFormatter(),
583 								(pValFmtAttr) ? nInitFormat : 0L,
584 								eValType,
585 								nValDouble,
586 								&aValString );
587 
588 	FillCurrencyBox();
589 
590     String aPrevString;
591     Color* pDummy = NULL;
592     pNumFmtShell->GetInitSettings( nCatLbSelPos, eLangType, nFmtLbSelPos,
593                                    aFmtEntryList, aPrevString, pDummy );
594 
595 	aLbCurrency.SelectEntryPos((sal_uInt16)pNumFmtShell->GetCurrencySymbol());
596 
597 	nFixedCategory=nCatLbSelPos;
598 	if(bOneAreaFlag)
599 	{
600         String sFixedCategory=aLbCategory.GetEntry(nFixedCategory);
601 		aLbCategory.Clear();
602         aLbCategory.InsertEntry(sFixedCategory);
603 		SetCategory(0);
604 	}
605 	else
606 	{
607 		SetCategory(nCatLbSelPos );
608 	}
609     eState = rSet.GetItemState( GetWhich( SID_ATTR_NUMBERFORMAT_ADD_AUTO ) );
610     if(SFX_ITEM_SET == eState)
611          pAutoEntryAttr = (const SfxBoolItem*)
612                       GetItem( rSet, SID_ATTR_NUMBERFORMAT_ADD_AUTO );
613     // no_NO is an alias for nb_NO and normally isn't listed, we need it for
614     // backwards compatibility, but only if the format passed is of
615     // LanguageType no_NO.
616     if ( eLangType == LANGUAGE_NORWEGIAN )
617     {
618         aLbLanguage.RemoveLanguage( eLangType );    // in case we're already called
619         aLbLanguage.InsertLanguage( eLangType );
620     }
621     aLbLanguage.SelectLanguage( eLangType );
622     if(pAutoEntryAttr)
623         AddAutomaticLanguage_Impl(eLangType, pAutoEntryAttr->GetValue());
624 	UpdateFormatListBox_Impl(sal_False,sal_True);
625 
626 //! erAck 26.01.01
627 //! This spoils everything because it rematches currency formats based on
628 //! the selected aLbCurrency entry instead of the current format.
629 //! Besides that everything seems to be initialized by now, so why call it?
630 //	SelFormatHdl_Impl( &aLbCategory );
631 
632     if ( pValFmtAttr )
633 	{
634 		EditHdl_Impl( &aEdFormat ); // UpdateOptions_Impl() als Seiteneffekt
635 	}
636 	else	// DONT_KNOW
637 	{
638 		// Kategoriewechsel und direkte Eingabe sind moeglich, sonst nix:
639 		Obstructing();
640 	}
641 
642     if ( aCbSourceFormat.IsChecked() )
643     {
644         // everything disabled except SourceFormat checkbox
645         EnableBySourceFormat_Impl();
646     }
647 
648 	DeleteEntryList_Impl(aFmtEntryList);
649 }
650 
651 /*************************************************************************
652 #*	Methode:		Obstructing								Datum:02.10.97
653 #*------------------------------------------------------------------------
654 #*
655 #*  Klasse:		SvxNumberFormatTabPage
656 #*
657 #*  Funktion:	Sperren der Controls mit Ausnahme von Kategoriewechsel
658 #*				und direkter Eingabe.
659 #*
660 #*  Input:		---
661 #*
662 #*	Output:		---
663 #*
664 #************************************************************************/
665 void SvxNumberFormatTabPage::Obstructing()
666 {
667 	aLbFormat		.SetNoSelection();
668 	aLbLanguage		.SetNoSelection();
669 	aFtLanguage		.Disable();
670 	aLbLanguage		.Disable();
671 
672 	aIbAdd.Enable(sal_False );
673 	aIbRemove.Enable(sal_False );
674 	aIbInfo.Enable(sal_False );
675 
676 	aBtnNegRed		.Disable();
677 	aBtnThousand	.Disable();
678 	aFtLeadZeroes	.Disable();
679 	aFtDecimals		.Disable();
680 	aEdLeadZeroes	.Disable();
681 	aEdDecimals		.Disable();
682 	aFlOptions		.Disable();
683 	aEdDecimals		.SetText( String() );
684 	aEdLeadZeroes	.SetText( String() );
685 	aBtnNegRed		.Check( sal_False );
686 	aBtnThousand	.Check( sal_False );
687     aWndPreview     .NotifyChange( String() );
688 
689 	aLbCategory		.SelectEntryPos( 0 );
690 	aEdFormat		.SetText( String() );
691 	aFtComment		.SetText( String() );
692 	aEdComment		.SetText(aLbCategory.GetEntry(1));	//String fuer Benutzerdefiniert
693 														//holen
694 
695 	aEdFormat		.GrabFocus();
696 }
697 
698 
699 /*************************************************************************
700 #* Enable/Disable dialog parts depending on the value of the SourceFormat
701 #* checkbox.
702 #************************************************************************/
703 void SvxNumberFormatTabPage::EnableBySourceFormat_Impl()
704 {
705     sal_Bool bEnable = !aCbSourceFormat.IsChecked();
706     if ( !bEnable )
707         aCbSourceFormat.GrabFocus();
708     aFtCategory     .Enable( bEnable );
709     aLbCategory     .Enable( bEnable );
710     aFtFormat       .Enable( bEnable );
711     aLbCurrency     .Enable( bEnable );
712     aLbFormat       .Enable( bEnable );
713     aFtLanguage     .Enable( bEnable );
714     aLbLanguage     .Enable( bEnable );
715     aFtDecimals     .Enable( bEnable );
716     aEdDecimals     .Enable( bEnable );
717     aFtLeadZeroes   .Enable( bEnable );
718     aEdLeadZeroes   .Enable( bEnable );
719     aBtnNegRed      .Enable( bEnable );
720     aBtnThousand    .Enable( bEnable );
721     aFlOptions      .Enable( bEnable );
722     aFtEdFormat     .Enable( bEnable );
723     aEdFormat       .Enable( bEnable );
724     aIbAdd          .Enable( bEnable );
725     aIbRemove       .Enable( bEnable );
726     aIbInfo         .Enable( bEnable );
727     aFtComment      .Enable( bEnable );
728     aEdComment      .Enable( bEnable );
729     aLbFormat.Invalidate(); // #i43322#
730 }
731 
732 
733 /*************************************************************************
734 #*	Methode:	HideLanguage								Datum:14.05.98
735 #*------------------------------------------------------------------------
736 #*
737 #*  Klasse:		SvxNumberFormatTabPage
738 #*
739 #*  Funktion:	Versteckt die Spracheinstellung:
740 #*
741 #*  Input:		sal_Bool nFlag
742 #*
743 #*	Output:		---
744 #*
745 #************************************************************************/
746 
747 void SvxNumberFormatTabPage::HideLanguage(sal_Bool nFlag)
748 {
749 	Size aSize=aLbCategory.GetSizePixel();
750 
751 	if(nFlag)
752 	{
753 		aSize.Height()=aLbFormat.GetSizePixel().Height();
754 	}
755 	else
756 	{
757 		aSize.Height()=nCatHeight;
758 	}
759 
760 	aLbCategory.SetSizePixel(aSize);
761 
762 	aFtLanguage.Show(!nFlag);
763 	aLbLanguage.Show(!nFlag);
764 }
765 
766 /*************************************************************************
767 #*	Methode:		FillItemSet								Datum:02.10.97
768 #*------------------------------------------------------------------------
769 #*
770 #*  Klasse:		SvxNumberFormatTabPage
771 #*
772 #*  Funktion:	Stellt die Attribute im ItemSet ein,
773 #*				sowie in der DocShell den numItem, wenn
774 #*				bNumItemFlag nicht gesetzt ist.
775 #*
776 #*  Input:		SfxItemSet
777 #*
778 #*	Output:		---
779 #*
780 #************************************************************************/
781 
782 sal_Bool SvxNumberFormatTabPage::FillItemSet( SfxItemSet& rCoreAttrs )
783 {
784     sal_Bool bDataChanged   = aFtLanguage.IsEnabled() || aCbSourceFormat.IsEnabled();
785 	if ( bDataChanged )
786 	{
787         const SfxItemSet& rMyItemSet = GetItemSet();
788 		sal_uInt16			nWhich		 = GetWhich( SID_ATTR_NUMBERFORMAT_VALUE );
789         SfxItemState    eItemState   = rMyItemSet.GetItemState( nWhich, sal_False );
790 
791         // OK chosen - Is format code input entered already taken over?
792         // If not, simulate Add. Upon syntax error ignore input and prevent Put.
793 		String		aFormat	= aEdFormat.GetText();
794 		sal_uInt32 nCurKey = pNumFmtShell->GetCurNumFmtKey();
795 
796         if ( aIbAdd.IsEnabled() || pNumFmtShell->IsTmpCurrencyFormat(aFormat) )
797         {   // #79599# It is not sufficient to just add the format code (or
798             // delete it in case of bOneAreaFlag and resulting category change).
799             // Upon switching tab pages we need all settings to be consistent
800             // in case this page will be redisplayed later.
801             bDataChanged = (ClickHdl_Impl( &aIbAdd ) != 0);
802 			nCurKey = pNumFmtShell->GetCurNumFmtKey();
803         }
804         else if(nCurKey == NUMKEY_UNDEFINED)
805         {   // something went wrong, e.g. in Writer #70281#
806 			pNumFmtShell->FindEntry(aFormat, &nCurKey);
807 		}
808 
809 		//---------------------------------------------------------------
810         // Chosen format:
811         // --------------
812 		if ( bDataChanged )
813 		{
814 			bDataChanged = ( nInitFormat != nCurKey );
815 
816 			if (bDataChanged)
817 			{
818 				rCoreAttrs.Put( SfxUInt32Item( nWhich, nCurKey ) );
819 			}
820 			else if(SFX_ITEM_DEFAULT == eItemState)
821 			{
822 				rCoreAttrs.ClearItem( nWhich );
823 			}
824 		}
825 
826 		// --------------------------------------------------------------
827         // List of changed user defined formats:
828         // -------------------------------------
829 		const sal_uInt32 nDelCount = pNumFmtShell->GetUpdateDataCount();
830 
831 		if ( nDelCount > 0 )
832 		{
833 			sal_uInt32*			pDelArr = new sal_uInt32[nDelCount];
834 
835 			pNumFmtShell->GetUpdateData( pDelArr, nDelCount );
836 			pNumItem->SetDelFormatArray( pDelArr, nDelCount );
837 
838 			if(bNumItemFlag==sal_True)
839 			{
840 				rCoreAttrs.Put( *pNumItem );
841 			}
842 			else
843 			{
844 				SfxObjectShell*	pDocSh  = SfxObjectShell::Current();
845 
846 				DBG_ASSERT( pDocSh, "DocShell not found!" );
847 
848 
849 				if ( pDocSh )
850 					pDocSh->PutItem( *pNumItem );
851 			}
852 			delete [] pDelArr;
853 		}
854 
855 		//---------------------------------------------------------------
856         // Whether source format is to be taken or not:
857         // --------------------------------------------
858         if ( aCbSourceFormat.IsEnabled() )
859         {
860             sal_uInt16 _nWhich = GetWhich( SID_ATTR_NUMBERFORMAT_SOURCE );
861             SfxItemState _eItemState = rMyItemSet.GetItemState( _nWhich, sal_False );
862             const SfxBoolItem* pBoolItem = (const SfxBoolItem*)
863                         GetItem( rMyItemSet, SID_ATTR_NUMBERFORMAT_SOURCE );
864             sal_Bool bOld = (pBoolItem ? pBoolItem->GetValue() : sal_False);
865             rCoreAttrs.Put( SfxBoolItem( _nWhich, aCbSourceFormat.IsChecked() ) );
866             if ( !bDataChanged )
867                 bDataChanged = (bOld != (sal_Bool) aCbSourceFormat.IsChecked() ||
868                     _eItemState != SFX_ITEM_SET);
869         }
870 
871         // FillItemSet is only called on OK, here we can notify the
872         // NumberFormatShell that all new user defined formats are valid.
873 		pNumFmtShell->ValidateNewEntries();
874         if(aLbLanguage.IsVisible() &&
875                 LISTBOX_ENTRY_NOTFOUND != aLbLanguage.GetEntryPos(sAutomaticEntry))
876                 rCoreAttrs.Put(SfxBoolItem(SID_ATTR_NUMBERFORMAT_ADD_AUTO,
877                     aLbLanguage.GetSelectEntry() == sAutomaticEntry));
878 	}
879 
880 	return bDataChanged;
881 }
882 
883 
884 int SvxNumberFormatTabPage::DeactivatePage( SfxItemSet* _pSet )
885 {
886 /*  if ( (ULONG_MAX != nInitFormat) && _pSet )
887 	{
888 		const sal_uLong  nCurKey    = pNumFmtShell->GetCurNumFmtKey();
889 		const sal_uInt16 nWhich     = GetWhich( SID_ATTR_NUMBERFORMAT_VALUE );
890 		SfxItemState eItemState	= GetItemSet().GetItemState( nWhich, sal_False );
891 
892 		if ( (nInitFormat == nCurKey) && (SFX_ITEM_DEFAULT == eItemState) )
893             _pSet->ClearItem( nWhich );
894 		else
895             _pSet->Put( SfxUInt32Item( nWhich, nCurKey ) );
896 	}
897  */
898     if ( _pSet )
899         FillItemSet( *_pSet );
900 	return LEAVE_PAGE;
901 }
902 
903 void SvxNumberFormatTabPage::SetInfoItem( const SvxNumberInfoItem& rItem )
904 {
905 	if(pNumItem==NULL)
906 	{
907 		pNumItem = (SvxNumberInfoItem*)rItem.Clone();
908 	}
909 }
910 
911 void SvxNumberFormatTabPage::FillFormatListBox_Impl( SvxDelStrgs& rEntries )
912 {
913 	String*		pEntry;
914 	String		aTmpString;
915 	String		aTmpCatString;
916 	Font		aFont=aLbCategory.GetFont();
917 	sal_uInt16		i = 0;
918 	short		nTmpCatPos;
919 	short		aPrivCat;
920 
921 	aLbFormat.Clear();
922 	aLbFormat.SetUpdateMode( sal_False );
923 
924 	sal_uInt16  nCount = rEntries.Count();
925 
926 	if(nCount<1) return;
927 
928 	if(bOneAreaFlag)
929 	{
930 		nTmpCatPos=nFixedCategory;
931 	}
932 	else
933 	{
934 		nTmpCatPos=aLbCategory.GetSelectEntryPos();
935 	}
936 
937 	switch (nTmpCatPos)
938 	{
939 		case CAT_ALL:
940 		case CAT_TEXT:
941 		case CAT_NUMBER:		i=1;
942 								pEntry=rEntries[0];
943 								if(pEntry!=NULL)
944 								{
945                                     if (nTmpCatPos == CAT_TEXT)
946                                         aTmpString=*pEntry;
947                                     else
948                                         aTmpString = pNumFmtShell->GetStandardName();
949 									aPrivCat=pNumFmtShell->GetCategory4Entry(0);
950                                     aLbFormat.InsertFontEntry( aTmpString, aFont );
951 								}
952 								break;
953 
954 		default:				break;
955 	}
956 
957 	if(pNumFmtShell!=NULL)
958 	{
959 		for ( ; i < nCount; ++i )
960 		{
961 			pEntry = rEntries[i];
962 			aPrivCat=pNumFmtShell->GetCategory4Entry(i);
963 			if(aPrivCat!=CAT_TEXT)
964 			{
965                 Color* pPreviewColor = NULL;
966                 String aPreviewString( GetExpColorString( pPreviewColor, *pEntry, aPrivCat ) );
967                 Font aEntryFont( aLbFormat.GetFont() );
968                 aLbFormat.InsertFontEntry( aPreviewString, aEntryFont, pPreviewColor );
969 			}
970 			else
971 			{
972 				aLbFormat.InsertFontEntry(*pEntry,aFont);
973 			}
974 		}
975 	}
976 	aLbFormat.SetUpdateMode( sal_True );
977 	DeleteEntryList_Impl(rEntries);
978 }
979 
980 
981 /*************************************************************************
982 #*	Methode:		DeleteEntryList_Impl					Datum:02.10.97
983 #*------------------------------------------------------------------------
984 #*
985 #*  Klasse:		SvxNumberFormatTabPage
986 #*
987 #*  Funktion:	Loescht eine SvStrings- Liste
988 #*
989 #*  Input:		String-liste
990 #*
991 #*	Output:		---
992 #*
993 #************************************************************************/
994 
995 void SvxNumberFormatTabPage::DeleteEntryList_Impl( SvxDelStrgs& rEntries )
996 {
997 	sal_uInt16  nCount = rEntries.Count();
998 	rEntries.DeleteAndDestroy(0,nCount);
999 }
1000 
1001 
1002 /*************************************************************************
1003 #*	Methode:		UpdateOptions_Impl						Datum:02.10.97
1004 #*------------------------------------------------------------------------
1005 #*
1006 #*  Klasse:		SvxNumberFormatTabPage
1007 #*
1008 #*  Funktion:	Stellt je nach eingestelltem Format die Options-
1009 #*				attribute neu ein.
1010 #*
1011 #*  Input:		Flag, ob sich die Kategorie geaendert hat.
1012 #*
1013 #*	Output:		---
1014 #*
1015 #***?********************************************************************/
1016 
1017 void SvxNumberFormatTabPage::UpdateOptions_Impl( sal_Bool bCheckCatChange /*= sal_False*/ )
1018 {
1019 	SvxDelStrgs	aEntryList;
1020 	String	theFormat			= aEdFormat.GetText();
1021 	sal_uInt16	nCurCategory		= aLbCategory.GetSelectEntryPos();
1022 	sal_uInt16  nCategory			= nCurCategory;
1023 	sal_uInt16	nDecimals			= 0;
1024 	sal_uInt16	nZeroes				= 0;
1025 	sal_Bool	bNegRed				= sal_False;
1026 	sal_Bool	bThousand			= sal_False;
1027 	short	nTmpCatPos;
1028 	sal_uInt16	nCurrencyPos		=aLbCurrency.GetSelectEntryPos();
1029 
1030 	if(bOneAreaFlag)
1031 	{
1032 		nTmpCatPos=nFixedCategory;
1033 		nCurCategory=nFixedCategory;
1034 	}
1035 	else
1036 	{
1037 		nTmpCatPos=nCurCategory;
1038 	}
1039 
1040 
1041 	pNumFmtShell->GetOptions( theFormat,
1042 							  bThousand, bNegRed,
1043 							  nDecimals, nZeroes,
1044 							  nCategory );
1045 	sal_Bool bDoIt=sal_False;
1046 	if(nCategory==CAT_CURRENCY)
1047 	{
1048 		sal_uInt16 nTstPos=pNumFmtShell->FindCurrencyFormat(theFormat);
1049 		if(nCurrencyPos!=nTstPos && nTstPos!=(sal_uInt16)-1)
1050 		{
1051 			aLbCurrency.SelectEntryPos(nTstPos);
1052 			pNumFmtShell->SetCurrencySymbol(nTstPos);
1053 			bDoIt=sal_True;
1054 		}
1055 	}
1056 
1057 
1058 
1059 	if ( nCategory != nCurCategory || bDoIt)
1060 	{
1061 		if ( bCheckCatChange )
1062 		{
1063 			if(bOneAreaFlag)
1064 				SetCategory(0);
1065 			else
1066 				SetCategory(nCategory );
1067 
1068 			UpdateFormatListBox_Impl( sal_True, sal_False );
1069 		}
1070 	}
1071 	else if ( aLbFormat.GetEntryCount() > 0 )
1072 	{
1073 		sal_uInt32 nCurEntryKey=NUMKEY_UNDEFINED;
1074 		if(!pNumFmtShell->FindEntry( aEdFormat.GetText(),&nCurEntryKey))
1075 		{
1076 			aLbFormat.SetNoSelection();
1077 		}
1078 	}
1079 	if(bOneAreaFlag)
1080 	{
1081 		nCategory=nFixedCategory;
1082 	}
1083 
1084 	switch ( nCategory )
1085 	{
1086 		case CAT_NUMBER:
1087 		case CAT_PERCENT:
1088 		case CAT_CURRENCY:
1089 			aFlOptions.Enable();
1090 			aFtDecimals.Enable();
1091 			aEdDecimals.Enable();
1092 			aFtLeadZeroes.Enable();
1093 			aEdLeadZeroes.Enable();
1094 			aBtnNegRed.Enable();
1095 			aBtnThousand.Enable();
1096 			/*
1097 			aEdDecimals	 .SetValue( nDecimals );
1098 			aEdLeadZeroes.SetValue( nZeroes );
1099 			*/
1100 			aEdDecimals	 .SetText( UniString::CreateFromInt32( nDecimals ) );
1101 			aEdLeadZeroes.SetText( UniString::CreateFromInt32( nZeroes ) );
1102 			aBtnNegRed	 .Check( bNegRed );
1103 			aBtnThousand .Check( bThousand );
1104 			break;
1105 
1106 		case CAT_ALL:
1107 		case CAT_USERDEFINED:
1108 		case CAT_TEXT:
1109 		case CAT_DATE:
1110 		case CAT_TIME:
1111 		case CAT_BOOLEAN:
1112 		case CAT_SCIENTIFIC:
1113 		case CAT_FRACTION:
1114 		default:
1115 			aFlOptions		.Disable();
1116 			aFtDecimals		.Disable();
1117 			aEdDecimals		.Disable();
1118 			aFtLeadZeroes	.Disable();
1119 			aEdLeadZeroes	.Disable();
1120 			aBtnNegRed		.Disable();
1121 			aBtnThousand	.Disable();
1122 			aEdDecimals		.SetText( UniString::CreateFromInt32( 0 ) );
1123 			aEdLeadZeroes	.SetText( UniString::CreateFromInt32( 0 ) );
1124 			aBtnNegRed		.Check( sal_False );
1125 			aBtnThousand	.Check( sal_False );
1126 	}
1127 }
1128 
1129 
1130 /*************************************************************************
1131 #*	Methode:		UpdateFormatListBox_Impl				Datum:02.10.97
1132 #*------------------------------------------------------------------------
1133 #*
1134 #*  Klasse:		SvxNumberFormatTabPage
1135 #*
1136 #*  Funktion:	Aktualisiert die Format- Listbox und zusaetzlich
1137 #*				wird abhaengig vom bUpdateEdit- Flag der String
1138 #*				in der Editbox geaendert.
1139 #*
1140 #*  Input:		Flags fuer Kategorie und Editbox
1141 #*
1142 #*	Output:		---
1143 #*
1144 #************************************************************************/
1145 
1146 void SvxNumberFormatTabPage::UpdateFormatListBox_Impl
1147 	(
1148 		sal_uInt16 bCat,		// Category oder Land/Sprache ListBox?
1149 		sal_Bool   bUpdateEdit	// Format-Edit aktualisieren?
1150 	)
1151 {
1152 	SvxDelStrgs	aEntryList;
1153 	short		nFmtLbSelPos = 0;
1154 	short		nTmpCatPos;
1155 
1156 	if(bOneAreaFlag)
1157 	{
1158 		nTmpCatPos=nFixedCategory;
1159 	}
1160 	else
1161 	{
1162 		nTmpCatPos=aLbCategory.GetSelectEntryPos();
1163 	}
1164 
1165 
1166 	if ( bCat )
1167 	{
1168 		Point aPos=aLbFormat.GetPosPixel();
1169 		Size  aSize=aLbFormat.GetSizePixel();
1170 
1171 		if(nTmpCatPos!=CAT_CURRENCY)
1172 		{
1173 			aPos.Y()=nStdFormatY;
1174 			aSize.Height()=nStdFormatHeight;
1175 			aLbFormat.SetPosSizePixel(aPos,aSize);
1176 #if ENABLE_LAYOUT
1177 			aLbCurrency.Disable();
1178 #else /* !ENABLE_LAYOUT */
1179 			aLbCurrency.Hide();
1180 #endif /* !ENABLE_LAYOUT */
1181 		}
1182 		else
1183 		{
1184 			aPos.Y()=nCurFormatY;
1185 			aSize.Height()=nCurFormatHeight;
1186 			aLbFormat.SetPosSizePixel(aPos,aSize);
1187 #if ENABLE_LAYOUT
1188 			aLbCurrency.Enable();
1189 #else /* !ENABLE_LAYOUT */
1190 			aLbCurrency.Show();
1191 #endif /* !ENABLE_LAYOUT */
1192 		}
1193 
1194 		pNumFmtShell->CategoryChanged( nTmpCatPos,nFmtLbSelPos, aEntryList );
1195 	}
1196 	else
1197 		pNumFmtShell->LanguageChanged( aLbLanguage.GetSelectLanguage(),
1198 									   nFmtLbSelPos,aEntryList );
1199 
1200 	REMOVE_DONTKNOW() // ggF. UI-Enable
1201 
1202 
1203 	if ( (aEntryList.Count() > 0) && (nFmtLbSelPos != SELPOS_NONE) )
1204 	{
1205 		if(bUpdateEdit)
1206 		{
1207 			String aFormat=*aEntryList[nFmtLbSelPos];
1208 			aEdFormat.SetText(aFormat);
1209 			aFtComment.SetText(pNumFmtShell->GetComment4Entry(nFmtLbSelPos));
1210 
1211 			//@23.09.97 aEdFormat.SetText( aLbFormat.GetSelectEntry() );
1212 		}
1213 
1214 		if(!bOneAreaFlag || !bCat)
1215 		{
1216 			FillFormatListBox_Impl( aEntryList );
1217 			aLbFormat.SelectEntryPos( nFmtLbSelPos );
1218 
1219 			aFtComment.SetText(pNumFmtShell->GetComment4Entry(nFmtLbSelPos));
1220 			if(pNumFmtShell->GetUserDefined4Entry(nFmtLbSelPos))
1221 			{
1222 				if(pNumFmtShell->GetComment4Entry(nFmtLbSelPos).Len()==0)
1223 				{
1224 					aFtComment.SetText(aLbCategory.GetEntry(1));
1225 				}
1226 			}
1227             ChangePreviewText( (sal_uInt16)nFmtLbSelPos );
1228 		}
1229 
1230 	}
1231 	else
1232 	{
1233 		FillFormatListBox_Impl( aEntryList );
1234 		if(nFmtLbSelPos != SELPOS_NONE)
1235 		{
1236 			aLbFormat.SelectEntryPos( (sal_uInt16)nFmtLbSelPos );
1237 
1238 			aFtComment.SetText(pNumFmtShell->GetComment4Entry(nFmtLbSelPos));
1239 			if(pNumFmtShell->GetUserDefined4Entry(nFmtLbSelPos))
1240 			{
1241 				if(pNumFmtShell->GetComment4Entry(nFmtLbSelPos).Len()==0)
1242 				{
1243 					aFtComment.SetText(aLbCategory.GetEntry(1));
1244 				}
1245 			}
1246 		}
1247 		else
1248 		{
1249 			aLbFormat.SetNoSelection();
1250 		}
1251 
1252 		if ( bUpdateEdit )
1253 		{
1254 			aEdFormat.SetText( String() );
1255             aWndPreview.NotifyChange( String() );
1256 		}
1257 	}
1258 }
1259 
1260 
1261 /*************************************************************************
1262 #*	Handle:		DoubleClickHdl_Impl							Datum:02.10.97
1263 #*------------------------------------------------------------------------
1264 #*
1265 #*  Klasse:		SvxNumberFormatTabPage
1266 #*
1267 #*  Funktion:	Bei einem Doppelklick in die Format- Listbox
1268 #*				wird der Wert uebernommen und der OK-Button
1269 #*				ausgeloest
1270 #*
1271 #*  Input:		Pointer auf Listbox
1272 #*
1273 #*	Output:		---
1274 #*
1275 #************************************************************************/
1276 
1277 IMPL_LINK( SvxNumberFormatTabPage, DoubleClickHdl_Impl, SvxFontListBox*, pLb )
1278 {
1279 	if ( pLb == &aLbFormat )
1280 	{
1281 	    SelFormatHdl_Impl( pLb );
1282 
1283         if ( fnOkHdl.IsSet() )
1284         {   // Uebergangsloesung, sollte von SfxTabPage angeboten werden
1285 		    fnOkHdl.Call( NULL );
1286         }
1287         else
1288         {
1289             SfxSingleTabDialog* pParent = dynamic_cast< SfxSingleTabDialog* >( GetParent() );
1290             OKButton* pOKButton = pParent ? pParent->GetOKButton() : NULL;
1291             if ( pOKButton )
1292                 pOKButton->Click();
1293         }
1294 	}
1295 	return 0;
1296 }
1297 
1298 
1299 /*************************************************************************
1300 #*	Methode:	SelFormatHdl_Impl							Datum:02.10.97
1301 #*------------------------------------------------------------------------
1302 #*
1303 #*  Klasse:		SvxNumberFormatTabPage
1304 #*
1305 #*  Funktion:	Wird aufgerufen, wenn sich die Sprache, die Kategorie
1306 #*				oder das Format aendert. Dem entsprechend werden die
1307 #*				Einstellungen geaendert.
1308 #*
1309 #*  Input:		Pointer auf Listbox
1310 #*
1311 #*	Output:		---
1312 #*
1313 #************************************************************************/
1314 
1315 IMPL_LINK( SvxNumberFormatTabPage, SelFormatHdl_Impl, void *, pLb )
1316 {
1317     if ( (CheckBox*)pLb == &aCbSourceFormat )
1318     {
1319         EnableBySourceFormat_Impl();    // enable/disable everything else
1320         if ( aCbSourceFormat.IsChecked() )
1321             return 0;   // just disabled everything else
1322 
1323         // Reinit options enable/disable for current selection.
1324 
1325 #if ENABLE_LAYOUT
1326         if (aLbFormat.GetSelectEntryPos () == LISTBOX_ENTRY_NOTFOUND)
1327 #else /* !ENABLE_LAYOUT */
1328         // Current category may be UserDefined with no format entries defined.
1329         // And yes, aLbFormat is a SvxFontListBox with sal_uLong list positions,
1330         // implementation returns a LIST_APPEND if empty, comparison with
1331         // sal_uInt16 LISTBOX_ENTRY_NOTFOUND wouldn't match.
1332         if ( aLbFormat.GetSelectEntryPos() == LIST_APPEND )
1333 #endif /* !ENABLE_LAYOUT */
1334             pLb = &aLbCategory; // continue with the current category selected
1335         else
1336             pLb = &aLbFormat;   // continue with the current format selected
1337     }
1338 
1339 	short		nTmpCatPos;
1340 
1341 	if(bOneAreaFlag)
1342 	{
1343 		nTmpCatPos=nFixedCategory;
1344 	}
1345 	else
1346 	{
1347 		nTmpCatPos=aLbCategory.GetSelectEntryPos();
1348 	}
1349 
1350 	sal_uInt16 nCurrencyPos=LISTBOX_ENTRY_NOTFOUND ;
1351 
1352 	if(nTmpCatPos==CAT_CURRENCY && (ListBox *)pLb == &aLbCurrency )
1353 	{
1354 		nCurrencyPos=aLbCurrency.GetSelectEntryPos();
1355 		pNumFmtShell->SetCurrencySymbol(nCurrencyPos);
1356 	}
1357 
1358 	//--------------------------------------------------------------------
1359 	// Format-ListBox ----------------------------------------------------
1360 	if ( (SvxFontListBox *)pLb == &aLbFormat )
1361 	{
1362 		sal_uInt16	nSelPos = (sal_uInt16) aLbFormat.GetSelectEntryPos();
1363 		String	aFormat	= aLbFormat.GetSelectEntry();
1364 		String	aComment;
1365 		SvxDelStrgs	aEntryList;
1366 
1367 		short		nFmtLbSelPos = nSelPos;
1368 
1369 		aFormat=pNumFmtShell->GetFormat4Entry(nSelPos);
1370 		aComment=pNumFmtShell->GetComment4Entry(nSelPos);
1371 		if(pNumFmtShell->GetUserDefined4Entry(nFmtLbSelPos))
1372 		{
1373 			if(pNumFmtShell->GetComment4Entry(nFmtLbSelPos).Len()==0)
1374 			{
1375 				aComment=aLbCategory.GetEntry(1);
1376 			}
1377 		}
1378 
1379 		if ( aFormat.Len() > 0 )
1380 		{
1381 			if(!aEdFormat.HasFocus()) aEdFormat.SetText( aFormat );
1382 			aFtComment.SetText(aComment);
1383             ChangePreviewText( nSelPos );
1384 		}
1385 
1386 		REMOVE_DONTKNOW() // ggF. UI-Enable
1387 
1388 		if ( pNumFmtShell->FindEntry( aFormat) )
1389 		{
1390 			aIbAdd.Enable(sal_False );
1391 			sal_Bool bIsUserDef=pNumFmtShell->IsUserDefined( aFormat );
1392 			aIbRemove.Enable(bIsUserDef);
1393 			aIbInfo.Enable(bIsUserDef);
1394 
1395 		}
1396 		else
1397 		{
1398 			aIbAdd.Enable(sal_True );
1399 			aIbInfo.Enable(sal_True );
1400 			aIbRemove.Enable(sal_False );
1401 			aFtComment.SetText(aEdComment.GetText());
1402 
1403 		}
1404 		UpdateOptions_Impl( sal_False );
1405 
1406 		//-------
1407 		return 0;
1408 		//-------
1409 	}
1410 
1411 	//--------------------------------------------------------------------
1412 	// Kategorie-ListBox -------------------------------------------------
1413 	if ( pLb == &aLbCategory || pLb == &aLbCurrency)
1414 	{
1415 		UpdateFormatListBox_Impl( sal_True, sal_True );
1416 		EditHdl_Impl( NULL );
1417 		UpdateOptions_Impl( sal_False );
1418 
1419 		//-------
1420 		return 0;
1421 		//-------
1422 	}
1423 
1424 	//--------------------------------------------------------------------
1425 	// Sprache/Land-ListBox ----------------------------------------------
1426 	if ( pLb == &aLbLanguage )
1427 	{
1428 		UpdateFormatListBox_Impl( sal_False, sal_True );
1429 		EditHdl_Impl( &aEdFormat );
1430 
1431 		//-------
1432 		return 0;
1433 		//-------
1434 	}
1435 	return 0;
1436 }
1437 
1438 
1439 /*************************************************************************
1440 #*	Methode:	ClickHdl_Impl, ImageButton* pIB 			Datum:02.10.97
1441 #*------------------------------------------------------------------------
1442 #*
1443 #*  Klasse:		SvxNumberFormatTabPage
1444 #*
1445 #*  Funktion:	Wenn, der Hinzufuegen- oder Entfernen- Button
1446 #*				wird diese Funktion aufgerufen und die Zahlenformat-
1447 #*				Liste den entsprechend geaendert.
1448 #*
1449 #*  Input:		Toolbox- Button
1450 #*
1451 #*	Output:		---
1452 #*
1453 #************************************************************************/
1454 
1455 IMPL_LINK( SvxNumberFormatTabPage, ClickHdl_Impl, ImageButton*, pIB)
1456 {
1457 	sal_Bool		bAdded = sal_False;
1458 	sal_Bool		bDeleted = sal_False;
1459     sal_uLong       nReturn = 0;
1460     const sal_uLong nReturnChanged  = 0x1;  // THE boolean return value
1461     const sal_uLong nReturnAdded    = 0x2;  // temp: format added
1462     const sal_uLong nReturnOneArea  = 0x4;  // temp: one area but category changed => ignored
1463 
1464 	if(pIB==&aIbAdd)
1465     {   // Also called from FillItemSet() if a temporary currency format has
1466         // to be added, not only if the Add button is enabled.
1467 		String		aFormat	= aEdFormat.GetText();
1468 		SvxDelStrgs	aEntryList;
1469 		SvxDelStrgs	a2EntryList;
1470 		sal_uInt16		nCatLbSelPos = 0;
1471 		short		nFmtLbSelPos = SELPOS_NONE;
1472 		xub_StrLen	nErrPos=0;
1473 
1474 		pNumFmtShell->SetCurCurrencyEntry(NULL);
1475 		bAdded = pNumFmtShell->AddFormat( aFormat, nErrPos,
1476 										  nCatLbSelPos, nFmtLbSelPos,
1477 										  aEntryList);
1478         if ( bAdded )
1479             nReturn |= nReturnChanged | nReturnAdded;
1480 
1481 		if(pLastActivWindow== (Window *) &aEdComment)
1482 		{
1483 			aEdFormat.GrabFocus();
1484 			aEdComment.Hide();
1485 			aFtComment.Show();
1486 			aFtComment.SetText(aEdComment.GetText());
1487 		}
1488 
1489 		if ( !nErrPos ) // Syntax ok?
1490 		{
1491 			if(nCatLbSelPos==CAT_CURRENCY)
1492 			{
1493 				aLbCurrency.SelectEntryPos((sal_uInt16)pNumFmtShell->GetCurrencySymbol());
1494 			}
1495 
1496 			if(bOneAreaFlag && (nFixedCategory!=nCatLbSelPos))
1497 			{
1498 				if(bAdded) DeleteEntryList_Impl(aEntryList);
1499 				bDeleted = pNumFmtShell->RemoveFormat( aFormat,
1500 											   nCatLbSelPos,
1501 											   nFmtLbSelPos,
1502 											   a2EntryList);
1503 				if(bDeleted) DeleteEntryList_Impl(a2EntryList);
1504 				aEdFormat.GrabFocus();
1505 				aEdFormat.SetSelection( Selection( (short)nErrPos, SELECTION_MAX ) );
1506                 nReturn |= nReturnOneArea;
1507 			}
1508 			else
1509 			{
1510 				if ( bAdded && (nFmtLbSelPos != SELPOS_NONE) )
1511 				{
1512 					// Alles klar
1513 					if(bOneAreaFlag)				  //@@ ???
1514 						SetCategory(0);
1515 					else
1516 						SetCategory(nCatLbSelPos );
1517 
1518 					FillFormatListBox_Impl( aEntryList );
1519 					if(aEdComment.GetText()!=aLbCategory.GetEntry(1))
1520 					{
1521 						pNumFmtShell->SetComment4Entry(nFmtLbSelPos,
1522 													aEdComment.GetText());
1523 					}
1524 					else
1525 					{
1526 						pNumFmtShell->SetComment4Entry(nFmtLbSelPos,
1527 														String());
1528 					}
1529 					aLbFormat.SelectEntryPos( (sal_uInt16)nFmtLbSelPos );
1530 					aEdFormat.SetText( aFormat );
1531 
1532 					//aEdComment.SetText(String()); //@@ ???
1533 					aEdComment.SetText(aLbCategory.GetEntry(1));	//String fuer Benutzerdefiniert
1534 																	//holen
1535                     ChangePreviewText( (sal_uInt16)nFmtLbSelPos );
1536 				}
1537 			}
1538 		}
1539 		else // Syntaxfehler
1540 		{
1541 			aEdFormat.GrabFocus();
1542 			aEdFormat.SetSelection( Selection( (short)nErrPos, SELECTION_MAX ) );
1543 		}
1544 		EditHdl_Impl( &aEdFormat );
1545         nReturn = ((nReturn & nReturnOneArea) ? 0 : (nReturn & nReturnChanged));
1546 	}
1547 	else if(pIB==&aIbRemove)
1548 	{
1549 		String		aFormat	= aEdFormat.GetText();
1550 		SvxDelStrgs	aEntryList;
1551 		sal_uInt16		nCatLbSelPos = 0;
1552 		short		nFmtLbSelPos = SELPOS_NONE;
1553 
1554 		bDeleted = pNumFmtShell->RemoveFormat( aFormat,
1555 											   nCatLbSelPos,
1556 											   nFmtLbSelPos,
1557 											   aEntryList );
1558 
1559 		aEdComment.SetText(aLbCategory.GetEntry(1));
1560 		if ( bDeleted )
1561 		{
1562 			if(nFmtLbSelPos>=0 &&  nFmtLbSelPos<aEntryList.Count())
1563 			{
1564 				aFormat	= *aEntryList[nFmtLbSelPos];
1565 			}
1566 
1567 			FillFormatListBox_Impl( aEntryList );
1568 
1569 			if ( nFmtLbSelPos != SELPOS_NONE )
1570 			{
1571 				if(bOneAreaFlag)				  //@@ ???
1572 						SetCategory(0);
1573 					else
1574 						SetCategory(nCatLbSelPos );
1575 
1576 				aLbFormat.SelectEntryPos( (sal_uInt16)nFmtLbSelPos );
1577 				aEdFormat.SetText( aFormat );
1578                 ChangePreviewText( (sal_uInt16)nFmtLbSelPos );
1579 			}
1580 			else
1581 			{
1582 				// auf "Alle/Standard" setzen
1583 				SetCategory(0 );
1584 				SelFormatHdl_Impl( &aLbCategory );
1585 			}
1586 		}
1587 		EditHdl_Impl( &aEdFormat );
1588 	}
1589 	else if(pIB==&aIbInfo)
1590 	{
1591 		if(!(pLastActivWindow== (Window *) &aEdComment))
1592 		{
1593 			aEdComment.SetText(aFtComment.GetText());
1594 			aEdComment.Show();
1595 			aFtComment.Hide();
1596 			aEdComment.GrabFocus();
1597 		}
1598 		else
1599 		{
1600 			aEdFormat.GrabFocus();
1601 			aEdComment.Hide();
1602 			aFtComment.Show();
1603 		}
1604 	}
1605 
1606     return nReturn;
1607 }
1608 
1609 
1610 /*************************************************************************
1611 #*	Methode:	EditHdl_Impl								Datum:02.10.97
1612 #*------------------------------------------------------------------------
1613 #*
1614 #*  Klasse:		SvxNumberFormatTabPage
1615 #*
1616 #*  Funktion:	Wenn der Eintrag im Eingabefeld geaendert wird,
1617 #*				so wird die Vorschau aktualisiert und
1618 #*
1619 #*  Input:		Pointer auf Editbox
1620 #*
1621 #*	Output:		---
1622 #*
1623 #************************************************************************/
1624 
1625 IMPL_LINK( SvxNumberFormatTabPage, EditHdl_Impl, Edit*, pEdFormat )
1626 {
1627 	sal_uInt32 nCurKey = NUMKEY_UNDEFINED;
1628 
1629 	if ( aEdFormat.GetText().Len() == 0 )
1630 	{
1631 		aIbAdd.Enable(sal_False );
1632 		aIbRemove.Enable(sal_False );
1633 		aIbInfo.Enable(sal_False );
1634 		aFtComment.SetText(String());
1635 	}
1636 	else
1637 	{
1638 		String aFormat = aEdFormat.GetText();
1639 		//aFtComment.SetText(String());
1640         MakePreviewText( aFormat );
1641 
1642 		if ( pNumFmtShell->FindEntry( aFormat, &nCurKey ) )
1643 		{
1644 			aIbAdd.Enable(sal_False );
1645 			sal_Bool bUserDef=pNumFmtShell->IsUserDefined( aFormat );
1646 
1647 			aIbRemove.Enable(bUserDef);
1648 			aIbInfo.Enable(bUserDef);
1649 
1650 			if(bUserDef)
1651 			{
1652 				sal_uInt16 nTmpCurPos=pNumFmtShell->FindCurrencyFormat(aFormat );
1653 
1654 				if(nTmpCurPos!=(sal_uInt16)-1)
1655 					aLbCurrency.SelectEntryPos(nTmpCurPos);
1656 			}
1657 			short nPosi=pNumFmtShell->GetListPos4Entry(aFormat);
1658 			if(nPosi>=0)
1659 				aLbFormat.SelectEntryPos( (sal_uInt16)nPosi);
1660 
1661 		}
1662 		else
1663 		{
1664 
1665 			aIbAdd.Enable(sal_True );
1666 			aIbInfo.Enable(sal_True);
1667 			aIbRemove.Enable(sal_False );
1668 
1669 			aFtComment.SetText(aEdComment.GetText());
1670 
1671 		}
1672 	}
1673 
1674 	if ( pEdFormat )
1675 	{
1676 		pNumFmtShell->SetCurNumFmtKey( nCurKey );
1677 		UpdateOptions_Impl( sal_True );
1678 	}
1679 
1680 	return 0;
1681 }
1682 
1683 
1684 /*************************************************************************
1685 #*	Methode:		NotifyChange							Datum:02.10.97
1686 #*------------------------------------------------------------------------
1687 #*
1688 #*  Klasse:		SvxNumberFormatTabPage
1689 #*
1690 #*  Funktion:	Fuehrt Aenderungen in den Zahlen- Attributen durch.
1691 #*
1692 #*  Input:		Options- Controls
1693 #*
1694 #*	Output:		---
1695 #*
1696 #************************************************************************/
1697 
1698 IMPL_LINK( SvxNumberFormatTabPage, OptHdl_Impl, void *, pOptCtrl )
1699 {
1700 	if (   ((NumericField*)pOptCtrl == &aEdLeadZeroes)
1701 		|| ((NumericField*)pOptCtrl == &aEdDecimals)
1702 		|| ((CheckBox*)    pOptCtrl == &aBtnNegRed)
1703 		|| ((CheckBox*)    pOptCtrl == &aBtnThousand) )
1704 	{
1705 		String		  aFormat;
1706 		sal_Bool		  bThousand 	=    aBtnThousand.IsEnabled()
1707 									  && aBtnThousand.IsChecked();
1708 		sal_Bool		  bNegRed		=    aBtnNegRed.IsEnabled()
1709 									  && aBtnNegRed.IsChecked();
1710 		sal_uInt16		  nPrecision	= (aEdDecimals.IsEnabled())
1711 										? (sal_uInt16)aEdDecimals.GetValue()
1712 										: (sal_uInt16)0;
1713 		sal_uInt16		  nLeadZeroes	= (aEdLeadZeroes.IsEnabled())
1714 										? (sal_uInt16)aEdLeadZeroes.GetValue()
1715 										: (sal_uInt16)0;
1716 
1717 		pNumFmtShell->MakeFormat( aFormat,
1718 								  bThousand, bNegRed,
1719 								  nPrecision, nLeadZeroes,
1720 								  (sal_uInt16)aLbFormat.GetSelectEntryPos() );
1721 
1722 		aEdFormat.SetText( aFormat );
1723 		//aFtComment.SetText(String());
1724         MakePreviewText( aFormat );
1725 
1726 		if ( pNumFmtShell->FindEntry( aFormat ) )
1727 		{
1728 			aIbAdd.Enable(sal_False );
1729 			sal_Bool bUserDef=pNumFmtShell->IsUserDefined( aFormat );
1730 			aIbRemove.Enable(bUserDef);
1731 			aIbInfo.Enable(bUserDef);
1732 			EditHdl_Impl( &aEdFormat);
1733 
1734 		}
1735 		else
1736 		{
1737 			EditHdl_Impl( NULL );
1738 			aLbFormat.SetNoSelection();
1739 		}
1740 	}
1741 	return 0;
1742 }
1743 
1744 IMPL_LINK( SvxNumberFormatTabPage, TimeHdl_Impl, Timer*, EMPTYARG)
1745 {
1746 	pLastActivWindow=NULL;
1747 	return 0;
1748 }
1749 
1750 
1751 /*************************************************************************
1752 #*	Methode:	LostFocusHdl_Impl							Datum:30.10.97
1753 #*------------------------------------------------------------------------
1754 #*
1755 #*  Klasse:		SvxNumberFormatTabPage
1756 #*
1757 #*  Funktion:	Fuehrt Aenderungen in den Zahlen- Attributen durch.
1758 #*
1759 #*  Input:		Options- Controls
1760 #*
1761 #*	Output:		---
1762 #*
1763 #************************************************************************/
1764 
1765 IMPL_LINK( SvxNumberFormatTabPage, LostFocusHdl_Impl, Edit *, pEd)
1766 {
1767 	if (pEd==&aEdComment)
1768 	{
1769 		aResetWinTimer.Start();
1770 		aFtComment.SetText(aEdComment.GetText());
1771 		aEdComment.Hide();
1772 		aFtComment.Show();
1773 		if(!aIbAdd.IsEnabled())
1774 		{
1775 			sal_uInt16	nSelPos = (sal_uInt16) aLbFormat.GetSelectEntryPos();
1776 			pNumFmtShell->SetComment4Entry(nSelPos,
1777 										aEdComment.GetText());
1778 			aEdComment.SetText(aLbCategory.GetEntry(1));	//String fuer Benutzerdefiniert
1779 															//holen
1780 		}
1781 	}
1782 	return 0;
1783 }
1784 
1785 /*************************************************************************
1786 #*	Methode:		NotifyChange							Datum:02.10.97
1787 #*------------------------------------------------------------------------
1788 #*
1789 #*  Klasse:		SvxNumberFormatTabPage
1790 #*
1791 #*  Funktion:	Fuehrt Aenderungen in den Zahlen- Attributen durch.
1792 #*
1793 #*  Input:		Options- Controls
1794 #*
1795 #*	Output:		---
1796 #*
1797 #************************************************************************/
1798 
1799 String SvxNumberFormatTabPage::GetExpColorString(
1800         Color*& rpPreviewColor, const String& rFormatStr, short nTmpCatPos)
1801 {
1802     double nVal = 0;
1803 	switch (nTmpCatPos)
1804 	{
1805 		case CAT_CURRENCY:		nVal=SVX_NUMVAL_CURRENCY; break;
1806 
1807 		case CAT_SCIENTIFIC:
1808 		case CAT_FRACTION:
1809 		case CAT_NUMBER:		nVal=SVX_NUMVAL_STANDARD; break;
1810 
1811 		case CAT_PERCENT:		nVal=SVX_NUMVAL_PERCENT; break;
1812 
1813 		case CAT_ALL:			nVal=SVX_NUMVAL_STANDARD; break;
1814 
1815 		case CAT_TIME:			nVal=SVX_NUMVAL_TIME; break;
1816 		case CAT_DATE:			nVal=SVX_NUMVAL_DATE; break;
1817 
1818 		case CAT_BOOLEAN:		nVal=SVX_NUMVAL_BOOLEAN; break;
1819 
1820 		case CAT_USERDEFINED:
1821 		case CAT_TEXT:
1822 		default:				nVal=0;break;
1823 	}
1824 
1825     String aPreviewString;
1826     pNumFmtShell->MakePrevStringFromVal( rFormatStr, aPreviewString, rpPreviewColor, nVal );
1827 	return aPreviewString;
1828 }
1829 
1830 void SvxNumberFormatTabPage::MakePreviewText( const String& rFormat )
1831 {
1832     String aPreviewString;
1833     Color* pPreviewColor = NULL;
1834     pNumFmtShell->MakePreviewString( rFormat, aPreviewString, pPreviewColor );
1835     aWndPreview.NotifyChange( aPreviewString, pPreviewColor );
1836 }
1837 
1838 void SvxNumberFormatTabPage::ChangePreviewText( sal_uInt16 nPos )
1839 {
1840     String aPreviewString;
1841     Color* pPreviewColor = NULL;
1842     pNumFmtShell->FormatChanged( nPos, aPreviewString, pPreviewColor );
1843     aWndPreview.NotifyChange( aPreviewString, pPreviewColor );
1844 }
1845 
1846 long SvxNumberFormatTabPage::PreNotify( NotifyEvent& rNEvt )
1847 {
1848 	if(rNEvt.GetType()==EVENT_LOSEFOCUS)
1849 	{
1850         if ( rNEvt.GetWindow() == dynamic_cast< Window* >( &aEdComment ) && !aEdComment.IsVisible() )
1851         {
1852             pLastActivWindow = NULL;
1853         }
1854         else
1855         {
1856             pLastActivWindow = rNEvt.GetWindow();
1857         }
1858 	}
1859 
1860 	return SfxTabPage::PreNotify( rNEvt );
1861 }
1862 /*************************************************************************
1863 #*	Methode:	SetOkHdl									Datum:01.11.97
1864 #*------------------------------------------------------------------------
1865 #*
1866 #*  Klasse:		SvxNumberFormatTabPage
1867 #*
1868 #*  Funktion:	Setzt den OkHandler neu.
1869 #*
1870 #*  Input:		Neuer OkHandler
1871 #*
1872 #*	Output:		---
1873 #*
1874 #************************************************************************/
1875 
1876 void SvxNumberFormatTabPage::SetOkHdl( const Link& rOkHandler )
1877 {
1878 	fnOkHdl = rOkHandler;
1879 }
1880 
1881 void SvxNumberFormatTabPage::FillCurrencyBox()
1882 {
1883 	SvStringsDtor	aList;
1884 	NfShCurrencyEntries rEntries;
1885 	XubString*		pEntry = NULL;
1886 	sal_uInt16	nPos=0;
1887 	sal_uInt16	nSelPos=0;
1888 
1889 	pNumFmtShell->GetCurrencySymbols( aList, &nSelPos);
1890 
1891 	for(sal_uInt16 i=1;i<aList.Count();i++)
1892 	{
1893 		pEntry=aList[i];
1894 		nPos=aLbCurrency.InsertEntry( *pEntry);
1895 	}
1896 	aLbCurrency.SelectEntryPos(nSelPos);
1897 }
1898 
1899 void SvxNumberFormatTabPage::SetCategory(sal_uInt16 nPos)
1900 {
1901 	sal_uInt16	nCurCategory = aLbCategory.GetSelectEntryPos();
1902 	Point aPos=aLbFormat.GetPosPixel();
1903 	Size  aSize=aLbFormat.GetSizePixel();
1904 	sal_uInt16 nTmpCatPos;
1905 
1906 	if(bOneAreaFlag)
1907 	{
1908 		nTmpCatPos=nFixedCategory;
1909 	}
1910 	else
1911 	{
1912 		nTmpCatPos=nPos;
1913 	}
1914 
1915 	if(aLbCategory.GetEntryCount()==1 || nCurCategory!=nPos)
1916 	{
1917 		if(nTmpCatPos!=CAT_CURRENCY)
1918 		{
1919 			aPos.Y()=nStdFormatY;
1920 			aSize.Height()=nStdFormatHeight;
1921 			aLbFormat.SetPosSizePixel(aPos,aSize);
1922 			aLbCurrency.Hide();
1923 		}
1924 		else
1925 		{
1926 			aPos.Y()=nCurFormatY;
1927 			aSize.Height()=nCurFormatHeight;
1928 			aLbFormat.SetPosSizePixel(aPos,aSize);
1929 			aLbCurrency.Show();
1930 		}
1931 	}
1932     aLbCategory.SelectEntryPos(nPos);
1933 }
1934 /* -----------------12.11.2002 14:35-----------------
1935  * to support Writer text field language handling an
1936  * additional entry needs to be inserted into the ListBox
1937  * which marks a certain language as automatically detected
1938  * Additionally the "Default" language is removed
1939  * --------------------------------------------------*/
1940 void SvxNumberFormatTabPage::AddAutomaticLanguage_Impl(LanguageType eAutoLang, sal_Bool bSelect)
1941 {
1942     aLbLanguage.RemoveLanguage(LANGUAGE_SYSTEM);
1943     sal_uInt16 nPos = aLbLanguage.InsertEntry(sAutomaticEntry);
1944     aLbLanguage.SetEntryData(nPos, (void*)(sal_uLong)eAutoLang);
1945     if(bSelect)
1946 		aLbLanguage.SelectEntryPos(nPos);
1947 }
1948 
1949 void SvxNumberFormatTabPage::PageCreated (SfxAllItemSet aSet) //add CHINA001
1950 {
1951 	SFX_ITEMSET_ARG (&aSet,pNumberInfoItem,SvxNumberInfoItem,SID_ATTR_NUMBERFORMAT_INFO,sal_False);
1952 	SFX_ITEMSET_ARG (&aSet,pLinkItem,SfxLinkItem,SID_LINK_TYPE,sal_False);
1953 	if (pNumberInfoItem)
1954 		SetNumberFormatList(*pNumberInfoItem);
1955 	if (pLinkItem)
1956 		SetOkHdl(pLinkItem->GetValue());
1957 }
1958