LCOV - code coverage report
Current view: top level - cui/source/tabpages - numpages.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 0 2046 0.0 %
Date: 2014-11-03 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/mapunit.hxx>
      28             : #include <i18nlangtag/mslangid.hxx>
      29             : #include <helpid.hrc>
      30             : #include <editeng/numitem.hxx>
      31             : #include <svl/eitem.hxx>
      32             : #include <vcl/layout.hxx>
      33             : #include <vcl/svapp.hxx>
      34             : #include <svx/gallery.hxx>
      35             : #include <svl/urihelper.hxx>
      36             : #include <editeng/brushitem.hxx>
      37             : #include <svl/intitem.hxx>
      38             : #include <sfx2/objsh.hxx>
      39             : #include <vcl/graph.hxx>
      40             : #include <vcl/msgbox.hxx>
      41             : #include <vcl/settings.hxx>
      42             : #include "cuicharmap.hxx"
      43             : #include <editeng/flstitem.hxx>
      44             : #include <svx/dlgutil.hxx>
      45             : #include <svx/xtable.hxx>
      46             : #include <svx/drawitem.hxx>
      47             : #include <svx/numvset.hxx>
      48             : #include <sfx2/htmlmode.hxx>
      49             : #include <unotools/pathoptions.hxx>
      50             : #include <svtools/ctrltool.hxx>
      51             : #include <editeng/unolingu.hxx>
      52             : #include <com/sun/star/style/NumberingType.hpp>
      53             : #include <com/sun/star/lang/XMultiServiceFactory.hpp>
      54             : #include <com/sun/star/container/XIndexAccess.hpp>
      55             : #include <com/sun/star/text/DefaultNumberingProvider.hpp>
      56             : #include <com/sun/star/text/XDefaultNumberingProvider.hpp>
      57             : #include <com/sun/star/text/XNumberingFormatter.hpp>
      58             : #include <com/sun/star/beans/PropertyValue.hpp>
      59             : #include <comphelper/processfactory.hxx>
      60             : #include <com/sun/star/text/XNumberingTypeInfo.hpp>
      61             : #include <svx/dialmgr.hxx>
      62             : #include <svx/dialogs.hrc>
      63             : 
      64             : #include <algorithm>
      65             : #include <vector>
      66             : #include "sfx2/opengrf.hxx"
      67             : 
      68             : #include <cuires.hrc>
      69             : #include <sfx2/request.hxx>
      70             : #include <svl/aeitem.hxx>
      71             : #include <svl/stritem.hxx>
      72             : #include <svl/slstitm.hxx>
      73             : #include <boost/scoped_ptr.hpp>
      74             : 
      75             : using namespace css;
      76             : using namespace css::uno;
      77             : using namespace css::beans;
      78             : using namespace css::lang;
      79             : using namespace css::i18n;
      80             : using namespace css::text;
      81             : using namespace css::container;
      82             : using namespace css::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 bool bLastRelative =         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 vcl::Font& lcl_GetDefaultBulletFont()
     160             : {
     161             :     static bool bInit = false;
     162             :     static vcl::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 = true;
     172             :     }
     173           0 :     return aDefBulletFont;
     174             : }
     175             : 
     176           0 : SvxSingleNumPickTabPage::SvxSingleNumPickTabPage(vcl::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( vcl::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 = false;
     248           0 :     bool bIsPreset = false;
     249           0 :     const SfxItemSet* pExampleSet = GetTabDialog()->GetExampleSet();
     250           0 :     if(pExampleSet)
     251             :     {
     252           0 :         if(SfxItemState::SET == pExampleSet->GetItemState(SID_PARAM_NUM_PRESET, false, &pItem))
     253           0 :             bIsPreset = static_cast<const SfxBoolItem*>(pItem)->GetValue();
     254           0 :         if(SfxItemState::SET == pExampleSet->GetItemState(SID_PARAM_CUR_NUM_LEVEL, false, &pItem))
     255           0 :             nActNumLvl = static_cast<const SfxUInt16Item*>(pItem)->GetValue();
     256             :     }
     257           0 :     if(SfxItemState::SET == rSet.GetItemState(nNumItemId, false, &pItem))
     258             :     {
     259           0 :         delete pSaveNum;
     260           0 :         pSaveNum = new SvxNumRule(*static_cast<const 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 = true;
     273             :     }
     274           0 :     bPreset |= bIsPreset;
     275             : 
     276           0 :     bModified = 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 != SfxItemState::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 != SfxItemState::SET )
     298             :         {
     299           0 :             pItem = &static_cast< const SvxNumBulletItem& >( rSet->Get( nNumItemId, true ) );
     300           0 :             eState = SfxItemState::SET;
     301             :         }
     302             :     }
     303             :     DBG_ASSERT(eState == SfxItemState::SET, "no item found!");
     304           0 :     delete pSaveNum;
     305           0 :     pSaveNum = new SvxNumRule(*static_cast<const 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 = false;
     318           0 :         bModified = 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(vcl::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( vcl::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 = false;
     408           0 :     bool bIsPreset = false;
     409           0 :     const SfxItemSet* pExampleSet = GetTabDialog()->GetExampleSet();
     410           0 :     if(pExampleSet)
     411             :     {
     412           0 :         if(SfxItemState::SET == pExampleSet->GetItemState(SID_PARAM_NUM_PRESET, false, &pItem))
     413           0 :             bIsPreset = static_cast<const SfxBoolItem*>(pItem)->GetValue();
     414           0 :         if(SfxItemState::SET == pExampleSet->GetItemState(SID_PARAM_CUR_NUM_LEVEL, false, &pItem))
     415           0 :             nActNumLvl = static_cast<const SfxUInt16Item*>(pItem)->GetValue();
     416             :     }
     417           0 :     if(SfxItemState::SET == rSet.GetItemState(nNumItemId, false, &pItem))
     418             :     {
     419           0 :         delete pSaveNum;
     420           0 :         pSaveNum = new SvxNumRule(*static_cast<const 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 = true;
     433             :     }
     434           0 :     bPreset |= bIsPreset;
     435           0 :     bModified = 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 != SfxItemState::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 != SfxItemState::SET )
     456             :         {
     457           0 :             pItem = &static_cast< const SvxNumBulletItem& >( rSet->Get( nNumItemId, true ) );
     458           0 :             eState = SfxItemState::SET;
     459             :         }
     460             : 
     461             :     }
     462             :     DBG_ASSERT(eState == SfxItemState::SET, "no item found!");
     463           0 :     delete pSaveNum;
     464           0 :     pSaveNum = new SvxNumRule(*static_cast<const 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 = false;
     477           0 :         bModified = true;
     478           0 :         sal_Unicode cChar = aBulletTypes[m_pExamplesVS->GetSelectItemId() - 1];
     479           0 :         vcl::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(const 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(vcl::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( vcl::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 = false;
     605           0 :     bool bIsPreset = false;
     606           0 :     const SfxItemSet* pExampleSet = GetTabDialog()->GetExampleSet();
     607           0 :     if(pExampleSet)
     608             :     {
     609           0 :         if(SfxItemState::SET == pExampleSet->GetItemState(SID_PARAM_NUM_PRESET, false, &pItem))
     610           0 :             bIsPreset = static_cast<const SfxBoolItem*>(pItem)->GetValue();
     611           0 :         if(SfxItemState::SET == pExampleSet->GetItemState(SID_PARAM_CUR_NUM_LEVEL, false, &pItem))
     612           0 :             nActNumLvl = static_cast<const SfxUInt16Item*>(pItem)->GetValue();
     613             :     }
     614           0 :     if(SfxItemState::SET == rSet.GetItemState(nNumItemId, false, &pItem))
     615             :     {
     616           0 :         delete pSaveNum;
     617           0 :         pSaveNum = new SvxNumRule(*static_cast<const 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 = true;
     630             :     }
     631           0 :     bPreset |= bIsPreset;
     632           0 :     bModified = 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 != SfxItemState::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 != SfxItemState::SET )
     653             :         {
     654           0 :             pItem = &static_cast< const SvxNumBulletItem& >( rSet->Get( nNumItemId, true ) );
     655           0 :             eState = SfxItemState::SET;
     656             :         }
     657             : 
     658             :     }
     659             :     DBG_ASSERT(eState == SfxItemState::SET, "no item found!");
     660           0 :     delete pSaveNum;
     661           0 :     pSaveNum = new SvxNumRule(*static_cast<const 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 = false;
     676           0 :         bModified = true;
     677             : 
     678           0 :         const FontList*  pList = 0;
     679             : 
     680           0 :         SvxNumSettingsArr_Impl& rItemArr = aNumSettingsArrays[m_pExamplesVS->GetSelectItemId() - 1];
     681             : 
     682           0 :         vcl::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             :                                 static_cast<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             :                         vcl::FontInfo aInfo = pList->Get(
     714           0 :                             pLevelSettings->sBulletFont,WEIGHT_NORMAL, ITALIC_NONE);
     715           0 :                         vcl::Font aFont(aInfo);
     716           0 :                         aFmt.SetBulletFont(&aFont);
     717             :                     }
     718             :                     else
     719             :                     {
     720             :                         //if it cannot be found then create a new one
     721             :                         vcl::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(const 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(vcl::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( vcl::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 = false;
     835           0 :     bool bIsPreset = false;
     836           0 :     const SfxItemSet* pExampleSet = GetTabDialog()->GetExampleSet();
     837           0 :     if(pExampleSet)
     838             :     {
     839           0 :         if(SfxItemState::SET == pExampleSet->GetItemState(SID_PARAM_NUM_PRESET, false, &pItem))
     840           0 :             bIsPreset = static_cast<const SfxBoolItem*>(pItem)->GetValue();
     841           0 :         if(SfxItemState::SET == pExampleSet->GetItemState(SID_PARAM_CUR_NUM_LEVEL, false, &pItem))
     842           0 :             nActNumLvl = static_cast<const SfxUInt16Item*>(pItem)->GetValue();
     843             :     }
     844           0 :     if(SfxItemState::SET == rSet.GetItemState(nNumItemId, false, &pItem))
     845             :     {
     846           0 :         delete pSaveNum;
     847           0 :         pSaveNum = new SvxNumRule(*static_cast<const 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 = true;
     861             :     }
     862           0 :     bPreset |= bIsPreset;
     863           0 :     bModified = 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 != SfxItemState::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 != SfxItemState::SET )
     900             :         {
     901           0 :             pItem = &static_cast< const SvxNumBulletItem& >( rSet->Get( nNumItemId, true ) );
     902           0 :             eState = SfxItemState::SET;
     903             :         }
     904             : 
     905             :     }
     906             :     DBG_ASSERT(eState == SfxItemState::SET, "no item found!");
     907           0 :     delete pSaveNum;
     908           0 :     pSaveNum = new SvxNumRule(*static_cast<const 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 = false;
     921           0 :         bModified = 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)reinterpret_cast<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 :                 bool bInsert = true;
     994           0 :                 for(sal_Int32 nEntry = 0; nEntry < rFmtLB.GetEntryCount(); nEntry++)
     995             :                 {
     996           0 :                     sal_uInt16 nEntryData = (sal_uInt16)reinterpret_cast<sal_uLong>(rFmtLB.GetEntryData(nEntry));
     997           0 :                     if(nEntryData == (sal_uInt16) nCurrent)
     998             :                     {
     999           0 :                         bInsert = 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, reinterpret_cast<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( reinterpret_cast<void*>((sal_uLong)aRemove[i]));
    1018           0 :             rFmtLB.RemoveEntry( nPos);
    1019             :         }
    1020           0 :     }
    1021           0 : }
    1022             : 
    1023             : // tabpage numbering options
    1024           0 : SvxNumOptionsTabPage::SvxNumOptionsTabPage(vcl::Window* pParent,
    1025             :                                const SfxItemSet& rSet)
    1026             :     : SfxTabPage(pParent, "NumberingOptionsPage", "cui/ui/numberingoptionspage.ui", &rSet)
    1027             :     , pActNum(0)
    1028             :     , pSaveNum(0)
    1029             :     , bLastWidthModified(false)
    1030             :     , bModified(false)
    1031             :     , bPreset(false)
    1032             :     , bAutomaticCharStyles(true)
    1033             :     , bHTMLMode(false)
    1034             :     , bMenuButtonInitialized(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( vcl::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(SfxItemState::SET == pExampleSet->GetItemState(SID_PARAM_NUM_PRESET, false, &pItem))
    1158           0 :             bPreset = static_cast<const SfxBoolItem*>(pItem)->GetValue();
    1159           0 :         if(SfxItemState::SET == pExampleSet->GetItemState(SID_PARAM_CUR_NUM_LEVEL, false, &pItem))
    1160           0 :             nTmpNumLvl = static_cast<const SfxUInt16Item*>(pItem)->GetValue();
    1161             :     }
    1162           0 :     if(SfxItemState::SET == rSet.GetItemState(nNumItemId, false, &pItem))
    1163             :     {
    1164           0 :         delete pSaveNum;
    1165           0 :         pSaveNum = new SvxNumRule(*static_cast<const SvxNumBulletItem*>(pItem)->GetNumRule());
    1166             :     }
    1167             : 
    1168           0 :     bModified = (!pActNum->Get( 0 ) || bPreset);
    1169           0 :     if(*pActNum != *pSaveNum ||
    1170           0 :         nActNumLvl != nTmpNumLvl)
    1171             :     {
    1172           0 :         *pActNum = *pSaveNum;
    1173           0 :         nActNumLvl = nTmpNumLvl;
    1174           0 :         sal_uInt16 nMask = 1;
    1175           0 :         m_pLevelLB->SetUpdateMode(false);
    1176           0 :         m_pLevelLB->SetNoSelection();
    1177           0 :         if(bModified)
    1178           0 :             m_pLevelLB->SelectEntryPos( 0, true);
    1179             :         else
    1180           0 :             m_pLevelLB->SelectEntryPos( pActNum->GetLevelCount(), nActNumLvl == SAL_MAX_UINT16);
    1181           0 :         if(nActNumLvl != SAL_MAX_UINT16)
    1182           0 :             for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
    1183             :             {
    1184           0 :                 if(nActNumLvl & nMask)
    1185           0 :                     m_pLevelLB->SelectEntryPos( i, true);
    1186           0 :                 nMask <<= 1 ;
    1187             :             }
    1188           0 :         m_pLevelLB->SetUpdateMode(true);
    1189             : 
    1190           0 :         InitControls();
    1191             :     }
    1192             : 
    1193           0 : }
    1194             : 
    1195           0 : int     SvxNumOptionsTabPage::DeactivatePage(SfxItemSet * _pSet)
    1196             : {
    1197           0 :     if(_pSet)
    1198           0 :         FillItemSet(_pSet);
    1199           0 :     return sal_True;
    1200             : }
    1201             : 
    1202           0 : bool    SvxNumOptionsTabPage::FillItemSet( SfxItemSet* rSet )
    1203             : {
    1204           0 :     rSet->Put(SfxUInt16Item(SID_PARAM_CUR_NUM_LEVEL, nActNumLvl));
    1205           0 :     if(bModified && pActNum)
    1206             :     {
    1207           0 :         *pSaveNum = *pActNum;
    1208           0 :         rSet->Put(SvxNumBulletItem( *pSaveNum ), nNumItemId);
    1209           0 :         rSet->Put(SfxBoolItem(SID_PARAM_NUM_PRESET, false));
    1210             :     }
    1211           0 :     return bModified;
    1212             : };
    1213             : 
    1214           0 : void    SvxNumOptionsTabPage::Reset( const SfxItemSet* rSet )
    1215             : {
    1216             :     const SfxPoolItem* pItem;
    1217             :     // in Draw the item exists as WhichId, in Writer only as SlotId
    1218           0 :     SfxItemState eState = rSet->GetItemState(SID_ATTR_NUMBERING_RULE, false, &pItem);
    1219           0 :     if(eState != SfxItemState::SET)
    1220             :     {
    1221           0 :         nNumItemId = rSet->GetPool()->GetWhich(SID_ATTR_NUMBERING_RULE);
    1222           0 :         eState = rSet->GetItemState(nNumItemId, false, &pItem);
    1223             : 
    1224           0 :         if( eState != SfxItemState::SET )
    1225             :         {
    1226           0 :             pItem = &static_cast< const SvxNumBulletItem& >( rSet->Get( nNumItemId, true ) );
    1227           0 :             eState = SfxItemState::SET;
    1228             :         }
    1229             : 
    1230             :     }
    1231             :     DBG_ASSERT(eState == SfxItemState::SET, "no item found!");
    1232           0 :     delete pSaveNum;
    1233           0 :     pSaveNum = new SvxNumRule(*static_cast<const SvxNumBulletItem*>(pItem)->GetNumRule());
    1234             : 
    1235             :     // insert levels
    1236           0 :     if(!m_pLevelLB->GetEntryCount())
    1237             :     {
    1238           0 :         for(sal_uInt16 i = 1; i <= pSaveNum->GetLevelCount(); i++)
    1239           0 :             m_pLevelLB->InsertEntry( OUString::number(i));
    1240           0 :         if(pSaveNum->GetLevelCount() > 1)
    1241             :         {
    1242           0 :             OUString sEntry( "1 - " );
    1243           0 :             sEntry += OUString::number( pSaveNum->GetLevelCount() );
    1244           0 :             m_pLevelLB->InsertEntry(sEntry);
    1245           0 :             m_pLevelLB->SelectEntry(sEntry);
    1246             :         }
    1247             :         else
    1248           0 :             m_pLevelLB->SelectEntryPos(0);
    1249             :     }
    1250             :     else
    1251           0 :         m_pLevelLB->SelectEntryPos(m_pLevelLB->GetEntryCount() - 1);
    1252             : 
    1253           0 :     sal_uInt16 nMask = 1;
    1254           0 :     m_pLevelLB->SetUpdateMode(false);
    1255           0 :     m_pLevelLB->SetNoSelection();
    1256           0 :     if(nActNumLvl == SAL_MAX_UINT16  && !bModified)
    1257             :     {
    1258           0 :         m_pLevelLB->SelectEntryPos( 0, true);
    1259             :     }
    1260           0 :     else if (nActNumLvl == SAL_MAX_UINT16)
    1261             :     {
    1262           0 :         m_pLevelLB->SelectEntryPos( pSaveNum->GetLevelCount(), true);
    1263             :     }
    1264             :     else
    1265           0 :         for(sal_uInt16 i = 0; i < pSaveNum->GetLevelCount(); i++)
    1266             :         {
    1267           0 :             if(nActNumLvl & nMask)
    1268           0 :                 m_pLevelLB->SelectEntryPos( i, true);
    1269           0 :             nMask <<= 1 ;
    1270             :         }
    1271           0 :     m_pLevelLB->SetUpdateMode(true);
    1272             : 
    1273           0 :     if(!pActNum)
    1274           0 :         pActNum = new  SvxNumRule(*pSaveNum);
    1275           0 :     else if(*pSaveNum != *pActNum)
    1276           0 :         *pActNum = *pSaveNum;
    1277           0 :     m_pPreviewWIN->SetNumRule(pActNum);
    1278           0 :     m_pSameLevelCB->Check(pActNum->IsContinuousNumbering());
    1279             : 
    1280             :     // fill ColorListBox as needed
    1281           0 :     if ( pActNum->IsFeatureSupported( NUM_BULLET_COLOR ) )
    1282             :     {
    1283           0 :         SfxObjectShell* pDocSh = SfxObjectShell::Current();
    1284             :         DBG_ASSERT( pDocSh, "DocShell not found!" );
    1285           0 :         XColorListRef pColorTable;
    1286           0 :         if ( pDocSh )
    1287             :         {
    1288           0 :             pItem = pDocSh->GetItem( SID_COLOR_TABLE );
    1289           0 :             if ( pItem )
    1290           0 :                 pColorTable = static_cast<const SvxColorListItem*>(pItem)->GetColorList();
    1291             :         }
    1292             : 
    1293           0 :         if ( !pColorTable.is() )
    1294           0 :             pColorTable = XColorList::CreateStdColorList();
    1295             : 
    1296           0 :         m_pBulColLB->InsertEntry( Color( COL_AUTO ), SVX_RESSTR( RID_SVXSTR_AUTOMATIC ));
    1297             : 
    1298           0 :         for ( long i = 0; i < pColorTable->Count(); i++ )
    1299             :         {
    1300           0 :             XColorEntry* pEntry = pColorTable->GetColor(i);
    1301           0 :             m_pBulColLB->InsertEntry( pEntry->GetColor(), pEntry->GetName() );
    1302           0 :         }
    1303             :     }
    1304             : 
    1305             :     SfxObjectShell* pShell;
    1306           0 :     if ( SfxItemState::SET == rSet->GetItemState( SID_HTML_MODE, false, &pItem )
    1307           0 :          || ( 0 != ( pShell = SfxObjectShell::Current()) &&
    1308           0 :               0 != ( pItem = pShell->GetItem( SID_HTML_MODE ) ) ) )
    1309             :     {
    1310           0 :         sal_uInt16 nHtmlMode = static_cast<const SfxUInt16Item*>(pItem)->GetValue();
    1311           0 :         bHTMLMode = 0 != (nHtmlMode&HTMLMODE_ON);
    1312             :     }
    1313             : 
    1314           0 :     bool bCharFmt = pActNum->IsFeatureSupported(NUM_CHAR_STYLE);
    1315           0 :     m_pCharFmtFT->Show(bCharFmt);
    1316           0 :     m_pCharFmtLB->Show(bCharFmt);
    1317             : 
    1318           0 :     bool bContinuous = pActNum->IsFeatureSupported(NUM_CONTINUOUS);
    1319             : 
    1320           0 :     bool bAllLevel = bContinuous && !bHTMLMode;
    1321           0 :     m_pAllLevelFT->Show(bAllLevel);
    1322           0 :     m_pAllLevelNF->Show(bAllLevel);
    1323             : 
    1324           0 :     m_pAllLevelsFrame->Show(bContinuous);
    1325             : 
    1326             :     // again misusage: in Draw there is numeration only until the bitmap
    1327             :     // without SVX_NUM_NUMBER_NONE
    1328             :     //remove types that are unsupported by Draw/Impress
    1329           0 :     if(!bContinuous)
    1330             :     {
    1331           0 :         sal_Int32 nFmtCount = m_pFmtLB->GetEntryCount();
    1332           0 :         for(sal_Int32 i = nFmtCount; i; i--)
    1333             :         {
    1334           0 :             sal_uInt16 nEntryData = (sal_uInt16)reinterpret_cast<sal_uLong>(m_pFmtLB->GetEntryData(i - 1));
    1335           0 :             if(/*SVX_NUM_NUMBER_NONE == nEntryData ||*/
    1336             :                 ((SVX_NUM_BITMAP|LINK_TOKEN) ==  nEntryData))
    1337           0 :                 m_pFmtLB->RemoveEntry(i - 1);
    1338             :         }
    1339             :     }
    1340             :     //one must be enabled
    1341           0 :     if(!pActNum->IsFeatureSupported(NUM_ENABLE_LINKED_BMP))
    1342             :     {
    1343           0 :         sal_IntPtr nData = SVX_NUM_BITMAP|LINK_TOKEN;
    1344           0 :         sal_Int32 nPos = m_pFmtLB->GetEntryPos(reinterpret_cast<void*>(nData));
    1345           0 :         if(LISTBOX_ENTRY_NOTFOUND != nPos)
    1346           0 :             m_pFmtLB->RemoveEntry(nPos);
    1347             :     }
    1348           0 :     else if(!pActNum->IsFeatureSupported(NUM_ENABLE_EMBEDDED_BMP))
    1349             :     {
    1350           0 :         sal_IntPtr nData = SVX_NUM_BITMAP;
    1351           0 :         sal_Int32 nPos = m_pFmtLB->GetEntryPos(reinterpret_cast<void*>(nData));
    1352           0 :         if(LISTBOX_ENTRY_NOTFOUND != nPos)
    1353           0 :             m_pFmtLB->RemoveEntry(nPos);
    1354             :     }
    1355           0 :     if(pActNum->IsFeatureSupported(NUM_SYMBOL_ALIGNMENT))
    1356             :     {
    1357           0 :         m_pAlignFT->Show();
    1358           0 :         m_pAlignLB->Show();
    1359           0 :         m_pAlignLB->SetSelectHdl(LINK(this, SvxNumOptionsTabPage, EditModifyHdl_Impl));
    1360             :     }
    1361             :     else
    1362             :     {
    1363           0 :         m_pAlignFT->Hide();
    1364           0 :         m_pAlignLB->Hide();
    1365             :     }
    1366             : 
    1367             :     // MegaHack: because of a not-fixable 'design mistake/error' in Impress
    1368             :     // delete all kinds of numeric enumerations
    1369           0 :     if(pActNum->IsFeatureSupported(NUM_NO_NUMBERS))
    1370             :     {
    1371           0 :         sal_Int32 nFmtCount = m_pFmtLB->GetEntryCount();
    1372           0 :         for(sal_Int32 i = nFmtCount; i; i--)
    1373             :         {
    1374           0 :             sal_uInt16 nEntryData = (sal_uInt16)reinterpret_cast<sal_uLong>(m_pFmtLB->GetEntryData(i - 1));
    1375           0 :             if( /*nEntryData >= SVX_NUM_CHARS_UPPER_LETTER &&*/  nEntryData <= SVX_NUM_NUMBER_NONE)
    1376           0 :                 m_pFmtLB->RemoveEntry(i - 1);
    1377             :         }
    1378             :     }
    1379             : 
    1380           0 :     InitControls();
    1381           0 :     bModified = false;
    1382             : 
    1383           0 : }
    1384             : 
    1385           0 : void SvxNumOptionsTabPage::InitControls()
    1386             : {
    1387           0 :     bool bShowBullet    = true;
    1388           0 :     bool bShowBitmap    = true;
    1389           0 :     bool bSameType      = true;
    1390           0 :     bool bSameStart     = true;
    1391           0 :     bool bSamePrefix    = true;
    1392           0 :     bool bSameSuffix    = true;
    1393           0 :     bool bAllLevel      = true;
    1394           0 :     bool bSameCharFmt   = true;
    1395           0 :     bool bSameVOrient   = true;
    1396           0 :     bool bSameSize      = true;
    1397           0 :     bool bSameBulColor  = true;
    1398           0 :     bool bSameBulRelSize= true;
    1399           0 :     bool bSameAdjust    = true;
    1400             : 
    1401             :     const SvxNumberFormat* aNumFmtArr[SVX_MAX_NUM];
    1402           0 :     OUString sFirstCharFmt;
    1403           0 :     sal_Int16 eFirstOrient = text::VertOrientation::NONE;
    1404           0 :     Size aFirstSize(0,0);
    1405           0 :     sal_uInt16 nMask = 1;
    1406           0 :     sal_uInt16 nLvl = SAL_MAX_UINT16;
    1407           0 :     sal_uInt16 nHighestLevel = 0;
    1408           0 :     OUString aEmptyStr;
    1409             : 
    1410           0 :     bool bBullColor = pActNum->IsFeatureSupported(NUM_BULLET_COLOR);
    1411           0 :     bool bBullRelSize = pActNum->IsFeatureSupported(NUM_BULLET_REL_SIZE);
    1412           0 :     for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
    1413             :     {
    1414           0 :         if(nActNumLvl & nMask)
    1415             :         {
    1416           0 :             aNumFmtArr[i] = &pActNum->GetLevel(i);
    1417           0 :             bShowBullet &= aNumFmtArr[i]->GetNumberingType() == SVX_NUM_CHAR_SPECIAL;
    1418           0 :             bShowBitmap &= (aNumFmtArr[i]->GetNumberingType()&(~LINK_TOKEN)) == SVX_NUM_BITMAP;
    1419           0 :             if(SAL_MAX_UINT16 == nLvl)
    1420             :             {
    1421           0 :                 nLvl = i;
    1422           0 :                 sFirstCharFmt = aNumFmtArr[i]->GetCharFmtName();
    1423           0 :                 eFirstOrient = aNumFmtArr[i]->GetVertOrient();
    1424           0 :                 if(bShowBitmap)
    1425           0 :                     aFirstSize = aNumFmtArr[i]->GetGraphicSize();
    1426             :             }
    1427           0 :             if( i > nLvl)
    1428             :             {
    1429           0 :                 bSameType &=   aNumFmtArr[i]->GetNumberingType() == aNumFmtArr[nLvl]->GetNumberingType();
    1430           0 :                 bSameStart = aNumFmtArr[i]->GetStart() == aNumFmtArr[nLvl]->GetStart();
    1431             : 
    1432           0 :                 bSamePrefix = aNumFmtArr[i]->GetPrefix() == aNumFmtArr[nLvl]->GetPrefix();
    1433           0 :                 bSameSuffix = aNumFmtArr[i]->GetSuffix() == aNumFmtArr[nLvl]->GetSuffix();
    1434           0 :                 bAllLevel &= aNumFmtArr[i]->GetIncludeUpperLevels() == aNumFmtArr[nLvl]->GetIncludeUpperLevels();
    1435           0 :                 bSameCharFmt    &= sFirstCharFmt == aNumFmtArr[i]->GetCharFmtName();
    1436           0 :                 bSameVOrient    &= eFirstOrient == aNumFmtArr[i]->GetVertOrient();
    1437           0 :                 if(bShowBitmap && bSameSize)
    1438           0 :                     bSameSize &= aNumFmtArr[i]->GetGraphicSize() == aFirstSize;
    1439           0 :                 bSameBulColor &= aNumFmtArr[i]->GetBulletColor() == aNumFmtArr[nLvl]->GetBulletColor();
    1440           0 :                 bSameBulRelSize &= aNumFmtArr[i]->GetBulletRelSize() == aNumFmtArr[nLvl]->GetBulletRelSize();
    1441           0 :                 bSameAdjust     &= aNumFmtArr[i]->GetNumAdjust() == aNumFmtArr[nLvl]->GetNumAdjust();
    1442             :             }
    1443           0 :             nHighestLevel = i;
    1444             :         }
    1445             :         else
    1446           0 :             aNumFmtArr[i] = 0;
    1447             : 
    1448           0 :         nMask <<= 1 ;
    1449             :     }
    1450           0 :     SwitchNumberType(bShowBullet ? 1 : bShowBitmap ? 2 : 0);
    1451             : 
    1452             :     sal_uInt16 nNumberingType;
    1453           0 :     if (nLvl != SAL_MAX_UINT16)
    1454           0 :         nNumberingType = aNumFmtArr[nLvl]->GetNumberingType();
    1455             :     else
    1456             :     {
    1457           0 :         nNumberingType = SVX_NUM_NUMBER_NONE;
    1458           0 :         bAllLevel = false;
    1459           0 :         bSameAdjust = false;
    1460           0 :         bSameBulRelSize = false;
    1461           0 :         bSameBulColor = false;
    1462           0 :         bSameStart = false;
    1463           0 :         bSamePrefix = false;
    1464           0 :         bSameSuffix = false;
    1465             :     }
    1466             : 
    1467           0 :     CheckForStartValue_Impl(nNumberingType);
    1468             : 
    1469           0 :     if(bShowBitmap)
    1470             :     {
    1471           0 :         if(!bSameVOrient || eFirstOrient == text::VertOrientation::NONE)
    1472           0 :             m_pOrientLB->SetNoSelection();
    1473             :         else
    1474             :             m_pOrientLB->SelectEntryPos(
    1475           0 :                 sal::static_int_cast< sal_Int32 >(eFirstOrient - 1));
    1476             :                 // no text::VertOrientation::NONE
    1477             : 
    1478           0 :         if(bSameSize)
    1479             :         {
    1480           0 :             SetMetricValue(*m_pHeightMF, aFirstSize.Height(), eCoreUnit);
    1481           0 :             SetMetricValue(*m_pWidthMF, aFirstSize.Width(), eCoreUnit);
    1482             :         }
    1483             :         else
    1484             :         {
    1485           0 :             m_pHeightMF->SetText(aEmptyStr);
    1486           0 :             m_pWidthMF->SetText(aEmptyStr);
    1487             :         }
    1488             :     }
    1489             : 
    1490           0 :     if(bSameType)
    1491             :     {
    1492           0 :         sal_uInt16 nLBData = nNumberingType;
    1493           0 :         m_pFmtLB->SelectEntryPos(m_pFmtLB->GetEntryPos( reinterpret_cast<void*>(sal::static_int_cast<sal_uIntPtr>( nLBData ) )));
    1494             :     }
    1495             :     else
    1496           0 :         m_pFmtLB->SetNoSelection();
    1497             : 
    1498           0 :     m_pAllLevelNF->Enable(nHighestLevel > 0 && !m_pSameLevelCB->IsChecked());
    1499           0 :     m_pAllLevelNF->SetMax(nHighestLevel + 1);
    1500           0 :     if(bAllLevel)
    1501             :     {
    1502           0 :         m_pAllLevelNF->SetValue(aNumFmtArr[nLvl]->GetIncludeUpperLevels());
    1503             :     }
    1504             :     else
    1505             :     {
    1506           0 :         m_pAllLevelNF->SetText(aEmptyStr);
    1507             :     }
    1508           0 :     if(bSameAdjust)
    1509             :     {
    1510           0 :         sal_Int32 nPos = 1; // centered
    1511           0 :         if(aNumFmtArr[nLvl]->GetNumAdjust() == SVX_ADJUST_LEFT)
    1512           0 :             nPos = 0;
    1513           0 :         else if(aNumFmtArr[nLvl]->GetNumAdjust() == SVX_ADJUST_RIGHT)
    1514           0 :             nPos = 2;
    1515           0 :         m_pAlignLB->SelectEntryPos(nPos);
    1516             :     }
    1517             :     else
    1518             :     {
    1519           0 :         m_pAlignLB->SetNoSelection();
    1520             :     }
    1521             : 
    1522           0 :     if(bBullRelSize)
    1523             :     {
    1524           0 :         if(bSameBulRelSize)
    1525           0 :             m_pBulRelSizeMF->SetValue(aNumFmtArr[nLvl]->GetBulletRelSize());
    1526             :         else
    1527           0 :             m_pBulRelSizeMF->SetText(aEmptyStr);
    1528             :     }
    1529           0 :     if(bBullColor)
    1530             :     {
    1531           0 :         if(bSameBulColor)
    1532           0 :             m_pBulColLB->SelectEntry(aNumFmtArr[nLvl]->GetBulletColor());
    1533             :         else
    1534           0 :             m_pBulColLB->SetNoSelection();
    1535             :     }
    1536           0 :     switch(nBullet)
    1537             :     {
    1538             :         case SHOW_NUMBERING:
    1539           0 :             if(bSameStart)
    1540             :             {
    1541           0 :                 m_pStartED->SetValue(aNumFmtArr[nLvl]->GetStart());
    1542             :             }
    1543             :             else
    1544           0 :                 m_pStartED->SetText(aEmptyStr);
    1545           0 :         break;
    1546             :         case SHOW_BULLET:
    1547           0 :         break;
    1548             :         case SHOW_BITMAP:
    1549           0 :         break;
    1550             :     }
    1551             : 
    1552           0 :     if(bSamePrefix)
    1553           0 :         m_pPrefixED->SetText(aNumFmtArr[nLvl]->GetPrefix());
    1554             :     else
    1555           0 :         m_pPrefixED->SetText(aEmptyStr);
    1556           0 :     if(bSameSuffix)
    1557           0 :         m_pSuffixED->SetText(aNumFmtArr[nLvl]->GetSuffix());
    1558             :     else
    1559           0 :         m_pSuffixED->SetText(aEmptyStr);
    1560             : 
    1561           0 :     if(bSameCharFmt)
    1562             :     {
    1563           0 :         if(!sFirstCharFmt.isEmpty())
    1564           0 :                 m_pCharFmtLB->SelectEntry(sFirstCharFmt);
    1565             :         else
    1566           0 :             m_pCharFmtLB->SelectEntryPos( 0 );
    1567             :     }
    1568             :     else
    1569           0 :         m_pCharFmtLB->SetNoSelection();
    1570             : 
    1571           0 :     m_pPreviewWIN->SetLevel(nActNumLvl);
    1572           0 :     m_pPreviewWIN->Invalidate();
    1573           0 : }
    1574             : 
    1575             : // 0 - Number; 1 - Bullet; 2 - Bitmap
    1576           0 : void SvxNumOptionsTabPage::SwitchNumberType( sal_uInt8 nType, bool )
    1577             : {
    1578           0 :     if(nBullet == nType)
    1579           0 :         return;
    1580           0 :     nBullet = nType;
    1581           0 :     bool bBullet = (nType == SHOW_BULLET);
    1582           0 :     bool bBitmap = (nType == SHOW_BITMAP);
    1583           0 :     bool bEnableBitmap = (nType == SHOW_BITMAP);
    1584           0 :     bool bNumeric = !(bBitmap||bBullet);
    1585           0 :     m_pSeparatorFT->Show(bNumeric);
    1586           0 :     m_pPrefixFT->Show(bNumeric);
    1587           0 :     m_pPrefixED->Show(bNumeric);
    1588           0 :     m_pSuffixFT->Show(bNumeric);
    1589           0 :     m_pSuffixED->Show(bNumeric);
    1590             : 
    1591           0 :     bool bCharFmt = pActNum->IsFeatureSupported(NUM_CHAR_STYLE);
    1592           0 :     m_pCharFmtFT->Show(!bBitmap && bCharFmt);
    1593           0 :     m_pCharFmtLB->Show(!bBitmap && bCharFmt);
    1594             : 
    1595             :     // this is rather misusage, as there is no own flag
    1596             :     // for complete numeration
    1597           0 :     bool bAllLevelFeature = pActNum->IsFeatureSupported(NUM_CONTINUOUS);
    1598           0 :     bool bAllLevel = bNumeric && bAllLevelFeature && !bHTMLMode;
    1599           0 :     m_pAllLevelFT->Show(bAllLevel);
    1600           0 :     m_pAllLevelNF->Show(bAllLevel);
    1601             : 
    1602           0 :     m_pStartFT->Show(!(bBullet||bBitmap));
    1603           0 :     m_pStartED->Show(!(bBullet||bBitmap));
    1604             : 
    1605           0 :     m_pBulletFT->Show(bBullet);
    1606           0 :     m_pBulletPB->Show(bBullet);
    1607           0 :     bool bBullColor = pActNum->IsFeatureSupported(NUM_BULLET_COLOR);
    1608           0 :     m_pBulColorFT->Show(!bBitmap && bBullColor);
    1609           0 :     m_pBulColLB->Show(!bBitmap && bBullColor);
    1610           0 :     bool bBullResSize = pActNum->IsFeatureSupported(NUM_BULLET_REL_SIZE);
    1611           0 :     m_pBulRelSizeFT->Show(!bBitmap && bBullResSize);
    1612           0 :     m_pBulRelSizeMF->Show(!bBitmap && bBullResSize);
    1613             : 
    1614           0 :     m_pBitmapFT->Show(bBitmap);
    1615           0 :     m_pBitmapMB->Show(bBitmap);
    1616             : 
    1617           0 :     m_pWidthFT->Show(bBitmap);
    1618           0 :     m_pWidthMF->Show(bBitmap);
    1619           0 :     m_pHeightFT->Show(bBitmap);
    1620           0 :     m_pHeightMF->Show(bBitmap);
    1621           0 :     m_pRatioCB->Show(bBitmap);
    1622             : 
    1623           0 :     m_pOrientFT->Show(bBitmap &&  bAllLevelFeature);
    1624           0 :     m_pOrientLB->Show(bBitmap &&  bAllLevelFeature);
    1625             : 
    1626           0 :     m_pWidthFT->Enable(bEnableBitmap);
    1627           0 :     m_pWidthMF->Enable(bEnableBitmap);
    1628           0 :     m_pHeightFT->Enable(bEnableBitmap);
    1629           0 :     m_pHeightMF->Enable(bEnableBitmap);
    1630           0 :     m_pRatioCB->Enable(bEnableBitmap);
    1631           0 :     m_pOrientFT->Enable(bEnableBitmap);
    1632           0 :     m_pOrientLB->Enable(bEnableBitmap);
    1633             : }
    1634             : 
    1635           0 : IMPL_LINK( SvxNumOptionsTabPage, LevelHdl_Impl, ListBox *, pBox )
    1636             : {
    1637           0 :     sal_uInt16 nSaveNumLvl = nActNumLvl;
    1638           0 :     nActNumLvl = 0;
    1639           0 :     if(pBox->IsEntryPosSelected( pActNum->GetLevelCount() ) &&
    1640           0 :         (pBox->GetSelectEntryCount() == 1 || nSaveNumLvl != 0xffff))
    1641             :     {
    1642           0 :         nActNumLvl = 0xFFFF;
    1643           0 :         pBox->SetUpdateMode(false);
    1644           0 :         for( sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++ )
    1645           0 :             pBox->SelectEntryPos( i, false );
    1646           0 :         pBox->SetUpdateMode(true);
    1647             :     }
    1648           0 :     else if(pBox->GetSelectEntryCount())
    1649             :     {
    1650           0 :         sal_uInt16 nMask = 1;
    1651           0 :         for( sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++ )
    1652             :         {
    1653           0 :             if(pBox->IsEntryPosSelected( i ))
    1654           0 :                 nActNumLvl |= nMask;
    1655           0 :             nMask <<= 1;
    1656             :         }
    1657           0 :         pBox->SelectEntryPos( pActNum->GetLevelCount(), false );
    1658             :     }
    1659             :     else
    1660             :     {
    1661           0 :         nActNumLvl = nSaveNumLvl;
    1662           0 :         sal_uInt16 nMask = 1;
    1663           0 :         for( sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++ )
    1664             :         {
    1665           0 :             if(nActNumLvl & nMask)
    1666             :             {
    1667           0 :                 pBox->SelectEntryPos(i);
    1668           0 :                 break;
    1669             :             }
    1670           0 :             nMask <<=1;
    1671             :         }
    1672             :     }
    1673           0 :     InitControls();
    1674           0 :     return 0;
    1675             : }
    1676             : 
    1677           0 : IMPL_LINK_NOARG(SvxNumOptionsTabPage, PreviewInvalidateHdl_Impl)
    1678             : {
    1679           0 :     m_pPreviewWIN->Invalidate();
    1680           0 :     return 0;
    1681             : }
    1682             : 
    1683           0 : IMPL_LINK( SvxNumOptionsTabPage, AllLevelHdl_Impl, NumericField*, pBox )
    1684             : {
    1685           0 :     for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
    1686             :     {
    1687           0 :         sal_uInt16 nMask = 1;
    1688           0 :         for(sal_uInt16 e = 0; e < pActNum->GetLevelCount(); e++)
    1689             :         {
    1690           0 :             if(nActNumLvl & nMask)
    1691             :             {
    1692           0 :                 SvxNumberFormat aNumFmt(pActNum->GetLevel(e));
    1693           0 :                 aNumFmt.SetIncludeUpperLevels((sal_uInt8) std::min(pBox->GetValue(), sal_Int64(e + 1)) );
    1694           0 :                 pActNum->SetLevel(e, aNumFmt);
    1695             :             }
    1696           0 :             nMask <<= 1;
    1697             :         }
    1698             :     }
    1699           0 :     SetModified();
    1700           0 :     return 0;
    1701             : }
    1702             : 
    1703           0 : IMPL_LINK( SvxNumOptionsTabPage, NumberTypeSelectHdl_Impl, ListBox *, pBox )
    1704             : {
    1705           0 :     OUString sSelectStyle;
    1706           0 :     bool bShowOrient = false;
    1707           0 :     bool bBmp = false;
    1708           0 :     OUString aEmptyStr;
    1709           0 :     sal_uInt16 nMask = 1;
    1710           0 :     for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
    1711             :     {
    1712           0 :         if(nActNumLvl & nMask)
    1713             :         {
    1714           0 :             SvxNumberFormat aNumFmt(pActNum->GetLevel(i));
    1715             :             // PAGEDESC does not exist
    1716           0 :             sal_uInt16 nNumType = (sal_uInt16)reinterpret_cast<sal_uLong>(pBox->GetEntryData(pBox->GetSelectEntryPos()));
    1717           0 :             aNumFmt.SetNumberingType((sal_Int16)nNumType);
    1718           0 :             sal_uInt16 nNumberingType = aNumFmt.GetNumberingType();
    1719           0 :             if(SVX_NUM_BITMAP == (nNumberingType&(~LINK_TOKEN)))
    1720             :             {
    1721           0 :                 bBmp |= 0 != aNumFmt.GetBrush();
    1722           0 :                 aNumFmt.SetIncludeUpperLevels( sal_False );
    1723           0 :                 aNumFmt.SetSuffix( aEmptyStr );
    1724           0 :                 aNumFmt.SetPrefix( aEmptyStr );
    1725           0 :                 if(!bBmp)
    1726           0 :                     aNumFmt.SetGraphic(aEmptyStr);
    1727           0 :                 pActNum->SetLevel(i, aNumFmt);
    1728           0 :                 SwitchNumberType(SHOW_BITMAP, bBmp );
    1729           0 :                 bShowOrient = true;
    1730             :             }
    1731           0 :             else if( SVX_NUM_CHAR_SPECIAL == nNumberingType )
    1732             :             {
    1733           0 :                 aNumFmt.SetIncludeUpperLevels( sal_False );
    1734           0 :                 aNumFmt.SetSuffix( aEmptyStr );
    1735           0 :                 aNumFmt.SetPrefix( aEmptyStr );
    1736           0 :                 if( !aNumFmt.GetBulletFont() )
    1737           0 :                     aNumFmt.SetBulletFont(&aActBulletFont);
    1738           0 :                 if( !aNumFmt.GetBulletChar() )
    1739           0 :                     aNumFmt.SetBulletChar( SVX_DEF_BULLET );
    1740           0 :                 pActNum->SetLevel(i, aNumFmt);
    1741           0 :                 SwitchNumberType(SHOW_BULLET);
    1742             :                 // allocation of the drawing pattern is automatic
    1743           0 :                 if(bAutomaticCharStyles)
    1744             :                 {
    1745           0 :                     sSelectStyle = m_sBulletCharFmtName;
    1746             :                 }
    1747             :             }
    1748             :             else
    1749             :             {
    1750           0 :                 aNumFmt.SetPrefix( m_pPrefixED->GetText() );
    1751           0 :                 aNumFmt.SetSuffix( m_pSuffixED->GetText() );
    1752           0 :                 SwitchNumberType(SHOW_NUMBERING);
    1753           0 :                 pActNum->SetLevel(i, aNumFmt);
    1754           0 :                 CheckForStartValue_Impl(nNumberingType);
    1755             : 
    1756             :                 // allocation of the drawing pattern is automatic
    1757           0 :                 if(bAutomaticCharStyles)
    1758             :                 {
    1759           0 :                     sSelectStyle = m_sNumCharFmtName;
    1760             :                 }
    1761           0 :             }
    1762             :         }
    1763           0 :         nMask <<= 1;
    1764             :     }
    1765           0 :     bool bAllLevelFeature = pActNum->IsFeatureSupported(NUM_CONTINUOUS);
    1766           0 :     if(bShowOrient && bAllLevelFeature)
    1767             :     {
    1768           0 :         m_pOrientFT->Show();
    1769           0 :         m_pOrientLB->Show();
    1770             :     }
    1771             :     else
    1772             :     {
    1773           0 :         m_pOrientFT->Hide();
    1774           0 :         m_pOrientLB->Hide();
    1775             :     }
    1776           0 :     SetModified();
    1777           0 :     if(!sSelectStyle.isEmpty())
    1778             :     {
    1779           0 :         m_pCharFmtLB->SelectEntry(sSelectStyle);
    1780           0 :         CharFmtHdl_Impl(m_pCharFmtLB);
    1781           0 :         bAutomaticCharStyles = true;
    1782             :     }
    1783           0 :     return 0;
    1784             : }
    1785             : 
    1786           0 : void SvxNumOptionsTabPage::CheckForStartValue_Impl(sal_uInt16 nNumberingType)
    1787             : {
    1788           0 :     bool bIsNull = m_pStartED->GetValue() == 0;
    1789           0 :     bool bNoZeroAllowed = nNumberingType < SVX_NUM_ARABIC ||
    1790           0 :                         SVX_NUM_CHARS_UPPER_LETTER_N == nNumberingType ||
    1791           0 :                         SVX_NUM_CHARS_LOWER_LETTER_N == nNumberingType;
    1792           0 :     m_pStartED->SetMin(bNoZeroAllowed ? 1 : 0);
    1793           0 :     if(bIsNull && bNoZeroAllowed)
    1794           0 :         m_pStartED->GetModifyHdl().Call(m_pStartED);
    1795           0 : }
    1796             : 
    1797           0 : IMPL_LINK( SvxNumOptionsTabPage, OrientHdl_Impl, ListBox *, pBox )
    1798             : {
    1799           0 :     sal_Int32 nPos = pBox->GetSelectEntryPos();
    1800           0 :     nPos ++; // no VERT_NONE
    1801             : 
    1802           0 :     sal_uInt16 nMask = 1;
    1803           0 :     for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
    1804             :     {
    1805           0 :         if(nActNumLvl & nMask)
    1806             :         {
    1807           0 :             SvxNumberFormat aNumFmt(pActNum->GetLevel(i));
    1808           0 :             if(SVX_NUM_BITMAP == (aNumFmt.GetNumberingType()&(~LINK_TOKEN)))
    1809             :             {
    1810           0 :                 const SvxBrushItem* pBrushItem =  aNumFmt.GetBrush();
    1811           0 :                 const Size& rSize = aNumFmt.GetGraphicSize();
    1812           0 :                 sal_Int16 eOrient = (sal_Int16)nPos;
    1813           0 :                 aNumFmt.SetGraphicBrush( pBrushItem, &rSize, &eOrient );
    1814           0 :                 pActNum->SetLevel(i, aNumFmt);
    1815           0 :             }
    1816             :         }
    1817           0 :         nMask <<= 1;
    1818             :     }
    1819           0 :     SetModified(false);
    1820           0 :     return 0;
    1821             : 
    1822             : }
    1823             : 
    1824           0 : IMPL_LINK( SvxNumOptionsTabPage, SameLevelHdl_Impl, CheckBox *, pBox )
    1825             : {
    1826           0 :     bool bSet = pBox->IsChecked();
    1827           0 :     pActNum->SetContinuousNumbering(bSet);
    1828           0 :     bool bRepaint = false;
    1829           0 :     for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
    1830             :     {
    1831           0 :         SvxNumberFormat aNumFmt(pActNum->GetLevel(i));
    1832           0 :         if(aNumFmt.GetNumberingType() != SVX_NUM_NUMBER_NONE)
    1833             :         {
    1834           0 :             bRepaint = true;
    1835           0 :             break;
    1836             :         }
    1837           0 :     }
    1838           0 :     SetModified(bRepaint);
    1839           0 :     InitControls();
    1840           0 :     return 0;
    1841             : }
    1842             : 
    1843           0 : IMPL_LINK( SvxNumOptionsTabPage, BulColorHdl_Impl, ColorListBox*, pBox )
    1844             : {
    1845           0 :     Color nSetColor = pBox->GetSelectEntryColor();
    1846             : 
    1847           0 :     sal_uInt16 nMask = 1;
    1848           0 :     for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
    1849             :     {
    1850           0 :         if(nActNumLvl & nMask)
    1851             :         {
    1852           0 :             SvxNumberFormat aNumFmt(pActNum->GetLevel(i));
    1853           0 :             aNumFmt.SetBulletColor(nSetColor);
    1854           0 :             pActNum->SetLevel(i, aNumFmt);
    1855             :         }
    1856           0 :         nMask <<= 1;
    1857             :     }
    1858           0 :     SetModified();
    1859           0 :     return 0;
    1860             : }
    1861             : 
    1862           0 : IMPL_LINK( SvxNumOptionsTabPage, BulRelSizeHdl_Impl, MetricField *, pField)
    1863             : {
    1864           0 :     sal_uInt16 nRelSize = (sal_uInt16)pField->GetValue();
    1865             : 
    1866           0 :     sal_uInt16 nMask = 1;
    1867           0 :     for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
    1868             :     {
    1869           0 :         if(nActNumLvl & nMask)
    1870             :         {
    1871           0 :             SvxNumberFormat aNumFmt(pActNum->GetLevel(i));
    1872           0 :             aNumFmt.SetBulletRelSize(nRelSize);
    1873           0 :             pActNum->SetLevel(i, aNumFmt);
    1874             :         }
    1875           0 :         nMask <<= 1;
    1876             :     }
    1877           0 :     SetModified();
    1878           0 :     return 0;
    1879             : }
    1880             : 
    1881           0 : IMPL_LINK( SvxNumOptionsTabPage, GraphicHdl_Impl, MenuButton *, pButton )
    1882             : {
    1883           0 :     sal_uInt16                  nItemId = pButton->GetCurItemId();
    1884           0 :     OUString                aGrfName;
    1885           0 :     Size                    aSize;
    1886           0 :     bool                bSucc(false);
    1887           0 :     SvxOpenGraphicDialog    aGrfDlg( CUI_RES(RID_SVXSTR_EDIT_GRAPHIC) );
    1888             : 
    1889           0 :     if(MN_GALLERY_ENTRY <= nItemId )
    1890             :     {
    1891           0 :         sal_uInt16 idx = nItemId - MN_GALLERY_ENTRY;
    1892           0 :         if (idx < aGrfNames.size())
    1893             :         {
    1894           0 :             aGrfName = aGrfNames[idx];
    1895           0 :             Graphic aGraphic;
    1896           0 :             if(GalleryExplorer::GetGraphicObj( GALLERY_THEME_BULLETS, idx, &aGraphic))
    1897             :             {
    1898           0 :                 aSize = SvxNumberFormat::GetGraphicSizeMM100(&aGraphic);
    1899           0 :                 bSucc = true;
    1900           0 :             }
    1901             :         }
    1902             :     }
    1903             :     else
    1904             :     {
    1905           0 :         aGrfDlg.EnableLink( false );
    1906           0 :         aGrfDlg.AsLink( false );
    1907           0 :         if ( !aGrfDlg.Execute() )
    1908             :         {
    1909             :             // memorize selected filter
    1910           0 :             aGrfName = aGrfDlg.GetPath();
    1911             : 
    1912           0 :             Graphic aGraphic;
    1913           0 :             if( !aGrfDlg.GetGraphic(aGraphic) )
    1914             :             {
    1915           0 :                 aSize = SvxNumberFormat::GetGraphicSizeMM100(&aGraphic);
    1916           0 :                 bSucc = true;
    1917           0 :             }
    1918             :         }
    1919             :     }
    1920           0 :     if(bSucc)
    1921             :     {
    1922           0 :         aSize = OutputDevice::LogicToLogic(aSize, MAP_100TH_MM, (MapUnit)eCoreUnit);
    1923             : 
    1924           0 :         sal_uInt16 nMask = 1;
    1925           0 :         for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
    1926             :         {
    1927           0 :             if(nActNumLvl & nMask)
    1928             :             {
    1929           0 :                 SvxNumberFormat aNumFmt(pActNum->GetLevel(i));
    1930           0 :                 aNumFmt.SetCharFmtName(m_sNumCharFmtName);
    1931           0 :                 aNumFmt.SetGraphic(aGrfName);
    1932             : 
    1933             :                 // set size for a later comparison
    1934           0 :                 const SvxBrushItem* pBrushItem = aNumFmt.GetBrush();
    1935             :                 // initiate asynchronous loading
    1936           0 :                 sal_Int16 eOrient = aNumFmt.GetVertOrient();
    1937           0 :                 aNumFmt.SetGraphicBrush( pBrushItem, &aSize, &eOrient );
    1938           0 :                 aInitSize[i] = aNumFmt.GetGraphicSize();
    1939             : 
    1940           0 :                 pActNum->SetLevel(i, aNumFmt);
    1941             :             }
    1942           0 :             nMask <<= 1;
    1943             :         }
    1944           0 :         m_pRatioCB->Enable();
    1945           0 :         m_pWidthFT->Enable();
    1946           0 :         m_pHeightFT->Enable();
    1947           0 :         m_pWidthMF->Enable();
    1948           0 :         m_pHeightMF->Enable();
    1949           0 :         SetMetricValue(*m_pWidthMF, aSize.Width(), eCoreUnit);
    1950           0 :         SetMetricValue(*m_pHeightMF, aSize.Height(), eCoreUnit);
    1951           0 :         m_pOrientFT->Enable();
    1952           0 :         m_pOrientLB->Enable();
    1953           0 :         SetModified();
    1954             :         //needed due to asynchronous loading of graphics in the SvxBrushItem
    1955           0 :         aInvalidateTimer.Start();
    1956             :     }
    1957           0 :     return 0;
    1958             : }
    1959             : 
    1960           0 : IMPL_LINK_NOARG(SvxNumOptionsTabPage, PopupActivateHdl_Impl)
    1961             : {
    1962           0 :     if(!bMenuButtonInitialized)
    1963             :     {
    1964           0 :         bMenuButtonInitialized = true;
    1965           0 :         EnterWait();
    1966           0 :         PopupMenu* pMenu = m_pBitmapMB->GetPopupMenu();
    1967           0 :         PopupMenu* pPopup = pMenu->GetPopupMenu(m_nGalleryId);
    1968             : 
    1969           0 :         if (GalleryExplorer::FillObjList(GALLERY_THEME_BULLETS, aGrfNames))
    1970             :         {
    1971           0 :             pPopup->Clear();
    1972           0 :             GalleryExplorer::BeginLocking(GALLERY_THEME_BULLETS);
    1973             : 
    1974           0 :             Graphic aGraphic;
    1975           0 :             OUString sGrfName;
    1976           0 :             std::vector<OUString>::const_iterator it = aGrfNames.begin();
    1977           0 :             for(size_t i = 0; it != aGrfNames.end(); ++it, ++i)
    1978             :             {
    1979           0 :                 sGrfName = *it;
    1980           0 :                 INetURLObject aObj(sGrfName);
    1981           0 :                 if(aObj.GetProtocol() == INET_PROT_FILE)
    1982           0 :                     sGrfName = aObj.PathToFileName();
    1983             : 
    1984           0 :                 if(GalleryExplorer::GetGraphicObj( GALLERY_THEME_BULLETS, i, &aGraphic))
    1985             :                 {
    1986           0 :                     Bitmap aBitmap(aGraphic.GetBitmap());
    1987           0 :                     Size aSize(aBitmap.GetSizePixel());
    1988           0 :                     if(aSize.Width() > MAX_BMP_WIDTH ||
    1989           0 :                         aSize.Height() > MAX_BMP_HEIGHT)
    1990             :                     {
    1991           0 :                         bool bWidth = aSize.Width() > aSize.Height();
    1992             :                         double nScale = bWidth ?
    1993           0 :                                             (double)MAX_BMP_WIDTH / (double)aSize.Width():
    1994           0 :                                                 (double)MAX_BMP_HEIGHT / (double)aSize.Height();
    1995           0 :                         aBitmap.Scale(nScale, nScale);
    1996             :                     }
    1997           0 :                     Image aImage(aBitmap);
    1998             : 
    1999           0 :                     pPopup->InsertItem(MN_GALLERY_ENTRY + i, sGrfName, aImage );
    2000             :                 }
    2001             :                 else
    2002             :                 {
    2003           0 :                     Image aImage;
    2004             :                     pPopup->InsertItem(
    2005           0 :                         MN_GALLERY_ENTRY + i, sGrfName, aImage );
    2006             :                 }
    2007           0 :             }
    2008           0 :             GalleryExplorer::EndLocking(GALLERY_THEME_BULLETS);
    2009             :         }
    2010           0 :         LeaveWait();
    2011             :     }
    2012           0 :     return 0;
    2013             : }
    2014             : 
    2015           0 : IMPL_LINK_NOARG(SvxNumOptionsTabPage, BulletHdl_Impl)
    2016             : {
    2017           0 :     boost::scoped_ptr<SvxCharacterMap> pMap(new SvxCharacterMap( this, true ));
    2018             : 
    2019           0 :     sal_uInt16 nMask = 1;
    2020           0 :     const vcl::Font* pFmtFont = 0;
    2021           0 :     bool bSameBullet = true;
    2022           0 :     sal_Unicode cBullet = 0;
    2023           0 :     bool bFirst = true;
    2024           0 :     for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
    2025             :     {
    2026           0 :         if(nActNumLvl & nMask)
    2027             :         {
    2028           0 :             const SvxNumberFormat&  rCurFmt = pActNum->GetLevel(i);
    2029           0 :             if(bFirst)
    2030             :             {
    2031           0 :                  cBullet = rCurFmt.GetBulletChar();
    2032             :             }
    2033           0 :             else if(rCurFmt.GetBulletChar() != cBullet )
    2034             :             {
    2035           0 :                 bSameBullet = false;
    2036           0 :                 break;
    2037             :             }
    2038           0 :             if(!pFmtFont)
    2039           0 :                 pFmtFont = rCurFmt.GetBulletFont();
    2040           0 :             bFirst = false;
    2041             :         }
    2042           0 :         nMask <<= 1;
    2043             : 
    2044             :     }
    2045             : 
    2046           0 :     if(pFmtFont)
    2047           0 :         pMap->SetCharFont(*pFmtFont);
    2048             :     else
    2049           0 :         pMap->SetCharFont(aActBulletFont);
    2050           0 :     if(bSameBullet)
    2051           0 :         pMap->SetChar( cBullet );
    2052           0 :     if(pMap->Execute() == RET_OK)
    2053             :     {
    2054             :         // change Font Numrules
    2055           0 :         aActBulletFont = pMap->GetCharFont();
    2056             : 
    2057           0 :         sal_uInt16 _nMask = 1;
    2058           0 :         for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
    2059             :         {
    2060           0 :             if(nActNumLvl & _nMask)
    2061             :             {
    2062           0 :                 SvxNumberFormat aNumFmt(pActNum->GetLevel(i));
    2063           0 :                 aNumFmt.SetBulletFont(&aActBulletFont); ;
    2064           0 :                 aNumFmt.SetBulletChar( (sal_Unicode) pMap->GetChar() );
    2065           0 :                 pActNum->SetLevel(i, aNumFmt);
    2066             :             }
    2067           0 :             _nMask <<= 1;
    2068             :         }
    2069             : 
    2070           0 :         SetModified();
    2071             :     }
    2072           0 :     return 0;
    2073             : }
    2074             : 
    2075           0 : IMPL_LINK( SvxNumOptionsTabPage, SizeHdl_Impl, MetricField *, pField)
    2076             : {
    2077           0 :     bool bWidth = pField == m_pWidthMF;
    2078           0 :     bLastWidthModified = bWidth;
    2079           0 :     bool bRatio = m_pRatioCB->IsChecked();
    2080           0 :     long nWidthVal = static_cast<long>(m_pWidthMF->Denormalize(m_pWidthMF->GetValue(FUNIT_100TH_MM)));
    2081           0 :     long nHeightVal = static_cast<long>(m_pHeightMF->Denormalize(m_pHeightMF->GetValue(FUNIT_100TH_MM)));
    2082             :     nWidthVal = OutputDevice::LogicToLogic( nWidthVal ,
    2083           0 :                                                 MAP_100TH_MM, (MapUnit)eCoreUnit );
    2084             :     nHeightVal = OutputDevice::LogicToLogic( nHeightVal,
    2085           0 :                                                 MAP_100TH_MM, (MapUnit)eCoreUnit);
    2086             :     double  fSizeRatio;
    2087             : 
    2088           0 :     bool bRepaint = false;
    2089           0 :     sal_uInt16 nMask = 1;
    2090           0 :     for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
    2091             :     {
    2092           0 :         if(nActNumLvl & nMask)
    2093             :         {
    2094           0 :             SvxNumberFormat aNumFmt(pActNum->GetLevel(i));
    2095           0 :             if(SVX_NUM_BITMAP == (aNumFmt.GetNumberingType()&(~LINK_TOKEN)))
    2096             :             {
    2097           0 :                 Size aSize(aNumFmt.GetGraphicSize() );
    2098           0 :                 Size aSaveSize(aSize);
    2099             : 
    2100           0 :                 if (aInitSize[i].Height())
    2101           0 :                     fSizeRatio = (double)aInitSize[i].Width() / (double)aInitSize[i].Height();
    2102             :                 else
    2103           0 :                     fSizeRatio = (double)1;
    2104             : 
    2105           0 :                 if(bWidth)
    2106             :                 {
    2107           0 :                     long nDelta = nWidthVal - aInitSize[i].Width();
    2108           0 :                     aSize.Width() = nWidthVal;
    2109           0 :                     if (bRatio)
    2110             :                     {
    2111           0 :                         aSize.Height() = aInitSize[i].Height() + (long)((double)nDelta / fSizeRatio);
    2112             :                         m_pHeightMF->SetUserValue(m_pHeightMF->Normalize(
    2113           0 :                             OutputDevice::LogicToLogic( aSize.Height(), (MapUnit)eCoreUnit, MAP_100TH_MM )),
    2114           0 :                                 FUNIT_100TH_MM);
    2115             :                     }
    2116             :                 }
    2117             :                 else
    2118             :                 {
    2119           0 :                     long nDelta = nHeightVal - aInitSize[i].Height();
    2120           0 :                     aSize.Height() = nHeightVal;
    2121           0 :                     if (bRatio)
    2122             :                     {
    2123           0 :                         aSize.Width() = aInitSize[i].Width() + (long)((double)nDelta * fSizeRatio);
    2124             :                         m_pWidthMF->SetUserValue(m_pWidthMF->Normalize(
    2125           0 :                             OutputDevice::LogicToLogic( aSize.Width(), (MapUnit)eCoreUnit, MAP_100TH_MM )),
    2126           0 :                                 FUNIT_100TH_MM);
    2127             :                     }
    2128             :                 }
    2129           0 :                 const SvxBrushItem* pBrushItem =  aNumFmt.GetBrush();
    2130           0 :                 sal_Int16 eOrient = aNumFmt.GetVertOrient();
    2131           0 :                 if(aSize != aSaveSize)
    2132           0 :                     bRepaint = true;
    2133           0 :                 aNumFmt.SetGraphicBrush( pBrushItem, &aSize, &eOrient );
    2134           0 :                 pActNum->SetLevel(i, aNumFmt);
    2135           0 :             }
    2136             :         }
    2137           0 :         nMask <<= 1;
    2138             :     }
    2139           0 :     SetModified(bRepaint);
    2140           0 :     return 0;
    2141             : }
    2142             : 
    2143           0 : IMPL_LINK( SvxNumOptionsTabPage, RatioHdl_Impl, CheckBox *, pBox )
    2144             : {
    2145           0 :     if (pBox->IsChecked())
    2146             :     {
    2147           0 :         if (bLastWidthModified)
    2148           0 :             SizeHdl_Impl(m_pWidthMF);
    2149             :         else
    2150           0 :             SizeHdl_Impl(m_pHeightMF);
    2151             :     }
    2152           0 :     return 0;
    2153             : }
    2154             : 
    2155           0 : IMPL_LINK_NOARG(SvxNumOptionsTabPage, CharFmtHdl_Impl)
    2156             : {
    2157           0 :     bAutomaticCharStyles = false;
    2158           0 :     sal_Int32 nEntryPos = m_pCharFmtLB->GetSelectEntryPos();
    2159           0 :     OUString sEntry = m_pCharFmtLB->GetSelectEntry();
    2160           0 :     sal_uInt16 nMask = 1;
    2161           0 :     OUString aEmptyStr;
    2162           0 :     for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
    2163             :     {
    2164           0 :         if(nActNumLvl & nMask)
    2165             :         {
    2166           0 :             SvxNumberFormat aNumFmt(pActNum->GetLevel(i));
    2167           0 :             if( 0 == nEntryPos )
    2168           0 :                 aNumFmt.SetCharFmtName(aEmptyStr);
    2169             :             else
    2170             :             {
    2171           0 :                 if(SVX_NUM_BITMAP != (aNumFmt.GetNumberingType()&(~LINK_TOKEN)))
    2172           0 :                     aNumFmt.SetCharFmtName(sEntry);
    2173             :             }
    2174           0 :             pActNum->SetLevel(i, aNumFmt);
    2175             :         }
    2176           0 :         nMask <<= 1;
    2177             :     }
    2178           0 :     SetModified(false);
    2179           0 :     return 0;
    2180             : 
    2181             : };
    2182             : 
    2183           0 : IMPL_LINK( SvxNumOptionsTabPage, EditModifyHdl_Impl, Edit *, pEdit )
    2184             : {
    2185           0 :     bool bPrefix = pEdit == m_pPrefixED;
    2186           0 :     bool bSuffix = pEdit == m_pSuffixED;
    2187           0 :     bool bStart = pEdit == m_pStartED;
    2188           0 :     sal_uInt16 nMask = 1;
    2189           0 :     for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
    2190             :     {
    2191           0 :         if(nActNumLvl & nMask)
    2192             :         {
    2193           0 :             SvxNumberFormat aNumFmt(pActNum->GetLevel(i));
    2194           0 :             if(bPrefix)
    2195           0 :                 aNumFmt.SetPrefix( m_pPrefixED->GetText() );
    2196           0 :             else if(bSuffix)
    2197           0 :                 aNumFmt.SetSuffix( m_pSuffixED->GetText() );
    2198           0 :             else if(bStart)
    2199           0 :                 aNumFmt.SetStart( (sal_uInt16)m_pStartED->GetValue() );
    2200             :             else //align
    2201             :             {
    2202           0 :                 sal_Int32 nPos = m_pAlignLB->GetSelectEntryPos();
    2203           0 :                 SvxAdjust eAdjust = SVX_ADJUST_CENTER;
    2204           0 :                 if(nPos == 0)
    2205           0 :                     eAdjust = SVX_ADJUST_LEFT;
    2206           0 :                 else if(nPos == 2)
    2207           0 :                     eAdjust = SVX_ADJUST_RIGHT;
    2208           0 :                 aNumFmt.SetNumAdjust( eAdjust );
    2209             :             }
    2210           0 :             pActNum->SetLevel(i, aNumFmt);
    2211             :         }
    2212           0 :         nMask <<= 1;
    2213             :     }
    2214           0 :     SetModified();
    2215             : 
    2216           0 :     return 0;
    2217             : }
    2218             : 
    2219           0 : static sal_uInt16 lcl_DrawGraphic(VirtualDevice* pVDev, const SvxNumberFormat &rFmt, sal_uInt16 nXStart,
    2220             :                         sal_uInt16 nYStart, sal_uInt16 nDivision)
    2221             : {
    2222           0 :     const SvxBrushItem* pBrushItem = rFmt.GetBrush();
    2223           0 :     sal_uInt16 nRet = 0;
    2224           0 :     if(pBrushItem)
    2225             :     {
    2226           0 :         const Graphic* pGrf = pBrushItem->GetGraphic();
    2227           0 :         if(pGrf)
    2228             :         {
    2229           0 :             Size aGSize( rFmt.GetGraphicSize() );
    2230           0 :             aGSize.Width() /= nDivision;
    2231           0 :             nRet = (sal_uInt16)aGSize.Width();
    2232           0 :             aGSize.Height() /= nDivision;
    2233             :             pGrf->Draw( pVDev, Point(nXStart,nYStart),
    2234           0 :                     pVDev->PixelToLogic( aGSize ) );
    2235             :         }
    2236             :     }
    2237           0 :     return nRet;
    2238             : 
    2239             : }
    2240             : 
    2241           0 : static sal_uInt16 lcl_DrawBullet(VirtualDevice* pVDev,
    2242             :             const SvxNumberFormat& rFmt, sal_uInt16 nXStart,
    2243             :             sal_uInt16 nYStart, const Size& rSize)
    2244             : {
    2245           0 :     vcl::Font aTmpFont(pVDev->GetFont());
    2246             : 
    2247             :     // via Uno it's possible that no font has been set!
    2248           0 :     vcl::Font aFont(rFmt.GetBulletFont() ? *rFmt.GetBulletFont() : aTmpFont);
    2249           0 :     Size aTmpSize(rSize);
    2250           0 :     aTmpSize.Width() *= rFmt.GetBulletRelSize();
    2251           0 :     aTmpSize.Width() /= 100 ;
    2252           0 :     aTmpSize.Height() *= rFmt.GetBulletRelSize();
    2253           0 :     aTmpSize.Height() /= 100 ;
    2254             :     // in case of a height of zero it is drawed in original height
    2255           0 :     if(!aTmpSize.Height())
    2256           0 :         aTmpSize.Height() = 1;
    2257           0 :     aFont.SetSize(aTmpSize);
    2258           0 :     aFont.SetTransparent(true);
    2259           0 :     Color aBulletColor = rFmt.GetBulletColor();
    2260           0 :     if(aBulletColor.GetColor() == COL_AUTO)
    2261           0 :         aBulletColor = Color(pVDev->GetFillColor().IsDark() ? COL_WHITE : COL_BLACK);
    2262           0 :     else if(aBulletColor == pVDev->GetFillColor())
    2263           0 :         aBulletColor.Invert();
    2264           0 :     aFont.SetColor(aBulletColor);
    2265           0 :     pVDev->SetFont( aFont );
    2266           0 :     OUString aText(rFmt.GetBulletChar());
    2267           0 :     long nY = nYStart;
    2268           0 :     nY -= ((aTmpSize.Height() - rSize.Height())/ 2);
    2269           0 :     pVDev->DrawText( Point(nXStart, nY), aText );
    2270           0 :     sal_uInt16 nRet = (sal_uInt16)pVDev->GetTextWidth(aText);
    2271             : 
    2272           0 :     pVDev->SetFont(aTmpFont);
    2273           0 :     return nRet;
    2274             : }
    2275             : 
    2276           0 : SvxNumberingPreview::SvxNumberingPreview(vcl::Window* pParent, WinBits nWinBits)
    2277             :     : Window(pParent, nWinBits)
    2278             :     , pActNum(0)
    2279             :     , nPageWidth(0)
    2280             :     , pOutlineNames(0)
    2281             :     , bPosition(false)
    2282           0 :     , nActLevel(SAL_MAX_UINT16)
    2283             : {
    2284           0 :     SetBorderStyle(WindowBorderStyle::MONO);
    2285           0 : }
    2286             : 
    2287           0 : extern "C" SAL_DLLPUBLIC_EXPORT vcl::Window* SAL_CALL makeSvxNumberingPreview(vcl::Window *pParent, VclBuilder::stringmap &)
    2288             : {
    2289           0 :     return new SvxNumberingPreview(pParent, WB_BORDER);
    2290             : }
    2291             : 
    2292             : // paint preview of numeration
    2293           0 : void    SvxNumberingPreview::Paint( const Rectangle& /*rRect*/ )
    2294             : {
    2295           0 :     Size aSize(PixelToLogic(GetOutputSizePixel()));
    2296             : 
    2297           0 :     const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
    2298           0 :     const Color aBackColor = rStyleSettings.GetFieldColor();
    2299           0 :     const Color aTextColor = rStyleSettings.GetFieldTextColor();
    2300             : 
    2301           0 :     boost::scoped_ptr<VirtualDevice> pVDev(new VirtualDevice(*this));
    2302           0 :     pVDev->EnableRTL( IsRTLEnabled() );
    2303           0 :     pVDev->SetMapMode(GetMapMode());
    2304           0 :     pVDev->SetOutputSize( aSize );
    2305             : 
    2306           0 :     Color aLineColor(COL_LIGHTGRAY);
    2307           0 :     if(aLineColor == aBackColor)
    2308           0 :         aLineColor.Invert();
    2309           0 :     pVDev->SetLineColor(aLineColor);
    2310           0 :     pVDev->SetFillColor( aBackColor );
    2311             : 
    2312           0 :     if(pActNum)
    2313             :     {
    2314             :         sal_uInt16 nWidthRelation;
    2315           0 :         if(nPageWidth)
    2316             :         {
    2317           0 :             nWidthRelation = sal_uInt16 (nPageWidth / aSize.Width());
    2318           0 :             if(bPosition)
    2319           0 :                 nWidthRelation = nWidthRelation * 2 / 3;
    2320             :             else
    2321           0 :                 nWidthRelation = nWidthRelation / 4;
    2322             :         }
    2323             :         else
    2324           0 :             nWidthRelation = 30; // chapter dialog
    2325             : 
    2326             :         // height per level
    2327           0 :         sal_uInt16 nXStep = sal::static_int_cast< sal_uInt16 >(aSize.Width() / (3 * pActNum->GetLevelCount()));
    2328           0 :         if(pActNum->GetLevelCount() < 10)
    2329           0 :             nXStep /= 2;
    2330           0 :         sal_uInt16 nYStart = 4;
    2331             :         // the whole height mustn't be used for a single level
    2332           0 :         sal_uInt16 nYStep = sal::static_int_cast< sal_uInt16 >((aSize.Height() - 6)/ (pActNum->GetLevelCount() > 1 ? pActNum->GetLevelCount() : 5));
    2333           0 :         aStdFont = OutputDevice::GetDefaultFont(
    2334           0 :                 DEFAULTFONT_UI_SANS, MsLangId::getSystemLanguage(), DEFAULTFONT_FLAGS_ONLYONE);
    2335           0 :         aStdFont.SetColor(aTextColor);
    2336           0 :         aStdFont.SetFillColor(aBackColor);
    2337             : 
    2338           0 :         sal_uInt16 nFontHeight = nYStep * 6 / 10;
    2339           0 :         if(bPosition)
    2340           0 :             nFontHeight = nYStep * 15 / 10;
    2341           0 :         aStdFont.SetSize(Size( 0, nFontHeight ));
    2342             : 
    2343           0 :         SvxNodeNum aNum( (sal_uInt8)0 );
    2344           0 :         sal_uInt16 nPreNum = pActNum->GetLevel(0).GetStart();
    2345             : 
    2346           0 :         if(bPosition)
    2347             :         {
    2348           0 :             sal_uInt16 nLineHeight = nFontHeight * 8 / 7;
    2349           0 :             sal_uInt8 nStart = 0;
    2350           0 :             while( !(nActLevel & (1<<nStart)) )
    2351             :             {
    2352           0 :                 nStart++;
    2353             :             }
    2354           0 :             if(nStart)
    2355           0 :                 nStart--;
    2356           0 :             sal_uInt8 nEnd = std::min( (sal_uInt8)(nStart + 3), (sal_uInt8)pActNum->GetLevelCount() );
    2357           0 :             for( sal_uInt8 nLevel = nStart; nLevel < nEnd; ++nLevel )
    2358             :             {
    2359           0 :                 const SvxNumberFormat &rFmt = pActNum->GetLevel(nLevel);
    2360           0 :                 aNum.GetLevelVal()[ nLevel ] = rFmt.GetStart();
    2361             : 
    2362           0 :                 sal_uInt16 nXStart( 0 );
    2363           0 :                 short nTextOffset( 0 );
    2364           0 :                 sal_uInt16 nNumberXPos( 0 );
    2365           0 :                 if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_WIDTH_AND_POSITION )
    2366             :                 {
    2367           0 :                     nXStart = rFmt.GetAbsLSpace() / nWidthRelation;
    2368           0 :                     nTextOffset = rFmt.GetCharTextDistance() / nWidthRelation;
    2369           0 :                     nNumberXPos = nXStart;
    2370           0 :                     sal_uInt16 nFirstLineOffset = (-rFmt.GetFirstLineOffset()) / nWidthRelation;
    2371             : 
    2372           0 :                     if(nFirstLineOffset <= nNumberXPos)
    2373           0 :                         nNumberXPos = nNumberXPos - nFirstLineOffset;
    2374             :                     else
    2375           0 :                         nNumberXPos = 0;
    2376             :                     // in draw this is valid
    2377           0 :                     if(nTextOffset < 0)
    2378           0 :                         nNumberXPos = nNumberXPos + nTextOffset;
    2379             :                 }
    2380           0 :                 else if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_ALIGNMENT )
    2381             :                 {
    2382           0 :                     const long nTmpNumberXPos( ( rFmt.GetIndentAt() +
    2383           0 :                                                  rFmt.GetFirstLineIndent() ) /
    2384           0 :                                                nWidthRelation );
    2385           0 :                     if ( nTmpNumberXPos < 0 )
    2386             :                     {
    2387           0 :                         nNumberXPos = 0;
    2388             :                     }
    2389             :                     else
    2390             :                     {
    2391           0 :                         nNumberXPos = static_cast<sal_uInt16>( nTmpNumberXPos );
    2392             :                     }
    2393             :                 }
    2394             : 
    2395           0 :                 sal_uInt16 nBulletWidth = 0;
    2396           0 :                 if( SVX_NUM_BITMAP == (rFmt.GetNumberingType() &(~LINK_TOKEN)))
    2397             :                 {
    2398           0 :                     nBulletWidth = rFmt.IsShowSymbol() ? lcl_DrawGraphic(pVDev.get(), rFmt,
    2399             :                                         nNumberXPos,
    2400           0 :                                             nYStart, nWidthRelation) : 0;
    2401             :                 }
    2402           0 :                 else if( SVX_NUM_CHAR_SPECIAL == rFmt.GetNumberingType() )
    2403             :                 {
    2404           0 :                     nBulletWidth =  rFmt.IsShowSymbol() ?
    2405           0 :                         lcl_DrawBullet(pVDev.get(), rFmt, nNumberXPos, nYStart, aStdFont.GetSize()) : 0;
    2406             :                 }
    2407             :                 else
    2408             :                 {
    2409           0 :                     pVDev->SetFont(aStdFont);
    2410           0 :                     aNum.SetLevel( nLevel );
    2411           0 :                     if(pActNum->IsContinuousNumbering())
    2412           0 :                         aNum.GetLevelVal()[nLevel] = nPreNum;
    2413           0 :                     OUString aText(pActNum->MakeNumString( aNum ));
    2414           0 :                     vcl::Font aSaveFont = pVDev->GetFont();
    2415           0 :                     vcl::Font aColorFont(aSaveFont);
    2416           0 :                     Color aTmpBulletColor = rFmt.GetBulletColor();
    2417           0 :                     if(aTmpBulletColor.GetColor() == COL_AUTO)
    2418           0 :                         aTmpBulletColor = Color(aBackColor.IsDark() ? COL_WHITE : COL_BLACK);
    2419           0 :                     else if(aTmpBulletColor == aBackColor)
    2420           0 :                         aTmpBulletColor.Invert();
    2421           0 :                     aColorFont.SetColor(aTmpBulletColor);
    2422           0 :                     pVDev->SetFont(aColorFont);
    2423           0 :                     pVDev->DrawText( Point(nNumberXPos, nYStart), aText );
    2424           0 :                     pVDev->SetFont(aSaveFont);
    2425           0 :                     nBulletWidth = (sal_uInt16)pVDev->GetTextWidth(aText);
    2426           0 :                     nPreNum++;
    2427             :                 }
    2428           0 :                 if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_ALIGNMENT &&
    2429           0 :                      rFmt.GetLabelFollowedBy() == SvxNumberFormat::SPACE )
    2430             :                 {
    2431           0 :                     pVDev->SetFont(aStdFont);
    2432           0 :                     OUString aText(' ');
    2433           0 :                     pVDev->DrawText( Point(nNumberXPos, nYStart), aText );
    2434           0 :                     nBulletWidth = nBulletWidth + (sal_uInt16)pVDev->GetTextWidth(aText);
    2435             :                 }
    2436             : 
    2437           0 :                 sal_uInt16 nTextXPos( 0 );
    2438           0 :                 if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_WIDTH_AND_POSITION )
    2439             :                 {
    2440           0 :                     nTextXPos = nXStart;
    2441           0 :                     if(nTextOffset < 0)
    2442           0 :                          nTextXPos = nTextXPos + nTextOffset;
    2443           0 :                     if(nNumberXPos + nBulletWidth + nTextOffset > nTextXPos )
    2444           0 :                         nTextXPos = nNumberXPos + nBulletWidth + nTextOffset;
    2445             :                 }
    2446           0 :                 else if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_ALIGNMENT )
    2447             :                 {
    2448           0 :                     switch ( rFmt.GetLabelFollowedBy() )
    2449             :                     {
    2450             :                         case SvxNumberFormat::LISTTAB:
    2451             :                         {
    2452             :                             nTextXPos = static_cast<sal_uInt16>(
    2453           0 :                                             rFmt.GetListtabPos() / nWidthRelation );
    2454           0 :                             if ( nTextXPos < nNumberXPos + nBulletWidth )
    2455             :                             {
    2456           0 :                                 nTextXPos = nNumberXPos + nBulletWidth;
    2457             :                             }
    2458             :                         }
    2459           0 :                         break;
    2460             :                         case SvxNumberFormat::SPACE:
    2461             :                         case SvxNumberFormat::NOTHING:
    2462             :                         {
    2463           0 :                             nTextXPos = nNumberXPos + nBulletWidth;
    2464             :                         }
    2465           0 :                         break;
    2466             :                     }
    2467             : 
    2468           0 :                     nXStart = static_cast<sal_uInt16>( rFmt.GetIndentAt() / nWidthRelation );
    2469             :                 }
    2470             : 
    2471           0 :                 Rectangle aRect1(Point(nTextXPos, nYStart + nFontHeight / 2), Size(aSize.Width() / 2, 2));
    2472           0 :                 pVDev->SetFillColor( aBackColor );
    2473           0 :                 pVDev->DrawRect( aRect1 );
    2474             : 
    2475           0 :                 Rectangle aRect2(Point(nXStart, nYStart + nLineHeight + nFontHeight / 2 ), Size(aSize.Width() / 2, 2));
    2476           0 :                 pVDev->DrawRect( aRect2 );
    2477           0 :                 nYStart += 2 * nLineHeight;
    2478             :             }
    2479             :         }
    2480             :         else
    2481             :         {
    2482             :             //#i5153# painting gray or black rectangles as 'normal' numbering text
    2483           0 :             OUString sMsg( "Preview" );
    2484           0 :             long nWidth = pVDev->GetTextWidth(sMsg);
    2485           0 :             long nTextHeight = pVDev->GetTextHeight();
    2486           0 :             long nRectHeight = nTextHeight * 2 / 3;
    2487           0 :             long nTopOffset = nTextHeight - nRectHeight;
    2488           0 :             Color aBlackColor(COL_BLACK);
    2489           0 :             if(aBlackColor == aBackColor)
    2490           0 :                 aBlackColor.Invert();
    2491             : 
    2492           0 :             for( sal_uInt8 nLevel = 0; nLevel < pActNum->GetLevelCount();
    2493             :                             ++nLevel, nYStart = nYStart + nYStep )
    2494             :             {
    2495           0 :                 const SvxNumberFormat &rFmt = pActNum->GetLevel(nLevel);
    2496           0 :                 aNum.GetLevelVal()[ nLevel ] = rFmt.GetStart();
    2497           0 :                 sal_uInt16 nXStart( 0 );
    2498           0 :                 if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_WIDTH_AND_POSITION )
    2499             :                 {
    2500           0 :                     nXStart = rFmt.GetAbsLSpace() / nWidthRelation;
    2501             :                 }
    2502           0 :                 else if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_ALIGNMENT )
    2503             :                 {
    2504           0 :                     const long nTmpXStart( ( rFmt.GetIndentAt() +
    2505           0 :                                              rFmt.GetFirstLineIndent() ) /
    2506           0 :                                            nWidthRelation );
    2507           0 :                     if ( nTmpXStart < 0 )
    2508             :                     {
    2509           0 :                         nXStart = 0;
    2510             :                     }
    2511             :                     else
    2512             :                     {
    2513           0 :                         nXStart = static_cast<sal_uInt16>(nTmpXStart);
    2514             :                     }
    2515             :                 }
    2516           0 :                 nXStart /= 2;
    2517           0 :                 nXStart += 2;
    2518           0 :                 sal_uInt16 nTextOffset = 2 * nXStep;
    2519           0 :                 if( SVX_NUM_BITMAP == (rFmt.GetNumberingType()&(~LINK_TOKEN)) )
    2520             :                 {
    2521           0 :                     if(rFmt.IsShowSymbol())
    2522             :                     {
    2523           0 :                         nTextOffset = lcl_DrawGraphic(pVDev.get(), rFmt, nXStart, nYStart, nWidthRelation);
    2524           0 :                         nTextOffset = nTextOffset + nXStep;
    2525             :                     }
    2526             :                 }
    2527           0 :                 else if( SVX_NUM_CHAR_SPECIAL == rFmt.GetNumberingType() )
    2528             :                 {
    2529           0 :                     if(rFmt.IsShowSymbol())
    2530             :                     {
    2531           0 :                         nTextOffset =  lcl_DrawBullet(pVDev.get(), rFmt, nXStart, nYStart, aStdFont.GetSize());
    2532           0 :                         nTextOffset = nTextOffset + nXStep;
    2533             :                     }
    2534             :                 }
    2535             :                 else
    2536             :                 {
    2537           0 :                     vcl::Font aColorFont(aStdFont);
    2538           0 :                     Color aTmpBulletColor = rFmt.GetBulletColor();
    2539           0 :                     if(aTmpBulletColor.GetColor() == COL_AUTO)
    2540           0 :                         aTmpBulletColor = Color(aBackColor.IsDark() ? COL_WHITE : COL_BLACK);
    2541           0 :                     else if(aTmpBulletColor == aBackColor)
    2542           0 :                         aTmpBulletColor.Invert();
    2543           0 :                     aColorFont.SetColor(aTmpBulletColor);
    2544           0 :                     pVDev->SetFont(aColorFont);
    2545           0 :                     aNum.SetLevel( nLevel );
    2546           0 :                     if(pActNum->IsContinuousNumbering())
    2547           0 :                         aNum.GetLevelVal()[nLevel] = nPreNum;
    2548           0 :                     OUString aText(pActNum->MakeNumString( aNum ));
    2549           0 :                     pVDev->DrawText( Point(nXStart, nYStart), aText );
    2550           0 :                     pVDev->SetFont(aStdFont);
    2551           0 :                     nTextOffset = (sal_uInt16)pVDev->GetTextWidth(aText);
    2552           0 :                     nTextOffset = nTextOffset + nXStep;
    2553           0 :                     nPreNum++;
    2554             :                 }
    2555           0 :                 if(pOutlineNames)
    2556             :                 {
    2557             :                     //#i5153# outline numberings still use the style names as text
    2558           0 :                     pVDev->SetFont(aStdFont);
    2559           0 :                     sMsg = pOutlineNames[nLevel];
    2560           0 :                     pVDev->DrawText( Point(nXStart + nTextOffset, nYStart), sMsg );
    2561             :                 }
    2562             :                 else
    2563             :                 {
    2564             :                     //#i5153# the selected rectangle(s) should be black
    2565           0 :                     if( 0 != (nActLevel & (1<<nLevel)))
    2566             :                     {
    2567           0 :                         pVDev->SetFillColor( aBlackColor );
    2568           0 :                         pVDev->SetLineColor( aBlackColor );
    2569             :                     }
    2570             :                     else
    2571             :                     {
    2572             :                         //#i5153# unselected levels are gray
    2573           0 :                         pVDev->SetFillColor( aLineColor );
    2574           0 :                         pVDev->SetLineColor( aLineColor );
    2575             :                     }
    2576           0 :                     Rectangle aRect1(Point(nXStart + nTextOffset, nYStart + nTopOffset), Size(nWidth, nRectHeight));
    2577           0 :                     pVDev->DrawRect(aRect1);
    2578             :                 }
    2579           0 :             }
    2580             :         }
    2581             :     }
    2582             :     DrawOutDev( Point(0,0), aSize,
    2583             :                 Point(0,0), aSize,
    2584           0 :                         *pVDev );
    2585           0 : }
    2586             : 
    2587             : //See uiconfig/swriter/ui/outlinepositionpage.ui for effectively a duplicate
    2588             : //dialog to this one, except with a different preview window impl.
    2589             : //TODO, determine if SwNumPositionTabPage and SvxNumPositionTabPage can be
    2590             : //merged
    2591           0 : SvxNumPositionTabPage::SvxNumPositionTabPage(vcl::Window* pParent,
    2592             :                                const SfxItemSet& rSet)
    2593             :     : SfxTabPage(pParent, "NumberingPositionPage", "cui/ui/numberingpositionpage.ui", &rSet)
    2594             :     , pActNum(0)
    2595             :     , pSaveNum(0)
    2596             :     , nActNumLvl(SAL_MAX_UINT16)
    2597             :     , nNumItemId(SID_ATTR_NUMBERING_RULE)
    2598             :     , bModified(false)
    2599             :     , bPreset(false)
    2600             :     , bInInintControl(false)
    2601           0 :     , bLabelAlignmentPosAndSpaceModeActive(false)
    2602             : {
    2603           0 :     SetExchangeSupport();
    2604             : 
    2605           0 :     get(m_pLevelLB, "levellb");
    2606           0 :     get(m_pDistBorderFT, "indent");
    2607           0 :     get(m_pDistBorderMF, "indentmf");
    2608           0 :     get(m_pRelativeCB, "relative");
    2609           0 :     get(m_pIndentFT, "numberingwidth");
    2610           0 :     get(m_pIndentMF, "numberingwidthmf");
    2611           0 :     get(m_pDistNumFT, "numdist");
    2612           0 :     get(m_pDistNumMF, "numdistmf");
    2613           0 :     get(m_pAlignFT, "numalign");
    2614           0 :     get(m_pAlignLB, "numalignlb");
    2615             : 
    2616           0 :     get(m_pLabelFollowedByFT, "numfollowedby");
    2617           0 :     get(m_pLabelFollowedByLB, "numfollowedbylb");
    2618           0 :     get(m_pListtabFT, "at");
    2619           0 :     get(m_pListtabMF, "atmf");
    2620           0 :     get(m_pAlign2FT, "num2align");
    2621           0 :     get(m_pAlign2LB, "num2alignlb");
    2622           0 :     get(m_pAlignedAtFT, "alignedat");
    2623           0 :     get(m_pAlignedAtMF, "alignedatmf");
    2624           0 :     get(m_pIndentAtFT, "indentat");
    2625           0 :     get(m_pIndentAtMF, "indentatmf");
    2626             : 
    2627           0 :     get(m_pStandardPB, "standard");
    2628           0 :     get(m_pPreviewWIN, "preview");
    2629             : 
    2630           0 :     m_pPreviewWIN->SetBackground(Wallpaper(Color(COL_TRANSPARENT)));
    2631             : 
    2632           0 :     m_pRelativeCB->Check();
    2633           0 :     m_pAlignLB->SetSelectHdl(LINK(this, SvxNumPositionTabPage, EditModifyHdl_Impl));
    2634           0 :     m_pAlign2LB->SetSelectHdl(LINK(this, SvxNumPositionTabPage, EditModifyHdl_Impl));
    2635           0 :     for ( sal_Int32 i = 0; i < m_pAlignLB->GetEntryCount(); ++i )
    2636             :     {
    2637           0 :         m_pAlign2LB->InsertEntry( m_pAlignLB->GetEntry( i ) );
    2638             :     }
    2639           0 :     m_pAlign2LB->SetDropDownLineCount( m_pAlign2LB->GetEntryCount() );
    2640             : 
    2641           0 :     Link aLk = LINK(this, SvxNumPositionTabPage, DistanceHdl_Impl);
    2642             : 
    2643           0 :     m_pDistBorderMF->SetUpHdl(aLk);
    2644           0 :     m_pDistBorderMF->SetDownHdl(aLk);
    2645           0 :     m_pDistBorderMF->SetLoseFocusHdl(aLk);
    2646             : 
    2647           0 :     m_pDistNumMF->SetUpHdl(aLk);
    2648           0 :     m_pDistNumMF->SetDownHdl(aLk);
    2649           0 :     m_pDistNumMF->SetLoseFocusHdl(aLk);
    2650             : 
    2651           0 :     m_pIndentMF->SetUpHdl(aLk);
    2652           0 :     m_pIndentMF->SetDownHdl(aLk);
    2653           0 :     m_pIndentMF->SetLoseFocusHdl(aLk);
    2654             : 
    2655           0 :     m_pLabelFollowedByLB->SetDropDownLineCount( m_pLabelFollowedByLB->GetEntryCount() );
    2656           0 :     m_pLabelFollowedByLB->SetSelectHdl( LINK(this, SvxNumPositionTabPage, LabelFollowedByHdl_Impl) );
    2657             : 
    2658           0 :     aLk = LINK(this, SvxNumPositionTabPage, ListtabPosHdl_Impl);
    2659           0 :     m_pListtabMF->SetUpHdl(aLk);
    2660           0 :     m_pListtabMF->SetDownHdl(aLk);
    2661           0 :     m_pListtabMF->SetLoseFocusHdl(aLk);
    2662             : 
    2663           0 :     aLk = LINK(this, SvxNumPositionTabPage, AlignAtHdl_Impl);
    2664           0 :     m_pAlignedAtMF->SetUpHdl(aLk);
    2665           0 :     m_pAlignedAtMF->SetDownHdl(aLk);
    2666           0 :     m_pAlignedAtMF->SetLoseFocusHdl(aLk);
    2667             : 
    2668           0 :     aLk = LINK(this, SvxNumPositionTabPage, IndentAtHdl_Impl);
    2669           0 :     m_pIndentAtMF->SetUpHdl(aLk);
    2670           0 :     m_pIndentAtMF->SetDownHdl(aLk);
    2671           0 :     m_pIndentAtMF->SetLoseFocusHdl(aLk);
    2672             : 
    2673           0 :     m_pLevelLB->EnableMultiSelection(true);
    2674           0 :     m_pLevelLB->SetSelectHdl(LINK(this, SvxNumPositionTabPage, LevelHdl_Impl));
    2675           0 :     m_pRelativeCB->SetClickHdl(LINK(this, SvxNumPositionTabPage, RelativeHdl_Impl));
    2676           0 :     m_pStandardPB->SetClickHdl(LINK(this, SvxNumPositionTabPage, StandardHdl_Impl));
    2677             : 
    2678             : 
    2679           0 :     m_pRelativeCB->Check(bLastRelative);
    2680           0 :     m_pPreviewWIN->SetPositionMode();
    2681           0 :     eCoreUnit = rSet.GetPool()->GetMetric(rSet.GetPool()->GetWhich(SID_ATTR_NUMBERING_RULE));
    2682           0 : }
    2683             : 
    2684           0 : SvxNumPositionTabPage::~SvxNumPositionTabPage()
    2685             : {
    2686           0 :     delete pActNum;
    2687           0 :     delete pSaveNum;
    2688           0 : }
    2689             : /*-------------------------------------------------------*/
    2690             : 
    2691             : #if OSL_DEBUG_LEVEL > 1
    2692             : void lcl_PrintDebugOutput(FixedText& rFixed, const SvxNumberFormat& rNumFmt)
    2693             : {
    2694             :     OUString const sHash( " # " );
    2695             :     if ( rNumFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_WIDTH_AND_POSITION )
    2696             :     {
    2697             :         OUString sDebugText( OUString::number( convertTwipToMm100(rNumFmt.GetAbsLSpace() ) ) );
    2698             :         sDebugText += sHash;
    2699             :         sDebugText += OUString::number( convertTwipToMm100(rNumFmt.GetCharTextDistance() ) );
    2700             :         sDebugText += sHash;
    2701             :         sDebugText += OUString::number( convertTwipToMm100(rNumFmt.GetFirstLineOffset() ) );
    2702             :         rFixed.SetText(sDebugText);
    2703             :     }
    2704             :     else if ( rNumFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_ALIGNMENT )
    2705             :     {
    2706             :         OUString sDebugText( OUString::number( convertTwipToMm100(rNumFmt.GetListtabPos() ) ) );
    2707             :         sDebugText += sHash;
    2708             :         sDebugText += OUString::number( convertTwipToMm100(rNumFmt.GetFirstLineIndent() ) );
    2709             :         sDebugText += sHash;
    2710             :         sDebugText += OUString::number( convertTwipToMm100(rNumFmt.GetIndentAt() ) );
    2711             :         rFixed.SetText(sDebugText);
    2712             :     }
    2713             : 
    2714             : }
    2715             : #endif
    2716             : 
    2717           0 : void SvxNumPositionTabPage::InitControls()
    2718             : {
    2719           0 :     bInInintControl = true;
    2720           0 :     const bool bRelative = !bLabelAlignmentPosAndSpaceModeActive &&
    2721           0 :                      m_pRelativeCB->IsEnabled() && m_pRelativeCB->IsChecked();
    2722           0 :     const bool bSingleSelection = m_pLevelLB->GetSelectEntryCount() == 1 &&
    2723           0 :                             SAL_MAX_UINT16 != nActNumLvl;
    2724             : 
    2725           0 :     m_pDistBorderMF->Enable( !bLabelAlignmentPosAndSpaceModeActive &&
    2726           0 :                           ( bSingleSelection || bRelative ) );
    2727           0 :     m_pDistBorderFT->Enable( !bLabelAlignmentPosAndSpaceModeActive &&
    2728           0 :                           ( bSingleSelection || bRelative ) );
    2729             : 
    2730           0 :     bool bSetDistEmpty = false;
    2731           0 :     bool bSameDistBorderNum = !bLabelAlignmentPosAndSpaceModeActive;
    2732           0 :     bool bSameDist      = !bLabelAlignmentPosAndSpaceModeActive;
    2733           0 :     bool bSameIndent    = !bLabelAlignmentPosAndSpaceModeActive;
    2734           0 :     bool bSameAdjust    = true;
    2735             : 
    2736           0 :     bool bSameLabelFollowedBy = bLabelAlignmentPosAndSpaceModeActive;
    2737           0 :     bool bSameListtab = bLabelAlignmentPosAndSpaceModeActive;
    2738           0 :     bool bSameAlignAt = bLabelAlignmentPosAndSpaceModeActive;
    2739           0 :     bool bSameIndentAt = bLabelAlignmentPosAndSpaceModeActive;
    2740             : 
    2741             :     const SvxNumberFormat* aNumFmtArr[SVX_MAX_NUM];
    2742           0 :     sal_uInt16 nMask = 1;
    2743           0 :     sal_uInt16 nLvl = SAL_MAX_UINT16;
    2744           0 :     long nFirstBorderTextRelative = -1;
    2745           0 :     for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
    2746             :     {
    2747           0 :         aNumFmtArr[i] = &pActNum->GetLevel(i);
    2748           0 :         if(nActNumLvl & nMask)
    2749             :         {
    2750           0 :             if(SAL_MAX_UINT16 == nLvl)
    2751           0 :                 nLvl = i;
    2752             : 
    2753           0 :             if( i > nLvl)
    2754             :             {
    2755           0 :                 bSameAdjust &= aNumFmtArr[i]->GetNumAdjust() == aNumFmtArr[nLvl]->GetNumAdjust();
    2756           0 :                 if ( !bLabelAlignmentPosAndSpaceModeActive )
    2757             :                 {
    2758           0 :                     if(bRelative)
    2759             :                     {
    2760           0 :                         if(nFirstBorderTextRelative == -1)
    2761             :                             nFirstBorderTextRelative =
    2762           0 :                             (aNumFmtArr[i]->GetAbsLSpace() + aNumFmtArr[i]->GetFirstLineOffset() -
    2763           0 :                             aNumFmtArr[i - 1]->GetAbsLSpace() + aNumFmtArr[i - 1]->GetFirstLineOffset());
    2764             :                         else
    2765           0 :                             bSameDistBorderNum &= nFirstBorderTextRelative ==
    2766           0 :                             (aNumFmtArr[i]->GetAbsLSpace() + aNumFmtArr[i]->GetFirstLineOffset() -
    2767           0 :                             aNumFmtArr[i - 1]->GetAbsLSpace() + aNumFmtArr[i - 1]->GetFirstLineOffset());
    2768             :                     }
    2769             :                     else
    2770             :                         bSameDistBorderNum &=
    2771           0 :                         aNumFmtArr[i]->GetAbsLSpace() - aNumFmtArr[i]->GetFirstLineOffset() ==
    2772           0 :                         aNumFmtArr[i - 1]->GetAbsLSpace() - aNumFmtArr[i - 1]->GetFirstLineOffset();
    2773             : 
    2774           0 :                     bSameDist       &= aNumFmtArr[i]->GetCharTextDistance() == aNumFmtArr[nLvl]->GetCharTextDistance();
    2775           0 :                     bSameIndent     &= aNumFmtArr[i]->GetFirstLineOffset() == aNumFmtArr[nLvl]->GetFirstLineOffset();
    2776             :                 }
    2777             :                 else
    2778             :                 {
    2779             :                     bSameLabelFollowedBy &=
    2780           0 :                         aNumFmtArr[i]->GetLabelFollowedBy() == aNumFmtArr[nLvl]->GetLabelFollowedBy();
    2781             :                     bSameListtab &=
    2782           0 :                         aNumFmtArr[i]->GetListtabPos() == aNumFmtArr[nLvl]->GetListtabPos();
    2783             :                     bSameAlignAt &=
    2784           0 :                         ( ( aNumFmtArr[i]->GetIndentAt() + aNumFmtArr[i]->GetFirstLineIndent() )
    2785           0 :                             == ( aNumFmtArr[nLvl]->GetIndentAt() + aNumFmtArr[nLvl]->GetFirstLineIndent() ) );
    2786             :                     bSameIndentAt &=
    2787           0 :                         aNumFmtArr[i]->GetIndentAt() == aNumFmtArr[nLvl]->GetIndentAt();
    2788             :                 }
    2789             :             }
    2790             :         }
    2791           0 :         nMask <<= 1;
    2792             : 
    2793             :     }
    2794           0 :     if (SVX_MAX_NUM <= nLvl)
    2795             :     {
    2796             :         OSL_ENSURE(false, "cannot happen.");
    2797           0 :         return;
    2798             :     }
    2799             : 
    2800           0 :     if(bSameDistBorderNum)
    2801             :     {
    2802             :         long nDistBorderNum;
    2803           0 :         if(bRelative)
    2804             :         {
    2805           0 :             nDistBorderNum = (long)aNumFmtArr[nLvl]->GetAbsLSpace()+ aNumFmtArr[nLvl]->GetFirstLineOffset();
    2806           0 :             if(nLvl)
    2807           0 :                 nDistBorderNum -= (long)aNumFmtArr[nLvl - 1]->GetAbsLSpace()+ aNumFmtArr[nLvl - 1]->GetFirstLineOffset();
    2808             :         }
    2809             :         else
    2810             :         {
    2811           0 :             nDistBorderNum = (long)aNumFmtArr[nLvl]->GetAbsLSpace()+ aNumFmtArr[nLvl]->GetFirstLineOffset();
    2812             :         }
    2813           0 :         SetMetricValue(*m_pDistBorderMF, nDistBorderNum, eCoreUnit);
    2814             :     }
    2815             :     else
    2816           0 :         bSetDistEmpty = true;
    2817             : 
    2818           0 :     const OUString aEmptyStr;
    2819           0 :     if(bSameDist)
    2820           0 :         SetMetricValue(*m_pDistNumMF, aNumFmtArr[nLvl]->GetCharTextDistance(), eCoreUnit);
    2821             :     else
    2822           0 :         m_pDistNumMF->SetText(aEmptyStr);
    2823           0 :     if(bSameIndent)
    2824           0 :         SetMetricValue(*m_pIndentMF, - aNumFmtArr[nLvl]->GetFirstLineOffset(), eCoreUnit);
    2825             :     else
    2826           0 :         m_pIndentMF->SetText(aEmptyStr);
    2827             : 
    2828           0 :     if(bSameAdjust)
    2829             :     {
    2830           0 :         sal_Int32 nPos = 1; // centered
    2831           0 :         if(aNumFmtArr[nLvl]->GetNumAdjust() == SVX_ADJUST_LEFT)
    2832           0 :             nPos = 0;
    2833           0 :         else if(aNumFmtArr[nLvl]->GetNumAdjust() == SVX_ADJUST_RIGHT)
    2834           0 :             nPos = 2;
    2835           0 :         m_pAlignLB->SelectEntryPos(nPos);
    2836           0 :         m_pAlign2LB->SelectEntryPos( nPos );
    2837             :     }
    2838             :     else
    2839             :     {
    2840           0 :         m_pAlignLB->SetNoSelection();
    2841           0 :         m_pAlign2LB->SetNoSelection();
    2842             :     }
    2843             : 
    2844           0 :     if ( bSameLabelFollowedBy )
    2845             :     {
    2846           0 :         sal_Int32 nPos = 0; // LISTTAB
    2847           0 :         if ( aNumFmtArr[nLvl]->GetLabelFollowedBy() == SvxNumberFormat::SPACE )
    2848             :         {
    2849           0 :             nPos = 1;
    2850             :         }
    2851           0 :         else if ( aNumFmtArr[nLvl]->GetLabelFollowedBy() == SvxNumberFormat::NOTHING )
    2852             :         {
    2853           0 :             nPos = 2;
    2854             :         }
    2855           0 :         m_pLabelFollowedByLB->SelectEntryPos( nPos );
    2856             :     }
    2857             :     else
    2858             :     {
    2859           0 :         m_pLabelFollowedByLB->SetNoSelection();
    2860             :     }
    2861             : 
    2862           0 :     if ( aNumFmtArr[nLvl]->GetLabelFollowedBy() == SvxNumberFormat::LISTTAB )
    2863             :     {
    2864           0 :         m_pListtabFT->Enable( true );
    2865           0 :         m_pListtabMF->Enable( true );
    2866           0 :         if ( bSameListtab )
    2867             :         {
    2868           0 :             SetMetricValue(*m_pListtabMF, aNumFmtArr[nLvl]->GetListtabPos(), eCoreUnit);
    2869             :         }
    2870             :         else
    2871             :         {
    2872           0 :             m_pListtabMF->SetText(aEmptyStr);
    2873             :         }
    2874             :     }
    2875             :     else
    2876             :     {
    2877           0 :         m_pListtabFT->Enable( false );
    2878           0 :         m_pListtabMF->Enable( false );
    2879           0 :         m_pListtabMF->SetText(aEmptyStr);
    2880             :     }
    2881             : 
    2882           0 :     if ( bSameAlignAt )
    2883             :     {
    2884             :         SetMetricValue(*m_pAlignedAtMF,
    2885           0 :                         aNumFmtArr[nLvl]->GetIndentAt() + aNumFmtArr[nLvl]->GetFirstLineIndent(),
    2886           0 :                         eCoreUnit);
    2887             :     }
    2888             :     else
    2889             :     {
    2890           0 :         m_pAlignedAtMF->SetText(aEmptyStr);
    2891             :     }
    2892             : 
    2893           0 :     if ( bSameIndentAt )
    2894             :     {
    2895           0 :         SetMetricValue(*m_pIndentAtMF, aNumFmtArr[nLvl]->GetIndentAt(), eCoreUnit);
    2896             :     }
    2897             :     else
    2898             :     {
    2899           0 :         m_pIndentAtMF->SetText(aEmptyStr);
    2900             :     }
    2901             : 
    2902           0 :     if ( bSetDistEmpty )
    2903           0 :         m_pDistBorderMF->SetText(aEmptyStr);
    2904             : 
    2905           0 :     bInInintControl = false;
    2906             : }
    2907             : 
    2908           0 : void SvxNumPositionTabPage::ActivatePage(const SfxItemSet& rSet)
    2909             : {
    2910             :     const SfxPoolItem* pItem;
    2911           0 :     sal_uInt16 nTmpNumLvl = SAL_MAX_UINT16;
    2912           0 :     const SfxItemSet* pExampleSet = GetTabDialog()->GetExampleSet();
    2913           0 :     if(pExampleSet)
    2914             :     {
    2915           0 :         if(SfxItemState::SET == pExampleSet->GetItemState(SID_PARAM_NUM_PRESET, false, &pItem))
    2916           0 :             bPreset = static_cast<const SfxBoolItem*>(pItem)->GetValue();
    2917           0 :         if(SfxItemState::SET == pExampleSet->GetItemState(SID_PARAM_CUR_NUM_LEVEL, false, &pItem))
    2918           0 :             nTmpNumLvl = static_cast<const SfxUInt16Item*>(pItem)->GetValue();
    2919             :     }
    2920           0 :     if(SfxItemState::SET == rSet.GetItemState(nNumItemId, false, &pItem))
    2921             :     {
    2922           0 :         delete pSaveNum;
    2923           0 :         pSaveNum = new SvxNumRule(*static_cast<const SvxNumBulletItem*>(pItem)->GetNumRule());
    2924             :     }
    2925           0 :     bModified = (!pActNum->Get( 0 ) || bPreset);
    2926           0 :     if(*pSaveNum != *pActNum ||
    2927           0 :         nActNumLvl != nTmpNumLvl )
    2928             :     {
    2929           0 :         *pActNum = *pSaveNum;
    2930           0 :         nActNumLvl = nTmpNumLvl;
    2931           0 :         sal_uInt16 nMask = 1;
    2932           0 :         m_pLevelLB->SetUpdateMode(false);
    2933           0 :         m_pLevelLB->SetNoSelection();
    2934           0 :         if(bModified)
    2935           0 :             m_pLevelLB->SelectEntryPos( 0, true);
    2936             :         else
    2937           0 :             m_pLevelLB->SelectEntryPos( pActNum->GetLevelCount(), nActNumLvl == SAL_MAX_UINT16);
    2938           0 :         if(nActNumLvl != SAL_MAX_UINT16)
    2939           0 :             for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
    2940             :             {
    2941           0 :                 if(nActNumLvl & nMask)
    2942           0 :                     m_pLevelLB->SelectEntryPos( i, true);
    2943           0 :                 nMask <<= 1 ;
    2944             :             }
    2945           0 :         m_pRelativeCB->Enable(nActNumLvl != 1);
    2946           0 :         m_pLevelLB->SetUpdateMode(true);
    2947             : 
    2948           0 :         InitPosAndSpaceMode();
    2949           0 :         ShowControlsDependingOnPosAndSpaceMode();
    2950             : 
    2951           0 :         InitControls();
    2952             :     }
    2953           0 :     m_pPreviewWIN->SetLevel(nActNumLvl);
    2954           0 :     m_pPreviewWIN->Invalidate();
    2955           0 : }
    2956             : 
    2957           0 : int  SvxNumPositionTabPage::DeactivatePage(SfxItemSet *_pSet)
    2958             : {
    2959           0 :     if(_pSet)
    2960             :     {
    2961           0 :         if(m_pDistBorderMF->IsEnabled())
    2962           0 :             DistanceHdl_Impl(m_pDistBorderMF);
    2963           0 :         DistanceHdl_Impl(m_pIndentMF);
    2964           0 :         FillItemSet(_pSet);
    2965             :     }
    2966           0 :     return sal_True;
    2967             : }
    2968             : 
    2969           0 : bool SvxNumPositionTabPage::FillItemSet( SfxItemSet* rSet )
    2970             : {
    2971           0 :     rSet->Put(SfxUInt16Item(SID_PARAM_CUR_NUM_LEVEL, nActNumLvl));
    2972             : 
    2973           0 :     if(bModified && pActNum)
    2974             :     {
    2975           0 :         *pSaveNum = *pActNum;
    2976           0 :         rSet->Put(SvxNumBulletItem( *pSaveNum ), nNumItemId);
    2977           0 :         rSet->Put(SfxBoolItem(SID_PARAM_NUM_PRESET, false));
    2978             :     }
    2979           0 :     return bModified;
    2980             : }
    2981             : 
    2982           0 : void SvxNumPositionTabPage::Reset( const SfxItemSet* rSet )
    2983             : {
    2984             :     const SfxPoolItem* pItem;
    2985             :     // in Draw the item exists as WhichId, in Writer only as SlotId
    2986           0 :     SfxItemState eState = rSet->GetItemState(SID_ATTR_NUMBERING_RULE, false, &pItem);
    2987           0 :     if(eState != SfxItemState::SET)
    2988             :     {
    2989           0 :         nNumItemId = rSet->GetPool()->GetWhich(SID_ATTR_NUMBERING_RULE);
    2990           0 :         eState = rSet->GetItemState(nNumItemId, false, &pItem);
    2991             : 
    2992           0 :         if( eState != SfxItemState::SET )
    2993             :         {
    2994           0 :             pItem = &static_cast< const SvxNumBulletItem& >( rSet->Get( nNumItemId, true ) );
    2995           0 :             eState = SfxItemState::SET;
    2996             :         }
    2997             : 
    2998             :     }
    2999             :     DBG_ASSERT(eState == SfxItemState::SET, "no item found!");
    3000           0 :     delete pSaveNum;
    3001           0 :     pSaveNum = new SvxNumRule(*static_cast<const SvxNumBulletItem*>(pItem)->GetNumRule());
    3002             : 
    3003             :     // insert levels
    3004           0 :     if(!m_pLevelLB->GetEntryCount())
    3005             :     {
    3006           0 :         for(sal_uInt16 i = 1; i <= pSaveNum->GetLevelCount(); i++)
    3007           0 :             m_pLevelLB->InsertEntry( OUString::number(i) );
    3008           0 :         if(pSaveNum->GetLevelCount() > 1)
    3009             :         {
    3010           0 :             OUString sEntry( "1 - " );
    3011           0 :             sEntry += OUString::number( pSaveNum->GetLevelCount() );
    3012           0 :             m_pLevelLB->InsertEntry(sEntry);
    3013           0 :             m_pLevelLB->SelectEntry(sEntry);
    3014             :         }
    3015             :         else
    3016           0 :             m_pLevelLB->SelectEntryPos(0);
    3017             :     }
    3018             :     else
    3019           0 :         m_pLevelLB->SelectEntryPos(m_pLevelLB->GetEntryCount() - 1);
    3020           0 :     sal_uInt16 nMask = 1;
    3021           0 :     m_pLevelLB->SetUpdateMode(false);
    3022           0 :     m_pLevelLB->SetNoSelection();
    3023           0 :     if(nActNumLvl == SAL_MAX_UINT16  && !bModified)
    3024             :     {
    3025           0 :         m_pLevelLB->SelectEntryPos( 0, true);
    3026             :     }
    3027           0 :     else if (nActNumLvl == SAL_MAX_UINT16)
    3028             :     {
    3029           0 :         m_pLevelLB->SelectEntryPos( pSaveNum->GetLevelCount(), true);
    3030             :     }
    3031             :     else
    3032             :     {
    3033           0 :         for(sal_uInt16 i = 0; i < pSaveNum->GetLevelCount(); i++)
    3034             :         {
    3035           0 :             if(nActNumLvl & nMask)
    3036           0 :                 m_pLevelLB->SelectEntryPos( i, true);
    3037           0 :             nMask <<= 1;
    3038             :         }
    3039             :     }
    3040           0 :     m_pLevelLB->SetUpdateMode(true);
    3041             : 
    3042           0 :     if(!pActNum)
    3043           0 :         pActNum = new  SvxNumRule(*pSaveNum);
    3044           0 :     else if(*pSaveNum != *pActNum)
    3045           0 :         *pActNum = *pSaveNum;
    3046           0 :     m_pPreviewWIN->SetNumRule(pActNum);
    3047             : 
    3048           0 :     InitPosAndSpaceMode();
    3049           0 :     ShowControlsDependingOnPosAndSpaceMode();
    3050             : 
    3051           0 :     InitControls();
    3052           0 :     bModified = false;
    3053           0 : }
    3054             : 
    3055           0 : void SvxNumPositionTabPage::InitPosAndSpaceMode()
    3056             : {
    3057           0 :     if ( pActNum == 0 )
    3058             :     {
    3059             :         DBG_ASSERT( false,
    3060             :                 "<SvxNumPositionTabPage::InitPosAndSpaceMode()> - misusage of method -> <pAktNum> has to be already set!" );
    3061           0 :         return;
    3062             :     }
    3063             : 
    3064             :     SvxNumberFormat::SvxNumPositionAndSpaceMode ePosAndSpaceMode =
    3065           0 :                                             SvxNumberFormat::LABEL_ALIGNMENT;
    3066           0 :     sal_uInt16 nMask = 1;
    3067           0 :     for( sal_uInt16 i = 0; i < pActNum->GetLevelCount(); ++i )
    3068             :     {
    3069           0 :         if(nActNumLvl & nMask)
    3070             :         {
    3071           0 :             SvxNumberFormat aNumFmt( pActNum->GetLevel(i) );
    3072           0 :             ePosAndSpaceMode = aNumFmt.GetPositionAndSpaceMode();
    3073           0 :             if ( ePosAndSpaceMode == SvxNumberFormat::LABEL_ALIGNMENT )
    3074             :             {
    3075           0 :                 break;
    3076           0 :             }
    3077             :         }
    3078           0 :         nMask <<= 1;
    3079             :     }
    3080             : 
    3081             :     bLabelAlignmentPosAndSpaceModeActive =
    3082           0 :                     ePosAndSpaceMode == SvxNumberFormat::LABEL_ALIGNMENT;
    3083             : }
    3084             : 
    3085           0 : void SvxNumPositionTabPage::ShowControlsDependingOnPosAndSpaceMode()
    3086             : {
    3087           0 :     m_pDistBorderFT->Show( !bLabelAlignmentPosAndSpaceModeActive );
    3088           0 :     m_pDistBorderMF->Show( !bLabelAlignmentPosAndSpaceModeActive );
    3089           0 :     m_pRelativeCB->Show( !bLabelAlignmentPosAndSpaceModeActive );
    3090           0 :     m_pIndentFT->Show( !bLabelAlignmentPosAndSpaceModeActive );
    3091           0 :     m_pIndentMF->Show( !bLabelAlignmentPosAndSpaceModeActive );
    3092           0 :     m_pDistNumFT->Show( !bLabelAlignmentPosAndSpaceModeActive &&
    3093           0 :                      pActNum->IsFeatureSupported(NUM_CONTINUOUS) );
    3094           0 :     m_pDistNumMF->Show( !bLabelAlignmentPosAndSpaceModeActive &&
    3095           0 :                      pActNum->IsFeatureSupported(NUM_CONTINUOUS));
    3096           0 :     m_pAlignFT->Show( !bLabelAlignmentPosAndSpaceModeActive );
    3097           0 :     m_pAlignLB->Show( !bLabelAlignmentPosAndSpaceModeActive );
    3098             : 
    3099           0 :     m_pLabelFollowedByFT->Show( bLabelAlignmentPosAndSpaceModeActive );
    3100           0 :     m_pLabelFollowedByLB->Show( bLabelAlignmentPosAndSpaceModeActive );
    3101           0 :     m_pListtabFT->Show( bLabelAlignmentPosAndSpaceModeActive );
    3102           0 :     m_pListtabMF->Show( bLabelAlignmentPosAndSpaceModeActive );
    3103           0 :     m_pAlign2FT->Show( bLabelAlignmentPosAndSpaceModeActive );
    3104           0 :     m_pAlign2LB->Show( bLabelAlignmentPosAndSpaceModeActive );
    3105           0 :     m_pAlignedAtFT->Show( bLabelAlignmentPosAndSpaceModeActive );
    3106           0 :     m_pAlignedAtMF->Show( bLabelAlignmentPosAndSpaceModeActive );
    3107           0 :     m_pIndentAtFT->Show( bLabelAlignmentPosAndSpaceModeActive );
    3108           0 :     m_pIndentAtMF->Show( bLabelAlignmentPosAndSpaceModeActive );
    3109           0 : }
    3110             : 
    3111           0 : SfxTabPage* SvxNumPositionTabPage::Create( vcl::Window* pParent,
    3112             :                                 const SfxItemSet* rAttrSet)
    3113             : {
    3114           0 :     return new SvxNumPositionTabPage(pParent, *rAttrSet);
    3115             : }
    3116             : 
    3117           0 : void    SvxNumPositionTabPage::SetMetric(FieldUnit eMetric)
    3118             : {
    3119           0 :     if(eMetric == FUNIT_MM)
    3120             :     {
    3121           0 :         m_pDistBorderMF->SetDecimalDigits(1);
    3122           0 :         m_pDistNumMF->SetDecimalDigits(1);
    3123           0 :         m_pIndentMF->SetDecimalDigits(1);
    3124           0 :         m_pListtabMF->SetDecimalDigits(1);
    3125           0 :         m_pAlignedAtMF->SetDecimalDigits(1);
    3126           0 :         m_pIndentAtMF->SetDecimalDigits(1);
    3127             :     }
    3128           0 :     m_pDistBorderMF->SetUnit( eMetric );
    3129           0 :     m_pDistNumMF->SetUnit( eMetric );
    3130           0 :     m_pIndentMF->SetUnit( eMetric );
    3131           0 :     m_pListtabMF->SetUnit( eMetric );
    3132           0 :     m_pAlignedAtMF->SetUnit( eMetric );
    3133           0 :     m_pIndentAtMF->SetUnit( eMetric );
    3134           0 : }
    3135             : 
    3136           0 : IMPL_LINK_NOARG(SvxNumPositionTabPage, EditModifyHdl_Impl)
    3137             : {
    3138           0 :     sal_uInt16 nMask = 1;
    3139           0 :     for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
    3140             :     {
    3141           0 :         if(nActNumLvl & nMask)
    3142             :         {
    3143           0 :             SvxNumberFormat aNumFmt(pActNum->GetLevel(i));
    3144             : 
    3145           0 :             const sal_Int32 nPos = m_pAlignLB->IsVisible()
    3146           0 :                                 ? m_pAlignLB->GetSelectEntryPos()
    3147           0 :                                 : m_pAlign2LB->GetSelectEntryPos();
    3148           0 :             SvxAdjust eAdjust = SVX_ADJUST_CENTER;
    3149           0 :             if(nPos == 0)
    3150           0 :                 eAdjust = SVX_ADJUST_LEFT;
    3151           0 :             else if(nPos == 2)
    3152           0 :                 eAdjust = SVX_ADJUST_RIGHT;
    3153           0 :             aNumFmt.SetNumAdjust( eAdjust );
    3154           0 :             pActNum->SetLevel(i, aNumFmt);
    3155             :         }
    3156           0 :         nMask <<= 1;
    3157             :     }
    3158           0 :     SetModified();
    3159           0 :     return 0;
    3160             : }
    3161             : 
    3162           0 : IMPL_LINK( SvxNumPositionTabPage, LevelHdl_Impl, ListBox *, pBox )
    3163             : {
    3164           0 :     sal_uInt16 nSaveNumLvl = nActNumLvl;
    3165           0 :     nActNumLvl = 0;
    3166           0 :     if(pBox->IsEntryPosSelected( pActNum->GetLevelCount() ) &&
    3167           0 :             (pBox->GetSelectEntryCount() == 1 || nSaveNumLvl != 0xffff))
    3168             :     {
    3169           0 :         nActNumLvl = 0xFFFF;
    3170           0 :         pBox->SetUpdateMode(false);
    3171           0 :         for( sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++ )
    3172           0 :             pBox->SelectEntryPos( i, false );
    3173           0 :         pBox->SetUpdateMode(true);
    3174             :     }
    3175           0 :     else if(pBox->GetSelectEntryCount())
    3176             :     {
    3177           0 :         sal_uInt16 nMask = 1;
    3178           0 :         for( sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++ )
    3179             :         {
    3180           0 :             if(pBox->IsEntryPosSelected( i ))
    3181           0 :                 nActNumLvl |= nMask;
    3182           0 :             nMask <<= 1;
    3183             :         }
    3184           0 :         pBox->SelectEntryPos( pActNum->GetLevelCount(), false );
    3185             :     }
    3186             :     else
    3187             :     {
    3188           0 :         nActNumLvl = nSaveNumLvl;
    3189           0 :         sal_uInt16 nMask = 1;
    3190           0 :         for( sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++ )
    3191             :         {
    3192           0 :             if(nActNumLvl & nMask)
    3193             :             {
    3194           0 :                 pBox->SelectEntryPos(i);
    3195           0 :                 break;
    3196             :             }
    3197           0 :             nMask <<=1;
    3198             :         }
    3199             :     }
    3200           0 :     m_pRelativeCB->Enable(nActNumLvl != 1);
    3201           0 :     SetModified();
    3202           0 :     InitPosAndSpaceMode();
    3203           0 :     ShowControlsDependingOnPosAndSpaceMode();
    3204           0 :     InitControls();
    3205           0 :     return 0;
    3206             : }
    3207             : 
    3208           0 : IMPL_LINK( SvxNumPositionTabPage, DistanceHdl_Impl, MetricField *, pFld )
    3209             : {
    3210           0 :     if(bInInintControl)
    3211           0 :         return 0;
    3212           0 :     long nValue = GetCoreValue(*pFld, eCoreUnit);
    3213           0 :     sal_uInt16 nMask = 1;
    3214           0 :     for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
    3215             :     {
    3216           0 :         if(nActNumLvl & nMask)
    3217             :         {
    3218           0 :             SvxNumberFormat aNumFmt( pActNum->GetLevel( i ) );
    3219           0 :             if (pFld == m_pDistBorderMF)
    3220             :             {
    3221             : 
    3222           0 :                 if(m_pRelativeCB->IsChecked())
    3223             :                 {
    3224           0 :                     if(0 == i)
    3225             :                     {
    3226           0 :                         long nTmp = aNumFmt.GetFirstLineOffset();
    3227           0 :                         aNumFmt.SetAbsLSpace( sal_uInt16(nValue - nTmp));
    3228             :                     }
    3229             :                     else
    3230             :                     {
    3231           0 :                         long nTmp = pActNum->GetLevel( i - 1 ).GetAbsLSpace() +
    3232           0 :                                     pActNum->GetLevel( i - 1 ).GetFirstLineOffset() -
    3233           0 :                                     pActNum->GetLevel( i ).GetFirstLineOffset();
    3234             : 
    3235           0 :                         aNumFmt.SetAbsLSpace( sal_uInt16(nValue + nTmp));
    3236             :                     }
    3237             :                 }
    3238             :                 else
    3239             :                 {
    3240           0 :                     aNumFmt.SetAbsLSpace( (short)nValue - aNumFmt.GetFirstLineOffset());
    3241             :                 }
    3242             :             }
    3243           0 :             else if (pFld == m_pDistNumMF)
    3244             :             {
    3245           0 :                 aNumFmt.SetCharTextDistance( (short)nValue );
    3246             :             }
    3247           0 :             else if (pFld == m_pIndentMF)
    3248             :             {
    3249             :                 // together with the FirstLineOffset the AbsLSpace must be changed, too
    3250           0 :                 long nDiff = nValue + aNumFmt.GetFirstLineOffset();
    3251           0 :                 long nAbsLSpace = aNumFmt.GetAbsLSpace();
    3252           0 :                 aNumFmt.SetAbsLSpace(sal_uInt16(nAbsLSpace + nDiff));
    3253           0 :                 aNumFmt.SetFirstLineOffset( -(short)nValue );
    3254             :             }
    3255             : 
    3256           0 :             pActNum->SetLevel( i, aNumFmt );
    3257             :         }
    3258           0 :         nMask <<= 1;
    3259             :     }
    3260             : 
    3261           0 :     SetModified();
    3262           0 :     if(!m_pDistBorderMF->IsEnabled())
    3263             :     {
    3264           0 :         OUString aEmptyStr;
    3265           0 :         m_pDistBorderMF->SetText(aEmptyStr);
    3266             :     }
    3267             : 
    3268           0 :     return 0;
    3269             : }
    3270             : 
    3271           0 : IMPL_LINK( SvxNumPositionTabPage, RelativeHdl_Impl, CheckBox *, pBox )
    3272             : {
    3273           0 :     bool bOn = pBox->IsChecked();
    3274           0 :     bool bSingleSelection = m_pLevelLB->GetSelectEntryCount() == 1 && SAL_MAX_UINT16 != nActNumLvl;
    3275           0 :     bool bSetValue = false;
    3276           0 :     long nValue = 0;
    3277           0 :     if(bOn || bSingleSelection)
    3278             :     {
    3279           0 :         sal_uInt16 nMask = 1;
    3280           0 :         bool bFirst = true;
    3281           0 :         bSetValue = true;
    3282           0 :         for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
    3283             :         {
    3284           0 :             if(nActNumLvl & nMask)
    3285             :             {
    3286           0 :                 const SvxNumberFormat &rNumFmt = pActNum->GetLevel(i);
    3287           0 :                 if(bFirst)
    3288             :                 {
    3289           0 :                     nValue = rNumFmt.GetAbsLSpace() + rNumFmt.GetFirstLineOffset();
    3290           0 :                     if(bOn && i)
    3291           0 :                         nValue -= (pActNum->GetLevel(i - 1).GetAbsLSpace() + pActNum->GetLevel(i - 1).GetFirstLineOffset());
    3292             :                 }
    3293             :                 else
    3294           0 :                     bSetValue = nValue ==
    3295           0 :                         (rNumFmt.GetAbsLSpace() + rNumFmt.GetFirstLineOffset()) -
    3296           0 :                             (pActNum->GetLevel(i - 1).GetAbsLSpace() + pActNum->GetLevel(i - 1).GetFirstLineOffset());
    3297           0 :                 bFirst = false;
    3298             :             }
    3299           0 :             nMask <<= 1;
    3300             :         }
    3301             : 
    3302             :     }
    3303           0 :     OUString aEmptyStr;
    3304           0 :     if(bSetValue)
    3305           0 :         SetMetricValue(*m_pDistBorderMF, nValue,   eCoreUnit);
    3306             :     else
    3307           0 :         m_pDistBorderMF->SetText(aEmptyStr);
    3308           0 :     m_pDistBorderMF->Enable(bOn || bSingleSelection);
    3309           0 :     m_pDistBorderFT->Enable(bOn || bSingleSelection);
    3310           0 :     bLastRelative = bOn;
    3311           0 :     return 0;
    3312             : }
    3313             : 
    3314           0 : IMPL_LINK_NOARG(SvxNumPositionTabPage, LabelFollowedByHdl_Impl)
    3315             : {
    3316             :     // determine value to be set at the chosen list levels
    3317           0 :     SvxNumberFormat::LabelFollowedBy eLabelFollowedBy = SvxNumberFormat::LISTTAB;
    3318             :     {
    3319           0 :         const sal_Int32 nPos = m_pLabelFollowedByLB->GetSelectEntryPos();
    3320           0 :         if ( nPos == 1 )
    3321             :         {
    3322           0 :             eLabelFollowedBy = SvxNumberFormat::SPACE;
    3323             :         }
    3324           0 :         else if ( nPos == 2 )
    3325             :         {
    3326           0 :             eLabelFollowedBy = SvxNumberFormat::NOTHING;
    3327             :         }
    3328             :     }
    3329             : 
    3330             :     // set value at the chosen list levels
    3331           0 :     bool bSameListtabPos = true;
    3332           0 :     sal_uInt16 nFirstLvl = SAL_MAX_UINT16;
    3333           0 :     sal_uInt16 nMask = 1;
    3334           0 :     for( sal_uInt16 i = 0; i < pActNum->GetLevelCount(); ++i )
    3335             :     {
    3336           0 :         if ( nActNumLvl & nMask )
    3337             :         {
    3338           0 :             SvxNumberFormat aNumFmt( pActNum->GetLevel(i) );
    3339           0 :             aNumFmt.SetLabelFollowedBy( eLabelFollowedBy );
    3340           0 :             pActNum->SetLevel( i, aNumFmt );
    3341             : 
    3342           0 :             if ( nFirstLvl == SAL_MAX_UINT16 )
    3343             :             {
    3344           0 :                 nFirstLvl = i;
    3345             :             }
    3346             :             else
    3347             :             {
    3348           0 :                 bSameListtabPos &= aNumFmt.GetListtabPos() ==
    3349           0 :                         pActNum->GetLevel( nFirstLvl ).GetListtabPos();
    3350           0 :             }
    3351             :         }
    3352           0 :         nMask <<= 1;
    3353             :     }
    3354             : 
    3355             :     // enable/disable metric field for list tab stop position depending on
    3356             :     // selected item following the list label.
    3357           0 :     m_pListtabFT->Enable( eLabelFollowedBy == SvxNumberFormat::LISTTAB );
    3358           0 :     m_pListtabMF->Enable( eLabelFollowedBy == SvxNumberFormat::LISTTAB );
    3359           0 :     if ( bSameListtabPos && eLabelFollowedBy == SvxNumberFormat::LISTTAB )
    3360             :     {
    3361           0 :         SetMetricValue(*m_pListtabMF, pActNum->GetLevel( nFirstLvl ).GetListtabPos(), eCoreUnit);
    3362             :     }
    3363             :     else
    3364             :     {
    3365           0 :         m_pListtabMF->SetText( OUString() );
    3366             :     }
    3367             : 
    3368           0 :     SetModified();
    3369             : 
    3370           0 :     return 0;
    3371             : }
    3372             : 
    3373           0 : IMPL_LINK( SvxNumPositionTabPage, ListtabPosHdl_Impl, MetricField*, pFld )
    3374             : {
    3375             :     // determine value to be set at the chosen list levels
    3376           0 :     const long nValue = GetCoreValue( *pFld, eCoreUnit );
    3377             : 
    3378             :     // set value at the chosen list levels
    3379           0 :     sal_uInt16 nMask = 1;
    3380           0 :     for( sal_uInt16 i = 0; i < pActNum->GetLevelCount(); ++i )
    3381             :     {
    3382           0 :         if ( nActNumLvl & nMask )
    3383             :         {
    3384           0 :             SvxNumberFormat aNumFmt( pActNum->GetLevel(i) );
    3385           0 :             aNumFmt.SetListtabPos( nValue );
    3386           0 :             pActNum->SetLevel( i, aNumFmt );
    3387             :         }
    3388           0 :         nMask <<= 1;
    3389             :     }
    3390             : 
    3391           0 :     SetModified();
    3392             : 
    3393           0 :     return 0;
    3394             : }
    3395             : 
    3396           0 : IMPL_LINK( SvxNumPositionTabPage, AlignAtHdl_Impl, MetricField*, pFld )
    3397             : {
    3398             :     // determine value to be set at the chosen list levels
    3399           0 :     const long nValue = GetCoreValue( *pFld, eCoreUnit );
    3400             : 
    3401             :     // set value at the chosen list levels
    3402           0 :     sal_uInt16 nMask = 1;
    3403           0 :     for( sal_uInt16 i = 0; i < pActNum->GetLevelCount(); ++i )
    3404             :     {
    3405           0 :         if ( nActNumLvl & nMask )
    3406             :         {
    3407           0 :             SvxNumberFormat aNumFmt( pActNum->GetLevel(i) );
    3408           0 :             const long nFirstLineIndent = nValue - aNumFmt.GetIndentAt();
    3409           0 :             aNumFmt.SetFirstLineIndent( nFirstLineIndent );
    3410           0 :             pActNum->SetLevel( i, aNumFmt );
    3411             :         }
    3412           0 :         nMask <<= 1;
    3413             :     }
    3414             : 
    3415           0 :     SetModified();
    3416             : 
    3417           0 :     return 0;
    3418             : }
    3419             : 
    3420           0 : IMPL_LINK( SvxNumPositionTabPage, IndentAtHdl_Impl, MetricField*, pFld )
    3421             : {
    3422             :     // determine value to be set at the chosen list levels
    3423           0 :     const long nValue = GetCoreValue( *pFld, eCoreUnit );
    3424             : 
    3425             :     // set value at the chosen list levels
    3426           0 :     sal_uInt16 nMask = 1;
    3427           0 :     for( sal_uInt16 i = 0; i < pActNum->GetLevelCount(); ++i )
    3428             :     {
    3429           0 :         if ( nActNumLvl & nMask )
    3430             :         {
    3431           0 :             SvxNumberFormat aNumFmt( pActNum->GetLevel(i) );
    3432           0 :             const long nAlignedAt = aNumFmt.GetIndentAt() +
    3433           0 :                                     aNumFmt.GetFirstLineIndent();
    3434           0 :             aNumFmt.SetIndentAt( nValue );
    3435           0 :             const long nNewFirstLineIndent = nAlignedAt - nValue;
    3436           0 :             aNumFmt.SetFirstLineIndent( nNewFirstLineIndent );
    3437           0 :             pActNum->SetLevel( i, aNumFmt );
    3438             :         }
    3439           0 :         nMask <<= 1;
    3440             :     }
    3441             : 
    3442           0 :     SetModified();
    3443             : 
    3444           0 :     return 0;
    3445             : }
    3446             : 
    3447           0 : IMPL_LINK_NOARG(SvxNumPositionTabPage, StandardHdl_Impl)
    3448             : {
    3449           0 :     sal_uInt16 nMask = 1;
    3450           0 :     SvxNumRule aTmpNumRule( pActNum->GetFeatureFlags(),
    3451           0 :                             pActNum->GetLevelCount(),
    3452           0 :                             pActNum->IsContinuousNumbering(),
    3453             :                             SVX_RULETYPE_NUMBERING,
    3454           0 :                             pActNum->GetLevel( 0 ).GetPositionAndSpaceMode() );
    3455           0 :     for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++)
    3456             :     {
    3457           0 :         if(nActNumLvl & nMask)
    3458             :         {
    3459           0 :             SvxNumberFormat aNumFmt( pActNum->GetLevel( i ) );
    3460           0 :             SvxNumberFormat aTempFmt(aTmpNumRule.GetLevel( i ));
    3461           0 :             aNumFmt.SetPositionAndSpaceMode( aTempFmt.GetPositionAndSpaceMode() );
    3462           0 :             if ( aTempFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_WIDTH_AND_POSITION )
    3463             :             {
    3464           0 :                 aNumFmt.SetAbsLSpace( aTempFmt.GetAbsLSpace() );
    3465           0 :                 aNumFmt.SetCharTextDistance( aTempFmt.GetCharTextDistance() );
    3466           0 :                 aNumFmt.SetFirstLineOffset( aTempFmt.GetFirstLineOffset() );
    3467             :             }
    3468           0 :             else if ( aTempFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_ALIGNMENT )
    3469             :             {
    3470           0 :                 aNumFmt.SetNumAdjust( aTempFmt.GetNumAdjust() );
    3471           0 :                 aNumFmt.SetLabelFollowedBy( aTempFmt.GetLabelFollowedBy() );
    3472           0 :                 aNumFmt.SetListtabPos( aTempFmt.GetListtabPos() );
    3473           0 :                 aNumFmt.SetFirstLineIndent( aTempFmt.GetFirstLineIndent() );
    3474           0 :                 aNumFmt.SetIndentAt( aTempFmt.GetIndentAt() );
    3475             :             }
    3476             : 
    3477           0 :             pActNum->SetLevel( i, aNumFmt );
    3478             :         }
    3479           0 :         nMask <<= 1;
    3480             :     }
    3481             : 
    3482           0 :     InitControls();
    3483           0 :     SetModified();
    3484           0 :     return 0;
    3485             : }
    3486             : 
    3487           0 : void SvxNumPositionTabPage::SetModified(bool bRepaint)
    3488             : {
    3489           0 :     bModified = 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::SetModified(bool bRepaint)
    3498             : {
    3499           0 :     bModified = true;
    3500           0 :     if(bRepaint)
    3501             :     {
    3502           0 :         m_pPreviewWIN->SetLevel(nActNumLvl);
    3503           0 :         m_pPreviewWIN->Invalidate();
    3504             :     }
    3505           0 : }
    3506             : 
    3507           0 : void SvxNumOptionsTabPage::PageCreated(const SfxAllItemSet& aSet)
    3508             : {
    3509           0 :     SFX_ITEMSET_ARG (&aSet,pListItem,SfxStringListItem,SID_CHAR_FMT_LIST_BOX,false);
    3510           0 :     SFX_ITEMSET_ARG (&aSet,pNumCharFmt,SfxStringItem,SID_NUM_CHAR_FMT,false);
    3511           0 :     SFX_ITEMSET_ARG (&aSet,pBulletCharFmt,SfxStringItem,SID_BULLET_CHAR_FMT,false);
    3512           0 :     SFX_ITEMSET_ARG (&aSet,pMetricItem,SfxAllEnumItem,SID_METRIC_ITEM,false);
    3513             : 
    3514           0 :     if (pNumCharFmt &&pBulletCharFmt)
    3515           0 :         SetCharFmts( pNumCharFmt->GetValue(),pBulletCharFmt->GetValue());
    3516             : 
    3517           0 :     if (pListItem)
    3518             :     {
    3519           0 :         ListBox& myCharFmtLB = GetCharFmtListBox();
    3520           0 :         const std::vector<OUString> &aList = pListItem->GetList();
    3521           0 :         sal_uInt32 nCount = aList.size();;
    3522           0 :         for(sal_uInt32 i = 0; i < nCount; i++)
    3523           0 :             myCharFmtLB.InsertEntry(aList[i]);
    3524             :     }
    3525           0 :     if (pMetricItem)
    3526           0 :         SetMetric(static_cast<FieldUnit>(pMetricItem->GetValue()));
    3527           0 : }
    3528             : 
    3529           0 : void SvxNumPositionTabPage::PageCreated(const SfxAllItemSet& aSet)
    3530             : {
    3531           0 :     SFX_ITEMSET_ARG (&aSet,pMetricItem,SfxAllEnumItem,SID_METRIC_ITEM,false);
    3532             : 
    3533           0 :     if (pMetricItem)
    3534           0 :         SetMetric(static_cast<FieldUnit>(pMetricItem->GetValue()));
    3535           0 : }
    3536             : 
    3537             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10