LCOV - code coverage report
Current view: top level - cui/source/tabpages - numpages.cxx (source / functions) Hit Total Coverage
Test: commit e02a6cb2c3e2b23b203b422e4e0680877f232636 Lines: 0 2041 0.0 %
Date: 2014-04-14 Functions: 0 138 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 <com/sun/star/text/HoriOrientation.hpp>
      21             : #include <com/sun/star/text/VertOrientation.hpp>
      22             : #include <com/sun/star/text/RelOrientation.hpp>
      23             : 
      24             : #include <numpages.hxx>
      25             : #include <numpages.hrc>
      26             : #include <dialmgr.hxx>
      27             : #include <tools/shl.hxx>
      28             : #include <tools/mapunit.hxx>
      29             : #include <i18nlangtag/mslangid.hxx>
      30             : #include <helpid.hrc>
      31             : #include <editeng/numitem.hxx>
      32             : #include <svl/eitem.hxx>
      33             : #include <vcl/layout.hxx>
      34             : #include <vcl/svapp.hxx>
      35             : #include <svx/gallery.hxx>
      36             : #include <svl/urihelper.hxx>
      37             : #include <editeng/brushitem.hxx>
      38             : #include <svl/intitem.hxx>
      39             : #include <sfx2/objsh.hxx>
      40             : #include <vcl/graph.hxx>
      41             : #include <vcl/msgbox.hxx>
      42             : #include <vcl/settings.hxx>
      43             : #include "cuicharmap.hxx"
      44             : #include <editeng/flstitem.hxx>
      45             : #include <svx/dlgutil.hxx>
      46             : #include <svx/xtable.hxx>
      47             : #include <svx/drawitem.hxx>
      48             : #include <svx/numvset.hxx>
      49             : #include <sfx2/htmlmode.hxx>
      50             : #include <unotools/pathoptions.hxx>
      51             : #include <svtools/ctrltool.hxx>
      52             : #include <editeng/unolingu.hxx>
      53             : #include <com/sun/star/style/NumberingType.hpp>
      54             : #include <com/sun/star/lang/XMultiServiceFactory.hpp>
      55             : #include <com/sun/star/container/XIndexAccess.hpp>
      56             : #include <com/sun/star/text/DefaultNumberingProvider.hpp>
      57             : #include <com/sun/star/text/XDefaultNumberingProvider.hpp>
      58             : #include <com/sun/star/text/XNumberingFormatter.hpp>
      59             : #include <com/sun/star/beans/PropertyValue.hpp>
      60             : #include <comphelper/processfactory.hxx>
      61             : #include <com/sun/star/text/XNumberingTypeInfo.hpp>
      62             : #include <svx/dialmgr.hxx>
      63             : #include <svx/dialogs.hrc>
      64             : 
      65             : #include <algorithm>
      66             : #include <vector>
      67             : #include "sfx2/opengrf.hxx"
      68             : 
      69             : #include <cuires.hrc>
      70             : #include <sfx2/request.hxx>
      71             : #include <svl/aeitem.hxx>
      72             : #include <svl/stritem.hxx>
      73             : #include <svl/slstitm.hxx>
      74             : 
      75             : using namespace com::sun::star;
      76             : using namespace com::sun::star::uno;
      77             : using namespace com::sun::star::beans;
      78             : using namespace com::sun::star::lang;
      79             : using namespace com::sun::star::i18n;
      80             : using namespace com::sun::star::text;
      81             : using namespace com::sun::star::container;
      82             : using namespace com::sun::star::style;
      83             : 
      84             : #define NUM_PAGETYPE_BULLET         0
      85             : #define NUM_PAGETYPE_SINGLENUM      1
      86             : #define NUM_PAGETYPE_NUM            2
      87             : 
      88             : #define SHOW_NUMBERING              0
      89             : #define SHOW_BULLET                 1
      90             : #define SHOW_BITMAP                 2
      91             : 
      92             : #define MAX_BMP_WIDTH               16
      93             : #define MAX_BMP_HEIGHT              16
      94             : 
      95             : static sal_Bool bLastRelative =         sal_False;
      96             : static const sal_Char cNumberingType[] = "NumberingType";
      97             : static const sal_Char cParentNumbering[] = "ParentNumbering";
      98             : static const sal_Char cPrefix[] = "Prefix";
      99             : static const sal_Char cSuffix[] = "Suffix";
     100             : static const sal_Char cBulletChar[] = "BulletChar";
     101             : static const sal_Char cBulletFontName[] = "BulletFontName";
     102             : 
     103           0 : static Reference<XDefaultNumberingProvider> lcl_GetNumberingProvider()
     104             : {
     105           0 :     Reference<XComponentContext>         xContext( ::comphelper::getProcessComponentContext() );
     106           0 :     Reference<XDefaultNumberingProvider> xRet = text::DefaultNumberingProvider::create(xContext);
     107           0 :     return xRet;
     108             : }
     109             : 
     110           0 : static SvxNumSettings_Impl* lcl_CreateNumSettingsPtr(const Sequence<PropertyValue>& rLevelProps)
     111             : {
     112           0 :     const PropertyValue* pValues = rLevelProps.getConstArray();
     113           0 :     SvxNumSettings_Impl* pNew = new SvxNumSettings_Impl;
     114           0 :     for(sal_Int32 j = 0; j < rLevelProps.getLength(); j++)
     115             :     {
     116           0 :         if ( pValues[j].Name == cNumberingType )
     117           0 :             pValues[j].Value >>= pNew->nNumberType;
     118           0 :         else if ( pValues[j].Name == cPrefix )
     119           0 :             pValues[j].Value >>= pNew->sPrefix;
     120           0 :         else if ( pValues[j].Name == cSuffix )
     121           0 :             pValues[j].Value >>= pNew->sSuffix;
     122           0 :         else if ( pValues[j].Name == cParentNumbering )
     123           0 :             pValues[j].Value >>= pNew->nParentNumbering;
     124           0 :         else if ( pValues[j].Name == cBulletChar )
     125           0 :             pValues[j].Value >>= pNew->sBulletChar;
     126           0 :         else if ( pValues[j].Name == cBulletFontName )
     127           0 :             pValues[j].Value >>= pNew->sBulletFont;
     128             :     }
     129           0 :     return pNew;
     130             : }
     131             : 
     132             : // the selection of bullets from the StarSymbol
     133             : static const sal_Unicode aBulletTypes[] =
     134             : {
     135             :     0x2022,
     136             :     0x25cf,
     137             :     0xe00c,
     138             :     0xe00a,
     139             :     0x2794,
     140             :     0x27a2,
     141             :     0x2717,
     142             :     0x2714
     143             : };
     144             : 
     145             : // Is one of the masked formats set?
     146           0 : static bool lcl_IsNumFmtSet(SvxNumRule* pNum, sal_uInt16 nLevelMask)
     147             : {
     148           0 :     bool bRet = false;
     149           0 :     sal_uInt16 nMask = 1;
     150           0 :     for( sal_uInt16 i = 0; i < SVX_MAX_NUM && !bRet; i++ )
     151             :     {
     152           0 :         if(nLevelMask & nMask)
     153           0 :             bRet |= 0 != pNum->Get( i );
     154           0 :         nMask <<= 1 ;
     155             :     }
     156           0 :     return bRet;
     157             : }
     158             : 
     159           0 : static Font& lcl_GetDefaultBulletFont()
     160             : {
     161             :     static sal_Bool bInit = 0;
     162             :     static Font aDefBulletFont( OUString("StarSymbol"),
     163           0 :                                 OUString(), Size( 0, 14 ) );
     164           0 :     if(!bInit)
     165             :     {
     166           0 :         aDefBulletFont.SetCharSet( RTL_TEXTENCODING_SYMBOL );
     167           0 :         aDefBulletFont.SetFamily( FAMILY_DONTKNOW );
     168           0 :         aDefBulletFont.SetPitch( PITCH_DONTKNOW );
     169           0 :         aDefBulletFont.SetWeight( WEIGHT_DONTKNOW );
     170           0 :         aDefBulletFont.SetTransparent( true );
     171           0 :         bInit = sal_True;
     172             :     }
     173           0 :     return aDefBulletFont;
     174             : }
     175             : 
     176           0 : SvxSingleNumPickTabPage::SvxSingleNumPickTabPage(Window* pParent,
     177             :                                const SfxItemSet& rSet)
     178             :     : SfxTabPage(pParent, "PickNumberingPage", "cui/ui/picknumberingpage.ui", rSet)
     179             :     , pActNum(0)
     180             :     , pSaveNum(0)
     181             :     , nActNumLvl(SAL_MAX_UINT16)
     182             :     , bModified(false)
     183             :     , bPreset(false)
     184           0 :     , nNumItemId(SID_ATTR_NUMBERING_RULE)
     185             : {
     186           0 :     SetExchangeSupport();
     187           0 :     get(m_pExamplesVS, "valueset");
     188           0 :     m_pExamplesVS->init(NUM_PAGETYPE_SINGLENUM);
     189           0 :     m_pExamplesVS->SetSelectHdl(LINK(this, SvxSingleNumPickTabPage, NumSelectHdl_Impl));
     190           0 :     m_pExamplesVS->SetDoubleClickHdl(LINK(this, SvxSingleNumPickTabPage, DoubleClickHdl_Impl));
     191             : 
     192           0 :     Reference<XDefaultNumberingProvider> xDefNum = lcl_GetNumberingProvider();
     193           0 :     if(xDefNum.is())
     194             :     {
     195           0 :         Sequence< Sequence< PropertyValue > > aNumberings;
     196           0 :         const Locale& rLocale = Application::GetSettings().GetLanguageTag().getLocale();
     197             :         try
     198             :         {
     199           0 :             aNumberings =
     200           0 :                 xDefNum->getDefaultContinuousNumberingLevels( rLocale );
     201             : 
     202             : 
     203           0 :             sal_Int32 nLength = aNumberings.getLength() > NUM_VALUSET_COUNT ? NUM_VALUSET_COUNT :aNumberings.getLength();
     204             : 
     205           0 :             const Sequence<PropertyValue>* pValuesArr = aNumberings.getConstArray();
     206           0 :             for(sal_Int32 i = 0; i < nLength; i++)
     207             :             {
     208           0 :                 SvxNumSettings_Impl* pNew = lcl_CreateNumSettingsPtr(pValuesArr[i]);
     209           0 :                 aNumSettingsArr.push_back(pNew);
     210             :             }
     211             :         }
     212           0 :         catch(const Exception&)
     213             :         {
     214             :         }
     215           0 :         Reference<XNumberingFormatter> xFormat(xDefNum, UNO_QUERY);
     216           0 :         m_pExamplesVS->SetNumberingSettings(aNumberings, xFormat, rLocale);
     217           0 :     }
     218           0 : }
     219             : 
     220           0 : SvxSingleNumPickTabPage::~SvxSingleNumPickTabPage()
     221             : {
     222           0 :     delete pActNum;
     223           0 :     delete pSaveNum;
     224           0 : }
     225             : 
     226           0 : SfxTabPage*  SvxSingleNumPickTabPage::Create( Window* pParent,
     227             :                                 const SfxItemSet& rAttrSet)
     228             : {
     229           0 :     return new SvxSingleNumPickTabPage(pParent, rAttrSet);
     230             : }
     231             : 
     232           0 : bool  SvxSingleNumPickTabPage::FillItemSet( SfxItemSet& rSet )
     233             : {
     234           0 :     if( (bPreset || bModified) && pSaveNum)
     235             :     {
     236           0 :         *pSaveNum = *pActNum;
     237           0 :         rSet.Put(SvxNumBulletItem( *pSaveNum ), nNumItemId);
     238           0 :         rSet.Put(SfxBoolItem(SID_PARAM_NUM_PRESET, bPreset));
     239             :     }
     240             : 
     241           0 :     return bModified;
     242             : }
     243             : 
     244           0 : void  SvxSingleNumPickTabPage::ActivatePage(const SfxItemSet& rSet)
     245             : {
     246             :     const SfxPoolItem* pItem;
     247           0 :     bPreset = sal_False;
     248           0 :     sal_Bool bIsPreset = sal_False;
     249           0 :     const SfxItemSet* pExampleSet = GetTabDialog()->GetExampleSet();
     250           0 :     if(pExampleSet)
     251             :     {
     252           0 :         if(SFX_ITEM_SET == pExampleSet->GetItemState(SID_PARAM_NUM_PRESET, false, &pItem))
     253           0 :             bIsPreset = ((const SfxBoolItem*)pItem)->GetValue();
     254           0 :         if(SFX_ITEM_SET == pExampleSet->GetItemState(SID_PARAM_CUR_NUM_LEVEL, false, &pItem))
     255           0 :             nActNumLvl = ((const SfxUInt16Item*)pItem)->GetValue();
     256             :     }
     257           0 :     if(SFX_ITEM_SET == rSet.GetItemState(nNumItemId, false, &pItem))
     258             :     {
     259           0 :         delete pSaveNum;
     260           0 :         pSaveNum = new SvxNumRule(*((SvxNumBulletItem*)pItem)->GetNumRule());
     261             :     }
     262           0 :     if(pActNum && *pSaveNum != *pActNum)
     263             :     {
     264           0 :         *pActNum = *pSaveNum;
     265           0 :         m_pExamplesVS->SetNoSelection();
     266             :     }
     267             : 
     268           0 :     if(pActNum && (!lcl_IsNumFmtSet(pActNum, nActNumLvl) || bIsPreset))
     269             :     {
     270           0 :         m_pExamplesVS->SelectItem(1);
     271           0 :         NumSelectHdl_Impl(m_pExamplesVS);
     272           0 :         bPreset = sal_True;
     273             :     }
     274           0 :     bPreset |= bIsPreset;
     275             : 
     276           0 :     bModified = sal_False;
     277           0 : }
     278             : 
     279           0 : int  SvxSingleNumPickTabPage::DeactivatePage(SfxItemSet *_pSet)
     280             : {
     281           0 :     if(_pSet)
     282           0 :         FillItemSet(*_pSet);
     283           0 :     return sal_True;
     284             : }
     285             : 
     286           0 : void  SvxSingleNumPickTabPage::Reset( const SfxItemSet& rSet )
     287             : {
     288             :     const SfxPoolItem* pItem;
     289             : 
     290             :     // in Draw the item exists as WhichId, in Writer only as SlotId
     291           0 :     SfxItemState eState = rSet.GetItemState(SID_ATTR_NUMBERING_RULE, false, &pItem);
     292           0 :     if(eState != SFX_ITEM_SET)
     293             :     {
     294           0 :         nNumItemId = rSet.GetPool()->GetWhich(SID_ATTR_NUMBERING_RULE);
     295           0 :         eState = rSet.GetItemState(nNumItemId, false, &pItem);
     296             : 
     297           0 :         if( eState != SFX_ITEM_SET )
     298             :         {
     299           0 :             pItem = &static_cast< const SvxNumBulletItem& >( rSet.Get( nNumItemId, true ) );
     300           0 :             eState = SFX_ITEM_SET;
     301             :         }
     302             :     }
     303             :     DBG_ASSERT(eState == SFX_ITEM_SET, "no item found!");
     304           0 :     delete pSaveNum;
     305           0 :     pSaveNum = new SvxNumRule(*((SvxNumBulletItem*)pItem)->GetNumRule());
     306             : 
     307           0 :     if(!pActNum)
     308           0 :         pActNum = new  SvxNumRule(*pSaveNum);
     309           0 :     else if(*pSaveNum != *pActNum)
     310           0 :         *pActNum = *pSaveNum;
     311           0 : }
     312             : 
     313           0 : IMPL_LINK_NOARG(SvxSingleNumPickTabPage, NumSelectHdl_Impl)
     314             : {
     315           0 :     if(pActNum)
     316             :     {
     317           0 :         bPreset = sal_False;
     318           0 :         bModified = sal_True;
     319           0 :         sal_uInt16 nIdx = m_pExamplesVS->GetSelectItemId() - 1;
     320             :         DBG_ASSERT(aNumSettingsArr.size() > nIdx, "wrong index");
     321           0 :         if(aNumSettingsArr.size() <= nIdx)
     322           0 :             return 0;
     323           0 :         SvxNumSettings_Impl* _pSet = &aNumSettingsArr[nIdx];
     324           0 :         sal_Int16 eNewType = _pSet->nNumberType;
     325           0 :         const sal_Unicode cLocalPrefix = !_pSet->sPrefix.isEmpty() ? _pSet->sPrefix[0] : 0;
     326           0 :         const sal_Unicode cLocalSuffix = !_pSet->sSuffix.isEmpty() ? _pSet->sSuffix[0] : 0;
     327             : 
     328           0 :         sal_uInt16 nMask = 1;
     329           0 :         for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
     330             :         {
     331           0 :             if(nActNumLvl & nMask)
     332             :             {
     333           0 :                 SvxNumberFormat aFmt(pActNum->GetLevel(i));
     334           0 :                 aFmt.SetNumberingType(eNewType);
     335           0 :                 OUString aEmptyStr;
     336           0 :                 if(cLocalPrefix == ' ')
     337           0 :                     aFmt.SetPrefix( aEmptyStr );
     338             :                 else
     339           0 :                     aFmt.SetPrefix(_pSet->sPrefix);
     340           0 :                 if(cLocalSuffix == ' ')
     341           0 :                     aFmt.SetSuffix( aEmptyStr );
     342             :                 else
     343           0 :                     aFmt.SetSuffix(_pSet->sSuffix);
     344           0 :                 aFmt.SetCharFmtName(sNumCharFmtName);
     345             :                 // #62069# // #92724#
     346           0 :                 aFmt.SetBulletRelSize(100);
     347           0 :                 pActNum->SetLevel(i, aFmt);
     348             :             }
     349           0 :             nMask <<= 1 ;
     350             :         }
     351             :     }
     352           0 :     return 0;
     353             : }
     354             : 
     355           0 : IMPL_LINK_NOARG(SvxSingleNumPickTabPage, DoubleClickHdl_Impl)
     356             : {
     357           0 :     NumSelectHdl_Impl(m_pExamplesVS);
     358           0 :     PushButton& rOk = GetTabDialog()->GetOKButton();
     359           0 :     rOk.GetClickHdl().Call(&rOk);
     360           0 :     return 0;
     361             : }
     362             : 
     363             : 
     364           0 : SvxBulletPickTabPage::SvxBulletPickTabPage(Window* pParent,
     365             :                                const SfxItemSet& rSet)
     366             :     : SfxTabPage(pParent, "PickBulletPage", "cui/ui/pickbulletpage.ui", rSet)
     367             :     , pActNum(0)
     368             :     , pSaveNum(0)
     369             :     , nActNumLvl(SAL_MAX_UINT16)
     370             :     , bModified(false)
     371             :     , bPreset(false)
     372           0 :     , nNumItemId(SID_ATTR_NUMBERING_RULE)
     373             : {
     374           0 :     SetExchangeSupport();
     375           0 :     get(m_pExamplesVS, "valueset");
     376           0 :     m_pExamplesVS->init(NUM_PAGETYPE_BULLET),
     377           0 :     m_pExamplesVS->SetSelectHdl(LINK(this, SvxBulletPickTabPage, NumSelectHdl_Impl));
     378           0 :     m_pExamplesVS->SetDoubleClickHdl(LINK(this, SvxBulletPickTabPage, DoubleClickHdl_Impl));
     379           0 : }
     380             : 
     381           0 : SvxBulletPickTabPage::~SvxBulletPickTabPage()
     382             : {
     383           0 :     delete pActNum;
     384           0 :     delete pSaveNum;
     385           0 : }
     386             : 
     387           0 : SfxTabPage*  SvxBulletPickTabPage::Create( Window* pParent,
     388             :                                 const SfxItemSet& rAttrSet)
     389             : {
     390           0 :     return new SvxBulletPickTabPage(pParent, rAttrSet);
     391             : }
     392             : 
     393           0 : bool  SvxBulletPickTabPage::FillItemSet( SfxItemSet& rSet )
     394             : {
     395           0 :     if( (bPreset || bModified) && pActNum)
     396             :     {
     397           0 :         *pSaveNum = *pActNum;
     398           0 :         rSet.Put(SvxNumBulletItem( *pSaveNum ), nNumItemId);
     399           0 :         rSet.Put(SfxBoolItem(SID_PARAM_NUM_PRESET, bPreset));
     400             :     }
     401           0 :     return bModified;
     402             : }
     403             : 
     404           0 : void  SvxBulletPickTabPage::ActivatePage(const SfxItemSet& rSet)
     405             : {
     406             :     const SfxPoolItem* pItem;
     407           0 :     bPreset = sal_False;
     408           0 :     sal_Bool bIsPreset = sal_False;
     409           0 :     const SfxItemSet* pExampleSet = GetTabDialog()->GetExampleSet();
     410           0 :     if(pExampleSet)
     411             :     {
     412           0 :         if(SFX_ITEM_SET == pExampleSet->GetItemState(SID_PARAM_NUM_PRESET, false, &pItem))
     413           0 :             bIsPreset = ((const SfxBoolItem*)pItem)->GetValue();
     414           0 :         if(SFX_ITEM_SET == pExampleSet->GetItemState(SID_PARAM_CUR_NUM_LEVEL, false, &pItem))
     415           0 :             nActNumLvl = ((const SfxUInt16Item*)pItem)->GetValue();
     416             :     }
     417           0 :     if(SFX_ITEM_SET == rSet.GetItemState(nNumItemId, false, &pItem))
     418             :     {
     419           0 :         delete pSaveNum;
     420           0 :         pSaveNum = new SvxNumRule(*((SvxNumBulletItem*)pItem)->GetNumRule());
     421             :     }
     422           0 :     if(pActNum && *pSaveNum != *pActNum)
     423             :     {
     424           0 :         *pActNum = *pSaveNum;
     425           0 :         m_pExamplesVS->SetNoSelection();
     426             :     }
     427             : 
     428           0 :     if(pActNum && (!lcl_IsNumFmtSet(pActNum, nActNumLvl) || bIsPreset))
     429             :     {
     430           0 :         m_pExamplesVS->SelectItem(1);
     431           0 :         NumSelectHdl_Impl(m_pExamplesVS);
     432           0 :         bPreset = sal_True;
     433             :     }
     434           0 :     bPreset |= bIsPreset;
     435           0 :     bModified = sal_False;
     436           0 : }
     437             : 
     438           0 : int  SvxBulletPickTabPage::DeactivatePage(SfxItemSet *_pSet)
     439             : {
     440           0 :     if(_pSet)
     441           0 :         FillItemSet(*_pSet);
     442           0 :     return sal_True;
     443             : }
     444             : 
     445           0 : void  SvxBulletPickTabPage::Reset( const SfxItemSet& rSet )
     446             : {
     447             :     const SfxPoolItem* pItem;
     448             :     // in Draw the item exists as WhichId, in Writer only as SlotId
     449           0 :     SfxItemState eState = rSet.GetItemState(SID_ATTR_NUMBERING_RULE, false, &pItem);
     450           0 :     if(eState != SFX_ITEM_SET)
     451             :     {
     452           0 :         nNumItemId = rSet.GetPool()->GetWhich(SID_ATTR_NUMBERING_RULE);
     453           0 :         eState = rSet.GetItemState(nNumItemId, false, &pItem);
     454             : 
     455           0 :         if( eState != SFX_ITEM_SET )
     456             :         {
     457           0 :             pItem = &static_cast< const SvxNumBulletItem& >( rSet.Get( nNumItemId, true ) );
     458           0 :             eState = SFX_ITEM_SET;
     459             :         }
     460             : 
     461             :     }
     462             :     DBG_ASSERT(eState == SFX_ITEM_SET, "no item found!");
     463           0 :     delete pSaveNum;
     464           0 :     pSaveNum = new SvxNumRule(*((SvxNumBulletItem*)pItem)->GetNumRule());
     465             : 
     466           0 :     if(!pActNum)
     467           0 :         pActNum = new  SvxNumRule(*pSaveNum);
     468           0 :     else if(*pSaveNum != *pActNum)
     469           0 :         *pActNum = *pSaveNum;
     470           0 : }
     471             : 
     472           0 : IMPL_LINK_NOARG(SvxBulletPickTabPage, NumSelectHdl_Impl)
     473             : {
     474           0 :     if(pActNum)
     475             :     {
     476           0 :         bPreset = sal_False;
     477           0 :         bModified = sal_True;
     478           0 :         sal_Unicode cChar = aBulletTypes[m_pExamplesVS->GetSelectItemId() - 1];
     479           0 :         Font& rActBulletFont = lcl_GetDefaultBulletFont();
     480             : 
     481           0 :         sal_uInt16 nMask = 1;
     482           0 :         for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
     483             :         {
     484           0 :             if(nActNumLvl & nMask)
     485             :             {
     486           0 :                 SvxNumberFormat aFmt(pActNum->GetLevel(i));
     487           0 :                 aFmt.SetNumberingType( SVX_NUM_CHAR_SPECIAL );
     488             :                 // #i93908# clear suffix for bullet lists
     489           0 :                 aFmt.SetPrefix( OUString() );
     490           0 :                 aFmt.SetSuffix( OUString() );
     491           0 :                 aFmt.SetBulletFont(&rActBulletFont);
     492           0 :                 aFmt.SetBulletChar(cChar );
     493           0 :                 aFmt.SetCharFmtName(sBulletCharFmtName);
     494             :                 // #62069# // #92724#
     495           0 :                 aFmt.SetBulletRelSize(45);
     496           0 :                 pActNum->SetLevel(i, aFmt);
     497             :             }
     498           0 :             nMask <<= 1;
     499             :         }
     500             :     }
     501             : 
     502           0 :     return 0;
     503             : }
     504             : 
     505             : 
     506           0 : IMPL_LINK_NOARG(SvxBulletPickTabPage, DoubleClickHdl_Impl)
     507             : {
     508           0 :     NumSelectHdl_Impl(m_pExamplesVS);
     509           0 :     PushButton& rOk = GetTabDialog()->GetOKButton();
     510           0 :     rOk.GetClickHdl().Call(&rOk);
     511           0 :     return 0;
     512             : }
     513             : 
     514             : 
     515           0 : void SvxBulletPickTabPage::PageCreated(SfxAllItemSet aSet)
     516             : {
     517             : 
     518           0 :     SFX_ITEMSET_ARG (&aSet,pBulletCharFmt,SfxStringItem,SID_BULLET_CHAR_FMT,false);
     519             : 
     520           0 :     if (pBulletCharFmt)
     521           0 :         SetCharFmtName( pBulletCharFmt->GetValue());
     522             : 
     523             : 
     524           0 : }
     525             : 
     526             : 
     527           0 : SvxNumPickTabPage::SvxNumPickTabPage(Window* pParent,
     528             :                                const SfxItemSet& rSet)
     529             :     : SfxTabPage(pParent, "PickOutlinePage", "cui/ui/pickoutlinepage.ui", rSet)
     530             :     , pActNum(0)
     531             :     , pSaveNum(0)
     532             :     , nActNumLvl(SAL_MAX_UINT16)
     533             :     , nNumItemId(SID_ATTR_NUMBERING_RULE)
     534             :     , bModified(false)
     535           0 :     , bPreset(false)
     536             : {
     537           0 :     SetExchangeSupport();
     538             : 
     539           0 :     get(m_pExamplesVS, "valueset");
     540           0 :     m_pExamplesVS->init(NUM_PAGETYPE_NUM);
     541           0 :     m_pExamplesVS->SetSelectHdl(LINK(this, SvxNumPickTabPage, NumSelectHdl_Impl));
     542           0 :     m_pExamplesVS->SetDoubleClickHdl(LINK(this, SvxNumPickTabPage, DoubleClickHdl_Impl));
     543             : 
     544           0 :     Reference<XDefaultNumberingProvider> xDefNum = lcl_GetNumberingProvider();
     545           0 :     if(xDefNum.is())
     546             :     {
     547           0 :         Sequence<Reference<XIndexAccess> > aOutlineAccess;
     548           0 :         const Locale& rLocale = Application::GetSettings().GetLanguageTag().getLocale();
     549             :         try
     550             :         {
     551           0 :             aOutlineAccess = xDefNum->getDefaultOutlineNumberings( rLocale );
     552             : 
     553           0 :             for(sal_Int32 nItem = 0;
     554           0 :                 nItem < aOutlineAccess.getLength() && nItem < NUM_VALUSET_COUNT;
     555             :                 nItem++ )
     556             :             {
     557           0 :                 SvxNumSettingsArr_Impl& rItemArr = aNumSettingsArrays[ nItem ];
     558             : 
     559           0 :                 Reference<XIndexAccess> xLevel = aOutlineAccess.getConstArray()[nItem];
     560           0 :                 for(sal_Int32 nLevel = 0; nLevel < xLevel->getCount() && nLevel < 5; nLevel++)
     561             :                 {
     562           0 :                     Any aValueAny = xLevel->getByIndex(nLevel);
     563           0 :                     Sequence<PropertyValue> aLevelProps;
     564           0 :                     aValueAny >>= aLevelProps;
     565           0 :                     SvxNumSettings_Impl* pNew = lcl_CreateNumSettingsPtr(aLevelProps);
     566           0 :                     rItemArr.push_back( pNew );
     567           0 :                 }
     568           0 :             }
     569             :         }
     570           0 :         catch(const Exception&)
     571             :         {
     572             :         }
     573           0 :         Reference<XNumberingFormatter> xFormat(xDefNum, UNO_QUERY);
     574           0 :         m_pExamplesVS->SetOutlineNumberingSettings(aOutlineAccess, xFormat, rLocale);
     575           0 :     }
     576           0 : }
     577             : 
     578           0 : SvxNumPickTabPage::~SvxNumPickTabPage()
     579             : {
     580           0 :     delete pActNum;
     581           0 :     delete pSaveNum;
     582           0 : }
     583             : 
     584           0 : SfxTabPage*  SvxNumPickTabPage::Create( Window* pParent,
     585             :                                 const SfxItemSet& rAttrSet)
     586             : {
     587           0 :     return new SvxNumPickTabPage(pParent, rAttrSet);
     588             : }
     589             : 
     590           0 : bool  SvxNumPickTabPage::FillItemSet( SfxItemSet& rSet )
     591             : {
     592           0 :     if( (bPreset || bModified) && pActNum)
     593             :     {
     594           0 :         *pSaveNum = *pActNum;
     595           0 :         rSet.Put(SvxNumBulletItem( *pSaveNum ), nNumItemId);
     596           0 :         rSet.Put(SfxBoolItem(SID_PARAM_NUM_PRESET, bPreset));
     597             :     }
     598           0 :     return bModified;
     599             : }
     600             : 
     601           0 : void  SvxNumPickTabPage::ActivatePage(const SfxItemSet& rSet)
     602             : {
     603             :     const SfxPoolItem* pItem;
     604           0 :     bPreset = sal_False;
     605           0 :     sal_Bool bIsPreset = sal_False;
     606           0 :     const SfxItemSet* pExampleSet = GetTabDialog()->GetExampleSet();
     607           0 :     if(pExampleSet)
     608             :     {
     609           0 :         if(SFX_ITEM_SET == pExampleSet->GetItemState(SID_PARAM_NUM_PRESET, false, &pItem))
     610           0 :             bIsPreset = ((const SfxBoolItem*)pItem)->GetValue();
     611           0 :         if(SFX_ITEM_SET == pExampleSet->GetItemState(SID_PARAM_CUR_NUM_LEVEL, false, &pItem))
     612           0 :             nActNumLvl = ((const SfxUInt16Item*)pItem)->GetValue();
     613             :     }
     614           0 :     if(SFX_ITEM_SET == rSet.GetItemState(nNumItemId, false, &pItem))
     615             :     {
     616           0 :         delete pSaveNum;
     617           0 :         pSaveNum = new SvxNumRule(*((SvxNumBulletItem*)pItem)->GetNumRule());
     618             :     }
     619           0 :     if(pActNum && *pSaveNum != *pActNum)
     620             :     {
     621           0 :         *pActNum = *pSaveNum;
     622           0 :         m_pExamplesVS->SetNoSelection();
     623             :     }
     624             : 
     625           0 :     if(pActNum && (!lcl_IsNumFmtSet(pActNum, nActNumLvl) || bIsPreset))
     626             :     {
     627           0 :         m_pExamplesVS->SelectItem(1);
     628           0 :         NumSelectHdl_Impl(m_pExamplesVS);
     629           0 :         bPreset = sal_True;
     630             :     }
     631           0 :     bPreset |= bIsPreset;
     632           0 :     bModified = sal_False;
     633           0 : }
     634             : 
     635           0 : int  SvxNumPickTabPage::DeactivatePage(SfxItemSet *_pSet)
     636             : {
     637           0 :     if(_pSet)
     638           0 :         FillItemSet(*_pSet);
     639           0 :     return sal_True;
     640             : }
     641             : 
     642           0 : void  SvxNumPickTabPage::Reset( const SfxItemSet& rSet )
     643             : {
     644             :     const SfxPoolItem* pItem;
     645             :     // in Draw the item exists as WhichId, in Writer only as SlotId
     646           0 :     SfxItemState eState = rSet.GetItemState(SID_ATTR_NUMBERING_RULE, false, &pItem);
     647           0 :     if(eState != SFX_ITEM_SET)
     648             :     {
     649           0 :         nNumItemId = rSet.GetPool()->GetWhich(SID_ATTR_NUMBERING_RULE);
     650           0 :         eState = rSet.GetItemState(nNumItemId, false, &pItem);
     651             : 
     652           0 :         if( eState != SFX_ITEM_SET )
     653             :         {
     654           0 :             pItem = &static_cast< const SvxNumBulletItem& >( rSet.Get( nNumItemId, true ) );
     655           0 :             eState = SFX_ITEM_SET;
     656             :         }
     657             : 
     658             :     }
     659             :     DBG_ASSERT(eState == SFX_ITEM_SET, "no item found!");
     660           0 :     delete pSaveNum;
     661           0 :     pSaveNum = new SvxNumRule(*((SvxNumBulletItem*)pItem)->GetNumRule());
     662             : 
     663           0 :     if(!pActNum)
     664           0 :         pActNum = new  SvxNumRule(*pSaveNum);
     665           0 :     else if(*pSaveNum != *pActNum)
     666           0 :         *pActNum = *pSaveNum;
     667             : 
     668           0 : }
     669             : 
     670             : // all levels are changed here
     671           0 : IMPL_LINK_NOARG(SvxNumPickTabPage, NumSelectHdl_Impl)
     672             : {
     673           0 :     if(pActNum)
     674             :     {
     675           0 :         bPreset = sal_False;
     676           0 :         bModified = sal_True;
     677             : 
     678           0 :         const FontList*  pList = 0;
     679             : 
     680           0 :         SvxNumSettingsArr_Impl& rItemArr = aNumSettingsArrays[m_pExamplesVS->GetSelectItemId() - 1];
     681             : 
     682           0 :         Font& rActBulletFont = lcl_GetDefaultBulletFont();
     683           0 :         SvxNumSettings_Impl* pLevelSettings = 0;
     684           0 :         for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
     685             :         {
     686           0 :             if(rItemArr.size() > i)
     687           0 :                 pLevelSettings = &rItemArr[i];
     688           0 :             if(!pLevelSettings)
     689           0 :                 break;
     690           0 :             SvxNumberFormat aFmt(pActNum->GetLevel(i));
     691           0 :             aFmt.SetNumberingType( pLevelSettings->nNumberType );
     692           0 :             sal_uInt16 nUpperLevelOrChar = (sal_uInt16)pLevelSettings->nParentNumbering;
     693           0 :             if(aFmt.GetNumberingType() == SVX_NUM_CHAR_SPECIAL)
     694             :             {
     695             :                 // #i93908# clear suffix for bullet lists
     696           0 :                 aFmt.SetPrefix(OUString());
     697           0 :                 aFmt.SetSuffix(OUString());
     698           0 :                 if( !pLevelSettings->sBulletFont.isEmpty() &&
     699             :                     pLevelSettings->sBulletFont.compareTo(
     700           0 :                             rActBulletFont.GetName()))
     701             :                 {
     702             :                     //search for the font
     703           0 :                     if(!pList)
     704             :                     {
     705           0 :                         SfxObjectShell* pCurDocShell = SfxObjectShell::Current();
     706             :                         const SvxFontListItem* pFontListItem =
     707             :                                 (const SvxFontListItem* )pCurDocShell
     708           0 :                                                     ->GetItem( SID_ATTR_CHAR_FONTLIST );
     709           0 :                         pList = pFontListItem ? pFontListItem->GetFontList() : 0;
     710             :                     }
     711           0 :                     if(pList && pList->IsAvailable( pLevelSettings->sBulletFont ) )
     712             :                     {
     713             :                         FontInfo aInfo = pList->Get(
     714           0 :                             pLevelSettings->sBulletFont,WEIGHT_NORMAL, ITALIC_NONE);
     715           0 :                         Font aFont(aInfo);
     716           0 :                         aFmt.SetBulletFont(&aFont);
     717             :                     }
     718             :                     else
     719             :                     {
     720             :                         //if it cannot be found then create a new one
     721             :                         Font aCreateFont( pLevelSettings->sBulletFont,
     722           0 :                                                 OUString(), Size( 0, 14 ) );
     723           0 :                         aCreateFont.SetCharSet( RTL_TEXTENCODING_DONTKNOW );
     724           0 :                         aCreateFont.SetFamily( FAMILY_DONTKNOW );
     725           0 :                         aCreateFont.SetPitch( PITCH_DONTKNOW );
     726           0 :                         aCreateFont.SetWeight( WEIGHT_DONTKNOW );
     727           0 :                         aCreateFont.SetTransparent( true );
     728           0 :                         aFmt.SetBulletFont( &aCreateFont );
     729             :                     }
     730             :                 }
     731             :                 else
     732           0 :                     aFmt.SetBulletFont( &rActBulletFont );
     733             : 
     734           0 :                 aFmt.SetBulletChar( !pLevelSettings->sBulletChar.isEmpty()
     735           0 :                                         ? pLevelSettings->sBulletChar[0]
     736           0 :                                         : 0 );
     737           0 :                 aFmt.SetCharFmtName( sBulletCharFmtName );
     738             :                 // #62069# // #92724#
     739           0 :                 aFmt.SetBulletRelSize(45);
     740             :             }
     741             :             else
     742             :             {
     743           0 :                 aFmt.SetIncludeUpperLevels(sal::static_int_cast< sal_uInt8 >(0 != nUpperLevelOrChar ? pActNum->GetLevelCount() : 0));
     744           0 :                 aFmt.SetCharFmtName(sNumCharFmtName);
     745             :                 // #62069# // #92724#
     746           0 :                 aFmt.SetBulletRelSize(100);
     747             :                 // #i93908#
     748           0 :                 aFmt.SetPrefix(pLevelSettings->sPrefix);
     749           0 :                 aFmt.SetSuffix(pLevelSettings->sSuffix);
     750             :             }
     751           0 :             pActNum->SetLevel(i, aFmt);
     752           0 :         }
     753             :     }
     754           0 :     return 0;
     755             : }
     756             : 
     757           0 : IMPL_LINK_NOARG(SvxNumPickTabPage, DoubleClickHdl_Impl)
     758             : {
     759           0 :     NumSelectHdl_Impl(m_pExamplesVS);
     760           0 :     PushButton& rOk = GetTabDialog()->GetOKButton();
     761           0 :     rOk.GetClickHdl().Call(&rOk);
     762           0 :     return 0;
     763             : }
     764             : 
     765           0 : void SvxNumPickTabPage::PageCreated(SfxAllItemSet aSet)
     766             : {
     767           0 :     SFX_ITEMSET_ARG (&aSet,pNumCharFmt,SfxStringItem,SID_NUM_CHAR_FMT,false);
     768           0 :     SFX_ITEMSET_ARG (&aSet,pBulletCharFmt,SfxStringItem,SID_BULLET_CHAR_FMT,false);
     769             : 
     770             : 
     771           0 :     if (pNumCharFmt &&pBulletCharFmt)
     772           0 :         SetCharFmtNames( pNumCharFmt->GetValue(),pBulletCharFmt->GetValue());
     773           0 : }
     774             : 
     775           0 : SvxBitmapPickTabPage::SvxBitmapPickTabPage(Window* pParent,
     776             :                                const SfxItemSet& rSet)
     777             :     : SfxTabPage(pParent, "PickGraphicPage", "cui/ui/pickgraphicpage.ui", rSet)
     778             :     , pActNum(0)
     779             :     , pSaveNum(0)
     780             :     , nActNumLvl(SAL_MAX_UINT16)
     781             :     , nNumItemId(SID_ATTR_NUMBERING_RULE)
     782             :     , bModified(false)
     783           0 :     , bPreset(false)
     784             : {
     785           0 :     SetExchangeSupport();
     786           0 :     get(m_pErrorText, "errorft");
     787           0 :     get(m_pExamplesVS, "valueset");
     788           0 :     m_pExamplesVS->SetSelectHdl(LINK(this, SvxBitmapPickTabPage, NumSelectHdl_Impl));
     789           0 :     m_pExamplesVS->SetDoubleClickHdl(LINK(this, SvxBitmapPickTabPage, DoubleClickHdl_Impl));
     790             : 
     791           0 :     eCoreUnit = rSet.GetPool()->GetMetric(rSet.GetPool()->GetWhich(SID_ATTR_NUMBERING_RULE));
     792             : 
     793             :     // determine graphic name
     794           0 :     GalleryExplorer::FillObjList(GALLERY_THEME_BULLETS, aGrfNames);
     795             : 
     796           0 :     size_t i = 0;
     797           0 :     for(std::vector<OUString>::iterator it = aGrfNames.begin(); it != aGrfNames.end(); ++it, ++i)
     798             :     {
     799           0 :         m_pExamplesVS->InsertItem( i + 1, i);
     800             : 
     801           0 :         INetURLObject aObj(*it);
     802           0 :         if(aObj.GetProtocol() == INET_PROT_FILE)
     803           0 :             *it = aObj.PathToFileName();
     804             : 
     805           0 :         m_pExamplesVS->SetItemText( i + 1, *it );
     806           0 :     }
     807             : 
     808           0 :     if(aGrfNames.empty())
     809             :     {
     810           0 :         m_pErrorText->Show();
     811             :     }
     812             :     else
     813             :     {
     814           0 :         m_pExamplesVS->Show();
     815           0 :         m_pExamplesVS->Format();
     816             :     }
     817           0 : }
     818             : 
     819           0 : SvxBitmapPickTabPage::~SvxBitmapPickTabPage()
     820             : {
     821           0 :     delete pActNum;
     822           0 :     delete pSaveNum;
     823           0 : }
     824             : 
     825           0 : SfxTabPage*  SvxBitmapPickTabPage::Create( Window* pParent,
     826             :                                 const SfxItemSet& rAttrSet)
     827             : {
     828           0 :     return new SvxBitmapPickTabPage(pParent, rAttrSet);
     829             : }
     830             : 
     831           0 : void  SvxBitmapPickTabPage::ActivatePage(const SfxItemSet& rSet)
     832             : {
     833             :     const SfxPoolItem* pItem;
     834           0 :     bPreset = sal_False;
     835           0 :     sal_Bool bIsPreset = sal_False;
     836           0 :     const SfxItemSet* pExampleSet = GetTabDialog()->GetExampleSet();
     837           0 :     if(pExampleSet)
     838             :     {
     839           0 :         if(SFX_ITEM_SET == pExampleSet->GetItemState(SID_PARAM_NUM_PRESET, false, &pItem))
     840           0 :             bIsPreset = ((const SfxBoolItem*)pItem)->GetValue();
     841           0 :         if(SFX_ITEM_SET == pExampleSet->GetItemState(SID_PARAM_CUR_NUM_LEVEL, false, &pItem))
     842           0 :             nActNumLvl = ((const SfxUInt16Item*)pItem)->GetValue();
     843             :     }
     844           0 :     if(SFX_ITEM_SET == rSet.GetItemState(nNumItemId, false, &pItem))
     845             :     {
     846           0 :         delete pSaveNum;
     847           0 :         pSaveNum = new SvxNumRule(*((SvxNumBulletItem*)pItem)->GetNumRule());
     848             :     }
     849           0 :     if(pActNum && *pSaveNum != *pActNum)
     850             :     {
     851           0 :         *pActNum = *pSaveNum;
     852           0 :         m_pExamplesVS->SetNoSelection();
     853             :     }
     854             : 
     855           0 :     if(!aGrfNames.empty() &&
     856           0 :         (pActNum && (!lcl_IsNumFmtSet(pActNum, nActNumLvl) || bIsPreset)))
     857             :     {
     858           0 :         m_pExamplesVS->SelectItem(1);
     859           0 :         NumSelectHdl_Impl(m_pExamplesVS);
     860           0 :         bPreset = sal_True;
     861             :     }
     862           0 :     bPreset |= bIsPreset;
     863           0 :     bModified = sal_False;
     864           0 : }
     865             : 
     866           0 : int  SvxBitmapPickTabPage::DeactivatePage(SfxItemSet *_pSet)
     867             : {
     868           0 :     if(_pSet)
     869           0 :         FillItemSet(*_pSet);
     870           0 :     return sal_True;
     871             : }
     872             : 
     873           0 : bool  SvxBitmapPickTabPage::FillItemSet( SfxItemSet& rSet )
     874             : {
     875           0 :     if ( aGrfNames.empty() )
     876             :     {
     877           0 :         return false;
     878             :     }
     879           0 :     if( (bPreset || bModified) && pActNum)
     880             :     {
     881           0 :         *pSaveNum = *pActNum;
     882           0 :         rSet.Put(SvxNumBulletItem( *pSaveNum ), nNumItemId);
     883           0 :         rSet.Put(SfxBoolItem(SID_PARAM_NUM_PRESET, bPreset));
     884             :     }
     885             : 
     886           0 :     return bModified;
     887             : }
     888             : 
     889           0 : void  SvxBitmapPickTabPage::Reset( const SfxItemSet& rSet )
     890             : {
     891             :     const SfxPoolItem* pItem;
     892             :     // in Draw the item exists as WhichId, in Writer only as SlotId
     893           0 :     SfxItemState eState = rSet.GetItemState(SID_ATTR_NUMBERING_RULE, false, &pItem);
     894           0 :     if(eState != SFX_ITEM_SET)
     895             :     {
     896           0 :         nNumItemId = rSet.GetPool()->GetWhich(SID_ATTR_NUMBERING_RULE);
     897           0 :         eState = rSet.GetItemState(nNumItemId, false, &pItem);
     898             : 
     899           0 :         if( eState != SFX_ITEM_SET )
     900             :         {
     901           0 :             pItem = &static_cast< const SvxNumBulletItem& >( rSet.Get( nNumItemId, true ) );
     902           0 :             eState = SFX_ITEM_SET;
     903             :         }
     904             : 
     905             :     }
     906             :     DBG_ASSERT(eState == SFX_ITEM_SET, "no item found!");
     907           0 :     delete pSaveNum;
     908           0 :     pSaveNum = new SvxNumRule(*((SvxNumBulletItem*)pItem)->GetNumRule());
     909             : 
     910           0 :     if(!pActNum)
     911           0 :         pActNum = new  SvxNumRule(*pSaveNum);
     912           0 :     else if(*pSaveNum != *pActNum)
     913           0 :         *pActNum = *pSaveNum;
     914           0 : }
     915             : 
     916           0 : IMPL_LINK_NOARG(SvxBitmapPickTabPage, NumSelectHdl_Impl)
     917             : {
     918           0 :     if(pActNum)
     919             :     {
     920           0 :         bPreset = sal_False;
     921           0 :         bModified = sal_True;
     922           0 :         sal_uInt16 nIdx = m_pExamplesVS->GetSelectItemId() - 1;
     923             : 
     924           0 :         sal_uInt16 nMask = 1;
     925           0 :         OUString aEmptyStr;
     926           0 :         sal_uInt16 nSetNumberingType = SVX_NUM_BITMAP;
     927           0 :         for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
     928             :         {
     929           0 :             if(nActNumLvl & nMask)
     930             :             {
     931           0 :                 SvxNumberFormat aFmt(pActNum->GetLevel(i));
     932           0 :                 aFmt.SetNumberingType(nSetNumberingType);
     933           0 :                 aFmt.SetPrefix( aEmptyStr );
     934           0 :                 aFmt.SetSuffix( aEmptyStr );
     935           0 :                 aFmt.SetCharFmtName( sNumCharFmtName );
     936             : 
     937           0 :                 Graphic aGraphic;
     938           0 :                 if(GalleryExplorer::GetGraphicObj( GALLERY_THEME_BULLETS, nIdx, &aGraphic))
     939             :                 {
     940           0 :                     Size aSize = SvxNumberFormat::GetGraphicSizeMM100(&aGraphic);
     941           0 :                     sal_Int16 eOrient = text::VertOrientation::LINE_CENTER;
     942           0 :                     aSize = OutputDevice::LogicToLogic(aSize, MAP_100TH_MM, (MapUnit)eCoreUnit);
     943           0 :                     SvxBrushItem aBrush(aGraphic, GPOS_AREA, SID_ATTR_BRUSH );
     944           0 :                     aFmt.SetGraphicBrush( &aBrush, &aSize, &eOrient );
     945             :                 }
     946           0 :                 else if(aGrfNames.size() > nIdx)
     947           0 :                     aFmt.SetGraphic( aGrfNames[nIdx] );
     948           0 :                 pActNum->SetLevel(i, aFmt);
     949             :             }
     950           0 :             nMask <<= 1 ;
     951           0 :         }
     952             :     }
     953             : 
     954           0 :     return 0;
     955             : }
     956             : 
     957           0 : IMPL_LINK_NOARG(SvxBitmapPickTabPage, DoubleClickHdl_Impl)
     958             : {
     959           0 :     NumSelectHdl_Impl(m_pExamplesVS);
     960           0 :     PushButton& rOk = GetTabDialog()->GetOKButton();
     961           0 :     rOk.GetClickHdl().Call(&rOk);
     962           0 :     return 0;
     963             : }
     964             : 
     965             : // static
     966           0 : void SvxNumOptionsTabPage::GetI18nNumbering( ListBox& rFmtLB, sal_uInt16 nDoNotRemove )
     967             : {
     968             : 
     969           0 :     Reference<XDefaultNumberingProvider> xDefNum = lcl_GetNumberingProvider();
     970           0 :     Reference<XNumberingTypeInfo> xInfo(xDefNum, UNO_QUERY);
     971             : 
     972             :     // Extended numbering schemes present in the resource but not offered by
     973             :     // the i18n framework per configuration must be removed from the listbox.
     974             :     // Do not remove a special entry matching nDoNotRemove.
     975           0 :     const sal_uInt16 nDontRemove = SAL_MAX_UINT16;
     976           0 :     ::std::vector< sal_uInt16> aRemove( rFmtLB.GetEntryCount(), nDontRemove);
     977           0 :     for (size_t i=0; i<aRemove.size(); ++i)
     978             :     {
     979             :         sal_uInt16 nEntryData = (sal_uInt16)(sal_uLong)rFmtLB.GetEntryData(
     980           0 :                 sal::static_int_cast< sal_Int32 >(i));
     981           0 :         if (nEntryData > NumberingType::CHARS_LOWER_LETTER_N && nEntryData != nDoNotRemove)
     982           0 :             aRemove[i] = nEntryData;
     983             :     }
     984           0 :     if(xInfo.is())
     985             :     {
     986           0 :         Sequence<sal_Int16> aTypes = xInfo->getSupportedNumberingTypes(  );
     987           0 :         const sal_Int16* pTypes = aTypes.getConstArray();
     988           0 :         for(sal_Int32 nType = 0; nType < aTypes.getLength(); nType++)
     989             :         {
     990           0 :             sal_Int16 nCurrent = pTypes[nType];
     991           0 :             if(nCurrent > NumberingType::CHARS_LOWER_LETTER_N)
     992             :             {
     993           0 :                 sal_Bool bInsert = sal_True;
     994           0 :                 for(sal_Int32 nEntry = 0; nEntry < rFmtLB.GetEntryCount(); nEntry++)
     995             :                 {
     996           0 :                     sal_uInt16 nEntryData = (sal_uInt16)(sal_uLong)rFmtLB.GetEntryData(nEntry);
     997           0 :                     if(nEntryData == (sal_uInt16) nCurrent)
     998             :                     {
     999           0 :                         bInsert = sal_False;
    1000           0 :                         aRemove[nEntry] = nDontRemove;
    1001           0 :                         break;
    1002             :                     }
    1003             :                 }
    1004           0 :                 if(bInsert)
    1005             :                 {
    1006           0 :                     OUString aIdent = xInfo->getNumberingIdentifier( nCurrent );
    1007           0 :                     sal_Int32 nPos = rFmtLB.InsertEntry(aIdent);
    1008           0 :                     rFmtLB.SetEntryData(nPos,(void*)(sal_uLong)nCurrent);
    1009             :                 }
    1010             :             }
    1011           0 :         }
    1012             :     }
    1013           0 :     for (size_t i=0; i<aRemove.size(); ++i)
    1014             :     {
    1015           0 :         if (aRemove[i] != nDontRemove)
    1016             :         {
    1017           0 :             sal_Int32 nPos = rFmtLB.GetEntryPos( (void*)(sal_uLong)aRemove[i]);
    1018           0 :             rFmtLB.RemoveEntry( nPos);
    1019             :         }
    1020           0 :     }
    1021           0 : }
    1022             : 
    1023             : // tabpage numbering options
    1024           0 : SvxNumOptionsTabPage::SvxNumOptionsTabPage(Window* pParent,
    1025             :                                const SfxItemSet& rSet)
    1026             :     : SfxTabPage(pParent, "NumberingOptionsPage", "cui/ui/numberingoptionspage.ui", rSet)
    1027             :     , pActNum(0)
    1028             :     , pSaveNum(0)
    1029             :     , bLastWidthModified(sal_False)
    1030             :     , bModified(sal_False)
    1031             :     , bPreset(sal_False)
    1032             :     , bAutomaticCharStyles(sal_True)
    1033             :     , bHTMLMode(sal_False)
    1034             :     , bMenuButtonInitialized(sal_False)
    1035             :     , nBullet(0xff)
    1036             :     , nActNumLvl(SAL_MAX_UINT16)
    1037           0 :     , nNumItemId(SID_ATTR_NUMBERING_RULE)
    1038             : {
    1039           0 :     get(m_pLevelLB, "levellb");
    1040           0 :     get(m_pFmtLB, "numfmtlb");
    1041             : 
    1042           0 :     get(m_pSeparatorFT, "separator");
    1043           0 :     get(m_pPrefixFT, "prefixft");
    1044           0 :     get(m_pPrefixED, "prefix");
    1045           0 :     get(m_pSuffixFT, "suffixft");
    1046           0 :     get(m_pSuffixED, "suffix");
    1047             : 
    1048           0 :     get(m_pCharFmtFT, "charstyleft");
    1049           0 :     get(m_pCharFmtLB, "charstyle");
    1050             : 
    1051           0 :     get(m_pBulColorFT, "colorft");
    1052           0 :     get(m_pBulColLB, "color");
    1053             : 
    1054           0 :     get(m_pBulRelSizeFT, "relsizeft");
    1055           0 :     get(m_pBulRelSizeMF, "relsize");
    1056             : 
    1057           0 :     get(m_pAllLevelFT, "sublevelsft");
    1058           0 :     get(m_pAllLevelNF, "sublevels");
    1059             : 
    1060           0 :     get(m_pStartFT, "startatft");
    1061           0 :     get(m_pStartED, "startat");
    1062             : 
    1063           0 :     get(m_pBulletFT, "bulletft");
    1064           0 :     get(m_pBulletPB, "bullet");
    1065             : 
    1066           0 :     get(m_pAlignFT, "numalignft");
    1067           0 :     get(m_pAlignLB, "numalign");
    1068             : 
    1069           0 :     get(m_pBitmapFT, "bitmapft");
    1070           0 :     get(m_pBitmapMB, "bitmap");
    1071             : 
    1072           0 :     get(m_pWidthFT, "widthft");
    1073           0 :     get(m_pWidthMF, "widthmf");
    1074           0 :     get(m_pHeightFT, "heightft");
    1075           0 :     get(m_pHeightMF, "heightmf");
    1076             : 
    1077           0 :     get(m_pRatioCB, "keepratio");
    1078             : 
    1079           0 :     get(m_pOrientFT, "orientft");
    1080           0 :     get(m_pOrientLB, "orientlb");
    1081             : 
    1082           0 :     get(m_pAllLevelsFrame, "levelsframe");
    1083           0 :     get(m_pSameLevelCB, "allsame");
    1084             : 
    1085           0 :     get(m_pPreviewWIN, "preview");
    1086             : 
    1087           0 :     m_pPreviewWIN->SetBackground(Wallpaper(Color(COL_TRANSPARENT)));
    1088           0 :     SetExchangeSupport();
    1089           0 :     aActBulletFont = lcl_GetDefaultBulletFont();
    1090             : 
    1091           0 :     m_pBulletPB->SetClickHdl(LINK(this, SvxNumOptionsTabPage, BulletHdl_Impl));
    1092           0 :     m_pFmtLB->SetSelectHdl(LINK(this, SvxNumOptionsTabPage, NumberTypeSelectHdl_Impl));
    1093           0 :     m_pBitmapMB->SetSelectHdl(LINK(this, SvxNumOptionsTabPage, GraphicHdl_Impl));
    1094           0 :     m_pLevelLB->EnableMultiSelection(true);
    1095           0 :     m_pLevelLB->SetSelectHdl(LINK(this, SvxNumOptionsTabPage, LevelHdl_Impl));
    1096           0 :     m_pCharFmtLB->SetSelectHdl(LINK(this, SvxNumOptionsTabPage, CharFmtHdl_Impl));
    1097           0 :     m_pWidthMF->SetModifyHdl(LINK(this, SvxNumOptionsTabPage, SizeHdl_Impl));
    1098           0 :     m_pHeightMF->SetModifyHdl(LINK(this, SvxNumOptionsTabPage, SizeHdl_Impl));
    1099           0 :     m_pRatioCB->SetClickHdl(LINK(this, SvxNumOptionsTabPage, RatioHdl_Impl));
    1100           0 :     m_pStartED->SetModifyHdl(LINK(this, SvxNumOptionsTabPage, EditModifyHdl_Impl));
    1101           0 :     m_pPrefixED->SetModifyHdl(LINK(this, SvxNumOptionsTabPage, EditModifyHdl_Impl));
    1102           0 :     m_pSuffixED->SetModifyHdl(LINK(this, SvxNumOptionsTabPage, EditModifyHdl_Impl));
    1103           0 :     m_pAllLevelNF->SetModifyHdl(LINK(this,SvxNumOptionsTabPage, AllLevelHdl_Impl));
    1104           0 :     m_pOrientLB->SetSelectHdl(LINK(this, SvxNumOptionsTabPage, OrientHdl_Impl));
    1105           0 :     m_pSameLevelCB->SetClickHdl(LINK(this, SvxNumOptionsTabPage, SameLevelHdl_Impl));
    1106           0 :     m_pBulRelSizeMF->SetModifyHdl(LINK(this,SvxNumOptionsTabPage, BulRelSizeHdl_Impl));
    1107           0 :     m_pBulColLB->SetSelectHdl(LINK(this, SvxNumOptionsTabPage, BulColorHdl_Impl));
    1108           0 :     aInvalidateTimer.SetTimeoutHdl(LINK(this, SvxNumOptionsTabPage, PreviewInvalidateHdl_Impl));
    1109           0 :     aInvalidateTimer.SetTimeout(50);
    1110             : 
    1111           0 :     Menu *pBitmapMenu = m_pBitmapMB->GetPopupMenu();
    1112             : 
    1113           0 :     pBitmapMenu->SetHighlightHdl(LINK(this, SvxNumOptionsTabPage, PopupActivateHdl_Impl));
    1114           0 :     m_nGalleryId = pBitmapMenu->GetItemId("gallery");
    1115             :     assert(m_nGalleryId != MENU_ITEM_NOTFOUND);
    1116           0 :     PopupMenu* pPopup = new PopupMenu;
    1117           0 :     pBitmapMenu->SetPopupMenu(m_nGalleryId, pPopup);
    1118             : 
    1119           0 :     eCoreUnit = rSet.GetPool()->GetMetric(rSet.GetPool()->GetWhich(SID_ATTR_NUMBERING_RULE));
    1120             : 
    1121             :     // Get advanced numbering types from the component.
    1122             :     // Watch out for the ugly 0x88/*SVX_NUM_BITMAP|0x80*/ to not remove that.
    1123           0 :     GetI18nNumbering( *m_pFmtLB, (SVX_NUM_BITMAP | 0x80));
    1124           0 : }
    1125             : 
    1126           0 : SvxNumOptionsTabPage::~SvxNumOptionsTabPage()
    1127             : {
    1128           0 :     delete m_pBitmapMB->GetPopupMenu()->GetPopupMenu(m_nGalleryId);
    1129           0 :     delete pActNum;
    1130           0 :     delete pSaveNum;
    1131           0 : }
    1132             : 
    1133           0 : void SvxNumOptionsTabPage::SetMetric(FieldUnit eMetric)
    1134             : {
    1135           0 :     if(eMetric == FUNIT_MM)
    1136             :     {
    1137           0 :         m_pWidthMF->SetDecimalDigits(1);
    1138           0 :         m_pHeightMF->SetDecimalDigits(1);
    1139             :     }
    1140           0 :     m_pWidthMF->SetUnit( eMetric );
    1141           0 :     m_pHeightMF->SetUnit( eMetric );
    1142           0 : }
    1143             : 
    1144           0 : SfxTabPage* SvxNumOptionsTabPage::Create( Window* pParent,
    1145             :                                 const SfxItemSet& rAttrSet)
    1146             : {
    1147           0 :     return new SvxNumOptionsTabPage(pParent, rAttrSet);
    1148             : };
    1149             : 
    1150           0 : void    SvxNumOptionsTabPage::ActivatePage(const SfxItemSet& rSet)
    1151             : {
    1152             :     const SfxPoolItem* pItem;
    1153           0 :     const SfxItemSet* pExampleSet = GetTabDialog()->GetExampleSet();
    1154           0 :     sal_uInt16 nTmpNumLvl = SAL_MAX_UINT16;
    1155           0 :     if(pExampleSet)
    1156             :     {
    1157           0 :         if(SFX_ITEM_SET == pExampleSet->GetItemState(SID_PARAM_NUM_PRESET, false, &pItem))
    1158           0 :             bPreset = ((const SfxBoolItem*)pItem)->GetValue();
    1159           0 :         if(SFX_ITEM_SET == pExampleSet->GetItemState(SID_PARAM_CUR_NUM_LEVEL, false, &pItem))
    1160           0 :             nTmpNumLvl = ((const SfxUInt16Item*)pItem)->GetValue();
    1161             :     }
    1162           0 :     if(SFX_ITEM_SET == rSet.GetItemState(nNumItemId, false, &pItem))
    1163             :     {
    1164           0 :         delete pSaveNum;
    1165           0 :         pSaveNum = new SvxNumRule(*((SvxNumBulletItem*)pItem)->GetNumRule());
    1166             :     }
    1167             : 
    1168           0 :     bModified = (!pActNum->Get( 0 ) || bPreset);
    1169           0 :     if(*pActNum != *pSaveNum ||
    1170           0 :         nActNumLvl != nTmpNumLvl)
    1171             :     {
    1172           0 :         nActNumLvl = nTmpNumLvl;
    1173           0 :         sal_uInt16 nMask = 1;
    1174           0 :         m_pLevelLB->SetUpdateMode(false);
    1175           0 :         m_pLevelLB->SetNoSelection();
    1176           0 :         m_pLevelLB->SelectEntryPos( pActNum->GetLevelCount(), nActNumLvl == SAL_MAX_UINT16);
    1177           0 :         if(nActNumLvl != SAL_MAX_UINT16)
    1178           0 :             for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
    1179             :             {
    1180           0 :                 if(nActNumLvl & nMask)
    1181           0 :                     m_pLevelLB->SelectEntryPos( i, true);
    1182           0 :                 nMask <<= 1 ;
    1183             :             }
    1184           0 :         m_pLevelLB->SetUpdateMode(true);
    1185           0 :         *pActNum = *pSaveNum;
    1186           0 :         InitControls();
    1187             :     }
    1188             : 
    1189           0 : }
    1190             : 
    1191           0 : int     SvxNumOptionsTabPage::DeactivatePage(SfxItemSet * _pSet)
    1192             : {
    1193           0 :     if(_pSet)
    1194           0 :         FillItemSet(*_pSet);
    1195           0 :     return sal_True;
    1196             : }
    1197             : 
    1198           0 : bool    SvxNumOptionsTabPage::FillItemSet( SfxItemSet& rSet )
    1199             : {
    1200           0 :     rSet.Put(SfxUInt16Item(SID_PARAM_CUR_NUM_LEVEL, nActNumLvl));
    1201           0 :     if(bModified && pActNum)
    1202             :     {
    1203           0 :         *pSaveNum = *pActNum;
    1204           0 :         rSet.Put(SvxNumBulletItem( *pSaveNum ), nNumItemId);
    1205           0 :         rSet.Put(SfxBoolItem(SID_PARAM_NUM_PRESET, false));
    1206             :     }
    1207           0 :     return bModified;
    1208             : };
    1209             : 
    1210           0 : void    SvxNumOptionsTabPage::Reset( const SfxItemSet& rSet )
    1211             : {
    1212             :     const SfxPoolItem* pItem;
    1213             :     // in Draw the item exists as WhichId, in Writer only as SlotId
    1214           0 :     SfxItemState eState = rSet.GetItemState(SID_ATTR_NUMBERING_RULE, false, &pItem);
    1215           0 :     if(eState != SFX_ITEM_SET)
    1216             :     {
    1217           0 :         nNumItemId = rSet.GetPool()->GetWhich(SID_ATTR_NUMBERING_RULE);
    1218           0 :         eState = rSet.GetItemState(nNumItemId, false, &pItem);
    1219             : 
    1220           0 :         if( eState != SFX_ITEM_SET )
    1221             :         {
    1222           0 :             pItem = &static_cast< const SvxNumBulletItem& >( rSet.Get( nNumItemId, true ) );
    1223           0 :             eState = SFX_ITEM_SET;
    1224             :         }
    1225             : 
    1226             :     }
    1227             :     DBG_ASSERT(eState == SFX_ITEM_SET, "no item found!");
    1228           0 :     delete pSaveNum;
    1229           0 :     pSaveNum = new SvxNumRule(*((SvxNumBulletItem*)pItem)->GetNumRule());
    1230             : 
    1231             :     // insert levels
    1232           0 :     if(!m_pLevelLB->GetEntryCount())
    1233             :     {
    1234           0 :         for(sal_uInt16 i = 1; i <= pSaveNum->GetLevelCount(); i++)
    1235           0 :             m_pLevelLB->InsertEntry( OUString::number(i));
    1236           0 :         if(pSaveNum->GetLevelCount() > 1)
    1237             :         {
    1238           0 :             OUString sEntry( "1 - " );
    1239           0 :             sEntry += OUString::number( pSaveNum->GetLevelCount() );
    1240           0 :             m_pLevelLB->InsertEntry(sEntry);
    1241           0 :             m_pLevelLB->SelectEntry(sEntry);
    1242             :         }
    1243             :         else
    1244           0 :             m_pLevelLB->SelectEntryPos(0);
    1245             :     }
    1246             :     else
    1247           0 :         m_pLevelLB->SelectEntryPos(m_pLevelLB->GetEntryCount() - 1);
    1248             : 
    1249           0 :     sal_uInt16 nMask = 1;
    1250           0 :     m_pLevelLB->SetUpdateMode(false);
    1251           0 :     m_pLevelLB->SetNoSelection();
    1252           0 :     if(nActNumLvl == SAL_MAX_UINT16)
    1253             :     {
    1254           0 :         m_pLevelLB->SelectEntryPos( pSaveNum->GetLevelCount(), true);
    1255             :     }
    1256             :     else
    1257           0 :         for(sal_uInt16 i = 0; i < pSaveNum->GetLevelCount(); i++)
    1258             :         {
    1259           0 :             if(nActNumLvl & nMask)
    1260           0 :                 m_pLevelLB->SelectEntryPos( i, true);
    1261           0 :             nMask <<= 1 ;
    1262             :         }
    1263           0 :     m_pLevelLB->SetUpdateMode(true);
    1264             : 
    1265           0 :     if(!pActNum)
    1266           0 :         pActNum = new  SvxNumRule(*pSaveNum);
    1267           0 :     else if(*pSaveNum != *pActNum)
    1268           0 :         *pActNum = *pSaveNum;
    1269           0 :     m_pPreviewWIN->SetNumRule(pActNum);
    1270           0 :     m_pSameLevelCB->Check(pActNum->IsContinuousNumbering());
    1271             : 
    1272             :     // fill ColorListBox as needed
    1273           0 :     if ( pActNum->IsFeatureSupported( NUM_BULLET_COLOR ) )
    1274             :     {
    1275           0 :         SfxObjectShell* pDocSh = SfxObjectShell::Current();
    1276             :         DBG_ASSERT( pDocSh, "DocShell not found!" );
    1277           0 :         XColorListRef pColorTable;
    1278           0 :         if ( pDocSh )
    1279             :         {
    1280           0 :             pItem = pDocSh->GetItem( SID_COLOR_TABLE );
    1281           0 :             if ( pItem )
    1282           0 :                 pColorTable = ( (SvxColorListItem*)pItem )->GetColorList();
    1283             :         }
    1284             : 
    1285           0 :         if ( !pColorTable.is() )
    1286           0 :             pColorTable = XColorList::CreateStdColorList();
    1287             : 
    1288           0 :         m_pBulColLB->InsertEntry( Color( COL_AUTO ), SVX_RESSTR( RID_SVXSTR_AUTOMATIC ));
    1289             : 
    1290           0 :         for ( long i = 0; i < pColorTable->Count(); i++ )
    1291             :         {
    1292           0 :             XColorEntry* pEntry = pColorTable->GetColor(i);
    1293           0 :             m_pBulColLB->InsertEntry( pEntry->GetColor(), pEntry->GetName() );
    1294           0 :         }
    1295             :     }
    1296             : 
    1297             :     SfxObjectShell* pShell;
    1298           0 :     if ( SFX_ITEM_SET == rSet.GetItemState( SID_HTML_MODE, false, &pItem )
    1299           0 :          || ( 0 != ( pShell = SfxObjectShell::Current()) &&
    1300           0 :               0 != ( pItem = pShell->GetItem( SID_HTML_MODE ) ) ) )
    1301             :     {
    1302           0 :         sal_uInt16 nHtmlMode = ((SfxUInt16Item*)pItem)->GetValue();
    1303           0 :         bHTMLMode = 0 != (nHtmlMode&HTMLMODE_ON);
    1304             :     }
    1305             : 
    1306           0 :     sal_Bool bCharFmt = pActNum->IsFeatureSupported(NUM_CHAR_STYLE);
    1307           0 :     m_pCharFmtFT->Show(bCharFmt);
    1308           0 :     m_pCharFmtLB->Show(bCharFmt);
    1309             : 
    1310           0 :     sal_Bool bContinuous = pActNum->IsFeatureSupported(NUM_CONTINUOUS);
    1311             : 
    1312           0 :     sal_Bool bAllLevel = bContinuous && !bHTMLMode;
    1313           0 :     m_pAllLevelFT->Show(bAllLevel);
    1314           0 :     m_pAllLevelNF->Show(bAllLevel);
    1315             : 
    1316           0 :     m_pAllLevelsFrame->Show(bContinuous);
    1317             : 
    1318             :     // again misusage: in Draw there is numeration only until the bitmap
    1319             :     // without SVX_NUM_NUMBER_NONE
    1320             :     //remove types that are unsupported by Draw/Impress
    1321           0 :     if(!bContinuous)
    1322             :     {
    1323           0 :         sal_Int32 nFmtCount = m_pFmtLB->GetEntryCount();
    1324           0 :         for(sal_Int32 i = nFmtCount; i; i--)
    1325             :         {
    1326           0 :             sal_uInt16 nEntryData = (sal_uInt16)(sal_uLong)m_pFmtLB->GetEntryData(i - 1);
    1327           0 :             if(/*SVX_NUM_NUMBER_NONE == nEntryData ||*/
    1328             :                 ((SVX_NUM_BITMAP|LINK_TOKEN) ==  nEntryData))
    1329           0 :                 m_pFmtLB->RemoveEntry(i - 1);
    1330             :         }
    1331             :     }
    1332             :     //one must be enabled
    1333           0 :     if(!pActNum->IsFeatureSupported(NUM_ENABLE_LINKED_BMP))
    1334             :     {
    1335           0 :         sal_IntPtr nData = SVX_NUM_BITMAP|LINK_TOKEN;
    1336           0 :         sal_Int32 nPos = m_pFmtLB->GetEntryPos((void*)nData);
    1337           0 :         if(LISTBOX_ENTRY_NOTFOUND != nPos)
    1338           0 :             m_pFmtLB->RemoveEntry(nPos);
    1339             :     }
    1340           0 :     else if(!pActNum->IsFeatureSupported(NUM_ENABLE_EMBEDDED_BMP))
    1341             :     {
    1342           0 :         sal_IntPtr nData = SVX_NUM_BITMAP;
    1343           0 :         sal_Int32 nPos = m_pFmtLB->GetEntryPos((void*)nData);
    1344           0 :         if(LISTBOX_ENTRY_NOTFOUND != nPos)
    1345           0 :             m_pFmtLB->RemoveEntry(nPos);
    1346             :     }
    1347           0 :     if(pActNum->IsFeatureSupported(NUM_SYMBOL_ALIGNMENT))
    1348             :     {
    1349           0 :         m_pAlignFT->Show();
    1350           0 :         m_pAlignLB->Show();
    1351           0 :         m_pAlignLB->SetSelectHdl(LINK(this, SvxNumOptionsTabPage, EditModifyHdl_Impl));
    1352             :     }
    1353             :     else
    1354             :     {
    1355           0 :         m_pAlignFT->Hide();
    1356           0 :         m_pAlignLB->Hide();
    1357             :     }
    1358             : 
    1359             :     // MegaHack: because of a not-fixable 'design mistake/error' in Impress
    1360             :     // delete all kinds of numeric enumerations
    1361           0 :     if(pActNum->IsFeatureSupported(NUM_NO_NUMBERS))
    1362             :     {
    1363           0 :         sal_Int32 nFmtCount = m_pFmtLB->GetEntryCount();
    1364           0 :         for(sal_Int32 i = nFmtCount; i; i--)
    1365             :         {
    1366           0 :             sal_uInt16 nEntryData = (sal_uInt16)(sal_uLong)m_pFmtLB->GetEntryData(i - 1);
    1367           0 :             if( /*nEntryData >= SVX_NUM_CHARS_UPPER_LETTER &&*/  nEntryData <= SVX_NUM_NUMBER_NONE)
    1368           0 :                 m_pFmtLB->RemoveEntry(i - 1);
    1369             :         }
    1370             :     }
    1371             : 
    1372           0 :     InitControls();
    1373           0 :     bModified = sal_False;
    1374             : 
    1375           0 : }
    1376             : 
    1377           0 : void SvxNumOptionsTabPage::InitControls()
    1378             : {
    1379           0 :     bool bShowBullet    = true;
    1380           0 :     bool bShowBitmap    = true;
    1381           0 :     bool bSameType      = true;
    1382           0 :     bool bSameStart     = true;
    1383           0 :     bool bSamePrefix    = true;
    1384           0 :     bool bSameSuffix    = true;
    1385           0 :     bool bAllLevel      = true;
    1386           0 :     bool bSameCharFmt   = true;
    1387           0 :     bool bSameVOrient   = true;
    1388           0 :     bool bSameSize      = true;
    1389           0 :     bool bSameBulColor  = true;
    1390           0 :     bool bSameBulRelSize= true;
    1391           0 :     bool bSameAdjust    = true;
    1392             : 
    1393             :     const SvxNumberFormat* aNumFmtArr[SVX_MAX_NUM];
    1394           0 :     OUString sFirstCharFmt;
    1395           0 :     sal_Int16 eFirstOrient = text::VertOrientation::NONE;
    1396           0 :     Size aFirstSize(0,0);
    1397           0 :     sal_uInt16 nMask = 1;
    1398           0 :     sal_uInt16 nLvl = SAL_MAX_UINT16;
    1399           0 :     sal_uInt16 nHighestLevel = 0;
    1400           0 :     OUString aEmptyStr;
    1401             : 
    1402           0 :     sal_Bool bBullColor = pActNum->IsFeatureSupported(NUM_BULLET_COLOR);
    1403           0 :     sal_Bool bBullRelSize = pActNum->IsFeatureSupported(NUM_BULLET_REL_SIZE);
    1404           0 :     for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
    1405             :     {
    1406           0 :         if(nActNumLvl & nMask)
    1407             :         {
    1408           0 :             aNumFmtArr[i] = &pActNum->GetLevel(i);
    1409           0 :             bShowBullet &= aNumFmtArr[i]->GetNumberingType() == SVX_NUM_CHAR_SPECIAL;
    1410           0 :             bShowBitmap &= (aNumFmtArr[i]->GetNumberingType()&(~LINK_TOKEN)) == SVX_NUM_BITMAP;
    1411           0 :             if(SAL_MAX_UINT16 == nLvl)
    1412             :             {
    1413           0 :                 nLvl = i;
    1414           0 :                 sFirstCharFmt = aNumFmtArr[i]->GetCharFmtName();
    1415           0 :                 eFirstOrient = aNumFmtArr[i]->GetVertOrient();
    1416           0 :                 if(bShowBitmap)
    1417           0 :                     aFirstSize = aNumFmtArr[i]->GetGraphicSize();
    1418             :             }
    1419           0 :             if( i > nLvl)
    1420             :             {
    1421           0 :                 bSameType &=   aNumFmtArr[i]->GetNumberingType() == aNumFmtArr[nLvl]->GetNumberingType();
    1422           0 :                 bSameStart = aNumFmtArr[i]->GetStart() == aNumFmtArr[nLvl]->GetStart();
    1423             : 
    1424           0 :                 bSamePrefix = aNumFmtArr[i]->GetPrefix() == aNumFmtArr[nLvl]->GetPrefix();
    1425           0 :                 bSameSuffix = aNumFmtArr[i]->GetSuffix() == aNumFmtArr[nLvl]->GetSuffix();
    1426           0 :                 bAllLevel &= aNumFmtArr[i]->GetIncludeUpperLevels() == aNumFmtArr[nLvl]->GetIncludeUpperLevels();
    1427           0 :                 bSameCharFmt    &= sFirstCharFmt == aNumFmtArr[i]->GetCharFmtName();
    1428           0 :                 bSameVOrient    &= eFirstOrient == aNumFmtArr[i]->GetVertOrient();
    1429           0 :                 if(bShowBitmap && bSameSize)
    1430           0 :                     bSameSize &= aNumFmtArr[i]->GetGraphicSize() == aFirstSize;
    1431           0 :                 bSameBulColor &= aNumFmtArr[i]->GetBulletColor() == aNumFmtArr[nLvl]->GetBulletColor();
    1432           0 :                 bSameBulRelSize &= aNumFmtArr[i]->GetBulletRelSize() == aNumFmtArr[nLvl]->GetBulletRelSize();
    1433           0 :                 bSameAdjust     &= aNumFmtArr[i]->GetNumAdjust() == aNumFmtArr[nLvl]->GetNumAdjust();
    1434             :             }
    1435           0 :             nHighestLevel = i;
    1436             :         }
    1437             :         else
    1438           0 :             aNumFmtArr[i] = 0;
    1439             : 
    1440           0 :         nMask <<= 1 ;
    1441             :     }
    1442           0 :     SwitchNumberType(bShowBullet ? 1 : bShowBitmap ? 2 : 0);
    1443             : 
    1444             :     sal_uInt16 nNumberingType;
    1445           0 :     if (nLvl != SAL_MAX_UINT16)
    1446           0 :         nNumberingType = aNumFmtArr[nLvl]->GetNumberingType();
    1447             :     else
    1448             :     {
    1449           0 :         nNumberingType = SVX_NUM_NUMBER_NONE;
    1450           0 :         bAllLevel = false;
    1451           0 :         bSameAdjust = false;
    1452           0 :         bSameBulRelSize = false;
    1453           0 :         bSameBulColor = false;
    1454           0 :         bSameStart = false;
    1455           0 :         bSamePrefix = false;
    1456           0 :         bSameSuffix = false;
    1457             :     }
    1458             : 
    1459           0 :     CheckForStartValue_Impl(nNumberingType);
    1460             : 
    1461           0 :     if(bShowBitmap)
    1462             :     {
    1463           0 :         if(!bSameVOrient || eFirstOrient == text::VertOrientation::NONE)
    1464           0 :             m_pOrientLB->SetNoSelection();
    1465             :         else
    1466             :             m_pOrientLB->SelectEntryPos(
    1467           0 :                 sal::static_int_cast< sal_Int32 >(eFirstOrient - 1));
    1468             :                 // no text::VertOrientation::NONE
    1469             : 
    1470           0 :         if(bSameSize)
    1471             :         {
    1472           0 :             SetMetricValue(*m_pHeightMF, aFirstSize.Height(), eCoreUnit);
    1473           0 :             SetMetricValue(*m_pWidthMF, aFirstSize.Width(), eCoreUnit);
    1474             :         }
    1475             :         else
    1476             :         {
    1477           0 :             m_pHeightMF->SetText(aEmptyStr);
    1478           0 :             m_pWidthMF->SetText(aEmptyStr);
    1479             :         }
    1480             :     }
    1481             : 
    1482           0 :     if(bSameType)
    1483             :     {
    1484           0 :         sal_uInt16 nLBData = nNumberingType;
    1485           0 :         m_pFmtLB->SelectEntryPos(m_pFmtLB->GetEntryPos( (void*)sal::static_int_cast<sal_uIntPtr>( nLBData ) ));
    1486             :     }
    1487             :     else
    1488           0 :         m_pFmtLB->SetNoSelection();
    1489             : 
    1490           0 :     m_pAllLevelNF->Enable(nHighestLevel > 0 && !m_pSameLevelCB->IsChecked());
    1491           0 :     m_pAllLevelNF->SetMax(nHighestLevel + 1);
    1492           0 :     if(bAllLevel)
    1493             :     {
    1494           0 :         m_pAllLevelNF->SetValue(aNumFmtArr[nLvl]->GetIncludeUpperLevels());
    1495             :     }
    1496             :     else
    1497             :     {
    1498           0 :         m_pAllLevelNF->SetText(aEmptyStr);
    1499             :     }
    1500           0 :     if(bSameAdjust)
    1501             :     {
    1502           0 :         sal_Int32 nPos = 1; // centered
    1503           0 :         if(aNumFmtArr[nLvl]->GetNumAdjust() == SVX_ADJUST_LEFT)
    1504           0 :             nPos = 0;
    1505           0 :         else if(aNumFmtArr[nLvl]->GetNumAdjust() == SVX_ADJUST_RIGHT)
    1506           0 :             nPos = 2;
    1507           0 :         m_pAlignLB->SelectEntryPos(nPos);
    1508             :     }
    1509             :     else
    1510             :     {
    1511           0 :         m_pAlignLB->SetNoSelection();
    1512             :     }
    1513             : 
    1514           0 :     if(bBullRelSize)
    1515             :     {
    1516           0 :         if(bSameBulRelSize)
    1517           0 :             m_pBulRelSizeMF->SetValue(aNumFmtArr[nLvl]->GetBulletRelSize());
    1518             :         else
    1519           0 :             m_pBulRelSizeMF->SetText(aEmptyStr);
    1520             :     }
    1521           0 :     if(bBullColor)
    1522             :     {
    1523           0 :         if(bSameBulColor)
    1524           0 :             m_pBulColLB->SelectEntry(aNumFmtArr[nLvl]->GetBulletColor());
    1525             :         else
    1526           0 :             m_pBulColLB->SetNoSelection();
    1527             :     }
    1528           0 :     switch(nBullet)
    1529             :     {
    1530             :         case SHOW_NUMBERING:
    1531           0 :             if(bSameStart)
    1532             :             {
    1533           0 :                 m_pStartED->SetValue(aNumFmtArr[nLvl]->GetStart());
    1534             :             }
    1535             :             else
    1536           0 :                 m_pStartED->SetText(aEmptyStr);
    1537           0 :         break;
    1538             :         case SHOW_BULLET:
    1539           0 :         break;
    1540             :         case SHOW_BITMAP:
    1541           0 :         break;
    1542             :     }
    1543             : 
    1544           0 :     if(bSamePrefix)
    1545           0 :         m_pPrefixED->SetText(aNumFmtArr[nLvl]->GetPrefix());
    1546             :     else
    1547           0 :         m_pPrefixED->SetText(aEmptyStr);
    1548           0 :     if(bSameSuffix)
    1549           0 :         m_pSuffixED->SetText(aNumFmtArr[nLvl]->GetSuffix());
    1550             :     else
    1551           0 :         m_pSuffixED->SetText(aEmptyStr);
    1552             : 
    1553           0 :     if(bSameCharFmt)
    1554             :     {
    1555           0 :         if(!sFirstCharFmt.isEmpty())
    1556           0 :                 m_pCharFmtLB->SelectEntry(sFirstCharFmt);
    1557             :         else
    1558           0 :             m_pCharFmtLB->SelectEntryPos( 0 );
    1559             :     }
    1560             :     else
    1561           0 :         m_pCharFmtLB->SetNoSelection();
    1562             : 
    1563           0 :     m_pPreviewWIN->SetLevel(nActNumLvl);
    1564           0 :     m_pPreviewWIN->Invalidate();
    1565           0 : }
    1566             : 
    1567             : // 0 - Number; 1 - Bullet; 2 - Bitmap
    1568           0 : void SvxNumOptionsTabPage::SwitchNumberType( sal_uInt8 nType, sal_Bool )
    1569             : {
    1570           0 :     if(nBullet == nType)
    1571           0 :         return;
    1572           0 :     nBullet = nType;
    1573           0 :     sal_Bool bBullet = (nType == SHOW_BULLET);
    1574           0 :     sal_Bool bBitmap = (nType == SHOW_BITMAP);
    1575           0 :     sal_Bool bEnableBitmap = (nType == SHOW_BITMAP);
    1576           0 :     sal_Bool bNumeric = !(bBitmap||bBullet);
    1577           0 :     m_pSeparatorFT->Show(bNumeric);
    1578           0 :     m_pPrefixFT->Show(bNumeric);
    1579           0 :     m_pPrefixED->Show(bNumeric);
    1580           0 :     m_pSuffixFT->Show(bNumeric);
    1581           0 :     m_pSuffixED->Show(bNumeric);
    1582             : 
    1583           0 :     sal_Bool bCharFmt = pActNum->IsFeatureSupported(NUM_CHAR_STYLE);
    1584           0 :     m_pCharFmtFT->Show(!bBitmap && bCharFmt);
    1585           0 :     m_pCharFmtLB->Show(!bBitmap && bCharFmt);
    1586             : 
    1587             :     // this is rather misusage, as there is no own flag
    1588             :     // for complete numeration
    1589           0 :     sal_Bool bAllLevelFeature = pActNum->IsFeatureSupported(NUM_CONTINUOUS);
    1590           0 :     sal_Bool bAllLevel = bNumeric && bAllLevelFeature && !bHTMLMode;
    1591           0 :     m_pAllLevelFT->Show(bAllLevel);
    1592           0 :     m_pAllLevelNF->Show(bAllLevel);
    1593             : 
    1594           0 :     m_pStartFT->Show(!(bBullet||bBitmap));
    1595           0 :     m_pStartED->Show(!(bBullet||bBitmap));
    1596             : 
    1597           0 :     m_pBulletFT->Show(bBullet);
    1598           0 :     m_pBulletPB->Show(bBullet);
    1599           0 :     sal_Bool bBullColor = pActNum->IsFeatureSupported(NUM_BULLET_COLOR);
    1600           0 :     m_pBulColorFT->Show(!bBitmap && bBullColor);
    1601           0 :     m_pBulColLB->Show(!bBitmap && bBullColor);
    1602           0 :     sal_Bool bBullResSize = pActNum->IsFeatureSupported(NUM_BULLET_REL_SIZE);
    1603           0 :     m_pBulRelSizeFT->Show(!bBitmap && bBullResSize);
    1604           0 :     m_pBulRelSizeMF->Show(!bBitmap && bBullResSize);
    1605             : 
    1606           0 :     m_pBitmapFT->Show(bBitmap);
    1607           0 :     m_pBitmapMB->Show(bBitmap);
    1608             : 
    1609           0 :     m_pWidthFT->Show(bBitmap);
    1610           0 :     m_pWidthMF->Show(bBitmap);
    1611           0 :     m_pHeightFT->Show(bBitmap);
    1612           0 :     m_pHeightMF->Show(bBitmap);
    1613           0 :     m_pRatioCB->Show(bBitmap);
    1614             : 
    1615           0 :     m_pOrientFT->Show(bBitmap &&  bAllLevelFeature);
    1616           0 :     m_pOrientLB->Show(bBitmap &&  bAllLevelFeature);
    1617             : 
    1618           0 :     m_pWidthFT->Enable(bEnableBitmap);
    1619           0 :     m_pWidthMF->Enable(bEnableBitmap);
    1620           0 :     m_pHeightFT->Enable(bEnableBitmap);
    1621           0 :     m_pHeightMF->Enable(bEnableBitmap);
    1622           0 :     m_pRatioCB->Enable(bEnableBitmap);
    1623           0 :     m_pOrientFT->Enable(bEnableBitmap);
    1624           0 :     m_pOrientLB->Enable(bEnableBitmap);
    1625             : }
    1626             : 
    1627           0 : IMPL_LINK( SvxNumOptionsTabPage, LevelHdl_Impl, ListBox *, pBox )
    1628             : {
    1629           0 :     sal_uInt16 nSaveNumLvl = nActNumLvl;
    1630           0 :     nActNumLvl = 0;
    1631           0 :     if(pBox->IsEntryPosSelected( pActNum->GetLevelCount() ) &&
    1632           0 :         (pBox->GetSelectEntryCount() == 1 || nSaveNumLvl != 0xffff))
    1633             :     {
    1634           0 :         nActNumLvl = 0xFFFF;
    1635           0 :         pBox->SetUpdateMode(false);
    1636           0 :         for( sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++ )
    1637           0 :             pBox->SelectEntryPos( i, false );
    1638           0 :         pBox->SetUpdateMode(true);
    1639             :     }
    1640           0 :     else if(pBox->GetSelectEntryCount())
    1641             :     {
    1642           0 :         sal_uInt16 nMask = 1;
    1643           0 :         for( sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++ )
    1644             :         {
    1645           0 :             if(pBox->IsEntryPosSelected( i ))
    1646           0 :                 nActNumLvl |= nMask;
    1647           0 :             nMask <<= 1;
    1648             :         }
    1649           0 :         pBox->SelectEntryPos( pActNum->GetLevelCount(), false );
    1650             :     }
    1651             :     else
    1652             :     {
    1653           0 :         nActNumLvl = nSaveNumLvl;
    1654           0 :         sal_uInt16 nMask = 1;
    1655           0 :         for( sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++ )
    1656             :         {
    1657           0 :             if(nActNumLvl & nMask)
    1658             :             {
    1659           0 :                 pBox->SelectEntryPos(i);
    1660           0 :                 break;
    1661             :             }
    1662           0 :             nMask <<=1;
    1663             :         }
    1664             :     }
    1665           0 :     InitControls();
    1666           0 :     return 0;
    1667             : }
    1668             : 
    1669           0 : IMPL_LINK_NOARG(SvxNumOptionsTabPage, PreviewInvalidateHdl_Impl)
    1670             : {
    1671           0 :     m_pPreviewWIN->Invalidate();
    1672           0 :     return 0;
    1673             : }
    1674             : 
    1675           0 : IMPL_LINK( SvxNumOptionsTabPage, AllLevelHdl_Impl, NumericField*, pBox )
    1676             : {
    1677           0 :     for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
    1678             :     {
    1679           0 :         sal_uInt16 nMask = 1;
    1680           0 :         for(sal_uInt16 e = 0; e < pActNum->GetLevelCount(); e++)
    1681             :         {
    1682           0 :             if(nActNumLvl & nMask)
    1683             :             {
    1684           0 :                 SvxNumberFormat aNumFmt(pActNum->GetLevel(e));
    1685           0 :                 aNumFmt.SetIncludeUpperLevels((sal_uInt8) std::min(pBox->GetValue(), sal_Int64(e + 1)) );
    1686           0 :                 pActNum->SetLevel(e, aNumFmt);
    1687             :             }
    1688           0 :             nMask <<= 1;
    1689             :         }
    1690             :     }
    1691           0 :     SetModified();
    1692           0 :     return 0;
    1693             : }
    1694             : 
    1695           0 : IMPL_LINK( SvxNumOptionsTabPage, NumberTypeSelectHdl_Impl, ListBox *, pBox )
    1696             : {
    1697           0 :     OUString sSelectStyle;
    1698           0 :     sal_Bool bShowOrient = sal_False;
    1699           0 :     bool bBmp = false;
    1700           0 :     OUString aEmptyStr;
    1701           0 :     sal_uInt16 nMask = 1;
    1702           0 :     for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
    1703             :     {
    1704           0 :         if(nActNumLvl & nMask)
    1705             :         {
    1706           0 :             SvxNumberFormat aNumFmt(pActNum->GetLevel(i));
    1707             :             // PAGEDESC does not exist
    1708           0 :             sal_uInt16 nNumType = (sal_uInt16)(sal_uLong)pBox->GetEntryData(pBox->GetSelectEntryPos());
    1709           0 :             aNumFmt.SetNumberingType((sal_Int16)nNumType);
    1710           0 :             sal_uInt16 nNumberingType = aNumFmt.GetNumberingType();
    1711           0 :             if(SVX_NUM_BITMAP == (nNumberingType&(~LINK_TOKEN)))
    1712             :             {
    1713           0 :                 bBmp |= 0 != aNumFmt.GetBrush();
    1714           0 :                 aNumFmt.SetIncludeUpperLevels( sal_False );
    1715           0 :                 aNumFmt.SetSuffix( aEmptyStr );
    1716           0 :                 aNumFmt.SetPrefix( aEmptyStr );
    1717           0 :                 if(!bBmp)
    1718           0 :                     aNumFmt.SetGraphic(aEmptyStr);
    1719           0 :                 pActNum->SetLevel(i, aNumFmt);
    1720           0 :                 SwitchNumberType(SHOW_BITMAP, bBmp );
    1721           0 :                 bShowOrient = sal_True;
    1722             :             }
    1723           0 :             else if( SVX_NUM_CHAR_SPECIAL == nNumberingType )
    1724             :             {
    1725           0 :                 aNumFmt.SetIncludeUpperLevels( sal_False );
    1726           0 :                 aNumFmt.SetSuffix( aEmptyStr );
    1727           0 :                 aNumFmt.SetPrefix( aEmptyStr );
    1728           0 :                 if( !aNumFmt.GetBulletFont() )
    1729           0 :                     aNumFmt.SetBulletFont(&aActBulletFont);
    1730           0 :                 if( !aNumFmt.GetBulletChar() )
    1731           0 :                     aNumFmt.SetBulletChar( SVX_DEF_BULLET );
    1732           0 :                 pActNum->SetLevel(i, aNumFmt);
    1733           0 :                 SwitchNumberType(SHOW_BULLET);
    1734             :                 // allocation of the drawing pattern is automatic
    1735           0 :                 if(bAutomaticCharStyles)
    1736             :                 {
    1737           0 :                     sSelectStyle = m_sBulletCharFmtName;
    1738             :                 }
    1739             :             }
    1740             :             else
    1741             :             {
    1742           0 :                 aNumFmt.SetPrefix( m_pPrefixED->GetText() );
    1743           0 :                 aNumFmt.SetSuffix( m_pSuffixED->GetText() );
    1744           0 :                 SwitchNumberType(SHOW_NUMBERING);
    1745           0 :                 pActNum->SetLevel(i, aNumFmt);
    1746           0 :                 CheckForStartValue_Impl(nNumberingType);
    1747             : 
    1748             :                 // allocation of the drawing pattern is automatic
    1749           0 :                 if(bAutomaticCharStyles)
    1750             :                 {
    1751           0 :                     sSelectStyle = m_sNumCharFmtName;
    1752             :                 }
    1753           0 :             }
    1754             :         }
    1755           0 :         nMask <<= 1;
    1756             :     }
    1757           0 :     sal_Bool bAllLevelFeature = pActNum->IsFeatureSupported(NUM_CONTINUOUS);
    1758           0 :     if(bShowOrient && bAllLevelFeature)
    1759             :     {
    1760           0 :         m_pOrientFT->Show();
    1761           0 :         m_pOrientLB->Show();
    1762             :     }
    1763             :     else
    1764             :     {
    1765           0 :         m_pOrientFT->Hide();
    1766           0 :         m_pOrientLB->Hide();
    1767             :     }
    1768           0 :     SetModified();
    1769           0 :     if(!sSelectStyle.isEmpty())
    1770             :     {
    1771           0 :         m_pCharFmtLB->SelectEntry(sSelectStyle);
    1772           0 :         CharFmtHdl_Impl(m_pCharFmtLB);
    1773           0 :         bAutomaticCharStyles = sal_True;
    1774             :     }
    1775           0 :     return 0;
    1776             : }
    1777             : 
    1778           0 : void SvxNumOptionsTabPage::CheckForStartValue_Impl(sal_uInt16 nNumberingType)
    1779             : {
    1780           0 :     sal_Bool bIsNull = m_pStartED->GetValue() == 0;
    1781           0 :     sal_Bool bNoZeroAllowed = nNumberingType < SVX_NUM_ARABIC ||
    1782           0 :                         SVX_NUM_CHARS_UPPER_LETTER_N == nNumberingType ||
    1783           0 :                         SVX_NUM_CHARS_LOWER_LETTER_N == nNumberingType;
    1784           0 :     m_pStartED->SetMin(bNoZeroAllowed ? 1 : 0);
    1785           0 :     if(bIsNull && bNoZeroAllowed)
    1786           0 :         m_pStartED->GetModifyHdl().Call(m_pStartED);
    1787           0 : }
    1788             : 
    1789           0 : IMPL_LINK( SvxNumOptionsTabPage, OrientHdl_Impl, ListBox *, pBox )
    1790             : {
    1791           0 :     sal_Int32 nPos = pBox->GetSelectEntryPos();
    1792           0 :     nPos ++; // no VERT_NONE
    1793             : 
    1794           0 :     sal_uInt16 nMask = 1;
    1795           0 :     for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
    1796             :     {
    1797           0 :         if(nActNumLvl & nMask)
    1798             :         {
    1799           0 :             SvxNumberFormat aNumFmt(pActNum->GetLevel(i));
    1800           0 :             if(SVX_NUM_BITMAP == (aNumFmt.GetNumberingType()&(~LINK_TOKEN)))
    1801             :             {
    1802           0 :                 const SvxBrushItem* pBrushItem =  aNumFmt.GetBrush();
    1803           0 :                 const Size& rSize = aNumFmt.GetGraphicSize();
    1804           0 :                 sal_Int16 eOrient = (sal_Int16)nPos;
    1805           0 :                 aNumFmt.SetGraphicBrush( pBrushItem, &rSize, &eOrient );
    1806           0 :                 pActNum->SetLevel(i, aNumFmt);
    1807           0 :             }
    1808             :         }
    1809           0 :         nMask <<= 1;
    1810             :     }
    1811           0 :     SetModified(sal_False);
    1812           0 :     return 0;
    1813             : 
    1814             : }
    1815             : 
    1816           0 : IMPL_LINK( SvxNumOptionsTabPage, SameLevelHdl_Impl, CheckBox *, pBox )
    1817             : {
    1818           0 :     sal_Bool bSet = pBox->IsChecked();
    1819           0 :     pActNum->SetContinuousNumbering(bSet);
    1820           0 :     sal_Bool bRepaint = sal_False;
    1821           0 :     for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
    1822             :     {
    1823           0 :         SvxNumberFormat aNumFmt(pActNum->GetLevel(i));
    1824           0 :         if(aNumFmt.GetNumberingType() != SVX_NUM_NUMBER_NONE)
    1825             :         {
    1826           0 :             bRepaint = sal_True;
    1827           0 :             break;
    1828             :         }
    1829           0 :     }
    1830           0 :     SetModified(bRepaint);
    1831           0 :     InitControls();
    1832           0 :     return 0;
    1833             : }
    1834             : 
    1835           0 : IMPL_LINK( SvxNumOptionsTabPage, BulColorHdl_Impl, ColorListBox*, pBox )
    1836             : {
    1837           0 :     Color nSetColor = pBox->GetSelectEntryColor();
    1838             : 
    1839           0 :     sal_uInt16 nMask = 1;
    1840           0 :     for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
    1841             :     {
    1842           0 :         if(nActNumLvl & nMask)
    1843             :         {
    1844           0 :             SvxNumberFormat aNumFmt(pActNum->GetLevel(i));
    1845           0 :             aNumFmt.SetBulletColor(nSetColor);
    1846           0 :             pActNum->SetLevel(i, aNumFmt);
    1847             :         }
    1848           0 :         nMask <<= 1;
    1849             :     }
    1850           0 :     SetModified();
    1851           0 :     return 0;
    1852             : }
    1853             : 
    1854           0 : IMPL_LINK( SvxNumOptionsTabPage, BulRelSizeHdl_Impl, MetricField *, pField)
    1855             : {
    1856           0 :     sal_uInt16 nRelSize = (sal_uInt16)pField->GetValue();
    1857             : 
    1858           0 :     sal_uInt16 nMask = 1;
    1859           0 :     for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
    1860             :     {
    1861           0 :         if(nActNumLvl & nMask)
    1862             :         {
    1863           0 :             SvxNumberFormat aNumFmt(pActNum->GetLevel(i));
    1864           0 :             aNumFmt.SetBulletRelSize(nRelSize);
    1865           0 :             pActNum->SetLevel(i, aNumFmt);
    1866             :         }
    1867           0 :         nMask <<= 1;
    1868             :     }
    1869           0 :     SetModified();
    1870           0 :     return 0;
    1871             : }
    1872             : 
    1873           0 : IMPL_LINK( SvxNumOptionsTabPage, GraphicHdl_Impl, MenuButton *, pButton )
    1874             : {
    1875           0 :     sal_uInt16                  nItemId = pButton->GetCurItemId();
    1876           0 :     OUString                aGrfName;
    1877           0 :     Size                    aSize;
    1878           0 :     sal_Bool                bSucc(sal_False);
    1879           0 :     SvxOpenGraphicDialog    aGrfDlg( CUI_RES(RID_SVXSTR_EDIT_GRAPHIC) );
    1880             : 
    1881           0 :     if(MN_GALLERY_ENTRY <= nItemId )
    1882             :     {
    1883           0 :         sal_uInt16 idx = nItemId - MN_GALLERY_ENTRY;
    1884           0 :         if (idx < aGrfNames.size())
    1885             :         {
    1886           0 :             aGrfName = aGrfNames[idx];
    1887           0 :             Graphic aGraphic;
    1888           0 :             if(GalleryExplorer::GetGraphicObj( GALLERY_THEME_BULLETS, idx, &aGraphic))
    1889             :             {
    1890           0 :                 aSize = SvxNumberFormat::GetGraphicSizeMM100(&aGraphic);
    1891           0 :                 bSucc = sal_True;
    1892           0 :             }
    1893             :         }
    1894             :     }
    1895             :     else
    1896             :     {
    1897           0 :         aGrfDlg.EnableLink( false );
    1898           0 :         aGrfDlg.AsLink( false );
    1899           0 :         if ( !aGrfDlg.Execute() )
    1900             :         {
    1901             :             // memorize selected filter
    1902           0 :             aGrfName = aGrfDlg.GetPath();
    1903             : 
    1904           0 :             Graphic aGraphic;
    1905           0 :             if( !aGrfDlg.GetGraphic(aGraphic) )
    1906             :             {
    1907           0 :                 aSize = SvxNumberFormat::GetGraphicSizeMM100(&aGraphic);
    1908           0 :                 bSucc = sal_True;
    1909           0 :             }
    1910             :         }
    1911             :     }
    1912           0 :     if(bSucc)
    1913             :     {
    1914           0 :         aSize = OutputDevice::LogicToLogic(aSize, MAP_100TH_MM, (MapUnit)eCoreUnit);
    1915             : 
    1916           0 :         sal_uInt16 nMask = 1;
    1917           0 :         for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
    1918             :         {
    1919           0 :             if(nActNumLvl & nMask)
    1920             :             {
    1921           0 :                 SvxNumberFormat aNumFmt(pActNum->GetLevel(i));
    1922           0 :                 aNumFmt.SetCharFmtName(m_sNumCharFmtName);
    1923           0 :                 aNumFmt.SetGraphic(aGrfName);
    1924             : 
    1925             :                 // set size for a later comparison
    1926           0 :                 const SvxBrushItem* pBrushItem = aNumFmt.GetBrush();
    1927             :                 // initiate asynchronous loading
    1928           0 :                 sal_Int16 eOrient = aNumFmt.GetVertOrient();
    1929           0 :                 aNumFmt.SetGraphicBrush( pBrushItem, &aSize, &eOrient );
    1930           0 :                 aInitSize[i] = aNumFmt.GetGraphicSize();
    1931             : 
    1932           0 :                 pActNum->SetLevel(i, aNumFmt);
    1933             :             }
    1934           0 :             nMask <<= 1;
    1935             :         }
    1936           0 :         m_pRatioCB->Enable();
    1937           0 :         m_pWidthFT->Enable();
    1938           0 :         m_pHeightFT->Enable();
    1939           0 :         m_pWidthMF->Enable();
    1940           0 :         m_pHeightMF->Enable();
    1941           0 :         SetMetricValue(*m_pWidthMF, aSize.Width(), eCoreUnit);
    1942           0 :         SetMetricValue(*m_pHeightMF, aSize.Height(), eCoreUnit);
    1943           0 :         m_pOrientFT->Enable();
    1944           0 :         m_pOrientLB->Enable();
    1945           0 :         SetModified();
    1946             :         //needed due to asynchronous loading of graphics in the SvxBrushItem
    1947           0 :         aInvalidateTimer.Start();
    1948             :     }
    1949           0 :     return 0;
    1950             : }
    1951             : 
    1952           0 : IMPL_LINK_NOARG(SvxNumOptionsTabPage, PopupActivateHdl_Impl)
    1953             : {
    1954           0 :     if(!bMenuButtonInitialized)
    1955             :     {
    1956           0 :         bMenuButtonInitialized = sal_True;
    1957           0 :         EnterWait();
    1958           0 :         PopupMenu* pMenu = m_pBitmapMB->GetPopupMenu();
    1959           0 :         PopupMenu* pPopup = pMenu->GetPopupMenu(m_nGalleryId);
    1960             : 
    1961           0 :         if (GalleryExplorer::FillObjList(GALLERY_THEME_BULLETS, aGrfNames))
    1962             :         {
    1963           0 :             pPopup->Clear();
    1964           0 :             GalleryExplorer::BeginLocking(GALLERY_THEME_BULLETS);
    1965             : 
    1966           0 :             Graphic aGraphic;
    1967           0 :             OUString sGrfName;
    1968           0 :             std::vector<OUString>::const_iterator it = aGrfNames.begin();
    1969           0 :             for(size_t i = 0; it != aGrfNames.end(); ++it, ++i)
    1970             :             {
    1971           0 :                 sGrfName = *it;
    1972           0 :                 INetURLObject aObj(sGrfName);
    1973           0 :                 if(aObj.GetProtocol() == INET_PROT_FILE)
    1974           0 :                     sGrfName = aObj.PathToFileName();
    1975             : 
    1976           0 :                 if(GalleryExplorer::GetGraphicObj( GALLERY_THEME_BULLETS, i, &aGraphic))
    1977             :                 {
    1978           0 :                     Bitmap aBitmap(aGraphic.GetBitmap());
    1979           0 :                     Size aSize(aBitmap.GetSizePixel());
    1980           0 :                     if(aSize.Width() > MAX_BMP_WIDTH ||
    1981           0 :                         aSize.Height() > MAX_BMP_HEIGHT)
    1982             :                     {
    1983           0 :                         sal_Bool bWidth = aSize.Width() > aSize.Height();
    1984             :                         double nScale = bWidth ?
    1985           0 :                                             (double)MAX_BMP_WIDTH / (double)aSize.Width():
    1986           0 :                                                 (double)MAX_BMP_HEIGHT / (double)aSize.Height();
    1987           0 :                         aBitmap.Scale(nScale, nScale);
    1988             :                     }
    1989           0 :                     Image aImage(aBitmap);
    1990             : 
    1991           0 :                     pPopup->InsertItem(MN_GALLERY_ENTRY + i, sGrfName, aImage );
    1992             :                 }
    1993             :                 else
    1994             :                 {
    1995           0 :                     Image aImage;
    1996             :                     pPopup->InsertItem(
    1997           0 :                         MN_GALLERY_ENTRY + i, sGrfName, aImage );
    1998             :                 }
    1999           0 :             }
    2000           0 :             GalleryExplorer::EndLocking(GALLERY_THEME_BULLETS);
    2001             :         }
    2002           0 :         LeaveWait();
    2003             :     }
    2004           0 :     return 0;
    2005             : }
    2006             : 
    2007           0 : IMPL_LINK_NOARG(SvxNumOptionsTabPage, BulletHdl_Impl)
    2008             : {
    2009           0 :     SvxCharacterMap* pMap = new SvxCharacterMap( this, sal_True );
    2010             : 
    2011           0 :     sal_uInt16 nMask = 1;
    2012           0 :     const Font* pFmtFont = 0;
    2013           0 :     sal_Bool bSameBullet = sal_True;
    2014           0 :     sal_Unicode cBullet = 0;
    2015           0 :     sal_Bool bFirst = sal_True;
    2016           0 :     for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
    2017             :     {
    2018           0 :         if(nActNumLvl & nMask)
    2019             :         {
    2020           0 :             const SvxNumberFormat&  rCurFmt = pActNum->GetLevel(i);
    2021           0 :             if(bFirst)
    2022             :             {
    2023           0 :                  cBullet = rCurFmt.GetBulletChar();
    2024             :             }
    2025           0 :             else if(rCurFmt.GetBulletChar() != cBullet )
    2026             :             {
    2027           0 :                 bSameBullet = sal_False;
    2028           0 :                 break;
    2029             :             }
    2030           0 :             if(!pFmtFont)
    2031           0 :                 pFmtFont = rCurFmt.GetBulletFont();
    2032           0 :             bFirst = sal_False;
    2033             :         }
    2034           0 :         nMask <<= 1;
    2035             : 
    2036             :     }
    2037             : 
    2038           0 :     if(pFmtFont)
    2039           0 :         pMap->SetCharFont(*pFmtFont);
    2040             :     else
    2041           0 :         pMap->SetCharFont(aActBulletFont);
    2042           0 :     if(bSameBullet)
    2043           0 :         pMap->SetChar( cBullet );
    2044           0 :     if(pMap->Execute() == RET_OK)
    2045             :     {
    2046             :         // change Font Numrules
    2047           0 :         aActBulletFont = pMap->GetCharFont();
    2048             : 
    2049           0 :         sal_uInt16 _nMask = 1;
    2050           0 :         for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
    2051             :         {
    2052           0 :             if(nActNumLvl & _nMask)
    2053             :             {
    2054           0 :                 SvxNumberFormat aNumFmt(pActNum->GetLevel(i));
    2055           0 :                 aNumFmt.SetBulletFont(&aActBulletFont); ;
    2056           0 :                 aNumFmt.SetBulletChar( (sal_Unicode) pMap->GetChar() );
    2057           0 :                 pActNum->SetLevel(i, aNumFmt);
    2058             :             }
    2059           0 :             _nMask <<= 1;
    2060             :         }
    2061             : 
    2062           0 :         SetModified();
    2063             :     }
    2064           0 :     delete pMap;
    2065           0 :     return 0;
    2066             : }
    2067             : 
    2068           0 : IMPL_LINK( SvxNumOptionsTabPage, SizeHdl_Impl, MetricField *, pField)
    2069             : {
    2070           0 :     sal_Bool bWidth = pField == m_pWidthMF;
    2071           0 :     bLastWidthModified = bWidth;
    2072           0 :     sal_Bool bRatio = m_pRatioCB->IsChecked();
    2073           0 :     long nWidthVal = static_cast<long>(m_pWidthMF->Denormalize(m_pWidthMF->GetValue(FUNIT_100TH_MM)));
    2074           0 :     long nHeightVal = static_cast<long>(m_pHeightMF->Denormalize(m_pHeightMF->GetValue(FUNIT_100TH_MM)));
    2075             :     nWidthVal = OutputDevice::LogicToLogic( nWidthVal ,
    2076           0 :                                                 MAP_100TH_MM, (MapUnit)eCoreUnit );
    2077             :     nHeightVal = OutputDevice::LogicToLogic( nHeightVal,
    2078           0 :                                                 MAP_100TH_MM, (MapUnit)eCoreUnit);
    2079             :     double  fSizeRatio;
    2080             : 
    2081           0 :     sal_Bool bRepaint = sal_False;
    2082           0 :     sal_uInt16 nMask = 1;
    2083           0 :     for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
    2084             :     {
    2085           0 :         if(nActNumLvl & nMask)
    2086             :         {
    2087           0 :             SvxNumberFormat aNumFmt(pActNum->GetLevel(i));
    2088           0 :             if(SVX_NUM_BITMAP == (aNumFmt.GetNumberingType()&(~LINK_TOKEN)))
    2089             :             {
    2090           0 :                 Size aSize(aNumFmt.GetGraphicSize() );
    2091           0 :                 Size aSaveSize(aSize);
    2092             : 
    2093           0 :                 if (aInitSize[i].Height())
    2094           0 :                     fSizeRatio = (double)aInitSize[i].Width() / (double)aInitSize[i].Height();
    2095             :                 else
    2096           0 :                     fSizeRatio = (double)1;
    2097             : 
    2098           0 :                 if(bWidth)
    2099             :                 {
    2100           0 :                     long nDelta = nWidthVal - aInitSize[i].Width();
    2101           0 :                     aSize.Width() = nWidthVal;
    2102           0 :                     if (bRatio)
    2103             :                     {
    2104           0 :                         aSize.Height() = aInitSize[i].Height() + (long)((double)nDelta / fSizeRatio);
    2105             :                         m_pHeightMF->SetUserValue(m_pHeightMF->Normalize(
    2106           0 :                             OutputDevice::LogicToLogic( aSize.Height(), (MapUnit)eCoreUnit, MAP_100TH_MM )),
    2107           0 :                                 FUNIT_100TH_MM);
    2108             :                     }
    2109             :                 }
    2110             :                 else
    2111             :                 {
    2112           0 :                     long nDelta = nHeightVal - aInitSize[i].Height();
    2113           0 :                     aSize.Height() = nHeightVal;
    2114           0 :                     if (bRatio)
    2115             :                     {
    2116           0 :                         aSize.Width() = aInitSize[i].Width() + (long)((double)nDelta * fSizeRatio);
    2117             :                         m_pWidthMF->SetUserValue(m_pWidthMF->Normalize(
    2118           0 :                             OutputDevice::LogicToLogic( aSize.Width(), (MapUnit)eCoreUnit, MAP_100TH_MM )),
    2119           0 :                                 FUNIT_100TH_MM);
    2120             :                     }
    2121             :                 }
    2122           0 :                 const SvxBrushItem* pBrushItem =  aNumFmt.GetBrush();
    2123           0 :                 sal_Int16 eOrient = aNumFmt.GetVertOrient();
    2124           0 :                 if(aSize != aSaveSize)
    2125           0 :                     bRepaint = sal_True;
    2126           0 :                 aNumFmt.SetGraphicBrush( pBrushItem, &aSize, &eOrient );
    2127           0 :                 pActNum->SetLevel(i, aNumFmt);
    2128           0 :             }
    2129             :         }
    2130           0 :         nMask <<= 1;
    2131             :     }
    2132           0 :     SetModified(bRepaint);
    2133           0 :     return 0;
    2134             : }
    2135             : 
    2136           0 : IMPL_LINK( SvxNumOptionsTabPage, RatioHdl_Impl, CheckBox *, pBox )
    2137             : {
    2138           0 :     if (pBox->IsChecked())
    2139             :     {
    2140           0 :         if (bLastWidthModified)
    2141           0 :             SizeHdl_Impl(m_pWidthMF);
    2142             :         else
    2143           0 :             SizeHdl_Impl(m_pHeightMF);
    2144             :     }
    2145           0 :     return 0;
    2146             : }
    2147             : 
    2148           0 : IMPL_LINK_NOARG(SvxNumOptionsTabPage, CharFmtHdl_Impl)
    2149             : {
    2150           0 :     bAutomaticCharStyles = sal_False;
    2151           0 :     sal_Int32 nEntryPos = m_pCharFmtLB->GetSelectEntryPos();
    2152           0 :     OUString sEntry = m_pCharFmtLB->GetSelectEntry();
    2153           0 :     sal_uInt16 nMask = 1;
    2154           0 :     OUString aEmptyStr;
    2155           0 :     for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
    2156             :     {
    2157           0 :         if(nActNumLvl & nMask)
    2158             :         {
    2159           0 :             SvxNumberFormat aNumFmt(pActNum->GetLevel(i));
    2160           0 :             if( 0 == nEntryPos )
    2161           0 :                 aNumFmt.SetCharFmtName(aEmptyStr);
    2162             :             else
    2163             :             {
    2164           0 :                 if(SVX_NUM_BITMAP != (aNumFmt.GetNumberingType()&(~LINK_TOKEN)))
    2165           0 :                     aNumFmt.SetCharFmtName(sEntry);
    2166             :             }
    2167           0 :             pActNum->SetLevel(i, aNumFmt);
    2168             :         }
    2169           0 :         nMask <<= 1;
    2170             :     }
    2171           0 :     SetModified(sal_False);
    2172           0 :     return 0;
    2173             : 
    2174             : };
    2175             : 
    2176           0 : IMPL_LINK( SvxNumOptionsTabPage, EditModifyHdl_Impl, Edit *, pEdit )
    2177             : {
    2178           0 :     sal_Bool bPrefix = pEdit == m_pPrefixED;
    2179           0 :     sal_Bool bSuffix = pEdit == m_pSuffixED;
    2180           0 :     sal_Bool bStart = pEdit == m_pStartED;
    2181           0 :     sal_uInt16 nMask = 1;
    2182           0 :     for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
    2183             :     {
    2184           0 :         if(nActNumLvl & nMask)
    2185             :         {
    2186           0 :             SvxNumberFormat aNumFmt(pActNum->GetLevel(i));
    2187           0 :             if(bPrefix)
    2188           0 :                 aNumFmt.SetPrefix( m_pPrefixED->GetText() );
    2189           0 :             else if(bSuffix)
    2190           0 :                 aNumFmt.SetSuffix( m_pSuffixED->GetText() );
    2191           0 :             else if(bStart)
    2192           0 :                 aNumFmt.SetStart( (sal_uInt16)m_pStartED->GetValue() );
    2193             :             else //align
    2194             :             {
    2195           0 :                 sal_Int32 nPos = m_pAlignLB->GetSelectEntryPos();
    2196           0 :                 SvxAdjust eAdjust = SVX_ADJUST_CENTER;
    2197           0 :                 if(nPos == 0)
    2198           0 :                     eAdjust = SVX_ADJUST_LEFT;
    2199           0 :                 else if(nPos == 2)
    2200           0 :                     eAdjust = SVX_ADJUST_RIGHT;
    2201           0 :                 aNumFmt.SetNumAdjust( eAdjust );
    2202             :             }
    2203           0 :             pActNum->SetLevel(i, aNumFmt);
    2204             :         }
    2205           0 :         nMask <<= 1;
    2206             :     }
    2207           0 :     SetModified();
    2208             : 
    2209           0 :     return 0;
    2210             : }
    2211             : 
    2212           0 : static sal_uInt16 lcl_DrawGraphic(VirtualDevice* pVDev, const SvxNumberFormat &rFmt, sal_uInt16 nXStart,
    2213             :                         sal_uInt16 nYStart, sal_uInt16 nDivision)
    2214             : {
    2215           0 :     const SvxBrushItem* pBrushItem = rFmt.GetBrush();
    2216           0 :     sal_uInt16 nRet = 0;
    2217           0 :     if(pBrushItem)
    2218             :     {
    2219           0 :         const Graphic* pGrf = pBrushItem->GetGraphic();
    2220           0 :         if(pGrf)
    2221             :         {
    2222           0 :             Size aGSize( rFmt.GetGraphicSize() );
    2223           0 :             aGSize.Width() /= nDivision;
    2224           0 :             nRet = (sal_uInt16)aGSize.Width();
    2225           0 :             aGSize.Height() /= nDivision;
    2226             :             pGrf->Draw( pVDev, Point(nXStart,nYStart),
    2227           0 :                     pVDev->PixelToLogic( aGSize ) );
    2228             :         }
    2229             :     }
    2230           0 :     return nRet;
    2231             : 
    2232             : }
    2233             : 
    2234           0 : static sal_uInt16 lcl_DrawBullet(VirtualDevice* pVDev,
    2235             :             const SvxNumberFormat& rFmt, sal_uInt16 nXStart,
    2236             :             sal_uInt16 nYStart, const Size& rSize)
    2237             : {
    2238           0 :     Font aTmpFont(pVDev->GetFont());
    2239             : 
    2240             :     // via Uno it's possible that no font has been set!
    2241           0 :     Font aFont(rFmt.GetBulletFont() ? *rFmt.GetBulletFont() : aTmpFont);
    2242           0 :     Size aTmpSize(rSize);
    2243           0 :     aTmpSize.Width() *= rFmt.GetBulletRelSize();
    2244           0 :     aTmpSize.Width() /= 100 ;
    2245           0 :     aTmpSize.Height() *= rFmt.GetBulletRelSize();
    2246           0 :     aTmpSize.Height() /= 100 ;
    2247             :     // in case of a height of zero it is drawed in original height
    2248           0 :     if(!aTmpSize.Height())
    2249           0 :         aTmpSize.Height() = 1;
    2250           0 :     aFont.SetSize(aTmpSize);
    2251           0 :     aFont.SetTransparent(true);
    2252           0 :     Color aBulletColor = rFmt.GetBulletColor();
    2253           0 :     if(aBulletColor.GetColor() == COL_AUTO)
    2254           0 :         aBulletColor = Color(pVDev->GetFillColor().IsDark() ? COL_WHITE : COL_BLACK);
    2255           0 :     else if(aBulletColor == pVDev->GetFillColor())
    2256           0 :         aBulletColor.Invert();
    2257           0 :     aFont.SetColor(aBulletColor);
    2258           0 :     pVDev->SetFont( aFont );
    2259           0 :     OUString aText(rFmt.GetBulletChar());
    2260           0 :     long nY = nYStart;
    2261           0 :     nY -= ((aTmpSize.Height() - rSize.Height())/ 2);
    2262           0 :     pVDev->DrawText( Point(nXStart, nY), aText );
    2263           0 :     sal_uInt16 nRet = (sal_uInt16)pVDev->GetTextWidth(aText);
    2264             : 
    2265           0 :     pVDev->SetFont(aTmpFont);
    2266           0 :     return nRet;
    2267             : }
    2268             : 
    2269           0 : SvxNumberingPreview::SvxNumberingPreview(Window* pParent, WinBits nWinBits)
    2270             :     : Window(pParent, nWinBits)
    2271             :     , pActNum(0)
    2272             :     , nPageWidth(0)
    2273             :     , pOutlineNames(0)
    2274             :     , bPosition(false)
    2275           0 :     , nActLevel(SAL_MAX_UINT16)
    2276             : {
    2277           0 :     SetBorderStyle(WINDOW_BORDER_MONO);
    2278           0 : }
    2279             : 
    2280           0 : extern "C" SAL_DLLPUBLIC_EXPORT Window* SAL_CALL makeSvxNumberingPreview(Window *pParent, VclBuilder::stringmap &)
    2281             : {
    2282           0 :     return new SvxNumberingPreview(pParent, WB_BORDER);
    2283             : }
    2284             : 
    2285             : // paint preview of numeration
    2286           0 : void    SvxNumberingPreview::Paint( const Rectangle& /*rRect*/ )
    2287             : {
    2288           0 :     Size aSize(PixelToLogic(GetOutputSizePixel()));
    2289           0 :     Rectangle aRect(Point(0,0), aSize);
    2290             : 
    2291           0 :     const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
    2292           0 :     const Color aBackColor = rStyleSettings.GetFieldColor();
    2293           0 :     const Color aTextColor = rStyleSettings.GetFieldTextColor();
    2294             : 
    2295           0 :     VirtualDevice* pVDev = new VirtualDevice(*this);
    2296           0 :     pVDev->EnableRTL( IsRTLEnabled() );
    2297           0 :     pVDev->SetMapMode(GetMapMode());
    2298           0 :     pVDev->SetOutputSize( aSize );
    2299             : 
    2300           0 :     Color aLineColor(COL_LIGHTGRAY);
    2301           0 :     if(aLineColor == aBackColor)
    2302           0 :         aLineColor.Invert();
    2303           0 :     pVDev->SetLineColor(aLineColor);
    2304           0 :     pVDev->SetFillColor( aBackColor );
    2305           0 :     pVDev->DrawRect(aRect);
    2306             : 
    2307           0 :     if(pActNum)
    2308             :     {
    2309             :         sal_uInt16 nWidthRelation;
    2310           0 :         if(nPageWidth)
    2311             :         {
    2312           0 :             nWidthRelation = sal_uInt16 (nPageWidth / aSize.Width());
    2313           0 :             if(bPosition)
    2314           0 :                 nWidthRelation = nWidthRelation * 2 / 3;
    2315             :             else
    2316           0 :                 nWidthRelation = nWidthRelation / 4;
    2317             :         }
    2318             :         else
    2319           0 :             nWidthRelation = 30; // chapter dialog
    2320             : 
    2321             :         // height per level
    2322           0 :         sal_uInt16 nXStep = sal::static_int_cast< sal_uInt16 >(aSize.Width() / (3 * pActNum->GetLevelCount()));
    2323           0 :         if(pActNum->GetLevelCount() < 10)
    2324           0 :             nXStep /= 2;
    2325           0 :         sal_uInt16 nYStart = 4;
    2326             :         // the whole height mustn't be used for a single level
    2327           0 :         sal_uInt16 nYStep = sal::static_int_cast< sal_uInt16 >((aSize.Height() - 6)/ (pActNum->GetLevelCount() > 1 ? pActNum->GetLevelCount() : 5));
    2328           0 :         aStdFont = OutputDevice::GetDefaultFont(
    2329           0 :                 DEFAULTFONT_UI_SANS, MsLangId::getSystemLanguage(), DEFAULTFONT_FLAGS_ONLYONE);
    2330           0 :         aStdFont.SetColor(aTextColor);
    2331           0 :         aStdFont.SetFillColor(aBackColor);
    2332             : 
    2333           0 :         sal_uInt16 nFontHeight = nYStep * 6 / 10;
    2334           0 :         if(bPosition)
    2335           0 :             nFontHeight = nYStep * 15 / 10;
    2336           0 :         aStdFont.SetSize(Size( 0, nFontHeight ));
    2337             : 
    2338           0 :         SvxNodeNum aNum( (sal_uInt8)0 );
    2339           0 :         sal_uInt16 nPreNum = pActNum->GetLevel(0).GetStart();
    2340             : 
    2341           0 :         if(bPosition)
    2342             :         {
    2343           0 :             sal_uInt16 nLineHeight = nFontHeight * 8 / 7;
    2344           0 :             sal_uInt8 nStart = 0;
    2345           0 :             while( !(nActLevel & (1<<nStart)) )
    2346             :             {
    2347           0 :                 nStart++;
    2348             :             }
    2349           0 :             if(nStart)
    2350           0 :                 nStart--;
    2351           0 :             sal_uInt8 nEnd = std::min( (sal_uInt8)(nStart + 3), (sal_uInt8)pActNum->GetLevelCount() );
    2352           0 :             for( sal_uInt8 nLevel = nStart; nLevel < nEnd; ++nLevel )
    2353             :             {
    2354           0 :                 const SvxNumberFormat &rFmt = pActNum->GetLevel(nLevel);
    2355           0 :                 aNum.GetLevelVal()[ nLevel ] = rFmt.GetStart();
    2356             : 
    2357           0 :                 sal_uInt16 nXStart( 0 );
    2358           0 :                 short nTextOffset( 0 );
    2359           0 :                 sal_uInt16 nNumberXPos( 0 );
    2360           0 :                 if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_WIDTH_AND_POSITION )
    2361             :                 {
    2362           0 :                     nXStart = rFmt.GetAbsLSpace() / nWidthRelation;
    2363           0 :                     nTextOffset = rFmt.GetCharTextDistance() / nWidthRelation;
    2364           0 :                     nNumberXPos = nXStart;
    2365           0 :                     sal_uInt16 nFirstLineOffset = (-rFmt.GetFirstLineOffset()) / nWidthRelation;
    2366             : 
    2367           0 :                     if(nFirstLineOffset <= nNumberXPos)
    2368           0 :                         nNumberXPos = nNumberXPos - nFirstLineOffset;
    2369             :                     else
    2370           0 :                         nNumberXPos = 0;
    2371             :                     // in draw this is valid
    2372           0 :                     if(nTextOffset < 0)
    2373           0 :                         nNumberXPos = nNumberXPos + nTextOffset;
    2374             :                 }
    2375           0 :                 else if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_ALIGNMENT )
    2376             :                 {
    2377           0 :                     const long nTmpNumberXPos( ( rFmt.GetIndentAt() +
    2378           0 :                                                  rFmt.GetFirstLineIndent() ) /
    2379           0 :                                                nWidthRelation );
    2380           0 :                     if ( nTmpNumberXPos < 0 )
    2381             :                     {
    2382           0 :                         nNumberXPos = 0;
    2383             :                     }
    2384             :                     else
    2385             :                     {
    2386           0 :                         nNumberXPos = static_cast<sal_uInt16>( nTmpNumberXPos );
    2387             :                     }
    2388             :                 }
    2389             : 
    2390           0 :                 sal_uInt16 nBulletWidth = 0;
    2391           0 :                 if( SVX_NUM_BITMAP == (rFmt.GetNumberingType() &(~LINK_TOKEN)))
    2392             :                 {
    2393           0 :                     nBulletWidth = rFmt.IsShowSymbol() ? lcl_DrawGraphic(pVDev, rFmt,
    2394             :                                         nNumberXPos,
    2395           0 :                                             nYStart, nWidthRelation) : 0;
    2396             :                 }
    2397           0 :                 else if( SVX_NUM_CHAR_SPECIAL == rFmt.GetNumberingType() )
    2398             :                 {
    2399           0 :                     nBulletWidth =  rFmt.IsShowSymbol() ?
    2400           0 :                      lcl_DrawBullet(pVDev, rFmt, nNumberXPos, nYStart, aStdFont.GetSize()) : 0;
    2401             :                 }
    2402             :                 else
    2403             :                 {
    2404           0 :                     pVDev->SetFont(aStdFont);
    2405           0 :                     aNum.SetLevel( nLevel );
    2406           0 :                     if(pActNum->IsContinuousNumbering())
    2407           0 :                         aNum.GetLevelVal()[nLevel] = nPreNum;
    2408           0 :                     OUString aText(pActNum->MakeNumString( aNum ));
    2409           0 :                     Font aSaveFont = pVDev->GetFont();
    2410           0 :                     Font aColorFont(aSaveFont);
    2411           0 :                     Color aTmpBulletColor = rFmt.GetBulletColor();
    2412           0 :                     if(aTmpBulletColor.GetColor() == COL_AUTO)
    2413           0 :                         aTmpBulletColor = Color(aBackColor.IsDark() ? COL_WHITE : COL_BLACK);
    2414           0 :                     else if(aTmpBulletColor == aBackColor)
    2415           0 :                         aTmpBulletColor.Invert();
    2416           0 :                     aColorFont.SetColor(aTmpBulletColor);
    2417           0 :                     pVDev->SetFont(aColorFont);
    2418           0 :                     pVDev->DrawText( Point(nNumberXPos, nYStart), aText );
    2419           0 :                     pVDev->SetFont(aSaveFont);
    2420           0 :                     nBulletWidth = (sal_uInt16)pVDev->GetTextWidth(aText);
    2421           0 :                     nPreNum++;
    2422             :                 }
    2423           0 :                 if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_ALIGNMENT &&
    2424           0 :                      rFmt.GetLabelFollowedBy() == SvxNumberFormat::SPACE )
    2425             :                 {
    2426           0 :                     pVDev->SetFont(aStdFont);
    2427           0 :                     OUString aText(' ');
    2428           0 :                     pVDev->DrawText( Point(nNumberXPos, nYStart), aText );
    2429           0 :                     nBulletWidth = nBulletWidth + (sal_uInt16)pVDev->GetTextWidth(aText);
    2430             :                 }
    2431             : 
    2432           0 :                 sal_uInt16 nTextXPos( 0 );
    2433           0 :                 if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_WIDTH_AND_POSITION )
    2434             :                 {
    2435           0 :                     nTextXPos = nXStart;
    2436           0 :                     if(nTextOffset < 0)
    2437           0 :                          nTextXPos = nTextXPos + nTextOffset;
    2438           0 :                     if(nNumberXPos + nBulletWidth + nTextOffset > nTextXPos )
    2439           0 :                         nTextXPos = nNumberXPos + nBulletWidth + nTextOffset;
    2440             :                 }
    2441           0 :                 else if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_ALIGNMENT )
    2442             :                 {
    2443           0 :                     switch ( rFmt.GetLabelFollowedBy() )
    2444             :                     {
    2445             :                         case SvxNumberFormat::LISTTAB:
    2446             :                         {
    2447             :                             nTextXPos = static_cast<sal_uInt16>(
    2448           0 :                                             rFmt.GetListtabPos() / nWidthRelation );
    2449           0 :                             if ( nTextXPos < nNumberXPos + nBulletWidth )
    2450             :                             {
    2451           0 :                                 nTextXPos = nNumberXPos + nBulletWidth;
    2452             :                             }
    2453             :                         }
    2454           0 :                         break;
    2455             :                         case SvxNumberFormat::SPACE:
    2456             :                         case SvxNumberFormat::NOTHING:
    2457             :                         {
    2458           0 :                             nTextXPos = nNumberXPos + nBulletWidth;
    2459             :                         }
    2460           0 :                         break;
    2461             :                     }
    2462             : 
    2463           0 :                     nXStart = static_cast<sal_uInt16>( rFmt.GetIndentAt() / nWidthRelation );
    2464             :                 }
    2465             : 
    2466           0 :                 Rectangle aRect1(Point(nTextXPos, nYStart + nFontHeight / 2), Size(aSize.Width() / 2, 2));
    2467           0 :                 pVDev->SetFillColor( aBackColor );
    2468           0 :                 pVDev->DrawRect( aRect1 );
    2469             : 
    2470           0 :                 Rectangle aRect2(Point(nXStart, nYStart + nLineHeight + nFontHeight / 2 ), Size(aSize.Width() / 2, 2));
    2471           0 :                 pVDev->DrawRect( aRect2 );
    2472           0 :                 nYStart += 2 * nLineHeight;
    2473             :             }
    2474             :         }
    2475             :         else
    2476             :         {
    2477             :             //#i5153# painting gray or black rectangles as 'normal' numbering text
    2478           0 :             OUString sMsg( "Preview" );
    2479           0 :             long nWidth = pVDev->GetTextWidth(sMsg);
    2480           0 :             long nTextHeight = pVDev->GetTextHeight();
    2481           0 :             long nRectHeight = nTextHeight * 2 / 3;
    2482           0 :             long nTopOffset = nTextHeight - nRectHeight;
    2483           0 :             Color aBlackColor(COL_BLACK);
    2484           0 :             if(aBlackColor == aBackColor)
    2485           0 :                 aBlackColor.Invert();
    2486             : 
    2487           0 :             for( sal_uInt8 nLevel = 0; nLevel < pActNum->GetLevelCount();
    2488             :                             ++nLevel, nYStart = nYStart + nYStep )
    2489             :             {
    2490           0 :                 const SvxNumberFormat &rFmt = pActNum->GetLevel(nLevel);
    2491           0 :                 aNum.GetLevelVal()[ nLevel ] = rFmt.GetStart();
    2492           0 :                 sal_uInt16 nXStart( 0 );
    2493           0 :                 if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_WIDTH_AND_POSITION )
    2494             :                 {
    2495           0 :                     nXStart = rFmt.GetAbsLSpace() / nWidthRelation;
    2496             :                 }
    2497           0 :                 else if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_ALIGNMENT )
    2498             :                 {
    2499           0 :                     const long nTmpXStart( ( rFmt.GetIndentAt() +
    2500           0 :                                              rFmt.GetFirstLineIndent() ) /
    2501           0 :                                            nWidthRelation );
    2502           0 :                     if ( nTmpXStart < 0 )
    2503             :                     {
    2504           0 :                         nXStart = 0;
    2505             :                     }
    2506             :                     else
    2507             :                     {
    2508           0 :                         nXStart = static_cast<sal_uInt16>(nTmpXStart);
    2509             :                     }
    2510             :                 }
    2511           0 :                 nXStart /= 2;
    2512           0 :                 nXStart += 2;
    2513           0 :                 sal_uInt16 nTextOffset = 2 * nXStep;
    2514           0 :                 if( SVX_NUM_BITMAP == (rFmt.GetNumberingType()&(~LINK_TOKEN)) )
    2515             :                 {
    2516           0 :                     if(rFmt.IsShowSymbol())
    2517             :                     {
    2518           0 :                         nTextOffset = lcl_DrawGraphic(pVDev, rFmt, nXStart, nYStart, nWidthRelation);
    2519           0 :                         nTextOffset = nTextOffset + nXStep;
    2520             :                     }
    2521             :                 }
    2522           0 :                 else if( SVX_NUM_CHAR_SPECIAL == rFmt.GetNumberingType() )
    2523             :                 {
    2524           0 :                     if(rFmt.IsShowSymbol())
    2525             :                     {
    2526           0 :                         nTextOffset =  lcl_DrawBullet(pVDev, rFmt, nXStart, nYStart, aStdFont.GetSize());
    2527           0 :                         nTextOffset = nTextOffset + nXStep;
    2528             :                     }
    2529             :                 }
    2530             :                 else
    2531             :                 {
    2532           0 :                     Font aColorFont(aStdFont);
    2533           0 :                     Color aTmpBulletColor = rFmt.GetBulletColor();
    2534           0 :                     if(aTmpBulletColor.GetColor() == COL_AUTO)
    2535           0 :                         aTmpBulletColor = Color(aBackColor.IsDark() ? COL_WHITE : COL_BLACK);
    2536           0 :                     else if(aTmpBulletColor == aBackColor)
    2537           0 :                         aTmpBulletColor.Invert();
    2538           0 :                     aColorFont.SetColor(aTmpBulletColor);
    2539           0 :                     pVDev->SetFont(aColorFont);
    2540           0 :                     aNum.SetLevel( nLevel );
    2541           0 :                     if(pActNum->IsContinuousNumbering())
    2542           0 :                         aNum.GetLevelVal()[nLevel] = nPreNum;
    2543           0 :                     OUString aText(pActNum->MakeNumString( aNum ));
    2544           0 :                     pVDev->DrawText( Point(nXStart, nYStart), aText );
    2545           0 :                     pVDev->SetFont(aStdFont);
    2546           0 :                     nTextOffset = (sal_uInt16)pVDev->GetTextWidth(aText);
    2547           0 :                     nTextOffset = nTextOffset + nXStep;
    2548           0 :                     nPreNum++;
    2549             :                 }
    2550           0 :                 if(pOutlineNames)
    2551             :                 {
    2552             :                     //#i5153# outline numberings still use the style names as text
    2553           0 :                     pVDev->SetFont(aStdFont);
    2554           0 :                     sMsg = pOutlineNames[nLevel];
    2555           0 :                     pVDev->DrawText( Point(nXStart + nTextOffset, nYStart), sMsg );
    2556             :                 }
    2557             :                 else
    2558             :                 {
    2559             :                     //#i5153# the selected rectangle(s) should be black
    2560           0 :                     if( 0 != (nActLevel & (1<<nLevel)))
    2561             :                     {
    2562           0 :                         pVDev->SetFillColor( aBlackColor );
    2563           0 :                         pVDev->SetLineColor( aBlackColor );
    2564             :                     }
    2565             :                     else
    2566             :                     {
    2567             :                         //#i5153# unselected levels are gray
    2568           0 :                         pVDev->SetFillColor( aLineColor );
    2569           0 :                         pVDev->SetLineColor( aLineColor );
    2570             :                     }
    2571           0 :                     Rectangle aRect1(Point(nXStart + nTextOffset, nYStart + nTopOffset), Size(nWidth, nRectHeight));
    2572           0 :                     pVDev->DrawRect(aRect1);
    2573             :                 }
    2574           0 :             }
    2575             :         }
    2576             :     }
    2577             :     DrawOutDev( Point(0,0), aSize,
    2578             :                 Point(0,0), aSize,
    2579           0 :                         *pVDev );
    2580           0 :     delete pVDev;
    2581             : 
    2582           0 : }
    2583             : 
    2584             : //See uiconfig/swriter/ui/outlinepositionpage.ui for effectively a duplicate
    2585             : //dialog to this one, except with a different preview window impl.
    2586             : //TODO, determine if SwNumPositionTabPage and SvxNumPositionTabPage can be
    2587             : //merged
    2588           0 : SvxNumPositionTabPage::SvxNumPositionTabPage(Window* pParent,
    2589             :                                const SfxItemSet& rSet)
    2590             :     : SfxTabPage(pParent, "NumberingPositionPage", "cui/ui/numberingpositionpage.ui", rSet)
    2591             :     , pActNum(0)
    2592             :     , pSaveNum(0)
    2593             :     , nActNumLvl(SAL_MAX_UINT16)
    2594             :     , nNumItemId(SID_ATTR_NUMBERING_RULE)
    2595             :     , bModified(false)
    2596             :     , bPreset(false)
    2597             :     , bInInintControl(false)
    2598           0 :     , bLabelAlignmentPosAndSpaceModeActive(false)
    2599             : {
    2600           0 :     SetExchangeSupport();
    2601             : 
    2602           0 :     get(m_pLevelLB, "levellb");
    2603           0 :     get(m_pDistBorderFT, "indent");
    2604           0 :     get(m_pDistBorderMF, "indentmf");
    2605           0 :     get(m_pRelativeCB, "relative");
    2606           0 :     get(m_pIndentFT, "numberingwidth");
    2607           0 :     get(m_pIndentMF, "numberingwidthmf");
    2608           0 :     get(m_pDistNumFT, "numdist");
    2609           0 :     get(m_pDistNumMF, "numdistmf");
    2610           0 :     get(m_pAlignFT, "numalign");
    2611           0 :     get(m_pAlignLB, "numalignlb");
    2612             : 
    2613           0 :     get(m_pLabelFollowedByFT, "numfollowedby");
    2614           0 :     get(m_pLabelFollowedByLB, "numfollowedbylb");
    2615           0 :     get(m_pListtabFT, "at");
    2616           0 :     get(m_pListtabMF, "atmf");
    2617           0 :     get(m_pAlign2FT, "num2align");
    2618           0 :     get(m_pAlign2LB, "num2alignlb");
    2619           0 :     get(m_pAlignedAtFT, "alignedat");
    2620           0 :     get(m_pAlignedAtMF, "alignedatmf");
    2621           0 :     get(m_pIndentAtFT, "indentat");
    2622           0 :     get(m_pIndentAtMF, "indentatmf");
    2623             : 
    2624           0 :     get(m_pStandardPB, "standard");
    2625           0 :     get(m_pPreviewWIN, "preview");
    2626             : 
    2627           0 :     m_pPreviewWIN->SetBackground(Wallpaper(Color(COL_TRANSPARENT)));
    2628             : 
    2629           0 :     m_pRelativeCB->Check();
    2630           0 :     m_pAlignLB->SetSelectHdl(LINK(this, SvxNumPositionTabPage, EditModifyHdl_Impl));
    2631           0 :     m_pAlign2LB->SetSelectHdl(LINK(this, SvxNumPositionTabPage, EditModifyHdl_Impl));
    2632           0 :     for ( sal_Int32 i = 0; i < m_pAlignLB->GetEntryCount(); ++i )
    2633             :     {
    2634           0 :         m_pAlign2LB->InsertEntry( m_pAlignLB->GetEntry( i ) );
    2635             :     }
    2636           0 :     m_pAlign2LB->SetDropDownLineCount( m_pAlign2LB->GetEntryCount() );
    2637             : 
    2638           0 :     Link aLk = LINK(this, SvxNumPositionTabPage, DistanceHdl_Impl);
    2639             : 
    2640           0 :     m_pDistBorderMF->SetUpHdl(aLk);
    2641           0 :     m_pDistBorderMF->SetDownHdl(aLk);
    2642           0 :     m_pDistBorderMF->SetLoseFocusHdl(aLk);
    2643             : 
    2644           0 :     m_pDistNumMF->SetUpHdl(aLk);
    2645           0 :     m_pDistNumMF->SetDownHdl(aLk);
    2646           0 :     m_pDistNumMF->SetLoseFocusHdl(aLk);
    2647             : 
    2648           0 :     m_pIndentMF->SetUpHdl(aLk);
    2649           0 :     m_pIndentMF->SetDownHdl(aLk);
    2650           0 :     m_pIndentMF->SetLoseFocusHdl(aLk);
    2651             : 
    2652           0 :     m_pLabelFollowedByLB->SetDropDownLineCount( m_pLabelFollowedByLB->GetEntryCount() );
    2653           0 :     m_pLabelFollowedByLB->SetSelectHdl( LINK(this, SvxNumPositionTabPage, LabelFollowedByHdl_Impl) );
    2654             : 
    2655           0 :     aLk = LINK(this, SvxNumPositionTabPage, ListtabPosHdl_Impl);
    2656           0 :     m_pListtabMF->SetUpHdl(aLk);
    2657           0 :     m_pListtabMF->SetDownHdl(aLk);
    2658           0 :     m_pListtabMF->SetLoseFocusHdl(aLk);
    2659             : 
    2660           0 :     aLk = LINK(this, SvxNumPositionTabPage, AlignAtHdl_Impl);
    2661           0 :     m_pAlignedAtMF->SetUpHdl(aLk);
    2662           0 :     m_pAlignedAtMF->SetDownHdl(aLk);
    2663           0 :     m_pAlignedAtMF->SetLoseFocusHdl(aLk);
    2664             : 
    2665           0 :     aLk = LINK(this, SvxNumPositionTabPage, IndentAtHdl_Impl);
    2666           0 :     m_pIndentAtMF->SetUpHdl(aLk);
    2667           0 :     m_pIndentAtMF->SetDownHdl(aLk);
    2668           0 :     m_pIndentAtMF->SetLoseFocusHdl(aLk);
    2669             : 
    2670           0 :     m_pLevelLB->EnableMultiSelection(true);
    2671           0 :     m_pLevelLB->SetSelectHdl(LINK(this, SvxNumPositionTabPage, LevelHdl_Impl));
    2672           0 :     m_pRelativeCB->SetClickHdl(LINK(this, SvxNumPositionTabPage, RelativeHdl_Impl));
    2673           0 :     m_pStandardPB->SetClickHdl(LINK(this, SvxNumPositionTabPage, StandardHdl_Impl));
    2674             : 
    2675             : 
    2676           0 :     m_pRelativeCB->Check(bLastRelative);
    2677           0 :     m_pPreviewWIN->SetPositionMode();
    2678           0 :     eCoreUnit = rSet.GetPool()->GetMetric(rSet.GetPool()->GetWhich(SID_ATTR_NUMBERING_RULE));
    2679           0 : }
    2680             : 
    2681           0 : SvxNumPositionTabPage::~SvxNumPositionTabPage()
    2682             : {
    2683           0 :     delete pActNum;
    2684           0 :     delete pSaveNum;
    2685           0 : }
    2686             : /*-------------------------------------------------------*/
    2687             : 
    2688             : #if OSL_DEBUG_LEVEL > 1
    2689             : void lcl_PrintDebugOutput(FixedText& rFixed, const SvxNumberFormat& rNumFmt)
    2690             : {
    2691             :     OUString const sHash( " # " );
    2692             :     if ( rNumFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_WIDTH_AND_POSITION )
    2693             :     {
    2694             :         OUString sDebugText( OUString::number( convertTwipToMm100(rNumFmt.GetAbsLSpace() ) ) );
    2695             :         sDebugText += sHash;
    2696             :         sDebugText += OUString::number( convertTwipToMm100(rNumFmt.GetCharTextDistance() ) );
    2697             :         sDebugText += sHash;
    2698             :         sDebugText += OUString::number( convertTwipToMm100(rNumFmt.GetFirstLineOffset() ) );
    2699             :         rFixed.SetText(sDebugText);
    2700             :     }
    2701             :     else if ( rNumFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_ALIGNMENT )
    2702             :     {
    2703             :         OUString sDebugText( OUString::number( convertTwipToMm100(rNumFmt.GetListtabPos() ) ) );
    2704             :         sDebugText += sHash;
    2705             :         sDebugText += OUString::number( convertTwipToMm100(rNumFmt.GetFirstLineIndent() ) );
    2706             :         sDebugText += sHash;
    2707             :         sDebugText += OUString::number( convertTwipToMm100(rNumFmt.GetIndentAt() ) );
    2708             :         rFixed.SetText(sDebugText);
    2709             :     }
    2710             : 
    2711             : }
    2712             : #endif
    2713             : 
    2714           0 : void SvxNumPositionTabPage::InitControls()
    2715             : {
    2716           0 :     bInInintControl = sal_True;
    2717           0 :     const bool bRelative = !bLabelAlignmentPosAndSpaceModeActive &&
    2718           0 :                      m_pRelativeCB->IsEnabled() && m_pRelativeCB->IsChecked();
    2719           0 :     const bool bSingleSelection = m_pLevelLB->GetSelectEntryCount() == 1 &&
    2720           0 :                             SAL_MAX_UINT16 != nActNumLvl;
    2721             : 
    2722           0 :     m_pDistBorderMF->Enable( !bLabelAlignmentPosAndSpaceModeActive &&
    2723           0 :                           ( bSingleSelection || bRelative ) );
    2724           0 :     m_pDistBorderFT->Enable( !bLabelAlignmentPosAndSpaceModeActive &&
    2725           0 :                           ( bSingleSelection || bRelative ) );
    2726             : 
    2727           0 :     bool bSetDistEmpty = false;
    2728           0 :     bool bSameDistBorderNum = !bLabelAlignmentPosAndSpaceModeActive;
    2729           0 :     bool bSameDist      = !bLabelAlignmentPosAndSpaceModeActive;
    2730           0 :     bool bSameIndent    = !bLabelAlignmentPosAndSpaceModeActive;
    2731           0 :     bool bSameAdjust    = true;
    2732             : 
    2733           0 :     bool bSameLabelFollowedBy = bLabelAlignmentPosAndSpaceModeActive;
    2734           0 :     bool bSameListtab = bLabelAlignmentPosAndSpaceModeActive;
    2735           0 :     bool bSameAlignAt = bLabelAlignmentPosAndSpaceModeActive;
    2736           0 :     bool bSameIndentAt = bLabelAlignmentPosAndSpaceModeActive;
    2737             : 
    2738             :     const SvxNumberFormat* aNumFmtArr[SVX_MAX_NUM];
    2739           0 :     sal_uInt16 nMask = 1;
    2740           0 :     sal_uInt16 nLvl = SAL_MAX_UINT16;
    2741           0 :     long nFirstBorderTextRelative = -1;
    2742           0 :     for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
    2743             :     {
    2744           0 :         aNumFmtArr[i] = &pActNum->GetLevel(i);
    2745           0 :         if(nActNumLvl & nMask)
    2746             :         {
    2747           0 :             if(SAL_MAX_UINT16 == nLvl)
    2748           0 :                 nLvl = i;
    2749             : 
    2750           0 :             if( i > nLvl)
    2751             :             {
    2752           0 :                 bSameAdjust &= aNumFmtArr[i]->GetNumAdjust() == aNumFmtArr[nLvl]->GetNumAdjust();
    2753           0 :                 if ( !bLabelAlignmentPosAndSpaceModeActive )
    2754             :                 {
    2755           0 :                     if(bRelative)
    2756             :                     {
    2757           0 :                         if(nFirstBorderTextRelative == -1)
    2758             :                             nFirstBorderTextRelative =
    2759           0 :                             (aNumFmtArr[i]->GetAbsLSpace() + aNumFmtArr[i]->GetFirstLineOffset() -
    2760           0 :                             aNumFmtArr[i - 1]->GetAbsLSpace() + aNumFmtArr[i - 1]->GetFirstLineOffset());
    2761             :                         else
    2762           0 :                             bSameDistBorderNum &= nFirstBorderTextRelative ==
    2763           0 :                             (aNumFmtArr[i]->GetAbsLSpace() + aNumFmtArr[i]->GetFirstLineOffset() -
    2764           0 :                             aNumFmtArr[i - 1]->GetAbsLSpace() + aNumFmtArr[i - 1]->GetFirstLineOffset());
    2765             :                     }
    2766             :                     else
    2767             :                         bSameDistBorderNum &=
    2768           0 :                         aNumFmtArr[i]->GetAbsLSpace() - aNumFmtArr[i]->GetFirstLineOffset() ==
    2769           0 :                         aNumFmtArr[i - 1]->GetAbsLSpace() - aNumFmtArr[i - 1]->GetFirstLineOffset();
    2770             : 
    2771           0 :                     bSameDist       &= aNumFmtArr[i]->GetCharTextDistance() == aNumFmtArr[nLvl]->GetCharTextDistance();
    2772           0 :                     bSameIndent     &= aNumFmtArr[i]->GetFirstLineOffset() == aNumFmtArr[nLvl]->GetFirstLineOffset();
    2773             :                 }
    2774             :                 else
    2775             :                 {
    2776             :                     bSameLabelFollowedBy &=
    2777           0 :                         aNumFmtArr[i]->GetLabelFollowedBy() == aNumFmtArr[nLvl]->GetLabelFollowedBy();
    2778             :                     bSameListtab &=
    2779           0 :                         aNumFmtArr[i]->GetListtabPos() == aNumFmtArr[nLvl]->GetListtabPos();
    2780             :                     bSameAlignAt &=
    2781           0 :                         ( ( aNumFmtArr[i]->GetIndentAt() + aNumFmtArr[i]->GetFirstLineIndent() )
    2782           0 :                             == ( aNumFmtArr[nLvl]->GetIndentAt() + aNumFmtArr[nLvl]->GetFirstLineIndent() ) );
    2783             :                     bSameIndentAt &=
    2784           0 :                         aNumFmtArr[i]->GetIndentAt() == aNumFmtArr[nLvl]->GetIndentAt();
    2785             :                 }
    2786             :             }
    2787             :         }
    2788           0 :         nMask <<= 1;
    2789             : 
    2790             :     }
    2791           0 :     if (SVX_MAX_NUM <= nLvl)
    2792             :     {
    2793             :         OSL_ENSURE(false, "cannot happen.");
    2794           0 :         return;
    2795             :     }
    2796             : 
    2797           0 :     if(bSameDistBorderNum)
    2798             :     {
    2799             :         long nDistBorderNum;
    2800           0 :         if(bRelative)
    2801             :         {
    2802           0 :             nDistBorderNum = (long)aNumFmtArr[nLvl]->GetAbsLSpace()+ aNumFmtArr[nLvl]->GetFirstLineOffset();
    2803           0 :             if(nLvl)
    2804           0 :                 nDistBorderNum -= (long)aNumFmtArr[nLvl - 1]->GetAbsLSpace()+ aNumFmtArr[nLvl - 1]->GetFirstLineOffset();
    2805             :         }
    2806             :         else
    2807             :         {
    2808           0 :             nDistBorderNum = (long)aNumFmtArr[nLvl]->GetAbsLSpace()+ aNumFmtArr[nLvl]->GetFirstLineOffset();
    2809             :         }
    2810           0 :         SetMetricValue(*m_pDistBorderMF, nDistBorderNum, eCoreUnit);
    2811             :     }
    2812             :     else
    2813           0 :         bSetDistEmpty = true;
    2814             : 
    2815           0 :     const OUString aEmptyStr;
    2816           0 :     if(bSameDist)
    2817           0 :         SetMetricValue(*m_pDistNumMF, aNumFmtArr[nLvl]->GetCharTextDistance(), eCoreUnit);
    2818             :     else
    2819           0 :         m_pDistNumMF->SetText(aEmptyStr);
    2820           0 :     if(bSameIndent)
    2821           0 :         SetMetricValue(*m_pIndentMF, - aNumFmtArr[nLvl]->GetFirstLineOffset(), eCoreUnit);
    2822             :     else
    2823           0 :         m_pIndentMF->SetText(aEmptyStr);
    2824             : 
    2825           0 :     if(bSameAdjust)
    2826             :     {
    2827           0 :         sal_Int32 nPos = 1; // centered
    2828           0 :         if(aNumFmtArr[nLvl]->GetNumAdjust() == SVX_ADJUST_LEFT)
    2829           0 :             nPos = 0;
    2830           0 :         else if(aNumFmtArr[nLvl]->GetNumAdjust() == SVX_ADJUST_RIGHT)
    2831           0 :             nPos = 2;
    2832           0 :         m_pAlignLB->SelectEntryPos(nPos);
    2833           0 :         m_pAlign2LB->SelectEntryPos( nPos );
    2834             :     }
    2835             :     else
    2836             :     {
    2837           0 :         m_pAlignLB->SetNoSelection();
    2838           0 :         m_pAlign2LB->SetNoSelection();
    2839             :     }
    2840             : 
    2841           0 :     if ( bSameLabelFollowedBy )
    2842             :     {
    2843           0 :         sal_Int32 nPos = 0; // LISTTAB
    2844           0 :         if ( aNumFmtArr[nLvl]->GetLabelFollowedBy() == SvxNumberFormat::SPACE )
    2845             :         {
    2846           0 :             nPos = 1;
    2847             :         }
    2848           0 :         else if ( aNumFmtArr[nLvl]->GetLabelFollowedBy() == SvxNumberFormat::NOTHING )
    2849             :         {
    2850           0 :             nPos = 2;
    2851             :         }
    2852           0 :         m_pLabelFollowedByLB->SelectEntryPos( nPos );
    2853             :     }
    2854             :     else
    2855             :     {
    2856           0 :         m_pLabelFollowedByLB->SetNoSelection();
    2857             :     }
    2858             : 
    2859           0 :     if ( aNumFmtArr[nLvl]->GetLabelFollowedBy() == SvxNumberFormat::LISTTAB )
    2860             :     {
    2861           0 :         m_pListtabFT->Enable( true );
    2862           0 :         m_pListtabMF->Enable( true );
    2863           0 :         if ( bSameListtab )
    2864             :         {
    2865           0 :             SetMetricValue(*m_pListtabMF, aNumFmtArr[nLvl]->GetListtabPos(), eCoreUnit);
    2866             :         }
    2867             :         else
    2868             :         {
    2869           0 :             m_pListtabMF->SetText(aEmptyStr);
    2870             :         }
    2871             :     }
    2872             :     else
    2873             :     {
    2874           0 :         m_pListtabFT->Enable( false );
    2875           0 :         m_pListtabMF->Enable( false );
    2876           0 :         m_pListtabMF->SetText(aEmptyStr);
    2877             :     }
    2878             : 
    2879           0 :     if ( bSameAlignAt )
    2880             :     {
    2881             :         SetMetricValue(*m_pAlignedAtMF,
    2882           0 :                         aNumFmtArr[nLvl]->GetIndentAt() + aNumFmtArr[nLvl]->GetFirstLineIndent(),
    2883           0 :                         eCoreUnit);
    2884             :     }
    2885             :     else
    2886             :     {
    2887           0 :         m_pAlignedAtMF->SetText(aEmptyStr);
    2888             :     }
    2889             : 
    2890           0 :     if ( bSameIndentAt )
    2891             :     {
    2892           0 :         SetMetricValue(*m_pIndentAtMF, aNumFmtArr[nLvl]->GetIndentAt(), eCoreUnit);
    2893             :     }
    2894             :     else
    2895             :     {
    2896           0 :         m_pIndentAtMF->SetText(aEmptyStr);
    2897             :     }
    2898             : 
    2899           0 :     if ( bSetDistEmpty )
    2900           0 :         m_pDistBorderMF->SetText(aEmptyStr);
    2901             : 
    2902           0 :     bInInintControl = sal_False;
    2903             : }
    2904             : 
    2905           0 : void SvxNumPositionTabPage::ActivatePage(const SfxItemSet& rSet)
    2906             : {
    2907             :     const SfxPoolItem* pItem;
    2908           0 :     sal_uInt16 nTmpNumLvl = SAL_MAX_UINT16;
    2909           0 :     const SfxItemSet* pExampleSet = GetTabDialog()->GetExampleSet();
    2910           0 :     if(pExampleSet)
    2911             :     {
    2912           0 :         if(SFX_ITEM_SET == pExampleSet->GetItemState(SID_PARAM_NUM_PRESET, false, &pItem))
    2913           0 :             bPreset = ((const SfxBoolItem*)pItem)->GetValue();
    2914           0 :         if(SFX_ITEM_SET == pExampleSet->GetItemState(SID_PARAM_CUR_NUM_LEVEL, false, &pItem))
    2915           0 :             nTmpNumLvl = ((const SfxUInt16Item*)pItem)->GetValue();
    2916             :     }
    2917           0 :     if(SFX_ITEM_SET == rSet.GetItemState(nNumItemId, false, &pItem))
    2918             :     {
    2919           0 :         delete pSaveNum;
    2920           0 :         pSaveNum = new SvxNumRule(*((SvxNumBulletItem*)pItem)->GetNumRule());
    2921             :     }
    2922           0 :     bModified = (!pActNum->Get( 0 ) || bPreset);
    2923           0 :     if(*pSaveNum != *pActNum ||
    2924           0 :         nActNumLvl != nTmpNumLvl )
    2925             :     {
    2926           0 :         *pActNum = *pSaveNum;
    2927           0 :         nActNumLvl = nTmpNumLvl;
    2928           0 :         sal_uInt16 nMask = 1;
    2929           0 :         m_pLevelLB->SetUpdateMode(false);
    2930           0 :         m_pLevelLB->SetNoSelection();
    2931           0 :         m_pLevelLB->SelectEntryPos( pActNum->GetLevelCount(), nActNumLvl == SAL_MAX_UINT16);
    2932           0 :         if(nActNumLvl != SAL_MAX_UINT16)
    2933           0 :             for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
    2934             :             {
    2935           0 :                 if(nActNumLvl & nMask)
    2936           0 :                     m_pLevelLB->SelectEntryPos( i, true);
    2937           0 :                 nMask <<= 1 ;
    2938             :             }
    2939           0 :         m_pRelativeCB->Enable(nActNumLvl != 1);
    2940           0 :         m_pLevelLB->SetUpdateMode(true);
    2941             : 
    2942           0 :         InitPosAndSpaceMode();
    2943           0 :         ShowControlsDependingOnPosAndSpaceMode();
    2944             : 
    2945           0 :         InitControls();
    2946             :     }
    2947           0 :     m_pPreviewWIN->SetLevel(nActNumLvl);
    2948           0 :     m_pPreviewWIN->Invalidate();
    2949           0 : }
    2950             : 
    2951           0 : int  SvxNumPositionTabPage::DeactivatePage(SfxItemSet *_pSet)
    2952             : {
    2953           0 :     if(_pSet)
    2954             :     {
    2955           0 :         if(m_pDistBorderMF->IsEnabled())
    2956           0 :             DistanceHdl_Impl(m_pDistBorderMF);
    2957           0 :         DistanceHdl_Impl(m_pIndentMF);
    2958           0 :         FillItemSet(*_pSet);
    2959             :     }
    2960           0 :     return sal_True;
    2961             : }
    2962             : 
    2963           0 : bool SvxNumPositionTabPage::FillItemSet( SfxItemSet& rSet )
    2964             : {
    2965           0 :     rSet.Put(SfxUInt16Item(SID_PARAM_CUR_NUM_LEVEL, nActNumLvl));
    2966             : 
    2967           0 :     if(bModified && pActNum)
    2968             :     {
    2969           0 :         *pSaveNum = *pActNum;
    2970           0 :         rSet.Put(SvxNumBulletItem( *pSaveNum ), nNumItemId);
    2971           0 :         rSet.Put(SfxBoolItem(SID_PARAM_NUM_PRESET, false));
    2972             :     }
    2973           0 :     return bModified;
    2974             : }
    2975             : 
    2976           0 : void SvxNumPositionTabPage::Reset( const SfxItemSet& rSet )
    2977             : {
    2978             :     const SfxPoolItem* pItem;
    2979             :     // in Draw the item exists as WhichId, in Writer only as SlotId
    2980           0 :     SfxItemState eState = rSet.GetItemState(SID_ATTR_NUMBERING_RULE, false, &pItem);
    2981           0 :     if(eState != SFX_ITEM_SET)
    2982             :     {
    2983           0 :         nNumItemId = rSet.GetPool()->GetWhich(SID_ATTR_NUMBERING_RULE);
    2984           0 :         eState = rSet.GetItemState(nNumItemId, false, &pItem);
    2985             : 
    2986           0 :         if( eState != SFX_ITEM_SET )
    2987             :         {
    2988           0 :             pItem = &static_cast< const SvxNumBulletItem& >( rSet.Get( nNumItemId, true ) );
    2989           0 :             eState = SFX_ITEM_SET;
    2990             :         }
    2991             : 
    2992             :     }
    2993             :     DBG_ASSERT(eState == SFX_ITEM_SET, "no item found!");
    2994           0 :     delete pSaveNum;
    2995           0 :     pSaveNum = new SvxNumRule(*((SvxNumBulletItem*)pItem)->GetNumRule());
    2996             : 
    2997             :     // insert levels
    2998           0 :     if(!m_pLevelLB->GetEntryCount())
    2999             :     {
    3000           0 :         for(sal_uInt16 i = 1; i <= pSaveNum->GetLevelCount(); i++)
    3001           0 :             m_pLevelLB->InsertEntry( OUString::number(i) );
    3002           0 :         if(pSaveNum->GetLevelCount() > 1)
    3003             :         {
    3004           0 :             OUString sEntry( "1 - " );
    3005           0 :             sEntry += OUString::number( pSaveNum->GetLevelCount() );
    3006           0 :             m_pLevelLB->InsertEntry(sEntry);
    3007           0 :             m_pLevelLB->SelectEntry(sEntry);
    3008             :         }
    3009             :         else
    3010           0 :             m_pLevelLB->SelectEntryPos(0);
    3011             :     }
    3012             :     else
    3013           0 :         m_pLevelLB->SelectEntryPos(m_pLevelLB->GetEntryCount() - 1);
    3014           0 :     sal_uInt16 nMask = 1;
    3015           0 :     m_pLevelLB->SetUpdateMode(false);
    3016           0 :     m_pLevelLB->SetNoSelection();
    3017           0 :     if(nActNumLvl == SAL_MAX_UINT16)
    3018             :     {
    3019           0 :         m_pLevelLB->SelectEntryPos( pSaveNum->GetLevelCount(), true);
    3020             :     }
    3021             :     else
    3022             :     {
    3023           0 :         for(sal_uInt16 i = 0; i < pSaveNum->GetLevelCount(); i++)
    3024             :         {
    3025           0 :             if(nActNumLvl & nMask)
    3026           0 :                 m_pLevelLB->SelectEntryPos( i, true);
    3027           0 :             nMask <<= 1;
    3028             :         }
    3029             :     }
    3030           0 :     m_pLevelLB->SetUpdateMode(true);
    3031             : 
    3032           0 :     if(!pActNum)
    3033           0 :         pActNum = new  SvxNumRule(*pSaveNum);
    3034           0 :     else if(*pSaveNum != *pActNum)
    3035           0 :         *pActNum = *pSaveNum;
    3036           0 :     m_pPreviewWIN->SetNumRule(pActNum);
    3037             : 
    3038           0 :     InitPosAndSpaceMode();
    3039           0 :     ShowControlsDependingOnPosAndSpaceMode();
    3040             : 
    3041           0 :     InitControls();
    3042           0 :     bModified = sal_False;
    3043           0 : }
    3044             : 
    3045           0 : void SvxNumPositionTabPage::InitPosAndSpaceMode()
    3046             : {
    3047           0 :     if ( pActNum == 0 )
    3048             :     {
    3049             :         DBG_ASSERT( false,
    3050             :                 "<SvxNumPositionTabPage::InitPosAndSpaceMode()> - misusage of method -> <pAktNum> has to be already set!" );
    3051           0 :         return;
    3052             :     }
    3053             : 
    3054             :     SvxNumberFormat::SvxNumPositionAndSpaceMode ePosAndSpaceMode =
    3055           0 :                                             SvxNumberFormat::LABEL_ALIGNMENT;
    3056           0 :     sal_uInt16 nMask = 1;
    3057           0 :     for( sal_uInt16 i = 0; i < pActNum->GetLevelCount(); ++i )
    3058             :     {
    3059           0 :         if(nActNumLvl & nMask)
    3060             :         {
    3061           0 :             SvxNumberFormat aNumFmt( pActNum->GetLevel(i) );
    3062           0 :             ePosAndSpaceMode = aNumFmt.GetPositionAndSpaceMode();
    3063           0 :             if ( ePosAndSpaceMode == SvxNumberFormat::LABEL_ALIGNMENT )
    3064             :             {
    3065           0 :                 break;
    3066           0 :             }
    3067             :         }
    3068           0 :         nMask <<= 1;
    3069             :     }
    3070             : 
    3071             :     bLabelAlignmentPosAndSpaceModeActive =
    3072           0 :                     ePosAndSpaceMode == SvxNumberFormat::LABEL_ALIGNMENT;
    3073             : }
    3074             : 
    3075           0 : void SvxNumPositionTabPage::ShowControlsDependingOnPosAndSpaceMode()
    3076             : {
    3077           0 :     m_pDistBorderFT->Show( !bLabelAlignmentPosAndSpaceModeActive );
    3078           0 :     m_pDistBorderMF->Show( !bLabelAlignmentPosAndSpaceModeActive );
    3079           0 :     m_pRelativeCB->Show( !bLabelAlignmentPosAndSpaceModeActive );
    3080           0 :     m_pIndentFT->Show( !bLabelAlignmentPosAndSpaceModeActive );
    3081           0 :     m_pIndentMF->Show( !bLabelAlignmentPosAndSpaceModeActive );
    3082           0 :     m_pDistNumFT->Show( !bLabelAlignmentPosAndSpaceModeActive &&
    3083           0 :                      pActNum->IsFeatureSupported(NUM_CONTINUOUS) );
    3084           0 :     m_pDistNumMF->Show( !bLabelAlignmentPosAndSpaceModeActive &&
    3085           0 :                      pActNum->IsFeatureSupported(NUM_CONTINUOUS));
    3086           0 :     m_pAlignFT->Show( !bLabelAlignmentPosAndSpaceModeActive );
    3087           0 :     m_pAlignLB->Show( !bLabelAlignmentPosAndSpaceModeActive );
    3088             : 
    3089           0 :     m_pLabelFollowedByFT->Show( bLabelAlignmentPosAndSpaceModeActive );
    3090           0 :     m_pLabelFollowedByLB->Show( bLabelAlignmentPosAndSpaceModeActive );
    3091           0 :     m_pListtabFT->Show( bLabelAlignmentPosAndSpaceModeActive );
    3092           0 :     m_pListtabMF->Show( bLabelAlignmentPosAndSpaceModeActive );
    3093           0 :     m_pAlign2FT->Show( bLabelAlignmentPosAndSpaceModeActive );
    3094           0 :     m_pAlign2LB->Show( bLabelAlignmentPosAndSpaceModeActive );
    3095           0 :     m_pAlignedAtFT->Show( bLabelAlignmentPosAndSpaceModeActive );
    3096           0 :     m_pAlignedAtMF->Show( bLabelAlignmentPosAndSpaceModeActive );
    3097           0 :     m_pIndentAtFT->Show( bLabelAlignmentPosAndSpaceModeActive );
    3098           0 :     m_pIndentAtMF->Show( bLabelAlignmentPosAndSpaceModeActive );
    3099           0 : }
    3100             : 
    3101           0 : SfxTabPage* SvxNumPositionTabPage::Create( Window* pParent,
    3102             :                                 const SfxItemSet& rAttrSet)
    3103             : {
    3104           0 :     return new SvxNumPositionTabPage(pParent, rAttrSet);
    3105             : }
    3106             : 
    3107           0 : void    SvxNumPositionTabPage::SetMetric(FieldUnit eMetric)
    3108             : {
    3109           0 :     if(eMetric == FUNIT_MM)
    3110             :     {
    3111           0 :         m_pDistBorderMF->SetDecimalDigits(1);
    3112           0 :         m_pDistNumMF->SetDecimalDigits(1);
    3113           0 :         m_pIndentMF->SetDecimalDigits(1);
    3114           0 :         m_pListtabMF->SetDecimalDigits(1);
    3115           0 :         m_pAlignedAtMF->SetDecimalDigits(1);
    3116           0 :         m_pIndentAtMF->SetDecimalDigits(1);
    3117             :     }
    3118           0 :     m_pDistBorderMF->SetUnit( eMetric );
    3119           0 :     m_pDistNumMF->SetUnit( eMetric );
    3120           0 :     m_pIndentMF->SetUnit( eMetric );
    3121           0 :     m_pListtabMF->SetUnit( eMetric );
    3122           0 :     m_pAlignedAtMF->SetUnit( eMetric );
    3123           0 :     m_pIndentAtMF->SetUnit( eMetric );
    3124           0 : }
    3125             : 
    3126           0 : IMPL_LINK_NOARG(SvxNumPositionTabPage, EditModifyHdl_Impl)
    3127             : {
    3128           0 :     sal_uInt16 nMask = 1;
    3129           0 :     for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
    3130             :     {
    3131           0 :         if(nActNumLvl & nMask)
    3132             :         {
    3133           0 :             SvxNumberFormat aNumFmt(pActNum->GetLevel(i));
    3134             : 
    3135           0 :             const sal_Int32 nPos = m_pAlignLB->IsVisible()
    3136           0 :                                 ? m_pAlignLB->GetSelectEntryPos()
    3137           0 :                                 : m_pAlign2LB->GetSelectEntryPos();
    3138           0 :             SvxAdjust eAdjust = SVX_ADJUST_CENTER;
    3139           0 :             if(nPos == 0)
    3140           0 :                 eAdjust = SVX_ADJUST_LEFT;
    3141           0 :             else if(nPos == 2)
    3142           0 :                 eAdjust = SVX_ADJUST_RIGHT;
    3143           0 :             aNumFmt.SetNumAdjust( eAdjust );
    3144           0 :             pActNum->SetLevel(i, aNumFmt);
    3145             :         }
    3146           0 :         nMask <<= 1;
    3147             :     }
    3148           0 :     SetModified();
    3149           0 :     return 0;
    3150             : }
    3151             : 
    3152           0 : IMPL_LINK( SvxNumPositionTabPage, LevelHdl_Impl, ListBox *, pBox )
    3153             : {
    3154           0 :     sal_uInt16 nSaveNumLvl = nActNumLvl;
    3155           0 :     nActNumLvl = 0;
    3156           0 :     if(pBox->IsEntryPosSelected( pActNum->GetLevelCount() ) &&
    3157           0 :             (pBox->GetSelectEntryCount() == 1 || nSaveNumLvl != 0xffff))
    3158             :     {
    3159           0 :         nActNumLvl = 0xFFFF;
    3160           0 :         pBox->SetUpdateMode(false);
    3161           0 :         for( sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++ )
    3162           0 :             pBox->SelectEntryPos( i, false );
    3163           0 :         pBox->SetUpdateMode(true);
    3164             :     }
    3165           0 :     else if(pBox->GetSelectEntryCount())
    3166             :     {
    3167           0 :         sal_uInt16 nMask = 1;
    3168           0 :         for( sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++ )
    3169             :         {
    3170           0 :             if(pBox->IsEntryPosSelected( i ))
    3171           0 :                 nActNumLvl |= nMask;
    3172           0 :             nMask <<= 1;
    3173             :         }
    3174           0 :         pBox->SelectEntryPos( pActNum->GetLevelCount(), false );
    3175             :     }
    3176             :     else
    3177             :     {
    3178           0 :         nActNumLvl = nSaveNumLvl;
    3179           0 :         sal_uInt16 nMask = 1;
    3180           0 :         for( sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++ )
    3181             :         {
    3182           0 :             if(nActNumLvl & nMask)
    3183             :             {
    3184           0 :                 pBox->SelectEntryPos(i);
    3185           0 :                 break;
    3186             :             }
    3187           0 :             nMask <<=1;
    3188             :         }
    3189             :     }
    3190           0 :     m_pRelativeCB->Enable(nActNumLvl != 1);
    3191           0 :     SetModified();
    3192           0 :     InitPosAndSpaceMode();
    3193           0 :     ShowControlsDependingOnPosAndSpaceMode();
    3194           0 :     InitControls();
    3195           0 :     return 0;
    3196             : }
    3197             : 
    3198           0 : IMPL_LINK( SvxNumPositionTabPage, DistanceHdl_Impl, MetricField *, pFld )
    3199             : {
    3200           0 :     if(bInInintControl)
    3201           0 :         return 0;
    3202           0 :     long nValue = GetCoreValue(*pFld, eCoreUnit);
    3203           0 :     sal_uInt16 nMask = 1;
    3204           0 :     for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
    3205             :     {
    3206           0 :         if(nActNumLvl & nMask)
    3207             :         {
    3208           0 :             SvxNumberFormat aNumFmt( pActNum->GetLevel( i ) );
    3209           0 :             if (pFld == m_pDistBorderMF)
    3210             :             {
    3211             : 
    3212           0 :                 if(m_pRelativeCB->IsChecked())
    3213             :                 {
    3214           0 :                     if(0 == i)
    3215             :                     {
    3216           0 :                         long nTmp = aNumFmt.GetFirstLineOffset();
    3217           0 :                         aNumFmt.SetAbsLSpace( sal_uInt16(nValue - nTmp));
    3218             :                     }
    3219             :                     else
    3220             :                     {
    3221           0 :                         long nTmp = pActNum->GetLevel( i - 1 ).GetAbsLSpace() +
    3222           0 :                                     pActNum->GetLevel( i - 1 ).GetFirstLineOffset() -
    3223           0 :                                     pActNum->GetLevel( i ).GetFirstLineOffset();
    3224             : 
    3225           0 :                         aNumFmt.SetAbsLSpace( sal_uInt16(nValue + nTmp));
    3226             :                     }
    3227             :                 }
    3228             :                 else
    3229             :                 {
    3230           0 :                     aNumFmt.SetAbsLSpace( (short)nValue - aNumFmt.GetFirstLineOffset());
    3231             :                 }
    3232             :             }
    3233           0 :             else if (pFld == m_pDistNumMF)
    3234             :             {
    3235           0 :                 aNumFmt.SetCharTextDistance( (short)nValue );
    3236             :             }
    3237           0 :             else if (pFld == m_pIndentMF)
    3238             :             {
    3239             :                 // together with the FirstLineOffset the AbsLSpace must be changed, too
    3240           0 :                 long nDiff = nValue + aNumFmt.GetFirstLineOffset();
    3241           0 :                 long nAbsLSpace = aNumFmt.GetAbsLSpace();
    3242           0 :                 aNumFmt.SetAbsLSpace(sal_uInt16(nAbsLSpace + nDiff));
    3243           0 :                 aNumFmt.SetFirstLineOffset( -(short)nValue );
    3244             :             }
    3245             : 
    3246           0 :             pActNum->SetLevel( i, aNumFmt );
    3247             :         }
    3248           0 :         nMask <<= 1;
    3249             :     }
    3250             : 
    3251           0 :     SetModified();
    3252           0 :     if(!m_pDistBorderMF->IsEnabled())
    3253             :     {
    3254           0 :         OUString aEmptyStr;
    3255           0 :         m_pDistBorderMF->SetText(aEmptyStr);
    3256             :     }
    3257             : 
    3258           0 :     return 0;
    3259             : }
    3260             : 
    3261           0 : IMPL_LINK( SvxNumPositionTabPage, RelativeHdl_Impl, CheckBox *, pBox )
    3262             : {
    3263           0 :     sal_Bool bOn = pBox->IsChecked();
    3264           0 :     sal_Bool bSingleSelection = m_pLevelLB->GetSelectEntryCount() == 1 && SAL_MAX_UINT16 != nActNumLvl;
    3265           0 :     sal_Bool bSetValue = sal_False;
    3266           0 :     long nValue = 0;
    3267           0 :     if(bOn || bSingleSelection)
    3268             :     {
    3269           0 :         sal_uInt16 nMask = 1;
    3270           0 :         sal_Bool bFirst = sal_True;
    3271           0 :         bSetValue = sal_True;
    3272           0 :         for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
    3273             :         {
    3274           0 :             if(nActNumLvl & nMask)
    3275             :             {
    3276           0 :                 const SvxNumberFormat &rNumFmt = pActNum->GetLevel(i);
    3277           0 :                 if(bFirst)
    3278             :                 {
    3279           0 :                     nValue = rNumFmt.GetAbsLSpace() + rNumFmt.GetFirstLineOffset();
    3280           0 :                     if(bOn && i)
    3281           0 :                         nValue -= (pActNum->GetLevel(i - 1).GetAbsLSpace() + pActNum->GetLevel(i - 1).GetFirstLineOffset());
    3282             :                 }
    3283             :                 else
    3284           0 :                     bSetValue = nValue ==
    3285           0 :                         (rNumFmt.GetAbsLSpace() + rNumFmt.GetFirstLineOffset()) -
    3286           0 :                             (pActNum->GetLevel(i - 1).GetAbsLSpace() + pActNum->GetLevel(i - 1).GetFirstLineOffset());
    3287           0 :                 bFirst = sal_False;
    3288             :             }
    3289           0 :             nMask <<= 1;
    3290             :         }
    3291             : 
    3292             :     }
    3293           0 :     OUString aEmptyStr;
    3294           0 :     if(bSetValue)
    3295           0 :         SetMetricValue(*m_pDistBorderMF, nValue,   eCoreUnit);
    3296             :     else
    3297           0 :         m_pDistBorderMF->SetText(aEmptyStr);
    3298           0 :     m_pDistBorderMF->Enable(bOn || bSingleSelection);
    3299           0 :     m_pDistBorderFT->Enable(bOn || bSingleSelection);
    3300           0 :     bLastRelative = bOn;
    3301           0 :     return 0;
    3302             : }
    3303             : 
    3304           0 : IMPL_LINK_NOARG(SvxNumPositionTabPage, LabelFollowedByHdl_Impl)
    3305             : {
    3306             :     // determine value to be set at the chosen list levels
    3307           0 :     SvxNumberFormat::LabelFollowedBy eLabelFollowedBy = SvxNumberFormat::LISTTAB;
    3308             :     {
    3309           0 :         const sal_Int32 nPos = m_pLabelFollowedByLB->GetSelectEntryPos();
    3310           0 :         if ( nPos == 1 )
    3311             :         {
    3312           0 :             eLabelFollowedBy = SvxNumberFormat::SPACE;
    3313             :         }
    3314           0 :         else if ( nPos == 2 )
    3315             :         {
    3316           0 :             eLabelFollowedBy = SvxNumberFormat::NOTHING;
    3317             :         }
    3318             :     }
    3319             : 
    3320             :     // set value at the chosen list levels
    3321           0 :     bool bSameListtabPos = true;
    3322           0 :     sal_uInt16 nFirstLvl = SAL_MAX_UINT16;
    3323           0 :     sal_uInt16 nMask = 1;
    3324           0 :     for( sal_uInt16 i = 0; i < pActNum->GetLevelCount(); ++i )
    3325             :     {
    3326           0 :         if ( nActNumLvl & nMask )
    3327             :         {
    3328           0 :             SvxNumberFormat aNumFmt( pActNum->GetLevel(i) );
    3329           0 :             aNumFmt.SetLabelFollowedBy( eLabelFollowedBy );
    3330           0 :             pActNum->SetLevel( i, aNumFmt );
    3331             : 
    3332           0 :             if ( nFirstLvl == SAL_MAX_UINT16 )
    3333             :             {
    3334           0 :                 nFirstLvl = i;
    3335             :             }
    3336             :             else
    3337             :             {
    3338           0 :                 bSameListtabPos &= aNumFmt.GetListtabPos() ==
    3339           0 :                         pActNum->GetLevel( nFirstLvl ).GetListtabPos();
    3340           0 :             }
    3341             :         }
    3342           0 :         nMask <<= 1;
    3343             :     }
    3344             : 
    3345             :     // enable/disable metric field for list tab stop position depending on
    3346             :     // selected item following the list label.
    3347           0 :     m_pListtabFT->Enable( eLabelFollowedBy == SvxNumberFormat::LISTTAB );
    3348           0 :     m_pListtabMF->Enable( eLabelFollowedBy == SvxNumberFormat::LISTTAB );
    3349           0 :     if ( bSameListtabPos && eLabelFollowedBy == SvxNumberFormat::LISTTAB )
    3350             :     {
    3351           0 :         SetMetricValue(*m_pListtabMF, pActNum->GetLevel( nFirstLvl ).GetListtabPos(), eCoreUnit);
    3352             :     }
    3353             :     else
    3354             :     {
    3355           0 :         m_pListtabMF->SetText( OUString() );
    3356             :     }
    3357             : 
    3358           0 :     SetModified();
    3359             : 
    3360           0 :     return 0;
    3361             : }
    3362             : 
    3363           0 : IMPL_LINK( SvxNumPositionTabPage, ListtabPosHdl_Impl, MetricField*, pFld )
    3364             : {
    3365             :     // determine value to be set at the chosen list levels
    3366           0 :     const long nValue = GetCoreValue( *pFld, eCoreUnit );
    3367             : 
    3368             :     // set value at the chosen list levels
    3369           0 :     sal_uInt16 nMask = 1;
    3370           0 :     for( sal_uInt16 i = 0; i < pActNum->GetLevelCount(); ++i )
    3371             :     {
    3372           0 :         if ( nActNumLvl & nMask )
    3373             :         {
    3374           0 :             SvxNumberFormat aNumFmt( pActNum->GetLevel(i) );
    3375           0 :             aNumFmt.SetListtabPos( nValue );
    3376           0 :             pActNum->SetLevel( i, aNumFmt );
    3377             :         }
    3378           0 :         nMask <<= 1;
    3379             :     }
    3380             : 
    3381           0 :     SetModified();
    3382             : 
    3383           0 :     return 0;
    3384             : }
    3385             : 
    3386           0 : IMPL_LINK( SvxNumPositionTabPage, AlignAtHdl_Impl, MetricField*, pFld )
    3387             : {
    3388             :     // determine value to be set at the chosen list levels
    3389           0 :     const long nValue = GetCoreValue( *pFld, eCoreUnit );
    3390             : 
    3391             :     // set value at the chosen list levels
    3392           0 :     sal_uInt16 nMask = 1;
    3393           0 :     for( sal_uInt16 i = 0; i < pActNum->GetLevelCount(); ++i )
    3394             :     {
    3395           0 :         if ( nActNumLvl & nMask )
    3396             :         {
    3397           0 :             SvxNumberFormat aNumFmt( pActNum->GetLevel(i) );
    3398           0 :             const long nFirstLineIndent = nValue - aNumFmt.GetIndentAt();
    3399           0 :             aNumFmt.SetFirstLineIndent( nFirstLineIndent );
    3400           0 :             pActNum->SetLevel( i, aNumFmt );
    3401             :         }
    3402           0 :         nMask <<= 1;
    3403             :     }
    3404             : 
    3405           0 :     SetModified();
    3406             : 
    3407           0 :     return 0;
    3408             : }
    3409             : 
    3410           0 : IMPL_LINK( SvxNumPositionTabPage, IndentAtHdl_Impl, MetricField*, pFld )
    3411             : {
    3412             :     // determine value to be set at the chosen list levels
    3413           0 :     const long nValue = GetCoreValue( *pFld, eCoreUnit );
    3414             : 
    3415             :     // set value at the chosen list levels
    3416           0 :     sal_uInt16 nMask = 1;
    3417           0 :     for( sal_uInt16 i = 0; i < pActNum->GetLevelCount(); ++i )
    3418             :     {
    3419           0 :         if ( nActNumLvl & nMask )
    3420             :         {
    3421           0 :             SvxNumberFormat aNumFmt( pActNum->GetLevel(i) );
    3422           0 :             const long nAlignedAt = aNumFmt.GetIndentAt() +
    3423           0 :                                     aNumFmt.GetFirstLineIndent();
    3424           0 :             aNumFmt.SetIndentAt( nValue );
    3425           0 :             const long nNewFirstLineIndent = nAlignedAt - nValue;
    3426           0 :             aNumFmt.SetFirstLineIndent( nNewFirstLineIndent );
    3427           0 :             pActNum->SetLevel( i, aNumFmt );
    3428             :         }
    3429           0 :         nMask <<= 1;
    3430             :     }
    3431             : 
    3432           0 :     SetModified();
    3433             : 
    3434           0 :     return 0;
    3435             : }
    3436             : 
    3437           0 : IMPL_LINK_NOARG(SvxNumPositionTabPage, StandardHdl_Impl)
    3438             : {
    3439           0 :     sal_uInt16 nMask = 1;
    3440             :     SvxNumRule aTmpNumRule( pActNum->GetFeatureFlags(),
    3441           0 :                             pActNum->GetLevelCount(),
    3442           0 :                             pActNum->IsContinuousNumbering(),
    3443             :                             SVX_RULETYPE_NUMBERING,
    3444           0 :                             pActNum->GetLevel( 0 ).GetPositionAndSpaceMode() );
    3445           0 :     for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
    3446             :     {
    3447           0 :         if(nActNumLvl & nMask)
    3448             :         {
    3449           0 :             SvxNumberFormat aNumFmt( pActNum->GetLevel( i ) );
    3450           0 :             SvxNumberFormat aTempFmt(aTmpNumRule.GetLevel( i ));
    3451           0 :             aNumFmt.SetPositionAndSpaceMode( aTempFmt.GetPositionAndSpaceMode() );
    3452           0 :             if ( aTempFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_WIDTH_AND_POSITION )
    3453             :             {
    3454           0 :                 aNumFmt.SetAbsLSpace( aTempFmt.GetAbsLSpace() );
    3455           0 :                 aNumFmt.SetCharTextDistance( aTempFmt.GetCharTextDistance() );
    3456           0 :                 aNumFmt.SetFirstLineOffset( aTempFmt.GetFirstLineOffset() );
    3457             :             }
    3458           0 :             else if ( aTempFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_ALIGNMENT )
    3459             :             {
    3460           0 :                 aNumFmt.SetNumAdjust( aTempFmt.GetNumAdjust() );
    3461           0 :                 aNumFmt.SetLabelFollowedBy( aTempFmt.GetLabelFollowedBy() );
    3462           0 :                 aNumFmt.SetListtabPos( aTempFmt.GetListtabPos() );
    3463           0 :                 aNumFmt.SetFirstLineIndent( aTempFmt.GetFirstLineIndent() );
    3464           0 :                 aNumFmt.SetIndentAt( aTempFmt.GetIndentAt() );
    3465             :             }
    3466             : 
    3467           0 :             pActNum->SetLevel( i, aNumFmt );
    3468             :         }
    3469           0 :         nMask <<= 1;
    3470             :     }
    3471             : 
    3472           0 :     InitControls();
    3473           0 :     SetModified();
    3474           0 :     return 0;
    3475             : }
    3476             : 
    3477           0 : void SvxNumPositionTabPage::SetModified(sal_Bool bRepaint)
    3478             : {
    3479           0 :     bModified = sal_True;
    3480           0 :     if(bRepaint)
    3481             :     {
    3482           0 :         m_pPreviewWIN->SetLevel(nActNumLvl);
    3483           0 :         m_pPreviewWIN->Invalidate();
    3484             :     }
    3485           0 : }
    3486             : 
    3487           0 : void SvxNumOptionsTabPage::SetModified(sal_Bool bRepaint)
    3488             : {
    3489           0 :     bModified = sal_True;
    3490           0 :     if(bRepaint)
    3491             :     {
    3492           0 :         m_pPreviewWIN->SetLevel(nActNumLvl);
    3493           0 :         m_pPreviewWIN->Invalidate();
    3494             :     }
    3495           0 : }
    3496             : 
    3497           0 : void SvxNumOptionsTabPage::PageCreated(SfxAllItemSet aSet)
    3498             : {
    3499           0 :     SFX_ITEMSET_ARG (&aSet,pListItem,SfxStringListItem,SID_CHAR_FMT_LIST_BOX,false);
    3500           0 :     SFX_ITEMSET_ARG (&aSet,pNumCharFmt,SfxStringItem,SID_NUM_CHAR_FMT,false);
    3501           0 :     SFX_ITEMSET_ARG (&aSet,pBulletCharFmt,SfxStringItem,SID_BULLET_CHAR_FMT,false);
    3502           0 :     SFX_ITEMSET_ARG (&aSet,pMetricItem,SfxAllEnumItem,SID_METRIC_ITEM,false);
    3503             : 
    3504           0 :     if (pNumCharFmt &&pBulletCharFmt)
    3505           0 :         SetCharFmts( pNumCharFmt->GetValue(),pBulletCharFmt->GetValue());
    3506             : 
    3507           0 :     if (pListItem)
    3508             :     {
    3509           0 :         ListBox& myCharFmtLB = GetCharFmtListBox();
    3510           0 :         const std::vector<OUString> &aList = pListItem->GetList();
    3511           0 :         sal_uInt32 nCount = aList.size();;
    3512           0 :         for(sal_uInt32 i = 0; i < nCount; i++)
    3513           0 :             myCharFmtLB.InsertEntry(aList[i]);
    3514             :     }
    3515           0 :     if (pMetricItem)
    3516           0 :         SetMetric(static_cast<FieldUnit>(pMetricItem->GetValue()));
    3517           0 : }
    3518             : 
    3519           0 : void SvxNumPositionTabPage::PageCreated(SfxAllItemSet aSet)
    3520             : {
    3521           0 :     SFX_ITEMSET_ARG (&aSet,pMetricItem,SfxAllEnumItem,SID_METRIC_ITEM,false);
    3522             : 
    3523           0 :     if (pMetricItem)
    3524           0 :         SetMetric(static_cast<FieldUnit>(pMetricItem->GetValue()));
    3525           0 : }
    3526             : 
    3527             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10