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