LCOV - code coverage report
Current view: top level - libreoffice/cui/source/tabpages - numpages.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 1 2066 0.1 %
Date: 2012-12-27 Functions: 2 138 1.4 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.10