1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: numfmt.cxx,v $
10 * $Revision: 1.32.128.1 $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 #if !ENABLE_LAYOUT_EXPERIMENTAL
32 //#undef ENABLE_LAYOUT
35 // MARKER(update_precomp.py): autogen include statement, do not remove
36 #include "precompiled_svx.hxx"
38 #ifdef SVX_DLLIMPLEMENTATION
39 #undef SVX_DLLIMPLEMENTATION
42 // include ---------------------------------------------------------------
43 #include <svtools/eitem.hxx>
44 #include <svtools/intitem.hxx>
45 #include <sfx2/objsh.hxx>
46 #include <vcl/svapp.hxx>
47 #include <unotools/localedatawrapper.hxx>
48 #include <i18npool/lang.h>
50 #define _SVSTDARR_STRINGS
51 #define _SVSTDARR_STRINGSDTOR
52 #include <svtools/svstdarr.hxx>
53 #include <svtools/colorcfg.hxx>
55 #define _SVX_NUMFMT_CXX
57 #include <svx/dialogs.hrc>
60 #include <svx/numinf.hxx>
63 #include <svx/numfmtsh.hxx>
64 #include <svx/dialmgr.hxx>
65 #include <sfx2/request.hxx> //CHINA001
66 #include <sfx2/app.hxx> //CHINA001
67 #include <sfx2/basedlgs.hxx>
68 #include "flagsdef.hxx" //CHINA001
70 #define NUMKEY_UNDEFINED SAL_MAX_UINT32
72 // static ----------------------------------------------------------------
74 static USHORT pRanges
[] =
76 SID_ATTR_NUMBERFORMAT_VALUE
,
77 SID_ATTR_NUMBERFORMAT_INFO
,
78 SID_ATTR_NUMBERFORMAT_NOLANGUAGE
,
79 SID_ATTR_NUMBERFORMAT_NOLANGUAGE
,
80 SID_ATTR_NUMBERFORMAT_ONE_AREA
,
81 SID_ATTR_NUMBERFORMAT_ONE_AREA
,
82 SID_ATTR_NUMBERFORMAT_SOURCE
,
83 SID_ATTR_NUMBERFORMAT_SOURCE
,
87 /*************************************************************************
88 #* Methode: SvxNumberPreviewImpl Datum:02.10.97
89 #*------------------------------------------------------------------------
91 #* Klasse: SvxNumberPreview
93 #* Funktion: Konstruktor der Klasse SvxNumberPreviewImpl
95 #* Input: Fenster, Resource-ID
99 #************************************************************************/
101 SvxNumberPreviewImpl::SvxNumberPreviewImpl( Window
* pParent
, const ResId
& rResId
) :
103 Window( pParent
, rResId
)
106 Font
aFont( GetFont() );
107 aFont
.SetTransparent( TRUE
);
108 aFont
.SetColor( Application::GetSettings().GetStyleSettings().GetFieldColor() );
110 InitSettings( TRUE
, TRUE
);
111 SetBorderStyle( WINDOW_BORDER_MONO
);
114 /*************************************************************************
115 #* Methode: SvxNumberPreviewImpl Datum:02.10.97
116 #*------------------------------------------------------------------------
118 #* Klasse: SvxNumberPreview
120 #* Funktion: Destruktor der Klasse SvxNumberPreviewImpl
126 #************************************************************************/
128 SvxNumberPreviewImpl::~SvxNumberPreviewImpl()
132 /*************************************************************************
133 #* Methode: NotifyChange Datum:02.10.97
134 #*------------------------------------------------------------------------
136 #* Klasse: SvxNumberPreviewImpl
138 #* Funktion: Funktion fuer das Aendern des Preview- Strings
140 #* Input: String, Farbe
144 #************************************************************************/
146 void SvxNumberPreviewImpl::NotifyChange( const String
& rPrevStr
,
147 const Color
* pColor
)
150 svtools::ColorConfig aColorConfig
;
151 Color
aWindowTextColor( aColorConfig
.GetColorValue( svtools::FONTCOLOR
).nColor
);
152 aPrevCol
= pColor
? *pColor
: aWindowTextColor
;
157 /*************************************************************************
158 #* Methode: Paint Datum:02.10.97
159 #*------------------------------------------------------------------------
161 #* Klasse: SvxNumberPreviewImpl
163 #* Funktion: Funktion fuer das neu zeichnen des Fensters.
169 #************************************************************************/
171 void SvxNumberPreviewImpl::Paint( const Rectangle
& )
173 Font aDrawFont
= GetFont();
174 Size aSzWnd
= GetOutputSizePixel();
175 Point aPosText
= Point( (aSzWnd
.Width() - GetTextWidth( aPrevStr
)) /2,
176 (aSzWnd
.Height() - GetTextHeight())/2 );
178 aDrawFont
.SetColor( aPrevCol
);
179 SetFont( aDrawFont
);
180 DrawText( aPosText
, aPrevStr
);
183 // -----------------------------------------------------------------------
185 void SvxNumberPreviewImpl::InitSettings( BOOL bForeground
, BOOL bBackground
)
187 const StyleSettings
& rStyleSettings
= Application::GetSettings().GetStyleSettings();
191 svtools::ColorConfig aColorConfig
;
192 Color
aTextColor( aColorConfig
.GetColorValue( svtools::FONTCOLOR
).nColor
);
194 if ( IsControlForeground() )
195 aTextColor
= GetControlForeground();
196 SetTextColor( aTextColor
);
201 if ( IsControlBackground() )
202 SetBackground( GetControlBackground() );
204 SetBackground( rStyleSettings
.GetWindowColor() );
209 // -----------------------------------------------------------------------
211 void SvxNumberPreviewImpl::StateChanged( StateChangedType nType
)
213 if ( nType
== STATE_CHANGE_CONTROLFOREGROUND
)
214 InitSettings( TRUE
, FALSE
);
215 else if ( nType
== STATE_CHANGE_CONTROLBACKGROUND
)
216 InitSettings( FALSE
, TRUE
);
218 Window::StateChanged( nType
);
221 // -----------------------------------------------------------------------
223 void SvxNumberPreviewImpl::DataChanged( const DataChangedEvent
& rDCEvt
)
225 Window::DataChanged( rDCEvt
);
227 if ( ( rDCEvt
.GetType() == DATACHANGED_SETTINGS
) && ( rDCEvt
.GetFlags() & SETTINGS_STYLE
) )
228 InitSettings( TRUE
, TRUE
);
231 // class SvxNumberFormatTabPage ------------------------------------------
233 #define REMOVE_DONTKNOW() \
234 if ( !aFtLanguage.IsEnabled() ) \
236 aFtLanguage .Enable(); \
237 aLbLanguage .Enable(); \
238 aLbLanguage .SelectLanguage( pNumFmtShell->GetCurLanguage() ); \
241 #define HDL(hdl) LINK( this, SvxNumberFormatTabPage, hdl )
243 #include <layout/layout-pre.hxx>
247 #define SVX_RES(x) #x
248 #define SVX_RES_PLAIN(x) ResId (x, DIALOG_MGR ())
249 #define THIS_SVX_RES(x) this, #x
251 #define SfxTabPage( parent, id, args ) SfxTabPage( parent, "number-format.xml", id, &args )
252 #else /* !ENABLE_LAYOUT */
253 #define SVX_RES_PLAIN SVX_RES
254 #define THIS_SVX_RES SVX_RES
255 #endif /* !ENABLE_LAYOUT */
257 SvxNumberFormatTabPage::SvxNumberFormatTabPage( Window
* pParent
,
258 const SfxItemSet
& rCoreAttrs
)
260 : SfxTabPage( pParent
, SVX_RES( RID_SVXPAGE_NUMBERFORMAT
), rCoreAttrs
),
262 aFtCategory ( this, SVX_RES( FT_CATEGORY
) ),
263 aLbCategory ( this, SVX_RES( LB_CATEGORY
) ),
264 aFtFormat ( this, SVX_RES( FT_FORMAT
) ),
265 aLbCurrency ( this, SVX_RES( LB_CURRENCY
) ),
266 aLbFormat ( this, SVX_RES( LB_FORMAT
) ),
267 aFtLanguage ( this, SVX_RES( FT_LANGUAGE
) ),
268 aLbLanguage ( this, SVX_RES( LB_LANGUAGE
), FALSE
),
269 aCbSourceFormat ( this, SVX_RES( CB_SOURCEFORMAT
) ),
270 aFtDecimals ( this, SVX_RES( FT_DECIMALS
) ),
271 aEdDecimals ( this, SVX_RES( ED_DECIMALS
) ),
272 aFtLeadZeroes ( this, SVX_RES( FT_LEADZEROES
) ),
273 aEdLeadZeroes ( this, SVX_RES( ED_LEADZEROES
) ),
274 aBtnNegRed ( this, SVX_RES( BTN_NEGRED
) ),
275 aBtnThousand ( this, SVX_RES( BTN_THOUSAND
) ),
276 aFlOptions ( this, SVX_RES( FL_OPTIONS
) ),
278 aFtEdFormat ( this, SVX_RES( FT_EDFORMAT
) ),
279 aEdFormat ( this, SVX_RES( ED_FORMAT
) ),
280 aIbAdd ( this, SVX_RES( IB_ADD
) ),
281 aIbInfo ( this, SVX_RES( IB_INFO
) ),
282 aIbRemove ( this, SVX_RES( IB_REMOVE
) ),
283 aFtComment ( this, SVX_RES( FT_COMMENT
) ),
284 aEdComment ( this, SVX_RES( ED_COMMENT
) ),
287 aWndPreview ( LAYOUT_THIS_WINDOW(this), SVX_RES_PLAIN( WND_NUMBER_PREVIEW
) ),
289 aWndPreview ( this, SVX_RES_PLAIN( WND_NUMBER_PREVIEW
) ),
292 pNumFmtShell ( NULL
),
293 nInitFormat ( ULONG_MAX
),
295 sAutomaticEntry ( THIS_SVX_RES( STR_AUTO_ENTRY
)),
296 pLastActivWindow( NULL
)
300 #endif /* ENABLE_LAYOUT */
303 SetExchangeSupport(); // diese Page braucht ExchangeSupport
308 SvxNumberFormatTabPage::~SvxNumberFormatTabPage()
314 void SvxNumberFormatTabPage::Init_Impl()
316 ImageList
aIconList( SVX_RES_PLAIN ( IL_ICON
) );
317 ImageList
aIconListHC( SVX_RES_PLAIN ( IL_ICON_HC
) );
322 nCatHeight
=aLbCategory
.GetSizePixel().Height();
324 nCurFormatY
=aLbFormat
.GetPosPixel().Y();
325 nCurFormatHeight
=aLbFormat
.GetSizePixel().Height();
326 nStdFormatY
=aLbCurrency
.GetPosPixel().Y();
327 nStdFormatHeight
=nCurFormatY
-nStdFormatY
+nCurFormatHeight
;
329 aIbAdd
. SetModeImage( aIconList
.GetImage( IID_ADD
) );
330 aIbAdd
. SetModeImage( aIconListHC
.GetImage( IID_ADD
), BMP_COLOR_HIGHCONTRAST
);
332 aIbRemove
. SetModeImage( aIconList
.GetImage( IID_REMOVE
) );
333 aIbRemove
. SetModeImage( aIconListHC
.GetImage( IID_REMOVE
), BMP_COLOR_HIGHCONTRAST
);
335 aIbInfo
. SetModeImage( aIconList
.GetImage( IID_INFO
) );
336 aIbInfo
. SetModeImage( aIconListHC
.GetImage( IID_INFO
), BMP_COLOR_HIGHCONTRAST
);
338 aIbAdd
.Enable(FALSE
);
339 aIbRemove
.Enable(FALSE
);
340 aIbInfo
.Enable(FALSE
);
342 aEdComment
.SetText(aLbCategory
.GetEntry(1)); //String fuer Benutzerdefiniert
346 aCbSourceFormat
.Check( FALSE
);
347 aCbSourceFormat
.Disable();
348 aCbSourceFormat
.Hide();
351 Link aLink
= LINK( this, SvxNumberFormatTabPage
, SelFormatHdl_Impl
);
353 aLbCategory
.SetSelectHdl( aLink
);
354 aLbFormat
.SetSelectHdl( aLink
);
355 aLbLanguage
.SetSelectHdl( aLink
);
356 aLbCurrency
.SetSelectHdl( aLink
);
357 aCbSourceFormat
.SetClickHdl( aLink
);
359 aLink
= LINK( this, SvxNumberFormatTabPage
, OptHdl_Impl
);
361 aEdDecimals
.SetModifyHdl( aLink
);
362 aEdLeadZeroes
.SetModifyHdl( aLink
);
363 aBtnNegRed
.SetClickHdl( aLink
);
364 aBtnThousand
.SetClickHdl( aLink
);
365 aLbFormat
.SetDoubleClickHdl( HDL( DoubleClickHdl_Impl
) );
366 aEdFormat
.SetModifyHdl( HDL( EditHdl_Impl
) );
367 aIbAdd
.SetClickHdl( HDL( ClickHdl_Impl
) );
368 aIbRemove
.SetClickHdl( HDL( ClickHdl_Impl
) );
369 aIbInfo
.SetClickHdl( HDL( ClickHdl_Impl
) );
371 aLink
= LINK( this, SvxNumberFormatTabPage
, LostFocusHdl_Impl
);
373 aEdComment
.SetLoseFocusHdl( aLink
);
374 aResetWinTimer
.SetTimeoutHdl(LINK( this, SvxNumberFormatTabPage
, TimeHdl_Impl
));
375 aResetWinTimer
.SetTimeout( 10);
377 // Sprachen-ListBox initialisieren
379 aLbLanguage
.InsertLanguage( LANGUAGE_SYSTEM
);
380 // Don't list ambiguous locales where we won't be able to convert the
381 // LanguageType back to an identical Language_Country name and therefore
382 // couldn't load the i18n LocaleData. Show DebugMsg in non-PRODUCT version.
383 ::com::sun::star::uno::Sequence
< sal_uInt16
> xLang
=
384 LocaleDataWrapper::getInstalledLanguageTypes();
385 sal_Int32 nCount
= xLang
.getLength();
386 for ( sal_Int32 i
=0; i
<nCount
; i
++ )
388 aLbLanguage
.InsertLanguage( xLang
[i
] );
392 /*************************************************************************
393 #* Methode: GetRanges Datum:02.10.97
394 #*------------------------------------------------------------------------
396 #* Klasse: SvxNumberFormatTabPage
398 #* Funktion: Liefert Bereichsangaben zurueck.
404 #************************************************************************/
406 USHORT
* SvxNumberFormatTabPage::GetRanges()
412 /*************************************************************************
413 #* Methode: Create Datum:02.10.97
414 #*------------------------------------------------------------------------
416 #* Klasse: SvxNumberFormatTabPage
418 #* Funktion: Erzeugt eine neue Zahlenformat- Seite.
420 #* Input: Fenster, SfxItemSet
422 #* Output: neue TabPage
424 #************************************************************************/
426 SfxTabPage
* SvxNumberFormatTabPage::Create( Window
* pParent
,
427 const SfxItemSet
& rAttrSet
)
429 return ( new SvxNumberFormatTabPage( pParent
, rAttrSet
) );
433 /*************************************************************************
434 #* Methode: Reset Datum:02.10.97
435 #*------------------------------------------------------------------------
437 #* Klasse: SvxNumberFormatTabPage
439 #* Funktion: Die Attribute des Dialogs werden mit Hilfe
440 #* des Itemsets neu eingestellt.
446 #************************************************************************/
448 void SvxNumberFormatTabPage::Reset( const SfxItemSet
& rSet
)
450 const SfxUInt32Item
* pValFmtAttr
= NULL
;
451 const SfxPoolItem
* pItem
= NULL
;
452 const SfxBoolItem
* pAutoEntryAttr
= NULL
;
454 USHORT nCatLbSelPos
= 0;
455 USHORT nFmtLbSelPos
= 0;
456 LanguageType eLangType
= LANGUAGE_DONTKNOW
;
457 SvxDelStrgs aFmtEntryList
;
458 SvxNumberValueType eValType
= SVX_VALUE_TYPE_UNDEFINED
;
459 double nValDouble
= 0;
461 SfxItemState eState
= SFX_ITEM_DONTCARE
;
464 eState
= rSet
.GetItemState( GetWhich( SID_ATTR_NUMBERFORMAT_NOLANGUAGE
),TRUE
,&pItem
);
466 if(eState
==SFX_ITEM_SET
)
468 const SfxBoolItem
* pBoolLangItem
= (const SfxBoolItem
*)
469 GetItem( rSet
, SID_ATTR_NUMBERFORMAT_NOLANGUAGE
);
471 if(pBoolLangItem
!=NULL
&& pBoolLangItem
->GetValue())
482 eState
= rSet
.GetItemState( GetWhich( SID_ATTR_NUMBERFORMAT_INFO
),TRUE
,&pItem
);
484 if(eState
==SFX_ITEM_SET
)
489 pNumItem
= (SvxNumberInfoItem
*) pItem
->Clone();
502 eState
= rSet
.GetItemState( GetWhich( SID_ATTR_NUMBERFORMAT_ONE_AREA
));
504 if(eState
==SFX_ITEM_SET
)
506 const SfxBoolItem
* pBoolItem
= (const SfxBoolItem
*)
507 GetItem( rSet
, SID_ATTR_NUMBERFORMAT_ONE_AREA
);
511 bOneAreaFlag
= pBoolItem
->GetValue();
514 //bOneAreaFlag=TRUE; //@@ Debug-Test
516 eState
= rSet
.GetItemState( GetWhich( SID_ATTR_NUMBERFORMAT_SOURCE
) );
518 if ( eState
== SFX_ITEM_SET
)
520 const SfxBoolItem
* pBoolItem
= (const SfxBoolItem
*)
521 GetItem( rSet
, SID_ATTR_NUMBERFORMAT_SOURCE
);
523 aCbSourceFormat
.Check( pBoolItem
->GetValue() );
525 aCbSourceFormat
.Check( FALSE
);
526 aCbSourceFormat
.Enable();
527 aCbSourceFormat
.Show();
531 BOOL bInit
= FALSE
; // set to TRUE for debug test
532 aCbSourceFormat
.Check( bInit
);
533 aCbSourceFormat
.Enable( bInit
);
534 aCbSourceFormat
.Show( bInit
);
537 // pNumItem muss von aussen gesetzt worden sein!
538 DBG_ASSERT( pNumItem
, "No NumberInfo, no NumberFormatter, good bye.CRASH. :-(" );
540 // aktuellen Zahlenformat-Tabellenindex holen
541 eState
= rSet
.GetItemState( GetWhich( SID_ATTR_NUMBERFORMAT_VALUE
) );
543 if ( SFX_ITEM_DONTCARE
!= eState
)
544 pValFmtAttr
= (const SfxUInt32Item
*)
545 GetItem( rSet
, SID_ATTR_NUMBERFORMAT_VALUE
);
547 eValType
= pNumItem
->GetValueType();
551 case SVX_VALUE_TYPE_STRING
:
552 aValString
= pNumItem
->GetValueString();
554 case SVX_VALUE_TYPE_NUMBER
:
555 // #50441# string may be set in addition to the value
556 aValString
= pNumItem
->GetValueString();
557 nValDouble
= pNumItem
->GetValueDouble();
559 case SVX_VALUE_TYPE_UNDEFINED
:
564 // nun sind alle Informationen fuer die Formatierer-Shell beisammen:
567 delete pNumFmtShell
; // ggF. alte Shell loeschen (==Reset)
569 nInitFormat
= ( pValFmtAttr
) // Init-Key merken
570 ? pValFmtAttr
->GetValue() // (fuer FillItemSet())
571 : ULONG_MAX
; // == DONT_KNOW
574 if ( eValType
== SVX_VALUE_TYPE_STRING
)
575 pNumFmtShell
=SvxNumberFormatShell::Create(
576 pNumItem
->GetNumberFormatter(),
577 (pValFmtAttr
) ? nInitFormat
: 0L,
581 pNumFmtShell
=SvxNumberFormatShell::Create(
582 pNumItem
->GetNumberFormatter(),
583 (pValFmtAttr
) ? nInitFormat
: 0L,
591 Color
* pDummy
= NULL
;
592 pNumFmtShell
->GetInitSettings( nCatLbSelPos
, eLangType
, nFmtLbSelPos
,
593 aFmtEntryList
, aPrevString
, pDummy
);
595 aLbCurrency
.SelectEntryPos((USHORT
)pNumFmtShell
->GetCurrencySymbol());
597 nFixedCategory
=nCatLbSelPos
;
600 String sFixedCategory
=aLbCategory
.GetEntry(nFixedCategory
);
602 aLbCategory
.InsertEntry(sFixedCategory
);
607 SetCategory(nCatLbSelPos
);
609 eState
= rSet
.GetItemState( GetWhich( SID_ATTR_NUMBERFORMAT_ADD_AUTO
) );
610 if(SFX_ITEM_SET
== eState
)
611 pAutoEntryAttr
= (const SfxBoolItem
*)
612 GetItem( rSet
, SID_ATTR_NUMBERFORMAT_ADD_AUTO
);
613 // no_NO is an alias for nb_NO and normally isn't listed, we need it for
614 // backwards compatibility, but only if the format passed is of
615 // LanguageType no_NO.
616 if ( eLangType
== LANGUAGE_NORWEGIAN
)
618 aLbLanguage
.RemoveLanguage( eLangType
); // in case we're already called
619 aLbLanguage
.InsertLanguage( eLangType
);
621 aLbLanguage
.SelectLanguage( eLangType
);
623 AddAutomaticLanguage_Impl(eLangType
, pAutoEntryAttr
->GetValue());
624 UpdateFormatListBox_Impl(FALSE
,TRUE
);
627 //! This spoils everything because it rematches currency formats based on
628 //! the selected aLbCurrency entry instead of the current format.
629 //! Besides that everything seems to be initialized by now, so why call it?
630 // SelFormatHdl_Impl( &aLbCategory );
634 EditHdl_Impl( &aEdFormat
); // UpdateOptions_Impl() als Seiteneffekt
638 // Kategoriewechsel und direkte Eingabe sind moeglich, sonst nix:
642 if ( aCbSourceFormat
.IsChecked() )
644 // everything disabled except SourceFormat checkbox
645 EnableBySourceFormat_Impl();
648 DeleteEntryList_Impl(aFmtEntryList
);
651 /*************************************************************************
652 #* Methode: Obstructing Datum:02.10.97
653 #*------------------------------------------------------------------------
655 #* Klasse: SvxNumberFormatTabPage
657 #* Funktion: Sperren der Controls mit Ausnahme von Kategoriewechsel
658 #* und direkter Eingabe.
664 #************************************************************************/
665 void SvxNumberFormatTabPage::Obstructing()
667 aLbFormat
.SetNoSelection();
668 aLbLanguage
.SetNoSelection();
669 aFtLanguage
.Disable();
670 aLbLanguage
.Disable();
672 aIbAdd
.Enable(FALSE
);
673 aIbRemove
.Enable(FALSE
);
674 aIbInfo
.Enable(FALSE
);
676 aBtnNegRed
.Disable();
677 aBtnThousand
.Disable();
678 aFtLeadZeroes
.Disable();
679 aFtDecimals
.Disable();
680 aEdLeadZeroes
.Disable();
681 aEdDecimals
.Disable();
682 aFlOptions
.Disable();
683 aEdDecimals
.SetText( String() );
684 aEdLeadZeroes
.SetText( String() );
685 aBtnNegRed
.Check( FALSE
);
686 aBtnThousand
.Check( FALSE
);
687 aWndPreview
.NotifyChange( String() );
689 aLbCategory
.SelectEntryPos( 0 );
690 aEdFormat
.SetText( String() );
691 aFtComment
.SetText( String() );
692 aEdComment
.SetText(aLbCategory
.GetEntry(1)); //String fuer Benutzerdefiniert
695 aEdFormat
.GrabFocus();
699 /*************************************************************************
700 #* Enable/Disable dialog parts depending on the value of the SourceFormat
702 #************************************************************************/
703 void SvxNumberFormatTabPage::EnableBySourceFormat_Impl()
705 BOOL bEnable
= !aCbSourceFormat
.IsChecked();
707 aCbSourceFormat
.GrabFocus();
708 aFtCategory
.Enable( bEnable
);
709 aLbCategory
.Enable( bEnable
);
710 aFtFormat
.Enable( bEnable
);
711 aLbCurrency
.Enable( bEnable
);
712 aLbFormat
.Enable( bEnable
);
713 aFtLanguage
.Enable( bEnable
);
714 aLbLanguage
.Enable( bEnable
);
715 aFtDecimals
.Enable( bEnable
);
716 aEdDecimals
.Enable( bEnable
);
717 aFtLeadZeroes
.Enable( bEnable
);
718 aEdLeadZeroes
.Enable( bEnable
);
719 aBtnNegRed
.Enable( bEnable
);
720 aBtnThousand
.Enable( bEnable
);
721 aFlOptions
.Enable( bEnable
);
722 aFtEdFormat
.Enable( bEnable
);
723 aEdFormat
.Enable( bEnable
);
724 aIbAdd
.Enable( bEnable
);
725 aIbRemove
.Enable( bEnable
);
726 aIbInfo
.Enable( bEnable
);
727 aFtComment
.Enable( bEnable
);
728 aEdComment
.Enable( bEnable
);
729 aLbFormat
.Invalidate(); // #i43322#
733 /*************************************************************************
734 #* Methode: HideLanguage Datum:14.05.98
735 #*------------------------------------------------------------------------
737 #* Klasse: SvxNumberFormatTabPage
739 #* Funktion: Versteckt die Spracheinstellung:
745 #************************************************************************/
747 void SvxNumberFormatTabPage::HideLanguage(BOOL nFlag
)
749 Size aSize
=aLbCategory
.GetSizePixel();
753 aSize
.Height()=aLbFormat
.GetSizePixel().Height();
757 aSize
.Height()=nCatHeight
;
760 aLbCategory
.SetSizePixel(aSize
);
762 aFtLanguage
.Show(!nFlag
);
763 aLbLanguage
.Show(!nFlag
);
766 /*************************************************************************
767 #* Methode: FillItemSet Datum:02.10.97
768 #*------------------------------------------------------------------------
770 #* Klasse: SvxNumberFormatTabPage
772 #* Funktion: Stellt die Attribute im ItemSet ein,
773 #* sowie in der DocShell den numItem, wenn
774 #* bNumItemFlag nicht gesetzt ist.
780 #************************************************************************/
782 BOOL
SvxNumberFormatTabPage::FillItemSet( SfxItemSet
& rCoreAttrs
)
784 BOOL bDataChanged
= aFtLanguage
.IsEnabled() || aCbSourceFormat
.IsEnabled();
787 const SfxItemSet
& rMyItemSet
= GetItemSet();
788 USHORT nWhich
= GetWhich( SID_ATTR_NUMBERFORMAT_VALUE
);
789 SfxItemState eItemState
= rMyItemSet
.GetItemState( nWhich
, FALSE
);
791 // OK chosen - Is format code input entered already taken over?
792 // If not, simulate Add. Upon syntax error ignore input and prevent Put.
793 String aFormat
= aEdFormat
.GetText();
794 sal_uInt32 nCurKey
= pNumFmtShell
->GetCurNumFmtKey();
796 if ( aIbAdd
.IsEnabled() || pNumFmtShell
->IsTmpCurrencyFormat(aFormat
) )
797 { // #79599# It is not sufficient to just add the format code (or
798 // delete it in case of bOneAreaFlag and resulting category change).
799 // Upon switching tab pages we need all settings to be consistent
800 // in case this page will be redisplayed later.
801 bDataChanged
= (ClickHdl_Impl( &aIbAdd
) != 0);
802 nCurKey
= pNumFmtShell
->GetCurNumFmtKey();
804 else if(nCurKey
== NUMKEY_UNDEFINED
)
805 { // something went wrong, e.g. in Writer #70281#
806 pNumFmtShell
->FindEntry(aFormat
, &nCurKey
);
809 //---------------------------------------------------------------
814 bDataChanged
= ( nInitFormat
!= nCurKey
);
818 rCoreAttrs
.Put( SfxUInt32Item( nWhich
, nCurKey
) );
820 else if(SFX_ITEM_DEFAULT
== eItemState
)
822 rCoreAttrs
.ClearItem( nWhich
);
826 // --------------------------------------------------------------
827 // List of changed user defined formats:
828 // -------------------------------------
829 const sal_uInt32 nDelCount
= pNumFmtShell
->GetUpdateDataCount();
833 sal_uInt32
* pDelArr
= new sal_uInt32
[nDelCount
];
835 pNumFmtShell
->GetUpdateData( pDelArr
, nDelCount
);
836 pNumItem
->SetDelFormatArray( pDelArr
, nDelCount
);
838 if(bNumItemFlag
==TRUE
)
840 rCoreAttrs
.Put( *pNumItem
);
844 SfxObjectShell
* pDocSh
= SfxObjectShell::Current();
846 DBG_ASSERT( pDocSh
, "DocShell not found!" );
850 pDocSh
->PutItem( *pNumItem
);
855 //---------------------------------------------------------------
856 // Whether source format is to be taken or not:
857 // --------------------------------------------
858 if ( aCbSourceFormat
.IsEnabled() )
860 USHORT _nWhich
= GetWhich( SID_ATTR_NUMBERFORMAT_SOURCE
);
861 SfxItemState _eItemState
= rMyItemSet
.GetItemState( _nWhich
, FALSE
);
862 const SfxBoolItem
* pBoolItem
= (const SfxBoolItem
*)
863 GetItem( rMyItemSet
, SID_ATTR_NUMBERFORMAT_SOURCE
);
864 BOOL bOld
= (pBoolItem
? pBoolItem
->GetValue() : FALSE
);
865 rCoreAttrs
.Put( SfxBoolItem( _nWhich
, aCbSourceFormat
.IsChecked() ) );
867 bDataChanged
= (bOld
!= (BOOL
) aCbSourceFormat
.IsChecked() ||
868 _eItemState
!= SFX_ITEM_SET
);
871 // FillItemSet is only called on OK, here we can notify the
872 // NumberFormatShell that all new user defined formats are valid.
873 pNumFmtShell
->ValidateNewEntries();
874 if(aLbLanguage
.IsVisible() &&
875 LISTBOX_ENTRY_NOTFOUND
!= aLbLanguage
.GetEntryPos(sAutomaticEntry
))
876 rCoreAttrs
.Put(SfxBoolItem(SID_ATTR_NUMBERFORMAT_ADD_AUTO
,
877 aLbLanguage
.GetSelectEntry() == sAutomaticEntry
));
884 int SvxNumberFormatTabPage::DeactivatePage( SfxItemSet
* _pSet
)
886 /* if ( (ULONG_MAX != nInitFormat) && _pSet )
888 const ULONG nCurKey = pNumFmtShell->GetCurNumFmtKey();
889 const USHORT nWhich = GetWhich( SID_ATTR_NUMBERFORMAT_VALUE );
890 SfxItemState eItemState = GetItemSet().GetItemState( nWhich, FALSE );
892 if ( (nInitFormat == nCurKey) && (SFX_ITEM_DEFAULT == eItemState) )
893 _pSet->ClearItem( nWhich );
895 _pSet->Put( SfxUInt32Item( nWhich, nCurKey ) );
899 FillItemSet( *_pSet
);
903 void SvxNumberFormatTabPage::SetInfoItem( const SvxNumberInfoItem
& rItem
)
907 pNumItem
= (SvxNumberInfoItem
*)rItem
.Clone();
911 void SvxNumberFormatTabPage::FillFormatListBox_Impl( SvxDelStrgs
& rEntries
)
915 String aTmpCatString
;
916 Font aFont
=aLbCategory
.GetFont();
922 aLbFormat
.SetUpdateMode( FALSE
);
924 USHORT nCount
= rEntries
.Count();
930 nTmpCatPos
=nFixedCategory
;
934 nTmpCatPos
=aLbCategory
.GetSelectEntryPos();
941 case CAT_NUMBER
: i
=1;
945 if (nTmpCatPos
== CAT_TEXT
)
948 aTmpString
= pNumFmtShell
->GetStandardName();
949 aPrivCat
=pNumFmtShell
->GetCategory4Entry(0);
950 aLbFormat
.InsertFontEntry( aTmpString
, aFont
);
957 if(pNumFmtShell
!=NULL
)
959 for ( ; i
< nCount
; ++i
)
961 pEntry
= rEntries
[i
];
962 aPrivCat
=pNumFmtShell
->GetCategory4Entry(i
);
963 if(aPrivCat
!=CAT_TEXT
)
965 Color
* pPreviewColor
= NULL
;
966 String
aPreviewString( GetExpColorString( pPreviewColor
, *pEntry
, aPrivCat
) );
967 Font
aEntryFont( aLbFormat
.GetFont() );
968 aLbFormat
.InsertFontEntry( aPreviewString
, aEntryFont
, pPreviewColor
);
972 aLbFormat
.InsertFontEntry(*pEntry
,aFont
);
976 aLbFormat
.SetUpdateMode( TRUE
);
977 DeleteEntryList_Impl(rEntries
);
981 /*************************************************************************
982 #* Methode: DeleteEntryList_Impl Datum:02.10.97
983 #*------------------------------------------------------------------------
985 #* Klasse: SvxNumberFormatTabPage
987 #* Funktion: Loescht eine SvStrings- Liste
989 #* Input: String-liste
993 #************************************************************************/
995 void SvxNumberFormatTabPage::DeleteEntryList_Impl( SvxDelStrgs
& rEntries
)
997 USHORT nCount
= rEntries
.Count();
998 rEntries
.DeleteAndDestroy(0,nCount
);
1002 /*************************************************************************
1003 #* Methode: UpdateOptions_Impl Datum:02.10.97
1004 #*------------------------------------------------------------------------
1006 #* Klasse: SvxNumberFormatTabPage
1008 #* Funktion: Stellt je nach eingestelltem Format die Options-
1009 #* attribute neu ein.
1011 #* Input: Flag, ob sich die Kategorie geaendert hat.
1015 #***?********************************************************************/
1017 void SvxNumberFormatTabPage::UpdateOptions_Impl( BOOL bCheckCatChange
/*= FALSE*/ )
1019 SvxDelStrgs aEntryList
;
1020 String theFormat
= aEdFormat
.GetText();
1021 USHORT nCurCategory
= aLbCategory
.GetSelectEntryPos();
1022 USHORT nCategory
= nCurCategory
;
1023 USHORT nDecimals
= 0;
1025 BOOL bNegRed
= FALSE
;
1026 BOOL bThousand
= FALSE
;
1028 USHORT nCurrencyPos
=aLbCurrency
.GetSelectEntryPos();
1032 nTmpCatPos
=nFixedCategory
;
1033 nCurCategory
=nFixedCategory
;
1037 nTmpCatPos
=nCurCategory
;
1041 pNumFmtShell
->GetOptions( theFormat
,
1046 if(nCategory
==CAT_CURRENCY
)
1048 USHORT nTstPos
=pNumFmtShell
->FindCurrencyFormat(theFormat
);
1049 if(nCurrencyPos
!=nTstPos
&& nTstPos
!=(USHORT
)-1)
1051 aLbCurrency
.SelectEntryPos(nTstPos
);
1052 pNumFmtShell
->SetCurrencySymbol(nTstPos
);
1059 if ( nCategory
!= nCurCategory
|| bDoIt
)
1061 if ( bCheckCatChange
)
1066 SetCategory(nCategory
);
1068 UpdateFormatListBox_Impl( TRUE
, FALSE
);
1071 else if ( aLbFormat
.GetEntryCount() > 0 )
1073 sal_uInt32 nCurEntryKey
=NUMKEY_UNDEFINED
;
1074 if(!pNumFmtShell
->FindEntry( aEdFormat
.GetText(),&nCurEntryKey
))
1076 aLbFormat
.SetNoSelection();
1081 nCategory
=nFixedCategory
;
1084 switch ( nCategory
)
1089 aFlOptions
.Enable();
1090 aFtDecimals
.Enable();
1091 aEdDecimals
.Enable();
1092 aFtLeadZeroes
.Enable();
1093 aEdLeadZeroes
.Enable();
1094 aBtnNegRed
.Enable();
1095 aBtnThousand
.Enable();
1097 aEdDecimals .SetValue( nDecimals );
1098 aEdLeadZeroes.SetValue( nZeroes );
1100 aEdDecimals
.SetText( UniString::CreateFromInt32( nDecimals
) );
1101 aEdLeadZeroes
.SetText( UniString::CreateFromInt32( nZeroes
) );
1102 aBtnNegRed
.Check( bNegRed
);
1103 aBtnThousand
.Check( bThousand
);
1107 case CAT_USERDEFINED
:
1112 case CAT_SCIENTIFIC
:
1115 aFlOptions
.Disable();
1116 aFtDecimals
.Disable();
1117 aEdDecimals
.Disable();
1118 aFtLeadZeroes
.Disable();
1119 aEdLeadZeroes
.Disable();
1120 aBtnNegRed
.Disable();
1121 aBtnThousand
.Disable();
1122 aEdDecimals
.SetText( UniString::CreateFromInt32( 0 ) );
1123 aEdLeadZeroes
.SetText( UniString::CreateFromInt32( 0 ) );
1124 aBtnNegRed
.Check( FALSE
);
1125 aBtnThousand
.Check( FALSE
);
1130 /*************************************************************************
1131 #* Methode: UpdateFormatListBox_Impl Datum:02.10.97
1132 #*------------------------------------------------------------------------
1134 #* Klasse: SvxNumberFormatTabPage
1136 #* Funktion: Aktualisiert die Format- Listbox und zusaetzlich
1137 #* wird abhaengig vom bUpdateEdit- Flag der String
1138 #* in der Editbox geaendert.
1140 #* Input: Flags fuer Kategorie und Editbox
1144 #************************************************************************/
1146 void SvxNumberFormatTabPage::UpdateFormatListBox_Impl
1148 USHORT bCat
, // Category oder Land/Sprache ListBox?
1149 BOOL bUpdateEdit
// Format-Edit aktualisieren?
1152 SvxDelStrgs aEntryList
;
1153 short nFmtLbSelPos
= 0;
1158 nTmpCatPos
=nFixedCategory
;
1162 nTmpCatPos
=aLbCategory
.GetSelectEntryPos();
1168 Point aPos
=aLbFormat
.GetPosPixel();
1169 Size aSize
=aLbFormat
.GetSizePixel();
1171 if(nTmpCatPos
!=CAT_CURRENCY
)
1173 aPos
.Y()=nStdFormatY
;
1174 aSize
.Height()=nStdFormatHeight
;
1175 aLbFormat
.SetPosSizePixel(aPos
,aSize
);
1177 aLbCurrency
.Disable();
1178 #else /* !ENABLE_LAYOUT */
1180 #endif /* !ENABLE_LAYOUT */
1184 aPos
.Y()=nCurFormatY
;
1185 aSize
.Height()=nCurFormatHeight
;
1186 aLbFormat
.SetPosSizePixel(aPos
,aSize
);
1188 aLbCurrency
.Enable();
1189 #else /* !ENABLE_LAYOUT */
1191 #endif /* !ENABLE_LAYOUT */
1194 pNumFmtShell
->CategoryChanged( nTmpCatPos
,nFmtLbSelPos
, aEntryList
);
1197 pNumFmtShell
->LanguageChanged( aLbLanguage
.GetSelectLanguage(),
1198 nFmtLbSelPos
,aEntryList
);
1200 REMOVE_DONTKNOW() // ggF. UI-Enable
1203 if ( (aEntryList
.Count() > 0) && (nFmtLbSelPos
!= SELPOS_NONE
) )
1207 String aFormat
=*aEntryList
[nFmtLbSelPos
];
1208 aEdFormat
.SetText(aFormat
);
1209 aFtComment
.SetText(pNumFmtShell
->GetComment4Entry(nFmtLbSelPos
));
1211 //@23.09.97 aEdFormat.SetText( aLbFormat.GetSelectEntry() );
1214 if(!bOneAreaFlag
|| !bCat
)
1216 FillFormatListBox_Impl( aEntryList
);
1217 aLbFormat
.SelectEntryPos( nFmtLbSelPos
);
1219 aFtComment
.SetText(pNumFmtShell
->GetComment4Entry(nFmtLbSelPos
));
1220 if(pNumFmtShell
->GetUserDefined4Entry(nFmtLbSelPos
))
1222 if(pNumFmtShell
->GetComment4Entry(nFmtLbSelPos
).Len()==0)
1224 aFtComment
.SetText(aLbCategory
.GetEntry(1));
1227 ChangePreviewText( (USHORT
)nFmtLbSelPos
);
1233 FillFormatListBox_Impl( aEntryList
);
1234 if(nFmtLbSelPos
!= SELPOS_NONE
)
1236 aLbFormat
.SelectEntryPos( (USHORT
)nFmtLbSelPos
);
1238 aFtComment
.SetText(pNumFmtShell
->GetComment4Entry(nFmtLbSelPos
));
1239 if(pNumFmtShell
->GetUserDefined4Entry(nFmtLbSelPos
))
1241 if(pNumFmtShell
->GetComment4Entry(nFmtLbSelPos
).Len()==0)
1243 aFtComment
.SetText(aLbCategory
.GetEntry(1));
1249 aLbFormat
.SetNoSelection();
1254 aEdFormat
.SetText( String() );
1255 aWndPreview
.NotifyChange( String() );
1261 /*************************************************************************
1262 #* Handle: DoubleClickHdl_Impl Datum:02.10.97
1263 #*------------------------------------------------------------------------
1265 #* Klasse: SvxNumberFormatTabPage
1267 #* Funktion: Bei einem Doppelklick in die Format- Listbox
1268 #* wird der Wert uebernommen und der OK-Button
1271 #* Input: Pointer auf Listbox
1275 #************************************************************************/
1277 IMPL_LINK( SvxNumberFormatTabPage
, DoubleClickHdl_Impl
, SvxFontListBox
*, pLb
)
1279 if ( pLb
== &aLbFormat
)
1281 SelFormatHdl_Impl( pLb
);
1283 if ( fnOkHdl
.IsSet() )
1284 { // Uebergangsloesung, sollte von SfxTabPage angeboten werden
1285 fnOkHdl
.Call( NULL
);
1289 SfxSingleTabDialog
* pParent
= dynamic_cast< SfxSingleTabDialog
* >( GetParent() );
1290 OKButton
* pOKButton
= pParent
? pParent
->GetOKButton() : NULL
;
1299 /*************************************************************************
1300 #* Methode: SelFormatHdl_Impl Datum:02.10.97
1301 #*------------------------------------------------------------------------
1303 #* Klasse: SvxNumberFormatTabPage
1305 #* Funktion: Wird aufgerufen, wenn sich die Sprache, die Kategorie
1306 #* oder das Format aendert. Dem entsprechend werden die
1307 #* Einstellungen geaendert.
1309 #* Input: Pointer auf Listbox
1313 #************************************************************************/
1315 IMPL_LINK( SvxNumberFormatTabPage
, SelFormatHdl_Impl
, void *, pLb
)
1317 if ( (CheckBox
*)pLb
== &aCbSourceFormat
)
1319 EnableBySourceFormat_Impl(); // enable/disable everything else
1320 if ( aCbSourceFormat
.IsChecked() )
1321 return 0; // just disabled everything else
1323 // Reinit options enable/disable for current selection.
1326 if (aLbFormat
.GetSelectEntryPos () == LISTBOX_ENTRY_NOTFOUND
)
1327 #else /* !ENABLE_LAYOUT */
1328 // Current category may be UserDefined with no format entries defined.
1329 // And yes, aLbFormat is a SvxFontListBox with ULONG list positions,
1330 // implementation returns a LIST_APPEND if empty, comparison with
1331 // USHORT LISTBOX_ENTRY_NOTFOUND wouldn't match.
1332 if ( aLbFormat
.GetSelectEntryPos() == LIST_APPEND
)
1333 #endif /* !ENABLE_LAYOUT */
1334 pLb
= &aLbCategory
; // continue with the current category selected
1336 pLb
= &aLbFormat
; // continue with the current format selected
1343 nTmpCatPos
=nFixedCategory
;
1347 nTmpCatPos
=aLbCategory
.GetSelectEntryPos();
1350 USHORT nCurrencyPos
=LISTBOX_ENTRY_NOTFOUND
;
1352 if(nTmpCatPos
==CAT_CURRENCY
&& (ListBox
*)pLb
== &aLbCurrency
)
1354 nCurrencyPos
=aLbCurrency
.GetSelectEntryPos();
1355 pNumFmtShell
->SetCurrencySymbol(nCurrencyPos
);
1358 //--------------------------------------------------------------------
1359 // Format-ListBox ----------------------------------------------------
1360 if ( (SvxFontListBox
*)pLb
== &aLbFormat
)
1362 USHORT nSelPos
= (USHORT
) aLbFormat
.GetSelectEntryPos();
1363 String aFormat
= aLbFormat
.GetSelectEntry();
1365 SvxDelStrgs aEntryList
;
1367 short nFmtLbSelPos
= nSelPos
;
1369 aFormat
=pNumFmtShell
->GetFormat4Entry(nSelPos
);
1370 aComment
=pNumFmtShell
->GetComment4Entry(nSelPos
);
1371 if(pNumFmtShell
->GetUserDefined4Entry(nFmtLbSelPos
))
1373 if(pNumFmtShell
->GetComment4Entry(nFmtLbSelPos
).Len()==0)
1375 aComment
=aLbCategory
.GetEntry(1);
1379 if ( aFormat
.Len() > 0 )
1381 if(!aEdFormat
.HasFocus()) aEdFormat
.SetText( aFormat
);
1382 aFtComment
.SetText(aComment
);
1383 ChangePreviewText( nSelPos
);
1386 REMOVE_DONTKNOW() // ggF. UI-Enable
1388 if ( pNumFmtShell
->FindEntry( aFormat
) )
1390 aIbAdd
.Enable(FALSE
);
1391 BOOL bIsUserDef
=pNumFmtShell
->IsUserDefined( aFormat
);
1392 aIbRemove
.Enable(bIsUserDef
);
1393 aIbInfo
.Enable(bIsUserDef
);
1398 aIbAdd
.Enable(TRUE
);
1399 aIbInfo
.Enable(TRUE
);
1400 aIbRemove
.Enable(FALSE
);
1401 aFtComment
.SetText(aEdComment
.GetText());
1404 UpdateOptions_Impl( FALSE
);
1411 //--------------------------------------------------------------------
1412 // Kategorie-ListBox -------------------------------------------------
1413 if ( pLb
== &aLbCategory
|| pLb
== &aLbCurrency
)
1415 UpdateFormatListBox_Impl( TRUE
, TRUE
);
1416 EditHdl_Impl( NULL
);
1417 UpdateOptions_Impl( FALSE
);
1424 //--------------------------------------------------------------------
1425 // Sprache/Land-ListBox ----------------------------------------------
1426 if ( pLb
== &aLbLanguage
)
1428 UpdateFormatListBox_Impl( FALSE
, TRUE
);
1429 EditHdl_Impl( &aEdFormat
);
1439 /*************************************************************************
1440 #* Methode: ClickHdl_Impl, ImageButton* pIB Datum:02.10.97
1441 #*------------------------------------------------------------------------
1443 #* Klasse: SvxNumberFormatTabPage
1445 #* Funktion: Wenn, der Hinzufuegen- oder Entfernen- Button
1446 #* wird diese Funktion aufgerufen und die Zahlenformat-
1447 #* Liste den entsprechend geaendert.
1449 #* Input: Toolbox- Button
1453 #************************************************************************/
1455 IMPL_LINK( SvxNumberFormatTabPage
, ClickHdl_Impl
, ImageButton
*, pIB
)
1457 BOOL bAdded
= FALSE
;
1458 BOOL bDeleted
= FALSE
;
1460 const ULONG nReturnChanged
= 0x1; // THE boolean return value
1461 const ULONG nReturnAdded
= 0x2; // temp: format added
1462 const ULONG nReturnOneArea
= 0x4; // temp: one area but category changed => ignored
1465 { // Also called from FillItemSet() if a temporary currency format has
1466 // to be added, not only if the Add button is enabled.
1467 String aFormat
= aEdFormat
.GetText();
1468 SvxDelStrgs aEntryList
;
1469 SvxDelStrgs a2EntryList
;
1470 USHORT nCatLbSelPos
= 0;
1471 short nFmtLbSelPos
= SELPOS_NONE
;
1472 xub_StrLen nErrPos
=0;
1474 pNumFmtShell
->SetCurCurrencyEntry(NULL
);
1475 bAdded
= pNumFmtShell
->AddFormat( aFormat
, nErrPos
,
1476 nCatLbSelPos
, nFmtLbSelPos
,
1479 nReturn
|= nReturnChanged
| nReturnAdded
;
1481 if(pLastActivWindow
== (Window
*) &aEdComment
)
1483 aEdFormat
.GrabFocus();
1486 aFtComment
.SetText(aEdComment
.GetText());
1489 if ( !nErrPos
) // Syntax ok?
1491 if(nCatLbSelPos
==CAT_CURRENCY
)
1493 aLbCurrency
.SelectEntryPos((USHORT
)pNumFmtShell
->GetCurrencySymbol());
1496 if(bOneAreaFlag
&& (nFixedCategory
!=nCatLbSelPos
))
1498 if(bAdded
) DeleteEntryList_Impl(aEntryList
);
1499 bDeleted
= pNumFmtShell
->RemoveFormat( aFormat
,
1503 if(bDeleted
) DeleteEntryList_Impl(a2EntryList
);
1504 aEdFormat
.GrabFocus();
1505 aEdFormat
.SetSelection( Selection( (short)nErrPos
, SELECTION_MAX
) );
1506 nReturn
|= nReturnOneArea
;
1510 if ( bAdded
&& (nFmtLbSelPos
!= SELPOS_NONE
) )
1513 if(bOneAreaFlag
) //@@ ???
1516 SetCategory(nCatLbSelPos
);
1518 FillFormatListBox_Impl( aEntryList
);
1519 if(aEdComment
.GetText()!=aLbCategory
.GetEntry(1))
1521 pNumFmtShell
->SetComment4Entry(nFmtLbSelPos
,
1522 aEdComment
.GetText());
1526 pNumFmtShell
->SetComment4Entry(nFmtLbSelPos
,
1529 aLbFormat
.SelectEntryPos( (USHORT
)nFmtLbSelPos
);
1530 aEdFormat
.SetText( aFormat
);
1532 //aEdComment.SetText(String()); //@@ ???
1533 aEdComment
.SetText(aLbCategory
.GetEntry(1)); //String fuer Benutzerdefiniert
1535 ChangePreviewText( (USHORT
)nFmtLbSelPos
);
1539 else // Syntaxfehler
1541 aEdFormat
.GrabFocus();
1542 aEdFormat
.SetSelection( Selection( (short)nErrPos
, SELECTION_MAX
) );
1544 EditHdl_Impl( &aEdFormat
);
1545 nReturn
= ((nReturn
& nReturnOneArea
) ? 0 : (nReturn
& nReturnChanged
));
1547 else if(pIB
==&aIbRemove
)
1549 String aFormat
= aEdFormat
.GetText();
1550 SvxDelStrgs aEntryList
;
1551 USHORT nCatLbSelPos
= 0;
1552 short nFmtLbSelPos
= SELPOS_NONE
;
1554 bDeleted
= pNumFmtShell
->RemoveFormat( aFormat
,
1559 aEdComment
.SetText(aLbCategory
.GetEntry(1));
1562 if(nFmtLbSelPos
>=0 && nFmtLbSelPos
<aEntryList
.Count())
1564 aFormat
= *aEntryList
[nFmtLbSelPos
];
1567 FillFormatListBox_Impl( aEntryList
);
1569 if ( nFmtLbSelPos
!= SELPOS_NONE
)
1571 if(bOneAreaFlag
) //@@ ???
1574 SetCategory(nCatLbSelPos
);
1576 aLbFormat
.SelectEntryPos( (USHORT
)nFmtLbSelPos
);
1577 aEdFormat
.SetText( aFormat
);
1578 ChangePreviewText( (USHORT
)nFmtLbSelPos
);
1582 // auf "Alle/Standard" setzen
1584 SelFormatHdl_Impl( &aLbCategory
);
1587 EditHdl_Impl( &aEdFormat
);
1589 else if(pIB
==&aIbInfo
)
1591 if(!(pLastActivWindow
== (Window
*) &aEdComment
))
1593 aEdComment
.SetText(aFtComment
.GetText());
1596 aEdComment
.GrabFocus();
1600 aEdFormat
.GrabFocus();
1610 /*************************************************************************
1611 #* Methode: EditHdl_Impl Datum:02.10.97
1612 #*------------------------------------------------------------------------
1614 #* Klasse: SvxNumberFormatTabPage
1616 #* Funktion: Wenn der Eintrag im Eingabefeld geaendert wird,
1617 #* so wird die Vorschau aktualisiert und
1619 #* Input: Pointer auf Editbox
1623 #************************************************************************/
1625 IMPL_LINK( SvxNumberFormatTabPage
, EditHdl_Impl
, Edit
*, pEdFormat
)
1627 sal_uInt32 nCurKey
= NUMKEY_UNDEFINED
;
1629 if ( aEdFormat
.GetText().Len() == 0 )
1631 aIbAdd
.Enable(FALSE
);
1632 aIbRemove
.Enable(FALSE
);
1633 aIbInfo
.Enable(FALSE
);
1634 aFtComment
.SetText(String());
1638 String aFormat
= aEdFormat
.GetText();
1639 //aFtComment.SetText(String());
1640 MakePreviewText( aFormat
);
1642 if ( pNumFmtShell
->FindEntry( aFormat
, &nCurKey
) )
1644 aIbAdd
.Enable(FALSE
);
1645 BOOL bUserDef
=pNumFmtShell
->IsUserDefined( aFormat
);
1647 aIbRemove
.Enable(bUserDef
);
1648 aIbInfo
.Enable(bUserDef
);
1652 USHORT nTmpCurPos
=pNumFmtShell
->FindCurrencyFormat(aFormat
);
1654 if(nTmpCurPos
!=(USHORT
)-1)
1655 aLbCurrency
.SelectEntryPos(nTmpCurPos
);
1657 short nPosi
=pNumFmtShell
->GetListPos4Entry(aFormat
);
1659 aLbFormat
.SelectEntryPos( (USHORT
)nPosi
);
1665 aIbAdd
.Enable(TRUE
);
1666 aIbInfo
.Enable(TRUE
);
1667 aIbRemove
.Enable(FALSE
);
1669 aFtComment
.SetText(aEdComment
.GetText());
1676 pNumFmtShell
->SetCurNumFmtKey( nCurKey
);
1677 UpdateOptions_Impl( TRUE
);
1684 /*************************************************************************
1685 #* Methode: NotifyChange Datum:02.10.97
1686 #*------------------------------------------------------------------------
1688 #* Klasse: SvxNumberFormatTabPage
1690 #* Funktion: Fuehrt Aenderungen in den Zahlen- Attributen durch.
1692 #* Input: Options- Controls
1696 #************************************************************************/
1698 IMPL_LINK( SvxNumberFormatTabPage
, OptHdl_Impl
, void *, pOptCtrl
)
1700 if ( ((NumericField
*)pOptCtrl
== &aEdLeadZeroes
)
1701 || ((NumericField
*)pOptCtrl
== &aEdDecimals
)
1702 || ((CheckBox
*) pOptCtrl
== &aBtnNegRed
)
1703 || ((CheckBox
*) pOptCtrl
== &aBtnThousand
) )
1706 BOOL bThousand
= aBtnThousand
.IsEnabled()
1707 && aBtnThousand
.IsChecked();
1708 BOOL bNegRed
= aBtnNegRed
.IsEnabled()
1709 && aBtnNegRed
.IsChecked();
1710 USHORT nPrecision
= (aEdDecimals
.IsEnabled())
1711 ? (USHORT
)aEdDecimals
.GetValue()
1713 USHORT nLeadZeroes
= (aEdLeadZeroes
.IsEnabled())
1714 ? (USHORT
)aEdLeadZeroes
.GetValue()
1717 pNumFmtShell
->MakeFormat( aFormat
,
1719 nPrecision
, nLeadZeroes
,
1720 (USHORT
)aLbFormat
.GetSelectEntryPos() );
1722 aEdFormat
.SetText( aFormat
);
1723 //aFtComment.SetText(String());
1724 MakePreviewText( aFormat
);
1726 if ( pNumFmtShell
->FindEntry( aFormat
) )
1728 aIbAdd
.Enable(FALSE
);
1729 BOOL bUserDef
=pNumFmtShell
->IsUserDefined( aFormat
);
1730 aIbRemove
.Enable(bUserDef
);
1731 aIbInfo
.Enable(bUserDef
);
1732 EditHdl_Impl( &aEdFormat
);
1737 EditHdl_Impl( NULL
);
1738 aLbFormat
.SetNoSelection();
1744 IMPL_LINK( SvxNumberFormatTabPage
, TimeHdl_Impl
, Timer
*, EMPTYARG
)
1746 pLastActivWindow
=NULL
;
1751 /*************************************************************************
1752 #* Methode: LostFocusHdl_Impl Datum:30.10.97
1753 #*------------------------------------------------------------------------
1755 #* Klasse: SvxNumberFormatTabPage
1757 #* Funktion: Fuehrt Aenderungen in den Zahlen- Attributen durch.
1759 #* Input: Options- Controls
1763 #************************************************************************/
1765 IMPL_LINK( SvxNumberFormatTabPage
, LostFocusHdl_Impl
, Edit
*, pEd
)
1767 if (pEd
==&aEdComment
)
1769 aResetWinTimer
.Start();
1770 aFtComment
.SetText(aEdComment
.GetText());
1773 if(!aIbAdd
.IsEnabled())
1775 USHORT nSelPos
= (USHORT
) aLbFormat
.GetSelectEntryPos();
1776 pNumFmtShell
->SetComment4Entry(nSelPos
,
1777 aEdComment
.GetText());
1778 aEdComment
.SetText(aLbCategory
.GetEntry(1)); //String fuer Benutzerdefiniert
1785 /*************************************************************************
1786 #* Methode: NotifyChange Datum:02.10.97
1787 #*------------------------------------------------------------------------
1789 #* Klasse: SvxNumberFormatTabPage
1791 #* Funktion: Fuehrt Aenderungen in den Zahlen- Attributen durch.
1793 #* Input: Options- Controls
1797 #************************************************************************/
1799 String
SvxNumberFormatTabPage::GetExpColorString(
1800 Color
*& rpPreviewColor
, const String
& rFormatStr
, short nTmpCatPos
)
1805 case CAT_CURRENCY
: nVal
=SVX_NUMVAL_CURRENCY
; break;
1807 case CAT_SCIENTIFIC
:
1809 case CAT_NUMBER
: nVal
=SVX_NUMVAL_STANDARD
; break;
1811 case CAT_PERCENT
: nVal
=SVX_NUMVAL_PERCENT
; break;
1813 case CAT_ALL
: nVal
=SVX_NUMVAL_STANDARD
; break;
1815 case CAT_TIME
: nVal
=SVX_NUMVAL_TIME
; break;
1816 case CAT_DATE
: nVal
=SVX_NUMVAL_DATE
; break;
1818 case CAT_BOOLEAN
: nVal
=SVX_NUMVAL_BOOLEAN
; break;
1820 case CAT_USERDEFINED
:
1822 default: nVal
=0;break;
1825 String aPreviewString
;
1826 pNumFmtShell
->MakePrevStringFromVal( rFormatStr
, aPreviewString
, rpPreviewColor
, nVal
);
1827 return aPreviewString
;
1830 void SvxNumberFormatTabPage::MakePreviewText( const String
& rFormat
)
1832 String aPreviewString
;
1833 Color
* pPreviewColor
= NULL
;
1834 pNumFmtShell
->MakePreviewString( rFormat
, aPreviewString
, pPreviewColor
);
1835 aWndPreview
.NotifyChange( aPreviewString
, pPreviewColor
);
1838 void SvxNumberFormatTabPage::ChangePreviewText( USHORT nPos
)
1840 String aPreviewString
;
1841 Color
* pPreviewColor
= NULL
;
1842 pNumFmtShell
->FormatChanged( nPos
, aPreviewString
, pPreviewColor
);
1843 aWndPreview
.NotifyChange( aPreviewString
, pPreviewColor
);
1846 long SvxNumberFormatTabPage::PreNotify( NotifyEvent
& rNEvt
)
1848 if(rNEvt
.GetType()==EVENT_LOSEFOCUS
)
1850 if ( rNEvt
.GetWindow() == dynamic_cast< Window
* >( &aEdComment
) && !aEdComment
.IsVisible() )
1852 pLastActivWindow
= NULL
;
1856 pLastActivWindow
= rNEvt
.GetWindow();
1860 return SfxTabPage::PreNotify( rNEvt
);
1862 /*************************************************************************
1863 #* Methode: SetOkHdl Datum:01.11.97
1864 #*------------------------------------------------------------------------
1866 #* Klasse: SvxNumberFormatTabPage
1868 #* Funktion: Setzt den OkHandler neu.
1870 #* Input: Neuer OkHandler
1874 #************************************************************************/
1876 void SvxNumberFormatTabPage::SetOkHdl( const Link
& rOkHandler
)
1878 fnOkHdl
= rOkHandler
;
1881 void SvxNumberFormatTabPage::FillCurrencyBox()
1883 SvStringsDtor aList
;
1884 NfShCurrencyEntries rEntries
;
1885 XubString
* pEntry
= NULL
;
1889 pNumFmtShell
->GetCurrencySymbols( aList
, &nSelPos
);
1891 for(USHORT i
=1;i
<aList
.Count();i
++)
1894 nPos
=aLbCurrency
.InsertEntry( *pEntry
);
1896 aLbCurrency
.SelectEntryPos(nSelPos
);
1899 void SvxNumberFormatTabPage::SetCategory(USHORT nPos
)
1901 USHORT nCurCategory
= aLbCategory
.GetSelectEntryPos();
1902 Point aPos
=aLbFormat
.GetPosPixel();
1903 Size aSize
=aLbFormat
.GetSizePixel();
1908 nTmpCatPos
=nFixedCategory
;
1915 if(aLbCategory
.GetEntryCount()==1 || nCurCategory
!=nPos
)
1917 if(nTmpCatPos
!=CAT_CURRENCY
)
1919 aPos
.Y()=nStdFormatY
;
1920 aSize
.Height()=nStdFormatHeight
;
1921 aLbFormat
.SetPosSizePixel(aPos
,aSize
);
1926 aPos
.Y()=nCurFormatY
;
1927 aSize
.Height()=nCurFormatHeight
;
1928 aLbFormat
.SetPosSizePixel(aPos
,aSize
);
1932 aLbCategory
.SelectEntryPos(nPos
);
1934 /* -----------------12.11.2002 14:35-----------------
1935 * to support Writer text field language handling an
1936 * additional entry needs to be inserted into the ListBox
1937 * which marks a certain language as automatically detected
1938 * Additionally the "Default" language is removed
1939 * --------------------------------------------------*/
1940 void SvxNumberFormatTabPage::AddAutomaticLanguage_Impl(LanguageType eAutoLang
, BOOL bSelect
)
1942 aLbLanguage
.RemoveLanguage(LANGUAGE_SYSTEM
);
1943 USHORT nPos
= aLbLanguage
.InsertEntry(sAutomaticEntry
);
1944 aLbLanguage
.SetEntryData(nPos
, (void*)(ULONG
)eAutoLang
);
1946 aLbLanguage
.SelectEntryPos(nPos
);
1949 void SvxNumberFormatTabPage::PageCreated (SfxAllItemSet aSet
) //add CHINA001
1951 SFX_ITEMSET_ARG (&aSet
,pNumberInfoItem
,SvxNumberInfoItem
,SID_ATTR_NUMBERFORMAT_INFO
,sal_False
);
1952 SFX_ITEMSET_ARG (&aSet
,pLinkItem
,SfxLinkItem
,SID_LINK_TYPE
,sal_False
);
1953 if (pNumberInfoItem
)
1954 SetNumberFormatList(*pNumberInfoItem
);
1956 SetOkHdl(pLinkItem
->GetValue());