xref: /AOO41X/main/cui/source/tabpages/numfmt.cxx (revision 2ee96f1cdb99d49425d866b1ec4c5567f37285e6)
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