LCOV - code coverage report
Current view: top level - cui/source/tabpages - numfmt.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 0 810 0.0 %
Date: 2015-06-13 12:38:46 Functions: 0 49 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #include <svl/eitem.hxx>
      21             : #include <svl/intitem.hxx>
      22             : #include <sfx2/objsh.hxx>
      23             : #include <vcl/builder.hxx>
      24             : #include <vcl/svapp.hxx>
      25             : #include <vcl/settings.hxx>
      26             : #include <vcl/builderfactory.hxx>
      27             : #include <unotools/localedatawrapper.hxx>
      28             : #include <i18nlangtag/lang.h>
      29             : #include <i18nlangtag/mslangid.hxx>
      30             : #include <svx/dialogs.hrc>
      31             : #include <svtools/colorcfg.hxx>
      32             : 
      33             : #include <cuires.hrc>
      34             : 
      35             : #include <svx/numinf.hxx>
      36             : 
      37             : #include "numfmt.hxx"
      38             : #include <svx/numfmtsh.hxx>
      39             : #include <dialmgr.hxx>
      40             : #include <sfx2/request.hxx>
      41             : #include <sfx2/app.hxx>
      42             : #include <sfx2/basedlgs.hxx>
      43             : #include "svx/flagsdef.hxx"
      44             : #include <vector>
      45             : #include <com/sun/star/lang/XServiceInfo.hpp>
      46             : #include <boost/scoped_array.hpp>
      47             : 
      48             : using ::com::sun::star::uno::Reference;
      49             : using ::com::sun::star::lang::XServiceInfo;
      50             : using ::com::sun::star::uno::UNO_QUERY;
      51             : 
      52             : #define NUMKEY_UNDEFINED SAL_MAX_UINT32
      53             : 
      54             : // static ----------------------------------------------------------------
      55             : 
      56             : const sal_uInt16 SvxNumberFormatTabPage::pRanges[] =
      57             : {
      58             :     SID_ATTR_NUMBERFORMAT_VALUE,
      59             :     SID_ATTR_NUMBERFORMAT_INFO,
      60             :     SID_ATTR_NUMBERFORMAT_NOLANGUAGE,
      61             :     SID_ATTR_NUMBERFORMAT_NOLANGUAGE,
      62             :     SID_ATTR_NUMBERFORMAT_ONE_AREA,
      63             :     SID_ATTR_NUMBERFORMAT_ONE_AREA,
      64             :     SID_ATTR_NUMBERFORMAT_SOURCE,
      65             :     SID_ATTR_NUMBERFORMAT_SOURCE,
      66             :     0
      67             : };
      68             : 
      69             : /*************************************************************************
      70             : #*  Method:        SvxNumberPreview
      71             : #*------------------------------------------------------------------------
      72             : #*
      73             : #*  Class:      SvxNumberPreview
      74             : #*  Function:   Constructor of the class SvxNumberPreview
      75             : #*  Input:      Window, Resource-ID
      76             : #*  Output:     ---
      77             : #*
      78             : #************************************************************************/
      79             : 
      80           0 : SvxNumberPreview::SvxNumberPreview(vcl::Window* pParent, WinBits nStyle)
      81             :     : Window(pParent, nStyle)
      82             :     , mnPos(-1)
      83           0 :     , mnChar(0x0)
      84             : {
      85           0 :     vcl::Font aFont( GetFont() );
      86           0 :     aFont.SetTransparent( true );
      87           0 :     aFont.SetColor( Application::GetSettings().GetStyleSettings().GetFieldColor() );
      88           0 :     SetFont( aFont );
      89           0 :     InitSettings( true, true );
      90           0 :     SetBorderStyle( WindowBorderStyle::MONO );
      91           0 : }
      92             : 
      93           0 : VCL_BUILDER_FACTORY(SvxNumberPreview)
      94             : 
      95             : /*************************************************************************
      96             : #*  Method:        NotifyChange
      97             : #*------------------------------------------------------------------------
      98             : #*
      99             : #*  Class:      SvxNumberPreview
     100             : #*  Function:   Function for changing the preview string
     101             : #*  Input:      String, color
     102             : #*  Output:     ---
     103             : #*
     104             : #************************************************************************/
     105             : 
     106           0 : void SvxNumberPreview::NotifyChange( const OUString& rPrevStr,
     107             :                                          const Color* pColor )
     108             : {
     109             :     // detect and strip out '*' related placeholders
     110           0 :     aPrevStr = rPrevStr;
     111           0 :     mnPos = aPrevStr.indexOf( 0x1B );
     112           0 :     if ( mnPos != -1 )
     113             :     {
     114             :         // Right during user input the star symbol is the very
     115             :         // last character before the user enters another one.
     116           0 :         if (mnPos < aPrevStr.getLength() - 1)
     117             :         {
     118           0 :             mnChar = aPrevStr[ mnPos + 1 ];
     119             :             // delete placeholder and char to repeat
     120           0 :             aPrevStr = aPrevStr.replaceAt( mnPos, 2, "" );
     121             :         }
     122             :         else
     123             :         {
     124             :             // delete placeholder
     125           0 :             aPrevStr = aPrevStr.replaceAt( mnPos, 1, "" );
     126             :             // do not attempt to draw a 0 fill character
     127           0 :             mnPos = -1;
     128             :         }
     129             :     }
     130           0 :     svtools::ColorConfig aColorConfig;
     131           0 :     Color aWindowTextColor( aColorConfig.GetColorValue( svtools::FONTCOLOR ).nColor );
     132           0 :     aPrevCol = pColor ? *pColor : aWindowTextColor;
     133           0 :     Invalidate();
     134           0 :     Update();
     135           0 : }
     136             : 
     137             : /*************************************************************************
     138             : #*  Method:        Paint
     139             : #*------------------------------------------------------------------------
     140             : #*
     141             : #*  Class:      SvxNumberPreview
     142             : #*  Function:   Function for repainting the window.
     143             : #*  Input:      ---
     144             : #*  Output:     ---
     145             : #*
     146             : #************************************************************************/
     147             : 
     148           0 : void SvxNumberPreview::Paint(vcl::RenderContext& rRenderContext, const Rectangle&)
     149             : {
     150           0 :     vcl::Font aDrawFont = rRenderContext.GetFont();
     151           0 :     Size aSzWnd = rRenderContext.GetOutputSizePixel();
     152           0 :     OUString aTmpStr( aPrevStr );
     153           0 :     long nLeadSpace = (aSzWnd.Width() - rRenderContext.GetTextWidth(aTmpStr)) / 2;
     154             : 
     155           0 :     aDrawFont.SetColor(aPrevCol);
     156           0 :     rRenderContext.SetFont(aDrawFont);
     157             : 
     158           0 :     if (mnPos != -1)
     159             :     {
     160           0 :         long nCharWidth = rRenderContext.GetTextWidth(OUString(mnChar));
     161             : 
     162           0 :         int nNumCharsToInsert = 0;
     163           0 :         if (nCharWidth > 0)
     164           0 :             nNumCharsToInsert = nLeadSpace / nCharWidth;
     165             : 
     166           0 :         if (nNumCharsToInsert > 0)
     167             :         {
     168           0 :             for (int i = 0; i < nNumCharsToInsert; ++i)
     169           0 :                 aTmpStr = aTmpStr.replaceAt(mnPos, 0, OUString(mnChar));
     170             :         }
     171             :     }
     172           0 :     Point aPosText = Point((mnPos != -1) ? 0 : nLeadSpace,
     173           0 :                            (aSzWnd.Height() - GetTextHeight()) / 2);
     174           0 :     rRenderContext.DrawText(aPosText, aTmpStr);
     175           0 : }
     176             : 
     177           0 : void SvxNumberPreview::InitSettings( bool bForeground, bool bBackground )
     178             : {
     179           0 :     const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();
     180             : 
     181           0 :     if ( bForeground )
     182             :     {
     183           0 :         svtools::ColorConfig aColorConfig;
     184           0 :         Color aTextColor( aColorConfig.GetColorValue( svtools::FONTCOLOR ).nColor );
     185             : 
     186           0 :         if ( IsControlForeground() )
     187           0 :             aTextColor = GetControlForeground();
     188           0 :         SetTextColor( aTextColor );
     189             :     }
     190             : 
     191           0 :     if ( bBackground )
     192             :     {
     193           0 :         if ( IsControlBackground() )
     194           0 :             SetBackground( GetControlBackground() );
     195             :         else
     196           0 :             SetBackground( rStyleSettings.GetWindowColor() );
     197             :     }
     198           0 :     Invalidate();
     199           0 : }
     200             : 
     201             : 
     202             : 
     203           0 : void SvxNumberPreview::StateChanged( StateChangedType nType )
     204             : {
     205           0 :     if ( nType == StateChangedType::ControlForeground )
     206           0 :         InitSettings( true, false );
     207           0 :     else if ( nType == StateChangedType::ControlBackground )
     208           0 :         InitSettings( false, true );
     209             : 
     210           0 :     Window::StateChanged( nType );
     211           0 : }
     212             : 
     213             : 
     214             : 
     215           0 : void SvxNumberPreview::DataChanged( const DataChangedEvent& rDCEvt )
     216             : {
     217           0 :     Window::DataChanged( rDCEvt );
     218             : 
     219           0 :     if ( ( rDCEvt.GetType() == DataChangedEventType::SETTINGS ) && ( rDCEvt.GetFlags() & AllSettingsFlags::STYLE ) )
     220           0 :         InitSettings( true, true );
     221           0 : }
     222             : 
     223             : // class SvxNumberFormatTabPage ------------------------------------------
     224             : 
     225             : #define REMOVE_DONTKNOW() \
     226             :     if ( !m_pFtLanguage->IsEnabled() )                                     \
     227             :     {                                                                   \
     228             :         m_pFtLanguage->Enable();                                          \
     229             :         m_pLbLanguage->Enable();                                          \
     230             :         m_pLbLanguage->SelectLanguage( pNumFmtShell->GetCurLanguage() );  \
     231             :     }
     232             : 
     233             : #define HDL(hdl) LINK( this, SvxNumberFormatTabPage, hdl )
     234             : 
     235           0 : SvxNumberFormatTabPage::SvxNumberFormatTabPage(vcl::Window* pParent,
     236             :     const SfxItemSet& rCoreAttrs)
     237             :     : SfxTabPage(pParent, "NumberingFormatPage",
     238             :         "cui/ui/numberingformatpage.ui", &rCoreAttrs)
     239             :     , pNumItem(NULL)
     240             :     , pNumFmtShell(NULL)
     241             :     , nInitFormat(ULONG_MAX)
     242           0 :     , sAutomaticEntry(CUI_RES(RID_SVXSTR_AUTO_ENTRY))
     243           0 :     , sThousandSeparator(CUI_RES(RID_SVXSTR_THOUSAND_SEP))
     244           0 :     , sEngineeringNotation(CUI_RES(RID_SVXSTR_ENGINEERING))
     245           0 :     , pLastActivWindow(NULL)
     246             : {
     247           0 :     get(m_pFtCategory, "categoryft");
     248           0 :     get(m_pLbCategory, "categorylb");
     249           0 :     get(m_pFtFormat, "formatft");
     250           0 :     get(m_pLbCurrency, "currencylb");
     251           0 :     get(m_pLbFormat, "formatlb");
     252           0 :     long nWidth = approximate_char_width() * 26;
     253           0 :     m_pLbFormat->set_width_request(nWidth);
     254           0 :     m_pLbCurrency->set_width_request(nWidth);
     255           0 :     get(m_pFtLanguage, "languageft");
     256           0 :     get(m_pLbLanguage, "languagelb");
     257           0 :     get(m_pCbSourceFormat, "sourceformat");
     258           0 :     get(m_pWndPreview, "preview");
     259           0 :     get(m_pFtOptions, "optionsft");
     260           0 :     get(m_pFtDecimals, "decimalsft");
     261           0 :     get(m_pEdDecimals, "decimalsed");
     262           0 :     get(m_pBtnNegRed, "negnumred");
     263           0 :     get(m_pFtLeadZeroes, "leadzerosft");
     264           0 :     get(m_pEdLeadZeroes, "leadzerosed");
     265           0 :     get(m_pBtnThousand, "thousands");
     266           0 :     get(m_pFormatCodeFrame, "formatcode");
     267           0 :     get(m_pEdFormat, "formatted");
     268           0 :     get(m_pIbAdd, "add");
     269           0 :     get(m_pIbInfo, "edit");
     270           0 :     get(m_pIbRemove, "delete");
     271           0 :     get(m_pFtComment, "commentft");
     272           0 :     get(m_pEdComment, "commented");
     273             : 
     274           0 :     m_pLbCategory->SetDropDownLineCount(8);
     275           0 :     m_pWndPreview->set_height_request(GetTextHeight()*3);
     276             : 
     277           0 :     Init_Impl();
     278           0 :     SetExchangeSupport(); // this page needs ExchangeSupport
     279           0 :     nFixedCategory=-1;
     280           0 : }
     281             : 
     282           0 : SvxNumberFormatTabPage::~SvxNumberFormatTabPage()
     283             : {
     284           0 :     disposeOnce();
     285           0 : }
     286             : 
     287             : 
     288           0 : void SvxNumberFormatTabPage::dispose()
     289             : {
     290           0 :     delete pNumFmtShell;
     291           0 :     pNumFmtShell = NULL;
     292           0 :     delete pNumItem;
     293           0 :     pNumItem = NULL;
     294           0 :     m_pFtCategory.clear();
     295           0 :     m_pLbCategory.clear();
     296           0 :     m_pFtFormat.clear();
     297           0 :     m_pLbCurrency.clear();
     298           0 :     m_pLbFormat.clear();
     299           0 :     m_pFtLanguage.clear();
     300           0 :     m_pLbLanguage.clear();
     301           0 :     m_pCbSourceFormat.clear();
     302           0 :     m_pWndPreview.clear();
     303           0 :     m_pFtOptions.clear();
     304           0 :     m_pFtDecimals.clear();
     305           0 :     m_pEdDecimals.clear();
     306           0 :     m_pBtnNegRed.clear();
     307           0 :     m_pFtLeadZeroes.clear();
     308           0 :     m_pEdLeadZeroes.clear();
     309           0 :     m_pBtnThousand.clear();
     310           0 :     m_pFormatCodeFrame.clear();
     311           0 :     m_pEdFormat.clear();
     312           0 :     m_pIbAdd.clear();
     313           0 :     m_pIbInfo.clear();
     314           0 :     m_pIbRemove.clear();
     315           0 :     m_pFtComment.clear();
     316           0 :     m_pEdComment.clear();
     317           0 :     pLastActivWindow.clear();
     318           0 :     SfxTabPage::dispose();
     319           0 : }
     320             : 
     321           0 : void SvxNumberFormatTabPage::Init_Impl()
     322             : {
     323           0 :     bNumItemFlag=true;
     324           0 :     bOneAreaFlag=false;
     325             : 
     326           0 :     m_pIbAdd->Enable(false );
     327           0 :     m_pIbRemove->Enable(false );
     328           0 :     m_pIbInfo->Enable(false );
     329             : 
     330           0 :     m_pEdComment->SetText(m_pLbCategory->GetEntry(1));    // string for user defined
     331             : 
     332           0 :     m_pEdComment->Hide();
     333             : 
     334           0 :     m_pCbSourceFormat->Check( false );
     335           0 :     m_pCbSourceFormat->Disable();
     336           0 :     m_pCbSourceFormat->Hide();
     337             : 
     338           0 :     Link<> aLink = LINK( this, SvxNumberFormatTabPage, SelFormatHdl_Impl );
     339             : 
     340           0 :     m_pLbCategory->SetSelectHdl( aLink );
     341           0 :     m_pLbFormat->SetSelectHdl( aLink );
     342           0 :     m_pLbLanguage->SetSelectHdl( aLink );
     343           0 :     m_pLbCurrency->SetSelectHdl( aLink );
     344           0 :     m_pCbSourceFormat->SetClickHdl( aLink );
     345             : 
     346           0 :     aLink = LINK( this, SvxNumberFormatTabPage, OptHdl_Impl );
     347             : 
     348           0 :     m_pEdDecimals->SetModifyHdl( aLink );
     349           0 :     m_pEdLeadZeroes->SetModifyHdl( aLink );
     350           0 :     m_pBtnNegRed->SetClickHdl( aLink );
     351           0 :     m_pBtnThousand->SetClickHdl( aLink );
     352           0 :     m_pLbFormat->SetDoubleClickHdl( HDL( DoubleClickHdl_Impl ) );
     353           0 :     m_pEdFormat->SetModifyHdl( HDL( EditHdl_Impl ) );
     354           0 :     m_pIbAdd->SetClickHdl( HDL( ClickHdl_Impl ) );
     355           0 :     m_pIbRemove->SetClickHdl( HDL( ClickHdl_Impl ) );
     356           0 :     m_pIbInfo->SetClickHdl( HDL( ClickHdl_Impl ) );
     357           0 :     UpdateThousandEngineeringText();
     358             : 
     359           0 :     aLink = LINK( this, SvxNumberFormatTabPage, LostFocusHdl_Impl);
     360             : 
     361           0 :     m_pEdComment->SetLoseFocusHdl( aLink);
     362           0 :     aResetWinTimer.SetTimeoutHdl(LINK( this, SvxNumberFormatTabPage, TimeHdl_Impl));
     363           0 :     aResetWinTimer.SetTimeout( 10);
     364             : 
     365             :     // initialize language ListBox
     366             : 
     367           0 :     m_pLbLanguage->InsertLanguage( LANGUAGE_SYSTEM );
     368             :     /* TODO: any reason we're doing a manual init here instead of using
     369             :      * SvxLanguageBoxBase::SetLanguageList( SvxLanguageListFlags::ONLY_KNOWN, ...)? */
     370             :     // Don't list ambiguous locales where we won't be able to convert the
     371             :     // LanguageType back to an identical Language_Country name and therefore
     372             :     // couldn't load the i18n LocaleData. Show DebugMsg in non-PRODUCT version.
     373             :     ::com::sun::star::uno::Sequence< sal_uInt16 > xLang =
     374           0 :         LocaleDataWrapper::getInstalledLanguageTypes();
     375           0 :     sal_Int32 nCount = xLang.getLength();
     376           0 :     for ( sal_Int32 i=0; i<nCount; i++ )
     377             :     {
     378           0 :         if (!MsLangId::isLegacy( xLang[i]))
     379           0 :             m_pLbLanguage->InsertLanguage( xLang[i] );
     380           0 :     }
     381           0 : }
     382             : 
     383           0 : VclPtr<SfxTabPage> SvxNumberFormatTabPage::Create( vcl::Window* pParent,
     384             :                                                    const SfxItemSet* rAttrSet )
     385             : {
     386           0 :     return VclPtr<SvxNumberFormatTabPage>::Create( pParent, *rAttrSet );
     387             : }
     388             : 
     389             : 
     390             : /*************************************************************************
     391             : #*  Method:        Reset
     392             : #*------------------------------------------------------------------------
     393             : #*
     394             : #*  Class:      SvxNumberFormatTabPage
     395             : #*  Function:   The dialog's attributes are reset
     396             : #*              using the Itemset.
     397             : #*  Input:      SfxItemSet
     398             : #*  Output:     ---
     399             : #*
     400             : #************************************************************************/
     401             : 
     402           0 : void SvxNumberFormatTabPage::Reset( const SfxItemSet* rSet )
     403             : {
     404           0 :     const SfxUInt32Item*        pValFmtAttr     = NULL;
     405           0 :     const SfxPoolItem*          pItem           = NULL;
     406           0 :     const SfxBoolItem*          pAutoEntryAttr = NULL;
     407             : 
     408           0 :     sal_uInt16                  nCatLbSelPos    = 0;
     409           0 :     sal_uInt16                  nFmtLbSelPos    = 0;
     410           0 :     LanguageType                eLangType       = LANGUAGE_DONTKNOW;
     411           0 :     std::vector<OUString>       aFmtEntryList;
     412           0 :     SvxNumberValueType          eValType        = SVX_VALUE_TYPE_UNDEFINED;
     413           0 :     double                      nValDouble      = 0;
     414           0 :     OUString                    aValString;
     415             : 
     416           0 :     SfxItemState eState = rSet->GetItemState( GetWhich( SID_ATTR_NUMBERFORMAT_NOLANGUAGE ),true,&pItem);
     417             : 
     418           0 :     if(eState==SfxItemState::SET)
     419             :     {
     420             :         const SfxBoolItem* pBoolLangItem = static_cast<const SfxBoolItem*>(
     421           0 :                       GetItem( *rSet, SID_ATTR_NUMBERFORMAT_NOLANGUAGE));
     422             : 
     423           0 :         if(pBoolLangItem!=NULL && pBoolLangItem->GetValue())
     424             :         {
     425           0 :             HideLanguage();
     426             :         }
     427             :         else
     428             :         {
     429           0 :             HideLanguage(false);
     430             :         }
     431             : 
     432             :     }
     433             : 
     434           0 :     eState = rSet->GetItemState( GetWhich( SID_ATTR_NUMBERFORMAT_INFO ),true,&pItem);
     435             : 
     436           0 :     if(eState==SfxItemState::SET)
     437             :     {
     438           0 :         if(pNumItem==NULL)
     439             :         {
     440           0 :             bNumItemFlag=true;
     441           0 :             pNumItem= static_cast<SvxNumberInfoItem *>(pItem->Clone());
     442             :         }
     443             :         else
     444             :         {
     445           0 :             bNumItemFlag=false;
     446             :         }
     447             :     }
     448             :     else
     449             :     {
     450           0 :         bNumItemFlag=false;
     451             :     }
     452             : 
     453             : 
     454           0 :     eState = rSet->GetItemState( GetWhich( SID_ATTR_NUMBERFORMAT_ONE_AREA ));
     455             : 
     456           0 :     if(eState==SfxItemState::SET)
     457             :     {
     458             :         const SfxBoolItem* pBoolItem = static_cast<const SfxBoolItem*>(
     459           0 :                       GetItem( *rSet, SID_ATTR_NUMBERFORMAT_ONE_AREA));
     460             : 
     461           0 :         if(pBoolItem!=NULL)
     462             :         {
     463           0 :             bOneAreaFlag= pBoolItem->GetValue();
     464             :         }
     465             :     }
     466             : 
     467           0 :     eState = rSet->GetItemState( GetWhich( SID_ATTR_NUMBERFORMAT_SOURCE ) );
     468             : 
     469           0 :     if ( eState == SfxItemState::SET )
     470             :     {
     471             :         const SfxBoolItem* pBoolItem = static_cast<const SfxBoolItem*>(
     472           0 :                       GetItem( *rSet, SID_ATTR_NUMBERFORMAT_SOURCE ));
     473           0 :         if ( pBoolItem )
     474           0 :             m_pCbSourceFormat->Check( pBoolItem->GetValue() );
     475             :         else
     476           0 :             m_pCbSourceFormat->Check( false );
     477           0 :         m_pCbSourceFormat->Enable();
     478           0 :         m_pCbSourceFormat->Show();
     479             :     }
     480             :     else
     481             :     {
     482           0 :         bool bInit = false;     // set to sal_True for debug test
     483           0 :         m_pCbSourceFormat->Check( bInit );
     484           0 :         m_pCbSourceFormat->Enable( bInit );
     485           0 :         m_pCbSourceFormat->Show( bInit );
     486             :     }
     487             : 
     488             :     // pNumItem must have been set from outside!
     489             :     DBG_ASSERT( pNumItem, "No NumberInfo, no NumberFormatter, good bye.CRASH. :-(" );
     490             : 
     491           0 :     eState = rSet->GetItemState( GetWhich( SID_ATTR_NUMBERFORMAT_VALUE ) );
     492             : 
     493           0 :     if ( SfxItemState::DONTCARE != eState )
     494             :         pValFmtAttr = static_cast<const SfxUInt32Item*>(
     495           0 :                       GetItem( *rSet, SID_ATTR_NUMBERFORMAT_VALUE ));
     496             : 
     497           0 :     eValType = pNumItem->GetValueType();
     498             : 
     499           0 :     switch ( eValType )
     500             :     {
     501             :         case SVX_VALUE_TYPE_STRING:
     502           0 :             aValString = pNumItem->GetValueString();
     503           0 :             break;
     504             :         case SVX_VALUE_TYPE_NUMBER:
     505             :             //  #50441# string may be set in addition to the value
     506           0 :             aValString = pNumItem->GetValueString();
     507           0 :             nValDouble = pNumItem->GetValueDouble();
     508           0 :             break;
     509             :         case SVX_VALUE_TYPE_UNDEFINED:
     510             :         default:
     511           0 :             break;
     512             :     }
     513             : 
     514           0 :     if ( pNumFmtShell )
     515           0 :          delete pNumFmtShell;   // delete old shell if applicable (== reset)
     516             : 
     517             :     nInitFormat = ( pValFmtAttr )               // memorize init key
     518           0 :                     ? pValFmtAttr->GetValue()   // (for FillItemSet())
     519           0 :                     : ULONG_MAX;                // == DONT_KNOW
     520             : 
     521             : 
     522           0 :     if ( eValType == SVX_VALUE_TYPE_STRING )
     523             :         pNumFmtShell =SvxNumberFormatShell::Create(
     524             :                                 pNumItem->GetNumberFormatter(),
     525             :                                 (pValFmtAttr) ? nInitFormat : 0L,
     526             :                                 eValType,
     527           0 :                                 aValString );
     528             :     else
     529             :         pNumFmtShell =SvxNumberFormatShell::Create(
     530             :                                 pNumItem->GetNumberFormatter(),
     531             :                                 (pValFmtAttr) ? nInitFormat : 0L,
     532             :                                 eValType,
     533             :                                 nValDouble,
     534           0 :                                 &aValString );
     535             : 
     536             : 
     537           0 :     bool bUseStarFormat = false;
     538           0 :     SfxObjectShell* pDocSh  = SfxObjectShell::Current();
     539           0 :     if ( pDocSh )
     540             :     {
     541             :         // is this a calc document
     542           0 :         Reference< XServiceInfo > xSI( pDocSh->GetModel(), UNO_QUERY );
     543           0 :         if ( xSI.is() )
     544           0 :             bUseStarFormat = xSI->supportsService("com.sun.star.sheet.SpreadsheetDocument");
     545             :     }
     546           0 :     pNumFmtShell->SetUseStarFormat( bUseStarFormat );
     547             : 
     548           0 :     FillCurrencyBox();
     549             : 
     550           0 :     OUString aPrevString;
     551           0 :     Color* pDummy = NULL;
     552             :     pNumFmtShell->GetInitSettings( nCatLbSelPos, eLangType, nFmtLbSelPos,
     553           0 :                                    aFmtEntryList, aPrevString, pDummy );
     554             : 
     555           0 :     if (nCatLbSelPos==CAT_CURRENCY)
     556             :     {
     557           0 :         sal_Int32 nPos = pNumFmtShell->GetCurrencySymbol();
     558           0 :         if (nPos == 0)
     559             :             // Enable "Automatically" if currently used so it is selectable.
     560           0 :             m_pLbCurrency->SetEntryFlags( nPos, ListBoxEntryFlags::NONE );
     561             : 
     562           0 :         m_pLbCurrency->SelectEntryPos(nPos);
     563             :     }
     564             : 
     565           0 :     nFixedCategory=nCatLbSelPos;
     566           0 :     if(bOneAreaFlag)
     567             :     {
     568           0 :         OUString sFixedCategory = m_pLbCategory->GetEntry(nFixedCategory);
     569           0 :         m_pLbCategory->Clear();
     570           0 :         m_pLbCategory->InsertEntry(sFixedCategory);
     571           0 :         SetCategory(0);
     572             :     }
     573             :     else
     574             :     {
     575           0 :         SetCategory(nCatLbSelPos );
     576             :     }
     577           0 :     eState = rSet->GetItemState( GetWhich( SID_ATTR_NUMBERFORMAT_ADD_AUTO ) );
     578           0 :     if(SfxItemState::SET == eState)
     579             :          pAutoEntryAttr = static_cast<const SfxBoolItem*>(
     580           0 :                       GetItem( *rSet, SID_ATTR_NUMBERFORMAT_ADD_AUTO ));
     581             :     // no_NO is an alias for nb_NO and normally isn't listed, we need it for
     582             :     // backwards compatibility, but only if the format passed is of
     583             :     // LanguageType no_NO.
     584           0 :     if ( eLangType == LANGUAGE_NORWEGIAN )
     585             :     {
     586           0 :         m_pLbLanguage->RemoveLanguage( eLangType );    // in case we're already called
     587           0 :         m_pLbLanguage->InsertLanguage( eLangType );
     588             :     }
     589           0 :     m_pLbLanguage->SelectLanguage( eLangType );
     590           0 :     if(pAutoEntryAttr)
     591           0 :         AddAutomaticLanguage_Impl(eLangType, pAutoEntryAttr->GetValue());
     592           0 :     UpdateFormatListBox_Impl(false,true);
     593             : 
     594             : //! This spoils everything because it rematches currency formats based on
     595             : //! the selected m_pLbCurrency entry instead of the current format.
     596             : //! Besides that everything seems to be initialized by now, so why call it?
     597             : //  SelFormatHdl_Impl( m_pLbCategory );
     598             : 
     599           0 :     if ( pValFmtAttr )
     600             :     {
     601           0 :         EditHdl_Impl(m_pEdFormat); // UpdateOptions_Impl() als Seiteneffekt
     602             :     }
     603             :     else    // DONT_KNOW
     604             :     {
     605             :         // everything disabled except direct input or changing the category
     606           0 :         Obstructing();
     607             :     }
     608             : 
     609           0 :     if ( m_pCbSourceFormat->IsChecked() )
     610             :     {
     611             :         // everything disabled except SourceFormat checkbox
     612           0 :         EnableBySourceFormat_Impl();
     613           0 :     }
     614           0 : }
     615             : 
     616             : /*************************************************************************
     617             : #*  Method:        Obstructing
     618             : #*------------------------------------------------------------------------
     619             : #*
     620             : #*  Class:      SvxNumberFormatTabPage
     621             : #*  Function:   Disable the controls except from changing the category
     622             : #*              and direct input.
     623             : #*  Input:      ---
     624             : #*  Output:     ---
     625             : #*
     626             : #************************************************************************/
     627           0 : void SvxNumberFormatTabPage::Obstructing()
     628             : {
     629           0 :     m_pLbFormat->SetNoSelection();
     630           0 :     m_pLbLanguage->SetNoSelection();
     631           0 :     m_pFtLanguage->Disable();
     632           0 :     m_pLbLanguage->Disable();
     633             : 
     634           0 :     m_pIbAdd->Enable(false );
     635           0 :     m_pIbRemove->Enable(false );
     636           0 :     m_pIbInfo->Enable(false );
     637             : 
     638           0 :     m_pBtnNegRed->Disable();
     639           0 :     m_pBtnThousand->Disable();
     640           0 :     m_pFtLeadZeroes->Disable();
     641           0 :     m_pFtDecimals->Disable();
     642           0 :     m_pEdLeadZeroes->Disable();
     643           0 :     m_pEdDecimals->Disable();
     644           0 :     m_pFtOptions->Disable();
     645           0 :     m_pEdDecimals->SetText( OUString() );
     646           0 :     m_pEdLeadZeroes->SetText( OUString() );
     647           0 :     m_pBtnNegRed->Check( false );
     648           0 :     m_pBtnThousand->Check( false );
     649           0 :     m_pWndPreview->NotifyChange( OUString() );
     650             : 
     651           0 :     m_pLbCategory->SelectEntryPos( 0 );
     652           0 :     m_pEdFormat->SetText( OUString() );
     653           0 :     m_pFtComment->SetText( OUString() );
     654           0 :     m_pEdComment->SetText(m_pLbCategory->GetEntry(1));  // string for user defined
     655             : 
     656           0 :     m_pEdFormat->GrabFocus();
     657           0 : }
     658             : 
     659             : 
     660             : /*************************************************************************
     661             : #* Enable/Disable dialog parts depending on the value of the SourceFormat
     662             : #* checkbox.
     663             : #************************************************************************/
     664           0 : void SvxNumberFormatTabPage::EnableBySourceFormat_Impl()
     665             : {
     666           0 :     bool bEnable = !m_pCbSourceFormat->IsChecked();
     667           0 :     if ( !bEnable )
     668           0 :         m_pCbSourceFormat->GrabFocus();
     669           0 :     m_pFtCategory->Enable( bEnable );
     670           0 :     m_pLbCategory->Enable( bEnable );
     671           0 :     m_pFtFormat->Enable( bEnable );
     672           0 :     m_pLbCurrency->Enable( bEnable );
     673           0 :     m_pLbFormat->Enable( bEnable );
     674           0 :     m_pFtLanguage->Enable( bEnable );
     675           0 :     m_pLbLanguage->Enable( bEnable );
     676           0 :     m_pFtDecimals->Enable( bEnable );
     677           0 :     m_pEdDecimals->Enable( bEnable );
     678           0 :     m_pFtLeadZeroes->Enable( bEnable );
     679           0 :     m_pEdLeadZeroes->Enable( bEnable );
     680           0 :     m_pBtnNegRed->Enable( bEnable );
     681           0 :     m_pBtnThousand->Enable( bEnable );
     682           0 :     m_pFtOptions->Enable( bEnable );
     683           0 :     m_pFormatCodeFrame->Enable( bEnable );
     684           0 :     m_pLbFormat->Invalidate(); // #i43322#
     685           0 : }
     686             : 
     687             : 
     688             : /*************************************************************************
     689             : #*  Method:    HideLanguage
     690             : #*------------------------------------------------------------------------
     691             : #*
     692             : #*  Class:      SvxNumberFormatTabPage
     693             : #*  Function:   Hides the language settings:
     694             : #*  Input:      sal_Bool nFlag
     695             : #*  Output:     ---
     696             : #*
     697             : #************************************************************************/
     698             : 
     699           0 : void SvxNumberFormatTabPage::HideLanguage(bool nFlag)
     700             : {
     701           0 :     m_pFtLanguage->Show(!nFlag);
     702           0 :     m_pLbLanguage->Show(!nFlag);
     703           0 : }
     704             : 
     705             : /*************************************************************************
     706             : #*  Method:        FillItemSet
     707             : #*------------------------------------------------------------------------
     708             : #*
     709             : #*  Class:      SvxNumberFormatTabPage
     710             : #*  Function:   Adjusts the attributes in the ItemSet,
     711             : #*              and - if bNumItemFlag is not set - the
     712             : #*              numItem in the DocShell.
     713             : #*  Input:      SfxItemSet
     714             : #*  Output:     ---
     715             : #*
     716             : #************************************************************************/
     717             : 
     718           0 : bool SvxNumberFormatTabPage::FillItemSet( SfxItemSet* rCoreAttrs )
     719             : {
     720           0 :     bool bDataChanged   = m_pFtLanguage->IsEnabled() || m_pCbSourceFormat->IsEnabled();
     721           0 :     if ( bDataChanged )
     722             :     {
     723           0 :         const SfxItemSet& rMyItemSet = GetItemSet();
     724           0 :         sal_uInt16          nWhich       = GetWhich( SID_ATTR_NUMBERFORMAT_VALUE );
     725           0 :         SfxItemState    eItemState   = rMyItemSet.GetItemState( nWhich, false );
     726             : 
     727             :         // OK chosen - Is format code input entered already taken over?
     728             :         // If not, simulate Add. Upon syntax error ignore input and prevent Put.
     729           0 :         OUString    aFormat = m_pEdFormat->GetText();
     730           0 :         sal_uInt32 nCurKey = pNumFmtShell->GetCurNumFmtKey();
     731             : 
     732           0 :         if ( m_pIbAdd->IsEnabled() || pNumFmtShell->IsTmpCurrencyFormat(aFormat) )
     733             :         {   // #79599# It is not sufficient to just add the format code (or
     734             :             // delete it in case of bOneAreaFlag and resulting category change).
     735             :             // Upon switching tab pages we need all settings to be consistent
     736             :             // in case this page will be redisplayed later.
     737           0 :             bDataChanged = (ClickHdl_Impl(m_pIbAdd) != 0);
     738           0 :             nCurKey = pNumFmtShell->GetCurNumFmtKey();
     739             :         }
     740           0 :         else if(nCurKey == NUMKEY_UNDEFINED)
     741             :         {   // something went wrong, e.g. in Writer #70281#
     742           0 :             pNumFmtShell->FindEntry(aFormat, &nCurKey);
     743             :         }
     744             : 
     745             : 
     746             :         // Chosen format:
     747             : 
     748           0 :         if ( bDataChanged )
     749             :         {
     750           0 :             bDataChanged = ( nInitFormat != nCurKey );
     751             : 
     752           0 :             if (bDataChanged)
     753             :             {
     754           0 :                 rCoreAttrs->Put( SfxUInt32Item( nWhich, nCurKey ) );
     755             :             }
     756           0 :             else if(SfxItemState::DEFAULT == eItemState)
     757             :             {
     758           0 :                 rCoreAttrs->ClearItem( nWhich );
     759             :             }
     760             :         }
     761             : 
     762             : 
     763             :         // List of changed user defined formats:
     764             : 
     765           0 :         const size_t nDelCount = pNumFmtShell->GetUpdateDataCount();
     766             : 
     767           0 :         if ( nDelCount > 0 )
     768             :         {
     769           0 :             boost::scoped_array<sal_uInt32> pDelArr(new sal_uInt32[nDelCount]);
     770             : 
     771           0 :             pNumFmtShell->GetUpdateData( pDelArr.get(), nDelCount );
     772           0 :             pNumItem->SetDelFormatArray( pDelArr.get(), nDelCount );
     773             : 
     774           0 :             if(bNumItemFlag)
     775             :             {
     776           0 :                 rCoreAttrs->Put( *pNumItem );
     777             :             }
     778             :             else
     779             :             {
     780           0 :                 SfxObjectShell* pDocSh  = SfxObjectShell::Current();
     781             : 
     782             :                 DBG_ASSERT( pDocSh, "DocShell not found!" );
     783             : 
     784             : 
     785           0 :                 if ( pDocSh )
     786           0 :                     pDocSh->PutItem( *pNumItem );
     787           0 :             }
     788             :         }
     789             : 
     790             : 
     791             :         // Whether source format is to be taken or not:
     792             : 
     793           0 :         if ( m_pCbSourceFormat->IsEnabled() )
     794             :         {
     795           0 :             sal_uInt16 _nWhich = GetWhich( SID_ATTR_NUMBERFORMAT_SOURCE );
     796           0 :             SfxItemState _eItemState = rMyItemSet.GetItemState( _nWhich, false );
     797             :             const SfxBoolItem* pBoolItem = static_cast<const SfxBoolItem*>(
     798           0 :                         GetItem( rMyItemSet, SID_ATTR_NUMBERFORMAT_SOURCE ));
     799           0 :             bool bOld = pBoolItem && pBoolItem->GetValue();
     800           0 :             rCoreAttrs->Put( SfxBoolItem( _nWhich, m_pCbSourceFormat->IsChecked() ) );
     801           0 :             if ( !bDataChanged )
     802           0 :                 bDataChanged = (bOld != m_pCbSourceFormat->IsChecked() ||
     803           0 :                     _eItemState != SfxItemState::SET);
     804             :         }
     805             : 
     806             :         // FillItemSet is only called on OK, here we can notify the
     807             :         // NumberFormatShell that all new user defined formats are valid.
     808           0 :         pNumFmtShell->ValidateNewEntries();
     809           0 :         if(m_pLbLanguage->IsVisible() &&
     810           0 :                 LISTBOX_ENTRY_NOTFOUND != m_pLbLanguage->GetEntryPos(sAutomaticEntry))
     811             :                 rCoreAttrs->Put(SfxBoolItem(SID_ATTR_NUMBERFORMAT_ADD_AUTO,
     812           0 :                     m_pLbLanguage->GetSelectEntry() == sAutomaticEntry));
     813             :     }
     814             : 
     815           0 :     return bDataChanged;
     816             : }
     817             : 
     818             : 
     819           0 : SfxTabPage::sfxpg SvxNumberFormatTabPage::DeactivatePage( SfxItemSet* _pSet )
     820             : {
     821           0 :     if ( _pSet )
     822           0 :         FillItemSet( _pSet );
     823           0 :     return LEAVE_PAGE;
     824             : }
     825             : 
     826           0 : void SvxNumberFormatTabPage::SetInfoItem( const SvxNumberInfoItem& rItem )
     827             : {
     828           0 :     if(pNumItem==NULL)
     829             :     {
     830           0 :         pNumItem = static_cast<SvxNumberInfoItem*>(rItem.Clone());
     831             :     }
     832           0 : }
     833             : 
     834           0 : void SvxNumberFormatTabPage::FillFormatListBox_Impl( std::vector<OUString>& rEntries )
     835             : {
     836           0 :     OUString    aEntry;
     837           0 :     OUString    aTmpString;
     838           0 :     vcl::Font   aFont=m_pLbCategory->GetFont();
     839           0 :     size_t      i = 0;
     840             :     short       nTmpCatPos;
     841             : 
     842           0 :     m_pLbFormat->Clear();
     843           0 :     m_pLbFormat->SetUpdateMode( false );
     844             : 
     845           0 :     if( rEntries.empty() )
     846           0 :         return;
     847             : 
     848           0 :     if(bOneAreaFlag)
     849             :     {
     850           0 :         nTmpCatPos=nFixedCategory;
     851             :     }
     852             :     else
     853             :     {
     854           0 :         nTmpCatPos=m_pLbCategory->GetSelectEntryPos();
     855             :     }
     856             : 
     857           0 :     switch (nTmpCatPos)
     858             :     {
     859             :         case CAT_ALL:
     860             :         case CAT_TEXT:
     861           0 :         case CAT_NUMBER:        i=1;
     862           0 :                                 aEntry=rEntries[0];
     863           0 :                                 if (nTmpCatPos == CAT_TEXT)
     864           0 :                                     aTmpString=aEntry;
     865             :                                 else
     866           0 :                                     aTmpString = pNumFmtShell->GetStandardName();
     867           0 :                                 m_pLbFormat->InsertFontEntry( aTmpString, aFont );
     868           0 :                                 break;
     869             : 
     870           0 :         default:                break;
     871             :     }
     872             : 
     873           0 :     if(pNumFmtShell!=NULL)
     874             :     {
     875           0 :         for ( ; i < rEntries.size(); ++i )
     876             :         {
     877           0 :             aEntry = rEntries[i];
     878           0 :             short aPrivCat = pNumFmtShell->GetCategory4Entry( static_cast<short>(i) );
     879           0 :             if(aPrivCat!=CAT_TEXT)
     880             :             {
     881           0 :                 Color* pPreviewColor = NULL;
     882           0 :                 OUString aPreviewString( GetExpColorString( pPreviewColor, aEntry, aPrivCat ) );
     883           0 :                 vcl::Font aEntryFont( m_pLbFormat->GetFont() );
     884           0 :                 m_pLbFormat->InsertFontEntry( aPreviewString, aEntryFont, pPreviewColor );
     885             :             }
     886             :             else
     887             :             {
     888           0 :                 m_pLbFormat->InsertFontEntry(aEntry,aFont);
     889             :             }
     890             :         }
     891             :     }
     892           0 :     m_pLbFormat->SetUpdateMode( true );
     893           0 :     rEntries.clear();
     894             : }
     895             : 
     896             : /*************************************************************************
     897             : #*  Method:        UpdateOptions_Impl
     898             : #*------------------------------------------------------------------------
     899             : #*
     900             : #*  Class:      SvxNumberFormatTabPage
     901             : #*  Function:   Adjusts the options attributes
     902             : #*              depending on the selected format.
     903             : #*  Input:      Flag, whether the category has changed.
     904             : #*  Output:     ---
     905             : #*
     906             : #************************************************************************/
     907             : 
     908           0 : void SvxNumberFormatTabPage::UpdateOptions_Impl( bool bCheckCatChange /*= sal_False*/ )
     909             : {
     910           0 :     OUString    theFormat           = m_pEdFormat->GetText();
     911           0 :     sal_Int32   nCurCategory        = m_pLbCategory->GetSelectEntryPos();
     912           0 :     sal_uInt16  nCategory           = static_cast<sal_uInt16>(nCurCategory);
     913           0 :     sal_uInt16  nDecimals           = 0;
     914           0 :     sal_uInt16  nZeroes             = 0;
     915           0 :     bool        bNegRed             = false;
     916           0 :     bool        bThousand           = false;
     917           0 :     sal_Int32   nCurrencyPos        =m_pLbCurrency->GetSelectEntryPos();
     918             : 
     919           0 :     if(bOneAreaFlag)
     920           0 :         nCurCategory=nFixedCategory;
     921             : 
     922             : 
     923             :     pNumFmtShell->GetOptions( theFormat,
     924             :                               bThousand, bNegRed,
     925             :                               nDecimals, nZeroes,
     926           0 :                               nCategory );
     927           0 :     bool bDoIt=false;
     928           0 :     if(nCategory==CAT_CURRENCY)
     929             :     {
     930           0 :         sal_uInt16 nTstPos=pNumFmtShell->FindCurrencyFormat(theFormat);
     931           0 :         if(nCurrencyPos!=static_cast<sal_Int32>(nTstPos) && nTstPos!=(sal_uInt16)-1)
     932             :         {
     933           0 :             m_pLbCurrency->SelectEntryPos(nTstPos);
     934           0 :             pNumFmtShell->SetCurrencySymbol(nTstPos);
     935           0 :             bDoIt=true;
     936             :         }
     937             :     }
     938             : 
     939             : 
     940             : 
     941           0 :     if ( nCategory != nCurCategory || bDoIt)
     942             :     {
     943           0 :         if ( bCheckCatChange )
     944             :         {
     945           0 :             if(bOneAreaFlag)
     946           0 :                 SetCategory(0);
     947             :             else
     948           0 :                 SetCategory(nCategory );
     949             : 
     950           0 :             UpdateFormatListBox_Impl( true, false );
     951             :         }
     952             :     }
     953           0 :     else if ( m_pLbFormat->GetEntryCount() > 0 )
     954             :     {
     955           0 :         sal_uInt32 nCurEntryKey=NUMKEY_UNDEFINED;
     956           0 :         if(!pNumFmtShell->FindEntry( m_pEdFormat->GetText(),&nCurEntryKey))
     957             :         {
     958           0 :             m_pLbFormat->SetNoSelection();
     959             :         }
     960             :     }
     961           0 :     if(bOneAreaFlag)
     962             :     {
     963           0 :         nCategory=nFixedCategory;
     964             :     }
     965             : 
     966           0 :     switch ( nCategory )
     967             :     {
     968             :         case CAT_SCIENTIFIC: // bThousand is for Engineering notation
     969             :             {
     970           0 :                 sal_uInt16 nIntDigits = pNumFmtShell->GetFormatIntegerDigits(theFormat);
     971           0 :                 if ( (nIntDigits > 0) && (nIntDigits % 3 == 0) )
     972           0 :                     bThousand = true;
     973             :                 else
     974           0 :                     bThousand = false;
     975             :             }
     976             :             // fallthru
     977             :         case CAT_NUMBER:
     978             :         case CAT_PERCENT:
     979             :         case CAT_CURRENCY:
     980           0 :             m_pFtOptions->Enable();
     981           0 :             m_pFtDecimals->Enable();
     982           0 :             m_pEdDecimals->Enable();
     983           0 :             m_pFtLeadZeroes->Enable();
     984           0 :             m_pEdLeadZeroes->Enable();
     985           0 :             m_pBtnNegRed->Enable();
     986           0 :             m_pBtnThousand->Enable();
     987           0 :             m_pEdDecimals->SetText( OUString::number( nDecimals ) );
     988           0 :             m_pEdLeadZeroes->SetText( OUString::number( nZeroes ) );
     989           0 :             m_pBtnNegRed->Check( bNegRed );
     990           0 :             m_pBtnThousand->Check( bThousand );
     991           0 :             break;
     992             : 
     993             :         case CAT_ALL:
     994             :         case CAT_USERDEFINED:
     995             :         case CAT_TEXT:
     996             :         case CAT_DATE:
     997             :         case CAT_TIME:
     998             :         case CAT_BOOLEAN:
     999             :         case CAT_FRACTION:
    1000             :         default:
    1001           0 :             m_pFtOptions->Disable();
    1002           0 :             m_pFtDecimals->Disable();
    1003           0 :             m_pEdDecimals->Disable();
    1004           0 :             m_pFtLeadZeroes->Disable();
    1005           0 :             m_pEdLeadZeroes->Disable();
    1006           0 :             m_pBtnNegRed->Disable();
    1007           0 :             m_pBtnThousand->Disable();
    1008           0 :             m_pEdDecimals->SetText( OUString::number( 0 ) );
    1009           0 :             m_pEdLeadZeroes->SetText( OUString::number( 0 ) );
    1010           0 :             m_pBtnNegRed->Check( false );
    1011           0 :             m_pBtnThousand->Check( false );
    1012             :     }
    1013           0 :     UpdateThousandEngineeringText();
    1014           0 : }
    1015             : 
    1016             : 
    1017             : /*************************************************************************
    1018             : #*  Method:        UpdateFormatListBox_Impl
    1019             : #*------------------------------------------------------------------------
    1020             : #*
    1021             : #*  Class:      SvxNumberFormatTabPage
    1022             : #*  Function:   Updates the format lisbox and additionally the
    1023             : #*              string in the editbox is changed depending on
    1024             : #*              the bUpdateEdit flag.
    1025             : #*  Input:      Flags for category and editbox.
    1026             : #*  Output:     ---
    1027             : #*
    1028             : #************************************************************************/
    1029             : 
    1030           0 : void SvxNumberFormatTabPage::UpdateFormatListBox_Impl
    1031             :     (
    1032             :         bool bCat,        // Category or country/language ListBox?
    1033             :         bool   bUpdateEdit
    1034             :     )
    1035             : {
    1036           0 :     std::vector<OUString> aEntryList;
    1037           0 :     short                 nFmtLbSelPos = 0;
    1038             :     short                 nTmpCatPos;
    1039             : 
    1040           0 :     if(bOneAreaFlag)
    1041             :     {
    1042           0 :         nTmpCatPos=nFixedCategory;
    1043             :     }
    1044             :     else
    1045             :     {
    1046           0 :         nTmpCatPos=m_pLbCategory->GetSelectEntryPos();
    1047             :     }
    1048             : 
    1049             : 
    1050           0 :     if ( bCat )
    1051             :     {
    1052           0 :         if(nTmpCatPos!=CAT_CURRENCY)
    1053           0 :             m_pLbCurrency->Hide();
    1054             :         else
    1055           0 :             m_pLbCurrency->Show();
    1056             : 
    1057           0 :         pNumFmtShell->CategoryChanged( nTmpCatPos,nFmtLbSelPos, aEntryList );
    1058             :     }
    1059             :     else
    1060           0 :         pNumFmtShell->LanguageChanged( m_pLbLanguage->GetSelectLanguage(),
    1061           0 :                                        nFmtLbSelPos,aEntryList );
    1062             : 
    1063           0 :     REMOVE_DONTKNOW() // possibly UI-Enable
    1064             : 
    1065             : 
    1066           0 :     if ( (!aEntryList.empty()) && (nFmtLbSelPos != SELPOS_NONE) )
    1067             :     {
    1068           0 :         if(bUpdateEdit)
    1069             :         {
    1070           0 :             OUString aFormat=aEntryList[nFmtLbSelPos];
    1071           0 :             m_pEdFormat->SetText(aFormat);
    1072           0 :             m_pFtComment->SetText(pNumFmtShell->GetComment4Entry(nFmtLbSelPos));
    1073             :         }
    1074             : 
    1075           0 :         if(!bOneAreaFlag || !bCat)
    1076             :         {
    1077           0 :             FillFormatListBox_Impl( aEntryList );
    1078           0 :             m_pLbFormat->SelectEntryPos( nFmtLbSelPos );
    1079             : 
    1080           0 :             m_pFtComment->SetText(pNumFmtShell->GetComment4Entry(nFmtLbSelPos));
    1081           0 :             if(pNumFmtShell->GetUserDefined4Entry(nFmtLbSelPos))
    1082             :             {
    1083           0 :                 if(pNumFmtShell->GetComment4Entry(nFmtLbSelPos).isEmpty())
    1084             :                 {
    1085           0 :                     m_pFtComment->SetText(m_pLbCategory->GetEntry(1));
    1086             :                 }
    1087             :             }
    1088           0 :             ChangePreviewText( (sal_uInt16)nFmtLbSelPos );
    1089             :         }
    1090             : 
    1091             :     }
    1092             :     else
    1093             :     {
    1094           0 :         FillFormatListBox_Impl( aEntryList );
    1095           0 :         if(nFmtLbSelPos != SELPOS_NONE)
    1096             :         {
    1097           0 :             m_pLbFormat->SelectEntryPos( (sal_uInt16)nFmtLbSelPos );
    1098             : 
    1099           0 :             m_pFtComment->SetText(pNumFmtShell->GetComment4Entry(nFmtLbSelPos));
    1100           0 :             if(pNumFmtShell->GetUserDefined4Entry(nFmtLbSelPos))
    1101             :             {
    1102           0 :                 if(pNumFmtShell->GetComment4Entry(nFmtLbSelPos).isEmpty())
    1103             :                 {
    1104           0 :                     m_pFtComment->SetText(m_pLbCategory->GetEntry(1));
    1105             :                 }
    1106             :             }
    1107             :         }
    1108             :         else
    1109             :         {
    1110           0 :             m_pLbFormat->SetNoSelection();
    1111             :         }
    1112             : 
    1113           0 :         if ( bUpdateEdit )
    1114             :         {
    1115           0 :             m_pEdFormat->SetText( OUString() );
    1116           0 :             m_pWndPreview->NotifyChange( OUString() );
    1117             :         }
    1118             :     }
    1119             : 
    1120           0 :     aEntryList.clear();
    1121           0 : }
    1122             : 
    1123             : 
    1124             : /*************************************************************************
    1125             : #*  Method:        UpdateThousandEngineeringText
    1126             : #*------------------------------------------------------------------------
    1127             : #*
    1128             : #*  Class:      SvxNumberFormatTabPage
    1129             : #*  Function:   Updates the text of Thousands seprator checkbox
    1130             : #*              if scientific format "Engineering notation"
    1131             : #*              else "Thousands separator"
    1132             : #*  Input:      ---
    1133             : #*  Output:     ---
    1134             : #*
    1135             : #************************************************************************/
    1136             : 
    1137           0 : void SvxNumberFormatTabPage::UpdateThousandEngineeringText()
    1138             : {
    1139           0 :     if ( m_pLbCategory->GetSelectEntryPos() == CAT_SCIENTIFIC )
    1140           0 :         m_pBtnThousand->SetText(sEngineeringNotation);
    1141             :     else
    1142           0 :         m_pBtnThousand->SetText(sThousandSeparator);
    1143           0 : }
    1144             : 
    1145             : 
    1146             : /*************************************************************************
    1147             : #*  Handle:     DoubleClickHdl_Impl
    1148             : #*------------------------------------------------------------------------
    1149             : #*
    1150             : #*  Class:      SvxNumberFormatTabPage
    1151             : #*  Function:   On a double click in the format lisbox the
    1152             : #*              value is adopted and the OK button pushed.
    1153             : #*  Input:      Pointer on the Listbox
    1154             : #*  Output:     ---
    1155             : #*
    1156             : #************************************************************************/
    1157             : 
    1158           0 : IMPL_LINK( SvxNumberFormatTabPage, DoubleClickHdl_Impl, SvxFontListBox*, pLb )
    1159             : {
    1160           0 :     if (pLb == m_pLbFormat)
    1161             :     {
    1162           0 :         SelFormatHdl_Impl( pLb );
    1163             : 
    1164           0 :         if ( fnOkHdl.IsSet() )
    1165             :         {   // temporary solution, should be offered by SfxTabPage
    1166           0 :             fnOkHdl.Call( NULL );
    1167             :         }
    1168             :         else
    1169             :         {
    1170           0 :             SfxSingleTabDialog* pParent = dynamic_cast< SfxSingleTabDialog* >( GetParentDialog() );
    1171           0 :             OKButton* pOKButton = pParent ? pParent->GetOKButton() : NULL;
    1172           0 :             if ( pOKButton )
    1173           0 :                 pOKButton->Click();
    1174             :         }
    1175             :     }
    1176           0 :     return 0;
    1177             : }
    1178             : 
    1179             : 
    1180             : /*************************************************************************
    1181             : #*  Method:    SelFormatHdl_Impl
    1182             : #*------------------------------------------------------------------------
    1183             : #*
    1184             : #*  Class:      SvxNumberFormatTabPage
    1185             : #*  Function:   Is called when the language, the category or the format
    1186             : #*              is changed. Accordingly the settings are adjusted.
    1187             : #*  Input:      Pointer on the Listbox
    1188             : #*  Output:     ---
    1189             : #*
    1190             : #************************************************************************/
    1191             : 
    1192           0 : IMPL_LINK( SvxNumberFormatTabPage, SelFormatHdl_Impl, void *, pLb )
    1193             : {
    1194           0 :     if (pLb == m_pCbSourceFormat)
    1195             :     {
    1196           0 :         EnableBySourceFormat_Impl();    // enable/disable everything else
    1197           0 :         if ( m_pCbSourceFormat->IsChecked() )
    1198           0 :             return 0;   // just disabled everything else
    1199             : 
    1200             :         // Reinit options enable/disable for current selection.
    1201             : 
    1202             :         // Current category may be UserDefined with no format entries defined.
    1203             :         // And yes, m_pLbFormat is a SvxFontListBox with sal_uLong list positions,
    1204             :         // implementation returns a TREELIST_ENTRY_NOTFOUND if empty,
    1205             :         // comparison with sal_Int32 LISTBOX_ENTRY_NOTFOUND wouldn't match.
    1206           0 :         if ( m_pLbFormat->GetSelectEntryPos() == TREELIST_ENTRY_NOTFOUND )
    1207           0 :             pLb = m_pLbCategory; // continue with the current category selected
    1208             :         else
    1209           0 :             pLb = m_pLbFormat;   // continue with the current format selected
    1210             :     }
    1211             : 
    1212             :     sal_Int32 nTmpCatPos;
    1213             : 
    1214           0 :     if(bOneAreaFlag)
    1215             :     {
    1216           0 :         nTmpCatPos=nFixedCategory;
    1217             :     }
    1218             :     else
    1219             :     {
    1220           0 :         nTmpCatPos=m_pLbCategory->GetSelectEntryPos();
    1221             :     }
    1222             : 
    1223           0 :     if (nTmpCatPos==CAT_CURRENCY && pLb == m_pLbCurrency )
    1224             :     {
    1225           0 :         sal_Int32 nCurrencyPos = m_pLbCurrency->GetSelectEntryPos();
    1226           0 :         pNumFmtShell->SetCurrencySymbol(static_cast<sal_uInt32>(nCurrencyPos));
    1227             :     }
    1228             : 
    1229             : 
    1230             :     // Format-ListBox ----------------------------------------------------
    1231           0 :     if (pLb == m_pLbFormat)
    1232             :     {
    1233           0 :         sal_uLong nSelPos = m_pLbFormat->GetSelectEntryPos();
    1234           0 :         short nFmtLbSelPos = static_cast<short>(nSelPos);
    1235             : 
    1236           0 :         OUString aFormat = pNumFmtShell->GetFormat4Entry(nFmtLbSelPos);
    1237           0 :         OUString aComment = pNumFmtShell->GetComment4Entry(nFmtLbSelPos);
    1238             : 
    1239           0 :         if(pNumFmtShell->GetUserDefined4Entry(nFmtLbSelPos))
    1240             :         {
    1241           0 :             if(aComment.isEmpty())
    1242             :             {
    1243           0 :                 aComment = m_pLbCategory->GetEntry(1);
    1244             :             }
    1245             :         }
    1246             : 
    1247           0 :         if ( !aFormat.isEmpty() )
    1248             :         {
    1249           0 :             if(!m_pEdFormat->HasFocus()) m_pEdFormat->SetText( aFormat );
    1250           0 :             m_pFtComment->SetText(aComment);
    1251           0 :             ChangePreviewText( static_cast<sal_uInt16>(nSelPos) );
    1252             :         }
    1253             : 
    1254           0 :         REMOVE_DONTKNOW() // possibly UI-Enable
    1255             : 
    1256           0 :         if ( pNumFmtShell->FindEntry( aFormat) )
    1257             :         {
    1258           0 :             m_pIbAdd->Enable(false );
    1259           0 :             bool bIsUserDef=pNumFmtShell->IsUserDefined( aFormat );
    1260           0 :             m_pIbRemove->Enable(bIsUserDef);
    1261           0 :             m_pIbInfo->Enable(bIsUserDef);
    1262             : 
    1263             :         }
    1264             :         else
    1265             :         {
    1266           0 :             m_pIbAdd->Enable(true );
    1267           0 :             m_pIbInfo->Enable(true );
    1268           0 :             m_pIbRemove->Enable(false );
    1269           0 :             m_pFtComment->SetText(m_pEdComment->GetText());
    1270             : 
    1271             :         }
    1272           0 :         UpdateOptions_Impl( false );
    1273             : 
    1274           0 :         return 0;
    1275             :     }
    1276             : 
    1277             : 
    1278             :     // category-ListBox -------------------------------------------------
    1279           0 :     if (pLb == m_pLbCategory || pLb == m_pLbCurrency)
    1280             :     {
    1281           0 :         UpdateFormatListBox_Impl( true, true );
    1282           0 :         EditHdl_Impl( NULL );
    1283           0 :         UpdateOptions_Impl( false );
    1284             : 
    1285           0 :         return 0;
    1286             :     }
    1287             : 
    1288             : 
    1289             :     // language/country-ListBox ----------------------------------------------
    1290           0 :     if (pLb == m_pLbLanguage)
    1291             :     {
    1292           0 :         UpdateFormatListBox_Impl( false, true );
    1293           0 :         EditHdl_Impl(m_pEdFormat);
    1294             : 
    1295           0 :         return 0;
    1296             :     }
    1297           0 :     return 0;
    1298             : }
    1299             : 
    1300             : 
    1301             : /*************************************************************************
    1302             : #*  Method:    ClickHdl_Impl, PushButton* pIB
    1303             : #*------------------------------------------------------------------------
    1304             : #*
    1305             : #*  Class:      SvxNumberFormatTabPage
    1306             : #*  Function:   Called when the add or delete button is pushed,
    1307             : #*              adjusts the number format list.
    1308             : #*  Input:      Toolbox- Button
    1309             : #*  Output:     ---
    1310             : #*
    1311             : #************************************************************************/
    1312             : 
    1313           0 : IMPL_LINK( SvxNumberFormatTabPage, ClickHdl_Impl, PushButton*, pIB)
    1314             : {
    1315           0 :     bool        bDeleted = false;
    1316           0 :     sal_uLong       nReturn = 0;
    1317           0 :     const sal_uLong nReturnChanged  = 0x1;  // THE boolean return value
    1318           0 :     const sal_uLong nReturnAdded    = 0x2;  // temp: format added
    1319           0 :     const sal_uLong nReturnOneArea  = 0x4;  // temp: one area but category changed => ignored
    1320             : 
    1321           0 :     if (pIB == m_pIbAdd)
    1322             :     {   // Also called from FillItemSet() if a temporary currency format has
    1323             :         // to be added, not only if the Add button is enabled.
    1324           0 :         OUString               aFormat = m_pEdFormat->GetText();
    1325           0 :         std::vector<OUString> aEntryList;
    1326           0 :         std::vector<OUString> a2EntryList;
    1327           0 :         sal_uInt16           nCatLbSelPos = 0;
    1328           0 :         short                nFmtLbSelPos = SELPOS_NONE;
    1329           0 :         sal_Int32            nErrPos=0;
    1330             : 
    1331           0 :         pNumFmtShell->SetCurCurrencyEntry(NULL);
    1332             :         bool bAdded = pNumFmtShell->AddFormat( aFormat, nErrPos,
    1333             :                                           nCatLbSelPos, nFmtLbSelPos,
    1334           0 :                                           aEntryList);
    1335           0 :         if ( bAdded )
    1336           0 :             nReturn |= nReturnChanged | nReturnAdded;
    1337             : 
    1338           0 :         if (pLastActivWindow == m_pEdComment)
    1339             :         {
    1340           0 :             m_pEdFormat->GrabFocus();
    1341           0 :             m_pEdComment->Hide();
    1342           0 :             m_pFtComment->Show();
    1343           0 :             m_pFtComment->SetText(m_pEdComment->GetText());
    1344             :         }
    1345             : 
    1346           0 :         if ( !nErrPos ) // Syntax ok?
    1347             :         {
    1348             :             // May be sorted under a different locale if LCID was parsed.
    1349           0 :             if (bAdded)
    1350           0 :                 m_pLbLanguage->SelectLanguage( pNumFmtShell->GetCurLanguage() );
    1351             : 
    1352           0 :             if(nCatLbSelPos==CAT_CURRENCY)
    1353             :             {
    1354           0 :                 m_pLbCurrency->SelectEntryPos((sal_uInt16)pNumFmtShell->GetCurrencySymbol());
    1355             :             }
    1356             : 
    1357           0 :             if(bOneAreaFlag && (nFixedCategory!=nCatLbSelPos))
    1358             :             {
    1359           0 :                 if(bAdded) aEntryList.clear();
    1360             :                 bDeleted = pNumFmtShell->RemoveFormat( aFormat,
    1361             :                                                nCatLbSelPos,
    1362             :                                                nFmtLbSelPos,
    1363           0 :                                                a2EntryList);
    1364           0 :                 if(bDeleted) a2EntryList.clear();
    1365           0 :                 m_pEdFormat->GrabFocus();
    1366           0 :                 m_pEdFormat->SetSelection( Selection( 0, SELECTION_MAX ) );
    1367           0 :                 nReturn |= nReturnOneArea;
    1368             :             }
    1369             :             else
    1370             :             {
    1371           0 :                 if ( bAdded && (nFmtLbSelPos != SELPOS_NONE) )
    1372             :                 {
    1373             :                     // everything alright
    1374           0 :                     if(bOneAreaFlag)                  //@@ ???
    1375           0 :                         SetCategory(0);
    1376             :                     else
    1377           0 :                         SetCategory(nCatLbSelPos );
    1378             : 
    1379           0 :                     FillFormatListBox_Impl( aEntryList );
    1380           0 :                     if(m_pEdComment->GetText()!=OUString(m_pLbCategory->GetEntry(1)))
    1381             :                     {
    1382             :                         pNumFmtShell->SetComment4Entry(nFmtLbSelPos,
    1383           0 :                                                     m_pEdComment->GetText());
    1384             :                     }
    1385             :                     else
    1386             :                     {
    1387             :                         pNumFmtShell->SetComment4Entry(nFmtLbSelPos,
    1388           0 :                                                         OUString());
    1389             :                     }
    1390           0 :                     m_pLbFormat->SelectEntryPos( (sal_uInt16)nFmtLbSelPos );
    1391           0 :                     m_pEdFormat->SetText( aFormat );
    1392             : 
    1393           0 :                     m_pEdComment->SetText(m_pLbCategory->GetEntry(1));    // String for user defined
    1394             : 
    1395           0 :                     ChangePreviewText( (sal_uInt16)nFmtLbSelPos );
    1396             :                 }
    1397             :             }
    1398             :         }
    1399             :         else // syntax error
    1400             :         {
    1401           0 :             m_pEdFormat->GrabFocus();
    1402           0 :             m_pEdFormat->SetSelection( Selection( nErrPos == -1 ? SELECTION_MAX : nErrPos, SELECTION_MAX ) );
    1403             :         }
    1404           0 :         EditHdl_Impl(m_pEdFormat);
    1405           0 :         nReturn = ((nReturn & nReturnOneArea) ? 0 : (nReturn & nReturnChanged));
    1406             : 
    1407           0 :         aEntryList.clear();
    1408           0 :         a2EntryList.clear();
    1409             :     }
    1410           0 :     else if (pIB == m_pIbRemove)
    1411             :     {
    1412           0 :         OUString              aFormat = m_pEdFormat->GetText();
    1413           0 :         std::vector<OUString> aEntryList;
    1414           0 :         sal_uInt16           nCatLbSelPos = 0;
    1415           0 :         short                nFmtLbSelPos = SELPOS_NONE;
    1416             : 
    1417             :         bDeleted = pNumFmtShell->RemoveFormat( aFormat,
    1418             :                                                nCatLbSelPos,
    1419             :                                                nFmtLbSelPos,
    1420           0 :                                                aEntryList );
    1421             : 
    1422           0 :         m_pEdComment->SetText(m_pLbCategory->GetEntry(1));
    1423           0 :         if ( bDeleted )
    1424             :         {
    1425           0 :             if( nFmtLbSelPos>=0 && static_cast<size_t>(nFmtLbSelPos)<aEntryList.size() )
    1426             :             {
    1427           0 :                 aFormat = aEntryList[nFmtLbSelPos];
    1428             :             }
    1429             : 
    1430           0 :             FillFormatListBox_Impl( aEntryList );
    1431             : 
    1432           0 :             if ( nFmtLbSelPos != SELPOS_NONE )
    1433             :             {
    1434           0 :                 if(bOneAreaFlag)                  //@@ ???
    1435           0 :                         SetCategory(0);
    1436             :                     else
    1437           0 :                         SetCategory(nCatLbSelPos );
    1438             : 
    1439           0 :                 m_pLbFormat->SelectEntryPos( (sal_uInt16)nFmtLbSelPos );
    1440           0 :                 m_pEdFormat->SetText( aFormat );
    1441           0 :                 ChangePreviewText( (sal_uInt16)nFmtLbSelPos );
    1442             :             }
    1443             :             else
    1444             :             {
    1445             :                 // set to "all/standard"
    1446           0 :                 SetCategory(0);
    1447           0 :                 SelFormatHdl_Impl(m_pLbCategory);
    1448             :             }
    1449             :         }
    1450           0 :         EditHdl_Impl(m_pEdFormat);
    1451             : 
    1452           0 :         aEntryList.clear();
    1453             :     }
    1454           0 :     else if (pIB == m_pIbInfo)
    1455             :     {
    1456           0 :         if(!(pLastActivWindow == m_pEdComment))
    1457             :         {
    1458           0 :             m_pEdComment->SetText(m_pFtComment->GetText());
    1459           0 :             m_pEdComment->Show();
    1460           0 :             m_pFtComment->Hide();
    1461           0 :             m_pEdComment->GrabFocus();
    1462             :         }
    1463             :         else
    1464             :         {
    1465           0 :             m_pEdFormat->GrabFocus();
    1466           0 :             m_pEdComment->Hide();
    1467           0 :             m_pFtComment->Show();
    1468             :         }
    1469             :     }
    1470             : 
    1471           0 :     return nReturn;
    1472             : }
    1473             : 
    1474             : 
    1475             : /*************************************************************************
    1476             : #*  Method:    EditHdl_Impl
    1477             : #*------------------------------------------------------------------------
    1478             : #*
    1479             : #*  Class:      SvxNumberFormatTabPage
    1480             : #*  Function:   When the entry in the edit field is changed
    1481             : #*              the preview is updated and
    1482             : #*  Input:      Pointer on Editbox
    1483             : #*  Output:     ---
    1484             : #*
    1485             : #************************************************************************/
    1486             : 
    1487           0 : IMPL_LINK( SvxNumberFormatTabPage, EditHdl_Impl, Edit*, pEdFormat )
    1488             : {
    1489           0 :     sal_uInt32 nCurKey = NUMKEY_UNDEFINED;
    1490             : 
    1491           0 :     if ( m_pEdFormat->GetText().isEmpty() )
    1492             :     {
    1493           0 :         m_pIbAdd->Enable(false );
    1494           0 :         m_pIbRemove->Enable(false );
    1495           0 :         m_pIbInfo->Enable(false );
    1496           0 :         m_pFtComment->SetText(OUString());
    1497             :     }
    1498             :     else
    1499             :     {
    1500           0 :         OUString aFormat = m_pEdFormat->GetText();
    1501           0 :         MakePreviewText( aFormat );
    1502             : 
    1503           0 :         if ( pNumFmtShell->FindEntry( aFormat, &nCurKey ) )
    1504             :         {
    1505           0 :             m_pIbAdd->Enable(false );
    1506           0 :             bool bUserDef=pNumFmtShell->IsUserDefined( aFormat );
    1507             : 
    1508           0 :             m_pIbRemove->Enable(bUserDef);
    1509           0 :             m_pIbInfo->Enable(bUserDef);
    1510             : 
    1511           0 :             if(bUserDef)
    1512             :             {
    1513           0 :                 sal_uInt16 nTmpCurPos=pNumFmtShell->FindCurrencyFormat(aFormat );
    1514             : 
    1515           0 :                 if(nTmpCurPos!=(sal_uInt16)-1)
    1516           0 :                     m_pLbCurrency->SelectEntryPos(nTmpCurPos);
    1517             :             }
    1518           0 :             short nPosi=pNumFmtShell->GetListPos4Entry(aFormat);
    1519           0 :             if(nPosi>=0)
    1520           0 :                 m_pLbFormat->SelectEntryPos( (sal_uInt16)nPosi);
    1521             : 
    1522             :         }
    1523             :         else
    1524             :         {
    1525             : 
    1526           0 :             m_pIbAdd->Enable(true );
    1527           0 :             m_pIbInfo->Enable(true);
    1528           0 :             m_pIbRemove->Enable(false );
    1529             : 
    1530           0 :             m_pFtComment->SetText(m_pEdComment->GetText());
    1531             : 
    1532           0 :         }
    1533             :     }
    1534             : 
    1535           0 :     if ( pEdFormat )
    1536             :     {
    1537           0 :         pNumFmtShell->SetCurNumFmtKey( nCurKey );
    1538           0 :         UpdateOptions_Impl( true );
    1539             :     }
    1540             : 
    1541           0 :     return 0;
    1542             : }
    1543             : 
    1544             : 
    1545             : /*************************************************************************
    1546             : #*  Method:        NotifyChange
    1547             : #*------------------------------------------------------------------------
    1548             : #*
    1549             : #*  Class:      SvxNumberFormatTabPage
    1550             : #*  Function:   Does changes in the number attributes.
    1551             : #*  Input:      Options- Controls
    1552             : #*  Output:     ---
    1553             : #*
    1554             : #************************************************************************/
    1555             : 
    1556           0 : IMPL_LINK( SvxNumberFormatTabPage, OptHdl_Impl, void *, pOptCtrl )
    1557             : {
    1558           0 :     if (   (pOptCtrl == m_pEdLeadZeroes)
    1559           0 :         || (pOptCtrl == m_pEdDecimals)
    1560           0 :         || (pOptCtrl == m_pBtnNegRed)
    1561           0 :         || (pOptCtrl == m_pBtnThousand) )
    1562             :     {
    1563           0 :         OUString          aFormat;
    1564           0 :         bool          bThousand     =    m_pBtnThousand->IsEnabled()
    1565           0 :                                       && m_pBtnThousand->IsChecked();
    1566           0 :         bool          bNegRed       =    m_pBtnNegRed->IsEnabled()
    1567           0 :                                       && m_pBtnNegRed->IsChecked();
    1568           0 :         sal_uInt16        nPrecision    = (m_pEdDecimals->IsEnabled())
    1569           0 :                                         ? (sal_uInt16)m_pEdDecimals->GetValue()
    1570           0 :                                         : (sal_uInt16)0;
    1571           0 :         sal_uInt16        nLeadZeroes   = (m_pEdLeadZeroes->IsEnabled())
    1572           0 :                                         ? (sal_uInt16)m_pEdLeadZeroes->GetValue()
    1573           0 :                                         : (sal_uInt16)0;
    1574             : 
    1575             :         pNumFmtShell->MakeFormat( aFormat,
    1576             :                                   bThousand, bNegRed,
    1577             :                                   nPrecision, nLeadZeroes,
    1578           0 :                                   (sal_uInt16)m_pLbFormat->GetSelectEntryPos() );
    1579             : 
    1580           0 :         m_pEdFormat->SetText( aFormat );
    1581           0 :         MakePreviewText( aFormat );
    1582             : 
    1583           0 :         if ( pNumFmtShell->FindEntry( aFormat ) )
    1584             :         {
    1585           0 :             m_pIbAdd->Enable(false );
    1586           0 :             bool bUserDef=pNumFmtShell->IsUserDefined( aFormat );
    1587           0 :             m_pIbRemove->Enable(bUserDef);
    1588           0 :             m_pIbInfo->Enable(bUserDef);
    1589           0 :             EditHdl_Impl(m_pEdFormat);
    1590             : 
    1591             :         }
    1592             :         else
    1593             :         {
    1594           0 :             EditHdl_Impl( NULL );
    1595           0 :             m_pLbFormat->SetNoSelection();
    1596           0 :         }
    1597             :     }
    1598           0 :     return 0;
    1599             : }
    1600             : 
    1601           0 : IMPL_LINK_NOARG_TYPED(SvxNumberFormatTabPage, TimeHdl_Impl, Timer *, void)
    1602             : {
    1603           0 :     pLastActivWindow=NULL;
    1604           0 : }
    1605             : 
    1606             : 
    1607             : /*************************************************************************
    1608             : #*  Method:    LostFocusHdl_Impl
    1609             : #*------------------------------------------------------------------------
    1610             : #*
    1611             : #*  Class:      SvxNumberFormatTabPage
    1612             : #*  Function:   Does changes in the number attributes.
    1613             : #*  Input:      Options- Controls
    1614             : #*  Output:     ---
    1615             : #*
    1616             : #************************************************************************/
    1617             : 
    1618           0 : IMPL_LINK( SvxNumberFormatTabPage, LostFocusHdl_Impl, Edit *, pEd)
    1619             : {
    1620           0 :     if (pEd == m_pEdComment)
    1621             :     {
    1622           0 :         aResetWinTimer.Start();
    1623           0 :         m_pFtComment->SetText(m_pEdComment->GetText());
    1624           0 :         m_pEdComment->Hide();
    1625           0 :         m_pFtComment->Show();
    1626           0 :         if(!m_pIbAdd->IsEnabled())
    1627             :         {
    1628           0 :             sal_uInt16  nSelPos = (sal_uInt16) m_pLbFormat->GetSelectEntryPos();
    1629             :             pNumFmtShell->SetComment4Entry(nSelPos,
    1630           0 :                                         m_pEdComment->GetText());
    1631           0 :             m_pEdComment->SetText(m_pLbCategory->GetEntry(1));    // String for user defined
    1632             :         }
    1633             :     }
    1634           0 :     return 0;
    1635             : }
    1636             : 
    1637             : /*************************************************************************
    1638             : #*  Method:        NotifyChange
    1639             : #*------------------------------------------------------------------------
    1640             : #*
    1641             : #*  Class:      SvxNumberFormatTabPage
    1642             : #*  Function:   Does changes in the number attributes.
    1643             : #*  Input:      Options- Controls
    1644             : #*  Output:     ---
    1645             : #*
    1646             : #************************************************************************/
    1647             : 
    1648           0 : OUString SvxNumberFormatTabPage::GetExpColorString(
    1649             :         Color*& rpPreviewColor, const OUString& rFormatStr, short nTmpCatPos)
    1650             : {
    1651           0 :     double nVal = 0;
    1652           0 :     switch (nTmpCatPos)
    1653             :     {
    1654           0 :         case CAT_CURRENCY:      nVal=SVX_NUMVAL_CURRENCY; break;
    1655             : 
    1656             :         case CAT_SCIENTIFIC:
    1657             :         case CAT_FRACTION:
    1658           0 :         case CAT_NUMBER:        nVal=SVX_NUMVAL_STANDARD; break;
    1659             : 
    1660           0 :         case CAT_PERCENT:       nVal=SVX_NUMVAL_PERCENT; break;
    1661             : 
    1662           0 :         case CAT_ALL:           nVal=SVX_NUMVAL_STANDARD; break;
    1663             : 
    1664           0 :         case CAT_TIME:          nVal=SVX_NUMVAL_TIME; break;
    1665           0 :         case CAT_DATE:          nVal=SVX_NUMVAL_DATE; break;
    1666             : 
    1667           0 :         case CAT_BOOLEAN:       nVal=SVX_NUMVAL_BOOLEAN; break;
    1668             : 
    1669             :         case CAT_USERDEFINED:
    1670             :         case CAT_TEXT:
    1671           0 :         default:                nVal=0;break;
    1672             :     }
    1673             : 
    1674           0 :     OUString aPreviewString;
    1675           0 :     pNumFmtShell->MakePrevStringFromVal( rFormatStr, aPreviewString, rpPreviewColor, nVal );
    1676           0 :     return aPreviewString;
    1677             : }
    1678             : 
    1679           0 : void SvxNumberFormatTabPage::MakePreviewText( const OUString& rFormat )
    1680             : {
    1681           0 :     OUString aPreviewString;
    1682           0 :     Color* pPreviewColor = NULL;
    1683           0 :     pNumFmtShell->MakePreviewString( rFormat, aPreviewString, pPreviewColor );
    1684           0 :     m_pWndPreview->NotifyChange( aPreviewString, pPreviewColor );
    1685           0 : }
    1686             : 
    1687           0 : void SvxNumberFormatTabPage::ChangePreviewText( sal_uInt16 nPos )
    1688             : {
    1689           0 :     OUString aPreviewString;
    1690           0 :     Color* pPreviewColor = NULL;
    1691           0 :     pNumFmtShell->FormatChanged( nPos, aPreviewString, pPreviewColor );
    1692           0 :     m_pWndPreview->NotifyChange( aPreviewString, pPreviewColor );
    1693           0 : }
    1694             : 
    1695           0 : bool SvxNumberFormatTabPage::PreNotify( NotifyEvent& rNEvt )
    1696             : {
    1697           0 :     if(rNEvt.GetType()==MouseNotifyEvent::LOSEFOCUS)
    1698             :     {
    1699           0 :         if ( rNEvt.GetWindow() == dynamic_cast< vcl::Window* >( m_pEdComment.get() ) && !m_pEdComment->IsVisible() )
    1700             :         {
    1701           0 :             pLastActivWindow = NULL;
    1702             :         }
    1703             :         else
    1704             :         {
    1705           0 :             pLastActivWindow = rNEvt.GetWindow();
    1706             :         }
    1707             :     }
    1708             : 
    1709           0 :     return SfxTabPage::PreNotify( rNEvt );
    1710             : }
    1711             : /*************************************************************************
    1712             : #*  Method:    SetOkHdl
    1713             : #*------------------------------------------------------------------------
    1714             : #*
    1715             : #*  Class:      SvxNumberFormatTabPage
    1716             : #*  Function:   Resets the OkHandler.
    1717             : #*  Input:      new OkHandler
    1718             : #*  Output:     ---
    1719             : #*
    1720             : #************************************************************************/
    1721             : 
    1722           0 : void SvxNumberFormatTabPage::SetOkHdl( const Link<>& rOkHandler )
    1723             : {
    1724           0 :     fnOkHdl = rOkHandler;
    1725           0 : }
    1726             : 
    1727           0 : void SvxNumberFormatTabPage::FillCurrencyBox()
    1728             : {
    1729           0 :     std::vector<OUString> aList;
    1730             : 
    1731           0 :     sal_uInt16  nSelPos=0;
    1732           0 :     pNumFmtShell->GetCurrencySymbols(aList, &nSelPos);
    1733             : 
    1734           0 :     for(std::vector<OUString>::iterator i = aList.begin() + 1;i != aList.end(); ++i)
    1735           0 :         m_pLbCurrency->InsertEntry(*i);
    1736             : 
    1737             :     // Initially disable the "Automatically" entry. First ensure that nothing
    1738             :     // is selected, else if the to be disabled (first) entry was selected it
    1739             :     // would be sticky when disabled and could not be deselected!
    1740           0 :     m_pLbCurrency->SetNoSelection();
    1741           0 :     m_pLbCurrency->SetEntryFlags( 0, ListBoxEntryFlags::DisableSelection | ListBoxEntryFlags::DrawDisabled);
    1742           0 :     m_pLbCurrency->SelectEntryPos(nSelPos);
    1743           0 : }
    1744             : 
    1745           0 : void SvxNumberFormatTabPage::SetCategory(sal_uInt16 nPos)
    1746             : {
    1747           0 :     sal_uInt16  nCurCategory = m_pLbCategory->GetSelectEntryPos();
    1748             :     sal_uInt16 nTmpCatPos;
    1749             : 
    1750           0 :     if(bOneAreaFlag)
    1751             :     {
    1752           0 :         nTmpCatPos=nFixedCategory;
    1753             :     }
    1754             :     else
    1755             :     {
    1756           0 :         nTmpCatPos=nPos;
    1757             :     }
    1758             : 
    1759           0 :     if(m_pLbCategory->GetEntryCount()==1 || nCurCategory!=nPos)
    1760             :     {
    1761           0 :         if(nTmpCatPos!=CAT_CURRENCY)
    1762           0 :             m_pLbCurrency->Hide();
    1763             :         else
    1764           0 :             m_pLbCurrency->Show();
    1765             :     }
    1766           0 :     m_pLbCategory->SelectEntryPos(nPos);
    1767           0 : }
    1768             : /* to support Writer text field language handling an
    1769             :    additional entry needs to be inserted into the ListBox
    1770             :    which marks a certain language as automatically detected
    1771             :    Additionally the "Default" language is removed
    1772             : */
    1773           0 : void SvxNumberFormatTabPage::AddAutomaticLanguage_Impl(LanguageType eAutoLang, bool bSelect)
    1774             : {
    1775           0 :     m_pLbLanguage->RemoveLanguage(LANGUAGE_SYSTEM);
    1776           0 :     sal_uInt16 nPos = m_pLbLanguage->InsertEntry(sAutomaticEntry);
    1777           0 :     m_pLbLanguage->SetEntryData(nPos, reinterpret_cast<void*>((sal_uLong)eAutoLang));
    1778           0 :     if(bSelect)
    1779           0 :         m_pLbLanguage->SelectEntryPos(nPos);
    1780           0 : }
    1781             : 
    1782           0 : void SvxNumberFormatTabPage::PageCreated(const SfxAllItemSet& aSet)
    1783             : {
    1784           0 :     SFX_ITEMSET_ARG (&aSet,pNumberInfoItem,SvxNumberInfoItem,SID_ATTR_NUMBERFORMAT_INFO,false);
    1785           0 :     SFX_ITEMSET_ARG (&aSet,pLinkItem,SfxLinkItem,SID_LINK_TYPE,false);
    1786           0 :     if (pNumberInfoItem)
    1787           0 :         SetNumberFormatList(*pNumberInfoItem);
    1788           0 :     if (pLinkItem)
    1789           0 :         SetOkHdl(pLinkItem->GetValue());
    1790           0 : }
    1791             : 
    1792             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11