| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| // MARKER(update_precomp.py): autogen include statement, do not remove |
| #include "precompiled_cui.hxx" |
| |
| #include <com/sun/star/text/HoriOrientation.hpp> |
| #include <com/sun/star/text/VertOrientation.hpp> |
| #include <com/sun/star/text/RelOrientation.hpp> |
| |
| #include <numpages.hxx> |
| #include <numpages.hrc> |
| #include <dialmgr.hxx> |
| #include <cuires.hrc> |
| #include <tools/shl.hxx> |
| #include <i18npool/mslangid.hxx> |
| #include <svtools/valueset.hxx> |
| #include <helpid.hrc> |
| #include <editeng/numitem.hxx> |
| #include <svl/eitem.hxx> |
| #include <vcl/svapp.hxx> |
| #include <svx/gallery.hxx> |
| #include <svl/urihelper.hxx> |
| #include <editeng/brshitem.hxx> |
| #include <svl/intitem.hxx> |
| #include <sfx2/objsh.hxx> |
| #include <vcl/graph.hxx> |
| #include <vcl/msgbox.hxx> |
| #include "cuicharmap.hxx" |
| #include <editeng/flstitem.hxx> |
| #include <svx/dlgutil.hxx> |
| #include <svx/xtable.hxx> |
| #include <svx/drawitem.hxx> |
| #include <svx/numvset.hxx> |
| #include <svx/htmlmode.hxx> |
| #include <unotools/pathoptions.hxx> |
| #include <svtools/ctrltool.hxx> |
| #include <editeng/unolingu.hxx> |
| #include <com/sun/star/style/NumberingType.hpp> |
| #include <com/sun/star/lang/XMultiServiceFactory.hpp> |
| #include <com/sun/star/container/XIndexAccess.hpp> |
| #include <com/sun/star/text/XDefaultNumberingProvider.hpp> |
| #include <com/sun/star/text/XNumberingFormatter.hpp> |
| #include <com/sun/star/beans/PropertyValue.hpp> |
| #include <comphelper/processfactory.hxx> |
| #include <com/sun/star/text/XNumberingTypeInfo.hpp> |
| #include <svx/dialmgr.hxx> |
| #include <svx/dialogs.hrc> |
| |
| #include <algorithm> |
| #include <vector> |
| #include "sfx2/opengrf.hxx" |
| |
| #include <cuires.hrc> //CHINA001 |
| #include <sfx2/request.hxx> //CHINA001 |
| #include <svl/aeitem.hxx> //add CHINA001 |
| #include <svl/stritem.hxx>//add CHINA001 |
| #include <svl/slstitm.hxx> //add CHINA001 |
| |
| using namespace com::sun::star; |
| using namespace com::sun::star::uno; |
| using namespace com::sun::star::beans; |
| using namespace com::sun::star::lang; |
| using namespace com::sun::star::i18n; |
| using namespace com::sun::star::text; |
| using namespace com::sun::star::container; |
| using namespace com::sun::star::style; |
| using rtl::OUString; |
| #define C2U(cChar) OUString::createFromAscii(cChar) |
| |
| SV_IMPL_PTRARR(SvxNumSettingsArr_Impl,SvxNumSettings_ImplPtr); |
| |
| /*-----------------07.02.97 15.37------------------- |
| |
| --------------------------------------------------*/ |
| #define NUM_PAGETYPE_BULLET 0 |
| #define NUM_PAGETYPE_SINGLENUM 1 |
| #define NUM_PAGETYPE_NUM 2 |
| #define NUM_PAGETYPE_BMP 3 |
| #define PAGETYPE_USER_START 10 |
| |
| #define SHOW_NUMBERING 0 |
| #define SHOW_BULLET 1 |
| #define SHOW_BITMAP 2 |
| |
| #define MAX_BMP_WIDTH 16 |
| #define MAX_BMP_HEIGHT 16 |
| |
| static sal_Bool bLastRelative = sal_False; |
| static const sal_Char cNumberingType[] = "NumberingType"; |
| static const sal_Char cValue[] = "Value"; |
| static const sal_Char cParentNumbering[] = "ParentNumbering"; |
| static const sal_Char cPrefix[] = "Prefix"; |
| static const sal_Char cSuffix[] = "Suffix"; |
| static const sal_Char cBulletChar[] = "BulletChar"; |
| static const sal_Char cBulletFontName[] = "BulletFontName"; |
| /* -----------------------------31.01.01 10:23-------------------------------- |
| |
| ---------------------------------------------------------------------------*/ |
| Reference<XDefaultNumberingProvider> lcl_GetNumberingProvider() |
| { |
| Reference< XMultiServiceFactory > xMSF = ::comphelper::getProcessServiceFactory(); |
| Reference < XInterface > xI = xMSF->createInstance( |
| ::rtl::OUString::createFromAscii( "com.sun.star.text.DefaultNumberingProvider" ) ); |
| Reference<XDefaultNumberingProvider> xRet(xI, UNO_QUERY); |
| DBG_ASSERT(xRet.is(), "service missing: \"com.sun.star.text.DefaultNumberingProvider\""); |
| |
| return xRet; |
| } |
| /* -----------------------------31.01.01 11:40-------------------------------- |
| |
| ---------------------------------------------------------------------------*/ |
| SvxNumSettings_ImplPtr lcl_CreateNumSettingsPtr(const Sequence<PropertyValue>& rLevelProps) |
| { |
| const PropertyValue* pValues = rLevelProps.getConstArray(); |
| SvxNumSettings_ImplPtr pNew = new SvxNumSettings_Impl; |
| for(sal_Int32 j = 0; j < rLevelProps.getLength(); j++) |
| { |
| if(pValues[j].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(cNumberingType))) |
| pValues[j].Value >>= pNew->nNumberType; |
| else if(pValues[j].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(cPrefix))) |
| pValues[j].Value >>= pNew->sPrefix; |
| else if(pValues[j].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(cSuffix))) |
| pValues[j].Value >>= pNew->sSuffix; |
| else if(pValues[j].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(cParentNumbering))) |
| pValues[j].Value >>= pNew->nParentNumbering; |
| else if(pValues[j].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(cBulletChar))) |
| pValues[j].Value >>= pNew->sBulletChar; |
| else if(pValues[j].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(cBulletFontName))) |
| pValues[j].Value >>= pNew->sBulletFont; |
| } |
| return pNew; |
| } |
| /* -----------------28.10.98 08:32------------------- |
| * |
| * --------------------------------------------------*/ |
| // Die Auswahl an Bullets aus den StarSymbol |
| static const sal_Unicode aBulletTypes[] = |
| { |
| 0x2022, |
| 0x25cf, |
| 0xe00c, |
| 0xe00a, |
| 0x2794, |
| 0x27a2, |
| 0x2717, |
| 0x2714 |
| }; |
| /* -----------------28.10.98 09:42------------------- |
| * |
| * --------------------------------------------------*/ |
| static sal_Char __READONLY_DATA aNumChar[] = |
| { |
| 'A', //CHARS_UPPER_LETTER |
| 'a', //CHARS_LOWER_LETTER |
| 'I', //ROMAN_UPPER |
| 'i', //ROMAN_LOWER |
| '1', //ARABIC |
| ' ' |
| }; |
| |
| /*-----------------18.03.98 08:35------------------- |
| Ist eins der maskierten Formate gesetzt? |
| --------------------------------------------------*/ |
| sal_Bool lcl_IsNumFmtSet(SvxNumRule* pNum, sal_uInt16 nLevelMask) |
| { |
| sal_Bool bRet = sal_False; |
| sal_uInt16 nMask = 1; |
| for( sal_uInt16 i = 0; i < SVX_MAX_NUM && !bRet; i++ ) |
| { |
| if(nLevelMask & nMask) |
| bRet |= 0 != pNum->Get( i ); |
| nMask <<= 1 ; |
| } |
| return bRet; |
| } |
| /* -----------------28.10.98 08:50------------------- |
| * |
| * --------------------------------------------------*/ |
| |
| Font& lcl_GetDefaultBulletFont() |
| { |
| static sal_Bool bInit = 0; |
| static Font aDefBulletFont( UniString::CreateFromAscii( |
| RTL_CONSTASCII_STRINGPARAM( "StarSymbol" ) ), |
| String(), Size( 0, 14 ) ); |
| if(!bInit) |
| { |
| aDefBulletFont.SetCharSet( RTL_TEXTENCODING_SYMBOL ); |
| aDefBulletFont.SetFamily( FAMILY_DONTKNOW ); |
| aDefBulletFont.SetPitch( PITCH_DONTKNOW ); |
| aDefBulletFont.SetWeight( WEIGHT_DONTKNOW ); |
| aDefBulletFont.SetTransparent( sal_True ); |
| bInit = sal_True; |
| } |
| return aDefBulletFont; |
| } |
| |
| |
| /**************************************************************************/ |
| /* */ |
| /* */ |
| /**************************************************************************/ |
| |
| |
| SvxSingleNumPickTabPage::SvxSingleNumPickTabPage(Window* pParent, |
| const SfxItemSet& rSet) : |
| SfxTabPage( pParent, CUI_RES( RID_SVXPAGE_PICK_SINGLE_NUM ), rSet ), |
| aValuesFL( this, CUI_RES(FL_VALUES) ), |
| pExamplesVS( new SvxNumValueSet(this, CUI_RES(VS_VALUES), NUM_PAGETYPE_SINGLENUM )), |
| pActNum(0), |
| pSaveNum(0), |
| nActNumLvl( USHRT_MAX ), |
| bModified(sal_False), |
| bPreset(sal_False), |
| nNumItemId(SID_ATTR_NUMBERING_RULE) |
| { |
| FreeResource(); |
| SetExchangeSupport(); |
| pExamplesVS->SetSelectHdl(LINK(this, SvxSingleNumPickTabPage, NumSelectHdl_Impl)); |
| pExamplesVS->SetDoubleClickHdl(LINK(this, SvxSingleNumPickTabPage, DoubleClickHdl_Impl)); |
| pExamplesVS->SetHelpId(HID_VALUESET_SINGLENUM ); |
| |
| Reference<XDefaultNumberingProvider> xDefNum = lcl_GetNumberingProvider(); |
| if(xDefNum.is()) |
| { |
| Sequence< Sequence< PropertyValue > > aNumberings; |
| LanguageType eLang = Application::GetSettings().GetLanguage(); |
| Locale aLocale = SvxCreateLocale(eLang); |
| try |
| { |
| aNumberings = |
| xDefNum->getDefaultContinuousNumberingLevels( aLocale ); |
| |
| |
| sal_Int32 nLength = aNumberings.getLength() > NUM_VALUSET_COUNT ? NUM_VALUSET_COUNT :aNumberings.getLength(); |
| |
| const Sequence<PropertyValue>* pValuesArr = aNumberings.getConstArray(); |
| for(sal_Int32 i = 0; i < nLength; i++) |
| { |
| SvxNumSettings_ImplPtr pNew = lcl_CreateNumSettingsPtr(pValuesArr[i]); |
| aNumSettingsArr.Insert(pNew, aNumSettingsArr.Count()); |
| } |
| } |
| catch(Exception&) |
| { |
| } |
| Reference<XNumberingFormatter> xFormat(xDefNum, UNO_QUERY); |
| pExamplesVS->SetNumberingSettings(aNumberings, xFormat, aLocale); |
| } |
| } |
| /*-----------------07.02.97 12.08------------------- |
| |
| --------------------------------------------------*/ |
| |
| SvxSingleNumPickTabPage::~SvxSingleNumPickTabPage() |
| { |
| delete pActNum; |
| delete pExamplesVS; |
| delete pSaveNum; |
| aNumSettingsArr.DeleteAndDestroy(0, aNumSettingsArr.Count()); |
| } |
| |
| /*-----------------07.02.97 12.13------------------- |
| |
| --------------------------------------------------*/ |
| |
| SfxTabPage* SvxSingleNumPickTabPage::Create( Window* pParent, |
| const SfxItemSet& rAttrSet) |
| { |
| return new SvxSingleNumPickTabPage(pParent, rAttrSet); |
| } |
| |
| /*-----------------07.02.97 12.09------------------- |
| |
| --------------------------------------------------*/ |
| |
| |
| sal_Bool SvxSingleNumPickTabPage::FillItemSet( SfxItemSet& rSet ) |
| { |
| if( (bPreset || bModified) && pSaveNum) |
| { |
| *pSaveNum = *pActNum; |
| rSet.Put(SvxNumBulletItem( *pSaveNum ), nNumItemId); |
| rSet.Put(SfxBoolItem(SID_PARAM_NUM_PRESET, bPreset)); |
| } |
| |
| return bModified; |
| } |
| |
| /*-----------------08.02.97 16.27------------------- |
| |
| --------------------------------------------------*/ |
| |
| void SvxSingleNumPickTabPage::ActivatePage(const SfxItemSet& rSet) |
| { |
| const SfxPoolItem* pItem; |
| bPreset = sal_False; |
| sal_Bool bIsPreset = sal_False; |
| const SfxItemSet* pExampleSet = GetTabDialog()->GetExampleSet(); |
| if(pExampleSet) |
| { |
| if(SFX_ITEM_SET == pExampleSet->GetItemState(SID_PARAM_NUM_PRESET, sal_False, &pItem)) |
| bIsPreset = ((const SfxBoolItem*)pItem)->GetValue(); |
| if(SFX_ITEM_SET == pExampleSet->GetItemState(SID_PARAM_CUR_NUM_LEVEL, sal_False, &pItem)) |
| nActNumLvl = ((const SfxUInt16Item*)pItem)->GetValue(); |
| } |
| if(SFX_ITEM_SET == rSet.GetItemState(nNumItemId, sal_False, &pItem)) |
| { |
| delete pSaveNum; |
| pSaveNum = new SvxNumRule(*((SvxNumBulletItem*)pItem)->GetNumRule()); |
| } |
| if(*pSaveNum != *pActNum) |
| { |
| *pActNum = *pSaveNum; |
| pExamplesVS->SetNoSelection(); |
| } |
| // ersten Eintrag vorselektieren |
| if(pActNum && (!lcl_IsNumFmtSet(pActNum, nActNumLvl) || bIsPreset)) |
| { |
| pExamplesVS->SelectItem(1); |
| NumSelectHdl_Impl(pExamplesVS); |
| bPreset = sal_True; |
| } |
| bPreset |= bIsPreset; |
| |
| bModified = sal_False; |
| } |
| |
| /*-----------------08.02.97 11.28------------------- |
| |
| --------------------------------------------------*/ |
| |
| int SvxSingleNumPickTabPage::DeactivatePage(SfxItemSet *_pSet) |
| { |
| if(_pSet) |
| FillItemSet(*_pSet); |
| return sal_True; |
| } |
| |
| /*-----------------07.02.97 12.09------------------- |
| |
| --------------------------------------------------*/ |
| |
| |
| void SvxSingleNumPickTabPage::Reset( const SfxItemSet& rSet ) |
| { |
| const SfxPoolItem* pItem; |
| // nActNumLvl = ((SwNumBulletTabDialog*)GetTabDialog())->GetActNumLevel(); |
| //im Draw gibt es das Item als WhichId, im Writer nur als SlotId |
| SfxItemState eState = rSet.GetItemState(SID_ATTR_NUMBERING_RULE, sal_False, &pItem); |
| if(eState != SFX_ITEM_SET) |
| { |
| nNumItemId = rSet.GetPool()->GetWhich(SID_ATTR_NUMBERING_RULE); |
| eState = rSet.GetItemState(nNumItemId, sal_False, &pItem); |
| |
| if( eState != SFX_ITEM_SET ) |
| { |
| pItem = &static_cast< const SvxNumBulletItem& >( rSet.Get( nNumItemId, sal_True ) ); |
| eState = SFX_ITEM_SET; |
| } |
| } |
| DBG_ASSERT(eState == SFX_ITEM_SET, "kein Item gefunden!"); |
| delete pSaveNum; |
| pSaveNum = new SvxNumRule(*((SvxNumBulletItem*)pItem)->GetNumRule()); |
| |
| if(!pActNum) |
| pActNum = new SvxNumRule(*pSaveNum); |
| else if(*pSaveNum != *pActNum) |
| *pActNum = *pSaveNum; |
| } |
| /*-----------------08.02.97 11.40------------------- |
| |
| --------------------------------------------------*/ |
| |
| IMPL_LINK(SvxSingleNumPickTabPage, NumSelectHdl_Impl, ValueSet*, EMPTYARG) |
| { |
| if(pActNum) |
| { |
| bPreset = sal_False; |
| bModified = sal_True; |
| sal_uInt16 nIdx = pExamplesVS->GetSelectItemId() - 1; |
| DBG_ASSERT(aNumSettingsArr.Count() > nIdx, "wrong index"); |
| if(aNumSettingsArr.Count() <= nIdx) |
| return 0; |
| SvxNumSettings_ImplPtr _pSet = aNumSettingsArr.GetObject(nIdx); |
| sal_Int16 eNewType = _pSet->nNumberType; |
| const sal_Unicode cLocalPrefix = _pSet->sPrefix.getLength() ? _pSet->sPrefix.getStr()[0] : 0; |
| const sal_Unicode cLocalSuffix = _pSet->sSuffix.getLength() ? _pSet->sSuffix.getStr()[0] : 0; |
| |
| sal_uInt16 nMask = 1; |
| for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++) |
| { |
| if(nActNumLvl & nMask) |
| { |
| SvxNumberFormat aFmt(pActNum->GetLevel(i)); |
| aFmt.SetNumberingType(eNewType); |
| String aEmptyStr; |
| if(cLocalPrefix == ' ') |
| aFmt.SetPrefix( aEmptyStr ); |
| else |
| aFmt.SetPrefix(_pSet->sPrefix); |
| if(cLocalSuffix == ' ') |
| aFmt.SetSuffix( aEmptyStr ); |
| else |
| aFmt.SetSuffix(_pSet->sSuffix); |
| aFmt.SetCharFmtName(sNumCharFmtName); |
| // #62069# // #92724# |
| aFmt.SetBulletRelSize(100); |
| pActNum->SetLevel(i, aFmt); |
| } |
| nMask <<= 1 ; |
| } |
| } |
| return 0; |
| } |
| |
| /*-----------------06.06.97 11.15------------------- |
| |
| --------------------------------------------------*/ |
| IMPL_LINK(SvxSingleNumPickTabPage, DoubleClickHdl_Impl, ValueSet*, EMPTYARG) |
| { |
| NumSelectHdl_Impl(pExamplesVS); |
| OKButton& rOk = GetTabDialog()->GetOKButton(); |
| rOk.GetClickHdl().Call(&rOk); |
| return 0; |
| } |
| |
| /**************************************************************************/ |
| /* */ |
| /* */ |
| /**************************************************************************/ |
| |
| |
| SvxBulletPickTabPage::SvxBulletPickTabPage(Window* pParent, |
| const SfxItemSet& rSet) : |
| SfxTabPage( pParent, CUI_RES( RID_SVXPAGE_PICK_BULLET ), rSet ), |
| aValuesFL( this, CUI_RES(FL_VALUES) ), |
| pExamplesVS( new SvxNumValueSet(this, CUI_RES(VS_VALUES), NUM_PAGETYPE_BULLET )), |
| pActNum(0), |
| pSaveNum(0), |
| nActNumLvl( USHRT_MAX ), |
| bModified(sal_False), |
| bPreset(sal_False), |
| nNumItemId(SID_ATTR_NUMBERING_RULE) |
| { |
| FreeResource(); |
| SetExchangeSupport(); |
| pExamplesVS->SetSelectHdl(LINK(this, SvxBulletPickTabPage, NumSelectHdl_Impl)); |
| pExamplesVS->SetDoubleClickHdl(LINK(this, SvxBulletPickTabPage, DoubleClickHdl_Impl)); |
| pExamplesVS->SetHelpId(HID_VALUESET_BULLET ); |
| |
| } |
| /*-----------------07.02.97 12.10------------------- |
| |
| --------------------------------------------------*/ |
| |
| |
| SvxBulletPickTabPage::~SvxBulletPickTabPage() |
| { |
| delete pActNum; |
| delete pExamplesVS; |
| delete pSaveNum; |
| } |
| /*-----------------07.02.97 12.10------------------- |
| |
| --------------------------------------------------*/ |
| |
| |
| SfxTabPage* SvxBulletPickTabPage::Create( Window* pParent, |
| const SfxItemSet& rAttrSet) |
| { |
| return new SvxBulletPickTabPage(pParent, rAttrSet); |
| } |
| |
| /*-----------------07.02.97 12.10------------------- |
| |
| --------------------------------------------------*/ |
| |
| |
| sal_Bool SvxBulletPickTabPage::FillItemSet( SfxItemSet& rSet ) |
| { |
| if( (bPreset || bModified) && pActNum) |
| { |
| *pSaveNum = *pActNum; |
| rSet.Put(SvxNumBulletItem( *pSaveNum ), nNumItemId); |
| rSet.Put(SfxBoolItem(SID_PARAM_NUM_PRESET, bPreset)); |
| } |
| return bModified; |
| } |
| /*-----------------08.02.97 16.28------------------- |
| |
| --------------------------------------------------*/ |
| |
| void SvxBulletPickTabPage::ActivatePage(const SfxItemSet& rSet) |
| { |
| const SfxPoolItem* pItem; |
| bPreset = sal_False; |
| sal_Bool bIsPreset = sal_False; |
| const SfxItemSet* pExampleSet = GetTabDialog()->GetExampleSet(); |
| if(pExampleSet) |
| { |
| if(SFX_ITEM_SET == pExampleSet->GetItemState(SID_PARAM_NUM_PRESET, sal_False, &pItem)) |
| bIsPreset = ((const SfxBoolItem*)pItem)->GetValue(); |
| if(SFX_ITEM_SET == pExampleSet->GetItemState(SID_PARAM_CUR_NUM_LEVEL, sal_False, &pItem)) |
| nActNumLvl = ((const SfxUInt16Item*)pItem)->GetValue(); |
| } |
| if(SFX_ITEM_SET == rSet.GetItemState(nNumItemId, sal_False, &pItem)) |
| { |
| delete pSaveNum; |
| pSaveNum = new SvxNumRule(*((SvxNumBulletItem*)pItem)->GetNumRule()); |
| } |
| if(*pSaveNum != *pActNum) |
| { |
| *pActNum = *pSaveNum; |
| pExamplesVS->SetNoSelection(); |
| } |
| // ersten Eintrag vorselektieren |
| if(pActNum && (!lcl_IsNumFmtSet(pActNum, nActNumLvl) || bIsPreset)) |
| { |
| pExamplesVS->SelectItem(1); |
| NumSelectHdl_Impl(pExamplesVS); |
| bPreset = sal_True; |
| } |
| bPreset |= bIsPreset; |
| bModified = sal_False; |
| } |
| /*-----------------08.02.97 11.28------------------- |
| |
| --------------------------------------------------*/ |
| |
| int SvxBulletPickTabPage::DeactivatePage(SfxItemSet *_pSet) |
| { |
| if(_pSet) |
| FillItemSet(*_pSet); |
| return sal_True; |
| } |
| |
| /*-----------------07.02.97 12.11------------------- |
| |
| --------------------------------------------------*/ |
| |
| |
| void SvxBulletPickTabPage::Reset( const SfxItemSet& rSet ) |
| { |
| const SfxPoolItem* pItem; |
| //im Draw gibt es das Item als WhichId, im Writer nur als SlotId |
| SfxItemState eState = rSet.GetItemState(SID_ATTR_NUMBERING_RULE, sal_False, &pItem); |
| if(eState != SFX_ITEM_SET) |
| { |
| nNumItemId = rSet.GetPool()->GetWhich(SID_ATTR_NUMBERING_RULE); |
| eState = rSet.GetItemState(nNumItemId, sal_False, &pItem); |
| |
| if( eState != SFX_ITEM_SET ) |
| { |
| pItem = &static_cast< const SvxNumBulletItem& >( rSet.Get( nNumItemId, sal_True ) ); |
| eState = SFX_ITEM_SET; |
| } |
| |
| } |
| DBG_ASSERT(eState == SFX_ITEM_SET, "kein Item gefunden!"); |
| delete pSaveNum; |
| pSaveNum = new SvxNumRule(*((SvxNumBulletItem*)pItem)->GetNumRule()); |
| |
| // nActNumLvl = ((SwNumBulletTabDialog*)GetTabDialog())->GetActNumLevel(); |
| |
| if(!pActNum) |
| pActNum = new SvxNumRule(*pSaveNum); |
| else if(*pSaveNum != *pActNum) |
| *pActNum = *pSaveNum; |
| } |
| /*-----------------08.02.97 11.58------------------- |
| |
| --------------------------------------------------*/ |
| |
| IMPL_LINK(SvxBulletPickTabPage, NumSelectHdl_Impl, ValueSet*, EMPTYARG) |
| { |
| if(pActNum) |
| { |
| bPreset = sal_False; |
| bModified = sal_True; |
| sal_Unicode cChar = aBulletTypes[pExamplesVS->GetSelectItemId() - 1]; |
| Font& rActBulletFont = lcl_GetDefaultBulletFont(); |
| |
| sal_uInt16 nMask = 1; |
| for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++) |
| { |
| if(nActNumLvl & nMask) |
| { |
| SvxNumberFormat aFmt(pActNum->GetLevel(i)); |
| aFmt.SetNumberingType( SVX_NUM_CHAR_SPECIAL ); |
| // #i93908# clear suffix for bullet lists |
| aFmt.SetPrefix(::rtl::OUString()); |
| aFmt.SetSuffix(::rtl::OUString()); |
| aFmt.SetBulletFont(&rActBulletFont); |
| aFmt.SetBulletChar(cChar ); |
| aFmt.SetCharFmtName(sBulletCharFmtName); |
| // #62069# // #92724# |
| aFmt.SetBulletRelSize(45); |
| pActNum->SetLevel(i, aFmt); |
| } |
| nMask <<= 1; |
| } |
| } |
| |
| return 0; |
| } |
| |
| /*-----------------06.06.97 11.16------------------- |
| |
| --------------------------------------------------*/ |
| IMPL_LINK(SvxBulletPickTabPage, DoubleClickHdl_Impl, ValueSet*, EMPTYARG) |
| { |
| NumSelectHdl_Impl(pExamplesVS); |
| OKButton& rOk = GetTabDialog()->GetOKButton(); |
| rOk.GetClickHdl().Call(&rOk); |
| return 0; |
| } |
| |
| //Add CHINA001 |
| void SvxBulletPickTabPage::PageCreated(SfxAllItemSet aSet) |
| { |
| |
| SFX_ITEMSET_ARG (&aSet,pBulletCharFmt,SfxStringItem,SID_BULLET_CHAR_FMT,sal_False); |
| |
| if (pBulletCharFmt) |
| SetCharFmtName( pBulletCharFmt->GetValue()); |
| |
| |
| } |
| //end of add CHINA001 |
| /**************************************************************************/ |
| /* */ |
| /* */ |
| /**************************************************************************/ |
| |
| |
| SvxNumPickTabPage::SvxNumPickTabPage(Window* pParent, |
| const SfxItemSet& rSet) : |
| SfxTabPage( pParent, CUI_RES( RID_SVXPAGE_PICK_NUM ), rSet ), |
| aValuesFL( this, CUI_RES(FL_VALUES) ), |
| pExamplesVS( new SvxNumValueSet(this, CUI_RES(VS_VALUES), NUM_PAGETYPE_NUM )), |
| pActNum(0), |
| pSaveNum(0), |
| nActNumLvl( USHRT_MAX ), |
| nNumItemId(SID_ATTR_NUMBERING_RULE), |
| bModified(sal_False), |
| bPreset(sal_False) |
| { |
| |
| FreeResource(); |
| |
| SetExchangeSupport(); |
| |
| pExamplesVS->SetSelectHdl(LINK(this, SvxNumPickTabPage, NumSelectHdl_Impl)); |
| pExamplesVS->SetDoubleClickHdl(LINK(this, SvxNumPickTabPage, DoubleClickHdl_Impl)); |
| pExamplesVS->SetHelpId(HID_VALUESET_NUM ); |
| |
| Reference<XDefaultNumberingProvider> xDefNum = lcl_GetNumberingProvider(); |
| if(xDefNum.is()) |
| { |
| Sequence<Reference<XIndexAccess> > aOutlineAccess; |
| LanguageType eLang = Application::GetSettings().GetLanguage(); |
| Locale aLocale = SvxCreateLocale(eLang); |
| try |
| { |
| aOutlineAccess = xDefNum->getDefaultOutlineNumberings( aLocale ); |
| |
| for(sal_Int32 nItem = 0; |
| nItem < aOutlineAccess.getLength() && nItem < NUM_VALUSET_COUNT; |
| nItem++ ) |
| { |
| SvxNumSettingsArr_Impl& rItemArr = aNumSettingsArrays[ nItem ]; |
| |
| Reference<XIndexAccess> xLevel = aOutlineAccess.getConstArray()[nItem]; |
| for(sal_Int32 nLevel = 0; nLevel < xLevel->getCount() && nLevel < 5; nLevel++) |
| { |
| Any aValueAny = xLevel->getByIndex(nLevel); |
| Sequence<PropertyValue> aLevelProps; |
| aValueAny >>= aLevelProps; |
| SvxNumSettings_ImplPtr pNew = lcl_CreateNumSettingsPtr(aLevelProps); |
| rItemArr.Insert( pNew, rItemArr.Count() ); |
| } |
| } |
| } |
| catch(Exception&) |
| { |
| } |
| Reference<XNumberingFormatter> xFormat(xDefNum, UNO_QUERY); |
| pExamplesVS->SetOutlineNumberingSettings(aOutlineAccess, xFormat, aLocale); |
| } |
| } |
| /*-----------------07.02.97 12.12------------------- |
| |
| --------------------------------------------------*/ |
| |
| |
| SvxNumPickTabPage::~SvxNumPickTabPage() |
| { |
| delete pActNum; |
| delete pExamplesVS; |
| delete pSaveNum; |
| } |
| |
| /*-----------------07.02.97 12.12------------------- |
| |
| --------------------------------------------------*/ |
| |
| |
| SfxTabPage* SvxNumPickTabPage::Create( Window* pParent, |
| const SfxItemSet& rAttrSet) |
| { |
| return new SvxNumPickTabPage(pParent, rAttrSet); |
| } |
| |
| /*-----------------07.02.97 12.12------------------- |
| |
| --------------------------------------------------*/ |
| |
| |
| sal_Bool SvxNumPickTabPage::FillItemSet( SfxItemSet& rSet ) |
| { |
| if( (bPreset || bModified) && pActNum) |
| { |
| *pSaveNum = *pActNum; |
| rSet.Put(SvxNumBulletItem( *pSaveNum ), nNumItemId); |
| rSet.Put(SfxBoolItem(SID_PARAM_NUM_PRESET, bPreset)); |
| } |
| return bModified; |
| } |
| /*-----------------08.02.97 16.28------------------- |
| |
| --------------------------------------------------*/ |
| |
| void SvxNumPickTabPage::ActivatePage(const SfxItemSet& rSet) |
| { |
| const SfxPoolItem* pItem; |
| bPreset = sal_False; |
| sal_Bool bIsPreset = sal_False; |
| const SfxItemSet* pExampleSet = GetTabDialog()->GetExampleSet(); |
| if(pExampleSet) |
| { |
| if(SFX_ITEM_SET == pExampleSet->GetItemState(SID_PARAM_NUM_PRESET, sal_False, &pItem)) |
| bIsPreset = ((const SfxBoolItem*)pItem)->GetValue(); |
| if(SFX_ITEM_SET == pExampleSet->GetItemState(SID_PARAM_CUR_NUM_LEVEL, sal_False, &pItem)) |
| nActNumLvl = ((const SfxUInt16Item*)pItem)->GetValue(); |
| } |
| if(SFX_ITEM_SET == rSet.GetItemState(nNumItemId, sal_False, &pItem)) |
| { |
| delete pSaveNum; |
| pSaveNum = new SvxNumRule(*((SvxNumBulletItem*)pItem)->GetNumRule()); |
| } |
| if(*pSaveNum != *pActNum) |
| { |
| *pActNum = *pSaveNum; |
| pExamplesVS->SetNoSelection(); |
| } |
| // ersten Eintrag vorselektieren |
| if(pActNum && (!lcl_IsNumFmtSet(pActNum, nActNumLvl) || bIsPreset)) |
| { |
| pExamplesVS->SelectItem(1); |
| NumSelectHdl_Impl(pExamplesVS); |
| bPreset = sal_True; |
| } |
| bPreset |= bIsPreset; |
| bModified = sal_False; |
| } |
| |
| /* -----------------08.02.97 11.29------------------- |
| |
| --------------------------------------------------*/ |
| |
| int SvxNumPickTabPage::DeactivatePage(SfxItemSet *_pSet) |
| { |
| if(_pSet) |
| FillItemSet(*_pSet); |
| return sal_True; |
| } |
| |
| /*-----------------07.02.97 12.12------------------- |
| |
| --------------------------------------------------*/ |
| |
| void SvxNumPickTabPage::Reset( const SfxItemSet& rSet ) |
| { |
| const SfxPoolItem* pItem; |
| //im Draw gibt es das Item als WhichId, im Writer nur als SlotId |
| SfxItemState eState = rSet.GetItemState(SID_ATTR_NUMBERING_RULE, sal_False, &pItem); |
| if(eState != SFX_ITEM_SET) |
| { |
| nNumItemId = rSet.GetPool()->GetWhich(SID_ATTR_NUMBERING_RULE); |
| eState = rSet.GetItemState(nNumItemId, sal_False, &pItem); |
| |
| if( eState != SFX_ITEM_SET ) |
| { |
| pItem = &static_cast< const SvxNumBulletItem& >( rSet.Get( nNumItemId, sal_True ) ); |
| eState = SFX_ITEM_SET; |
| } |
| |
| } |
| DBG_ASSERT(eState == SFX_ITEM_SET, "kein Item gefunden!"); |
| delete pSaveNum; |
| pSaveNum = new SvxNumRule(*((SvxNumBulletItem*)pItem)->GetNumRule()); |
| |
| // nActNumLvl = ((SwNumBulletTabDialog*)GetTabDialog())->GetActNumLevel(); |
| if(!pActNum) |
| pActNum = new SvxNumRule(*pSaveNum); |
| else if(*pSaveNum != *pActNum) |
| *pActNum = *pSaveNum; |
| |
| } |
| |
| /*-----------------08.02.97 11.58------------------- |
| Hier werden alle Ebenen veraendert, |
| --------------------------------------------------*/ |
| |
| IMPL_LINK(SvxNumPickTabPage, NumSelectHdl_Impl, ValueSet*, EMPTYARG) |
| { |
| if(pActNum) |
| { |
| bPreset = sal_False; |
| bModified = sal_True; |
| |
| const FontList* pList = 0; |
| |
| SvxNumSettingsArr_Impl& rItemArr = aNumSettingsArrays[pExamplesVS->GetSelectItemId() - 1]; |
| |
| Font& rActBulletFont = lcl_GetDefaultBulletFont(); |
| SvxNumSettings_ImplPtr pLevelSettings = 0; |
| for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++) |
| { |
| if(rItemArr.Count() > i) |
| pLevelSettings = rItemArr[i]; |
| if(!pLevelSettings) |
| break; |
| SvxNumberFormat aFmt(pActNum->GetLevel(i)); |
| aFmt.SetNumberingType( pLevelSettings->nNumberType ); |
| sal_uInt16 nUpperLevelOrChar = (sal_uInt16)pLevelSettings->nParentNumbering; |
| if(aFmt.GetNumberingType() == SVX_NUM_CHAR_SPECIAL) |
| { |
| // #i93908# clear suffix for bullet lists |
| aFmt.SetPrefix(::rtl::OUString()); |
| aFmt.SetSuffix(::rtl::OUString()); |
| if( pLevelSettings->sBulletFont.getLength() && |
| pLevelSettings->sBulletFont.compareTo( |
| rActBulletFont.GetName())) |
| { |
| //search for the font |
| if(!pList) |
| { |
| SfxObjectShell* pCurDocShell = SfxObjectShell::Current(); |
| const SvxFontListItem* pFontListItem = |
| (const SvxFontListItem* )pCurDocShell |
| ->GetItem( SID_ATTR_CHAR_FONTLIST ); |
| pList = pFontListItem ? pFontListItem->GetFontList() : 0; |
| } |
| if(pList && pList->IsAvailable( pLevelSettings->sBulletFont ) ) |
| { |
| FontInfo aInfo = pList->Get( |
| pLevelSettings->sBulletFont,WEIGHT_NORMAL, ITALIC_NONE); |
| Font aFont(aInfo); |
| aFmt.SetBulletFont(&aFont); |
| } |
| else |
| { |
| //if it cannot be found then create a new one |
| Font aCreateFont( pLevelSettings->sBulletFont, |
| String(), Size( 0, 14 ) ); |
| aCreateFont.SetCharSet( RTL_TEXTENCODING_DONTKNOW ); |
| aCreateFont.SetFamily( FAMILY_DONTKNOW ); |
| aCreateFont.SetPitch( PITCH_DONTKNOW ); |
| aCreateFont.SetWeight( WEIGHT_DONTKNOW ); |
| aCreateFont.SetTransparent( sal_True ); |
| aFmt.SetBulletFont( &aCreateFont ); |
| } |
| } |
| else |
| aFmt.SetBulletFont( &rActBulletFont ); |
| |
| aFmt.SetBulletChar( pLevelSettings->sBulletChar.getLength() |
| ? pLevelSettings->sBulletChar.getStr()[0] |
| : 0 ); |
| aFmt.SetCharFmtName( sBulletCharFmtName ); |
| // #62069# // #92724# |
| aFmt.SetBulletRelSize(45); |
| } |
| else |
| { |
| aFmt.SetIncludeUpperLevels(sal::static_int_cast< sal_uInt8 >(0 != nUpperLevelOrChar ? pActNum->GetLevelCount() : 0)); |
| aFmt.SetCharFmtName(sNumCharFmtName); |
| // #62069# // #92724# |
| aFmt.SetBulletRelSize(100); |
| // #i93908# |
| aFmt.SetPrefix(pLevelSettings->sPrefix); |
| aFmt.SetSuffix(pLevelSettings->sSuffix); |
| } |
| pActNum->SetLevel(i, aFmt); |
| } |
| } |
| return 0; |
| } |
| |
| /*-----------------06.06.97 11.16------------------- |
| |
| --------------------------------------------------*/ |
| IMPL_LINK(SvxNumPickTabPage, DoubleClickHdl_Impl, ValueSet*, EMPTYARG) |
| { |
| NumSelectHdl_Impl(pExamplesVS); |
| OKButton& rOk = GetTabDialog()->GetOKButton(); |
| rOk.GetClickHdl().Call(&rOk); |
| return 0; |
| } |
| |
| //add CHINA001 begin |
| void SvxNumPickTabPage::PageCreated(SfxAllItemSet aSet) |
| { |
| SFX_ITEMSET_ARG (&aSet,pNumCharFmt,SfxStringItem,SID_NUM_CHAR_FMT,sal_False); |
| SFX_ITEMSET_ARG (&aSet,pBulletCharFmt,SfxStringItem,SID_BULLET_CHAR_FMT,sal_False); |
| |
| |
| if (pNumCharFmt &&pBulletCharFmt) |
| SetCharFmtNames( pNumCharFmt->GetValue(),pBulletCharFmt->GetValue()); |
| } |
| //end of CHINA001 |
| |
| /**************************************************************************/ |
| /* */ |
| /* */ |
| /**************************************************************************/ |
| |
| SvxBitmapPickTabPage::SvxBitmapPickTabPage(Window* pParent, |
| const SfxItemSet& rSet) : |
| SfxTabPage( pParent, CUI_RES( RID_SVXPAGE_PICK_BMP ), rSet ), |
| aValuesFL( this, CUI_RES(FL_VALUES) ), |
| pExamplesVS( new SvxBmpNumValueSet(this, CUI_RES(VS_VALUES)/*, aGrfNames*/ )), |
| aErrorText( this, CUI_RES(FT_ERROR)), |
| aLinkedCB( this, CUI_RES(CB_LINKED)), |
| pActNum(0), |
| pSaveNum(0), |
| nActNumLvl( USHRT_MAX ), |
| nNumItemId(SID_ATTR_NUMBERING_RULE), |
| bModified(sal_False), |
| bPreset(sal_False) |
| { |
| FreeResource(); |
| SetExchangeSupport(); |
| eCoreUnit = rSet.GetPool()->GetMetric(rSet.GetPool()->GetWhich(SID_ATTR_NUMBERING_RULE)); |
| pExamplesVS->SetSelectHdl(LINK(this, SvxBitmapPickTabPage, NumSelectHdl_Impl)); |
| pExamplesVS->SetDoubleClickHdl(LINK(this, SvxBitmapPickTabPage, DoubleClickHdl_Impl)); |
| aLinkedCB.SetClickHdl(LINK(this, SvxBitmapPickTabPage, LinkBmpHdl_Impl)); |
| |
| // Grafiknamen ermitteln |
| |
| GalleryExplorer::FillObjList(GALLERY_THEME_BULLETS, aGrfNames); |
| pExamplesVS->SetHelpId(HID_VALUESET_NUMBMP ); |
| for(sal_uInt16 i = 0; i < aGrfNames.Count(); i++) |
| { |
| pExamplesVS->InsertItem( i + 1, i); |
| String* pGrfNm = (String*) aGrfNames.GetObject(i); |
| INetURLObject aObj(*pGrfNm); |
| if(aObj.GetProtocol() == INET_PROT_FILE) |
| *pGrfNm = aObj.PathToFileName(); |
| pExamplesVS->SetItemText( i + 1, *pGrfNm ); |
| } |
| if(!aGrfNames.Count()) |
| { |
| aErrorText.Show(); |
| } |
| else |
| { |
| pExamplesVS->Show(); |
| pExamplesVS->Format(); |
| } |
| |
| pExamplesVS->SetAccessibleRelationMemberOf( &aValuesFL ); |
| } |
| |
| /*-----------------12.02.97 07.46------------------- |
| |
| --------------------------------------------------*/ |
| |
| SvxBitmapPickTabPage::~SvxBitmapPickTabPage() |
| { |
| String* pStr = (String*)aGrfNames.First(); |
| while( pStr ) |
| { |
| delete pStr; |
| pStr = (String*)aGrfNames.Next(); |
| } |
| delete pExamplesVS; |
| delete pActNum; |
| delete pSaveNum; |
| } |
| |
| /*-----------------12.02.97 07.46------------------- |
| |
| --------------------------------------------------*/ |
| |
| SfxTabPage* SvxBitmapPickTabPage::Create( Window* pParent, |
| const SfxItemSet& rAttrSet) |
| { |
| return new SvxBitmapPickTabPage(pParent, rAttrSet); |
| } |
| |
| /*-----------------12.02.97 07.46------------------- |
| |
| --------------------------------------------------*/ |
| |
| void SvxBitmapPickTabPage::ActivatePage(const SfxItemSet& rSet) |
| { |
| const SfxPoolItem* pItem; |
| bPreset = sal_False; |
| sal_Bool bIsPreset = sal_False; |
| // nActNumLvl = ((SwNumBulletTabDialog*)GetTabDialog())->GetActNumLevel(); |
| const SfxItemSet* pExampleSet = GetTabDialog()->GetExampleSet(); |
| if(pExampleSet) |
| { |
| if(SFX_ITEM_SET == pExampleSet->GetItemState(SID_PARAM_NUM_PRESET, sal_False, &pItem)) |
| bIsPreset = ((const SfxBoolItem*)pItem)->GetValue(); |
| if(SFX_ITEM_SET == pExampleSet->GetItemState(SID_PARAM_CUR_NUM_LEVEL, sal_False, &pItem)) |
| nActNumLvl = ((const SfxUInt16Item*)pItem)->GetValue(); |
| } |
| if(SFX_ITEM_SET == rSet.GetItemState(nNumItemId, sal_False, &pItem)) |
| { |
| delete pSaveNum; |
| pSaveNum = new SvxNumRule(*((SvxNumBulletItem*)pItem)->GetNumRule()); |
| } |
| if(*pSaveNum != *pActNum) |
| { |
| *pActNum = *pSaveNum; |
| pExamplesVS->SetNoSelection(); |
| } |
| // ersten Eintrag vorselektieren |
| if(aGrfNames.Count() && |
| (pActNum && (!lcl_IsNumFmtSet(pActNum, nActNumLvl) || bIsPreset))) |
| { |
| pExamplesVS->SelectItem(1); |
| NumSelectHdl_Impl(pExamplesVS); |
| bPreset = sal_True; |
| } |
| bPreset |= bIsPreset; |
| bModified = sal_False; |
| } |
| /*-----------------12.02.97 07.46------------------- |
| |
| --------------------------------------------------*/ |
| |
| int SvxBitmapPickTabPage::DeactivatePage(SfxItemSet *_pSet) |
| { |
| if(_pSet) |
| FillItemSet(*_pSet); |
| return sal_True; |
| } |
| /*-----------------12.02.97 07.46------------------- |
| |
| --------------------------------------------------*/ |
| |
| sal_Bool SvxBitmapPickTabPage::FillItemSet( SfxItemSet& rSet ) |
| { |
| if ( !aGrfNames.Count() ) |
| { |
| // das ist im SfxItemSet leider nicht zulaessig #52134# |
| // rSet.DisableItem(SID_ATTR_NUMBERING_RULE); |
| return sal_False; |
| } |
| if( (bPreset || bModified) && pActNum) |
| { |
| *pSaveNum = *pActNum; |
| rSet.Put(SvxNumBulletItem( *pSaveNum ), nNumItemId); |
| rSet.Put(SfxBoolItem(SID_PARAM_NUM_PRESET, bPreset)); |
| } |
| |
| return bModified; |
| } |
| /*-----------------12.02.97 07.46------------------- |
| |
| --------------------------------------------------*/ |
| |
| void SvxBitmapPickTabPage::Reset( const SfxItemSet& rSet ) |
| { |
| const SfxPoolItem* pItem; |
| //im Draw gibt es das Item als WhichId, im Writer nur als SlotId |
| SfxItemState eState = rSet.GetItemState(SID_ATTR_NUMBERING_RULE, sal_False, &pItem); |
| if(eState != SFX_ITEM_SET) |
| { |
| nNumItemId = rSet.GetPool()->GetWhich(SID_ATTR_NUMBERING_RULE); |
| eState = rSet.GetItemState(nNumItemId, sal_False, &pItem); |
| |
| if( eState != SFX_ITEM_SET ) |
| { |
| pItem = &static_cast< const SvxNumBulletItem& >( rSet.Get( nNumItemId, sal_True ) ); |
| eState = SFX_ITEM_SET; |
| } |
| |
| } |
| DBG_ASSERT(eState == SFX_ITEM_SET, "kein Item gefunden!"); |
| delete pSaveNum; |
| pSaveNum = new SvxNumRule(*((SvxNumBulletItem*)pItem)->GetNumRule()); |
| |
| if(!pActNum) |
| pActNum = new SvxNumRule(*pSaveNum); |
| else if(*pSaveNum != *pActNum) |
| *pActNum = *pSaveNum; |
| if(!pActNum->IsFeatureSupported(NUM_ENABLE_LINKED_BMP)) |
| { |
| aLinkedCB.Check(sal_False); |
| aLinkedCB.Enable(sal_False); |
| } |
| else if(!pActNum->IsFeatureSupported(NUM_ENABLE_EMBEDDED_BMP)) |
| { |
| aLinkedCB.Check(sal_True); |
| aLinkedCB.Enable(sal_False); |
| } |
| } |
| |
| /*-----------------12.02.97 07.53------------------- |
| |
| --------------------------------------------------*/ |
| |
| IMPL_LINK(SvxBitmapPickTabPage, NumSelectHdl_Impl, ValueSet*, EMPTYARG) |
| { |
| if(pActNum) |
| { |
| bPreset = sal_False; |
| bModified = sal_True; |
| sal_uInt16 nIdx = pExamplesVS->GetSelectItemId() - 1; |
| |
| String* pGrfName = 0; |
| if(aGrfNames.Count() > nIdx) |
| pGrfName = (String*)aGrfNames.GetObject(nIdx); |
| |
| sal_uInt16 nMask = 1; |
| String aEmptyStr; |
| sal_uInt16 nSetNumberingType = SVX_NUM_BITMAP; |
| if(aLinkedCB.IsChecked()) |
| nSetNumberingType |= LINK_TOKEN; |
| for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++) |
| { |
| if(nActNumLvl & nMask) |
| { |
| SvxNumberFormat aFmt(pActNum->GetLevel(i)); |
| aFmt.SetNumberingType(nSetNumberingType); |
| aFmt.SetPrefix( aEmptyStr ); |
| aFmt.SetSuffix( aEmptyStr ); |
| aFmt.SetCharFmtName( sNumCharFmtName ); |
| |
| Graphic aGraphic; |
| if(GalleryExplorer::GetGraphicObj( GALLERY_THEME_BULLETS, nIdx, &aGraphic)) |
| { |
| Size aSize = SvxNumberFormat::GetGraphicSizeMM100(&aGraphic); |
| sal_Int16 eOrient = text::VertOrientation::LINE_CENTER; |
| aSize = OutputDevice::LogicToLogic(aSize, MAP_100TH_MM, (MapUnit)eCoreUnit); |
| SvxBrushItem aBrush(aGraphic, GPOS_AREA, SID_ATTR_BRUSH ); |
| aFmt.SetGraphicBrush( &aBrush, &aSize, &eOrient ); |
| } |
| else if(pGrfName) |
| aFmt.SetGraphic( *pGrfName ); |
| pActNum->SetLevel(i, aFmt); |
| } |
| nMask <<= 1 ; |
| } |
| } |
| |
| return 0; |
| } |
| |
| /*-----------------06.06.97 11.17------------------- |
| |
| --------------------------------------------------*/ |
| IMPL_LINK(SvxBitmapPickTabPage, DoubleClickHdl_Impl, ValueSet*, EMPTYARG) |
| { |
| NumSelectHdl_Impl(pExamplesVS); |
| OKButton& rOk = GetTabDialog()->GetOKButton(); |
| rOk.GetClickHdl().Call(&rOk); |
| return 0; |
| } |
| /* -----------------03.11.99 13:46------------------- |
| |
| --------------------------------------------------*/ |
| IMPL_LINK(SvxBitmapPickTabPage, LinkBmpHdl_Impl, CheckBox*, EMPTYARG ) |
| { |
| if(!pExamplesVS->IsNoSelection()) |
| { |
| NumSelectHdl_Impl(pExamplesVS); |
| } |
| return 0; |
| } |
| /*-----------------13.02.97 09.40------------------- |
| |
| --------------------------------------------------*/ |
| |
| //CHINA001 SvxBmpNumValueSet::SvxBmpNumValueSet( Window* pParent, const ResId& rResId/*, const List& rStrNames*/ ) : |
| //CHINA001 |
| //CHINA001 SvxNumValueSet( pParent, rResId, NUM_PAGETYPE_BMP ), |
| //CHINA001 // rStrList ( rStrNames ), |
| //CHINA001 bGrfNotFound( sal_False ) |
| //CHINA001 |
| //CHINA001 { |
| //CHINA001 GalleryExplorer::BeginLocking(GALLERY_THEME_BULLETS); |
| //CHINA001 SetStyle( GetStyle() | WB_VSCROLL ); |
| //CHINA001 SetLineCount( 3 ); |
| //CHINA001 aFormatTimer.SetTimeout(300); |
| //CHINA001 aFormatTimer.SetTimeoutHdl(LINK(this, SvxBmpNumValueSet, FormatHdl_Impl)); |
| //CHINA001 } |
| //CHINA001 |
| //CHINA001 /*-----------------13.02.97 09.41------------------- |
| //CHINA001 |
| //CHINA001 --------------------------------------------------*/ |
| //CHINA001 |
| //CHINA001 SvxBmpNumValueSet::~SvxBmpNumValueSet() |
| //CHINA001 { |
| //CHINA001 GalleryExplorer::EndLocking(GALLERY_THEME_BULLETS); |
| //CHINA001 aFormatTimer.Stop(); |
| //CHINA001 } |
| //CHINA001 /*-----------------13.02.97 09.41------------------- |
| //CHINA001 |
| //CHINA001 --------------------------------------------------*/ |
| //CHINA001 |
| //CHINA001 void SvxBmpNumValueSet::UserDraw( const UserDrawEvent& rUDEvt ) |
| //CHINA001 { |
| //CHINA001 SvxNumValueSet::UserDraw(rUDEvt); |
| //CHINA001 |
| //CHINA001 Rectangle aRect = rUDEvt.GetRect(); |
| //CHINA001 OutputDevice* pDev = rUDEvt.GetDevice(); |
| //CHINA001 sal_uInt16 nItemId = rUDEvt.GetItemId(); |
| //CHINA001 Point aBLPos = aRect.TopLeft(); |
| //CHINA001 |
| //CHINA001 int nRectHeight = aRect.GetHeight(); |
| //CHINA001 Size aSize(nRectHeight/8, nRectHeight/8); |
| //CHINA001 |
| //CHINA001 Graphic aGraphic; |
| //CHINA001 if(!GalleryExplorer::GetGraphicObj( GALLERY_THEME_BULLETS, nItemId - 1, |
| //CHINA001 &aGraphic, NULL)) |
| //CHINA001 { |
| //CHINA001 bGrfNotFound = sal_True; |
| //CHINA001 } |
| //CHINA001 else |
| //CHINA001 { |
| //CHINA001 Point aPos(aBLPos.X() + 5, 0); |
| //CHINA001 for( sal_uInt16 i = 0; i < 3; i++ ) |
| //CHINA001 { |
| //CHINA001 sal_uInt16 nY = 11 + i * 33; |
| //CHINA001 aPos.Y() = aBLPos.Y() + nRectHeight * nY / 100; |
| //CHINA001 aGraphic.Draw( pDev, aPos, aSize ); |
| //CHINA001 } |
| //CHINA001 } |
| //CHINA001 } |
| //CHINA001 |
| //CHINA001 /*-----------------14.02.97 07.34------------------- |
| //CHINA001 |
| //CHINA001 --------------------------------------------------*/ |
| //CHINA001 |
| //CHINA001 IMPL_LINK(SvxBmpNumValueSet, FormatHdl_Impl, Timer*, EMPTYARG) |
| //CHINA001 { |
| //CHINA001 // nur, wenn eine Grafik nicht da war, muss formatiert werden |
| //CHINA001 if(bGrfNotFound) |
| //CHINA001 { |
| //CHINA001 bGrfNotFound = sal_False; |
| //CHINA001 Format(); |
| //CHINA001 } |
| //CHINA001 Invalidate(); |
| //CHINA001 return 0; |
| //CHINA001 } |
| /*-----------------01.12.97 16:15------------------- |
| Tabpage Numerierungsoptionen |
| --------------------------------------------------*/ |
| #define NUM_NO_GRAPHIC 1000 |
| SvxNumOptionsTabPage::SvxNumOptionsTabPage(Window* pParent, |
| const SfxItemSet& rSet) : |
| SfxTabPage( pParent, CUI_RES( RID_SVXPAGE_NUM_OPTIONS ), rSet ), |
| |
| aFormatFL( this, CUI_RES(FL_FORMAT )), |
| aLevelFT( this, CUI_RES(FT_LEVEL )), |
| aLevelLB( this, CUI_RES(LB_LEVEL )), |
| aFmtFT( this, CUI_RES(FT_FMT )), |
| aFmtLB( this, CUI_RES(LB_FMT )), |
| aPrefixFT( this, CUI_RES(FT_PREFIX )), |
| aPrefixED( this, CUI_RES(ED_PREFIX )), |
| aSuffixFT( this, CUI_RES(FT_SUFFIX )), |
| aSuffixED( this, CUI_RES(ED_SUFFIX )), |
| aCharFmtFT( this, CUI_RES(FT_CHARFMT )), |
| aCharFmtLB( this, CUI_RES(LB_CHARFMT )), |
| aBulColorFT( this, CUI_RES(FT_BUL_COLOR)), |
| aBulColLB( this, CUI_RES(LB_BUL_COLOR)), |
| aBulRelSizeFT( this, CUI_RES(FT_BUL_REL_SIZE)), |
| aBulRelSizeMF( this, CUI_RES(MF_BUL_REL_SIZE)), |
| aAllLevelFT( this, CUI_RES(FT_ALL_LEVEL)), |
| aAllLevelNF( this, CUI_RES(NF_ALL_LEVEL)), |
| aStartFT( this, CUI_RES(FT_START )), |
| aStartED( this, CUI_RES(ED_START )), |
| aBulletPB( this, CUI_RES(PB_BULLET )), |
| aAlignFT( this, CUI_RES(FT_ALIGN )), |
| aAlignLB( this, CUI_RES(LB_ALIGN )), |
| aBitmapFT( this, CUI_RES(FT_BITMAP )), |
| aBitmapMB( this, CUI_RES(MB_BITMAP )), |
| aSizeFT( this, CUI_RES(FT_SIZE )), |
| aWidthMF( this, CUI_RES(MF_WIDTH )), |
| aMultFT( this, CUI_RES(FT_MULT )), |
| aHeightMF( this, CUI_RES(MF_HEIGHT )), |
| aRatioCB( this, CUI_RES(CB_RATIO )), |
| aOrientFT( this, CUI_RES(FT_ORIENT )), |
| aOrientLB( this, CUI_RES(LB_ORIENT )), |
| aSameLevelFL( this, CUI_RES(FL_SAME_LEVEL)), |
| aSameLevelCB( this, CUI_RES(CB_SAME_LEVEL)), |
| pPreviewWIN( new SvxNumberingPreview(this, CUI_RES(WIN_PREVIEW ))), |
| pActNum(0), |
| pSaveNum(0), |
| bLastWidthModified(sal_False), |
| bModified(sal_False), |
| bPreset(sal_False), |
| bAutomaticCharStyles(sal_True), |
| bHTMLMode(sal_False), |
| bMenuButtonInitialized(sal_False), |
| sBullet(CUI_RES(STR_BULLET)), |
| nBullet(0xff), |
| nActNumLvl(USHRT_MAX), |
| nNumItemId(SID_ATTR_NUMBERING_RULE) |
| { |
| sStartWith = aStartFT.GetText(); |
| pPreviewWIN->SetBackground(Wallpaper(Color(COL_TRANSPARENT))); |
| SetExchangeSupport(); |
| aActBulletFont = lcl_GetDefaultBulletFont(); |
| |
| aBulletPB.SetClickHdl(LINK(this, SvxNumOptionsTabPage, BulletHdl_Impl)); |
| aFmtLB.SetSelectHdl(LINK(this, SvxNumOptionsTabPage, NumberTypeSelectHdl_Impl)); |
| aBitmapMB.SetSelectHdl(LINK(this, SvxNumOptionsTabPage, GraphicHdl_Impl)); |
| aLevelLB.SetSelectHdl(LINK(this, SvxNumOptionsTabPage, LevelHdl_Impl)); |
| aCharFmtLB.SetSelectHdl(LINK(this, SvxNumOptionsTabPage, CharFmtHdl_Impl)); |
| aWidthMF.SetModifyHdl(LINK(this, SvxNumOptionsTabPage, SizeHdl_Impl)); |
| aHeightMF.SetModifyHdl(LINK(this, SvxNumOptionsTabPage, SizeHdl_Impl)); |
| aRatioCB.SetClickHdl(LINK(this, SvxNumOptionsTabPage, RatioHdl_Impl)); |
| aStartED.SetModifyHdl(LINK(this, SvxNumOptionsTabPage, EditModifyHdl_Impl)); |
| aPrefixED.SetModifyHdl(LINK(this, SvxNumOptionsTabPage, EditModifyHdl_Impl)); |
| aSuffixED.SetModifyHdl(LINK(this, SvxNumOptionsTabPage, EditModifyHdl_Impl)); |
| aAllLevelNF.SetModifyHdl(LINK(this,SvxNumOptionsTabPage, AllLevelHdl_Impl)); |
| aOrientLB.SetSelectHdl(LINK(this, SvxNumOptionsTabPage, OrientHdl_Impl)); |
| aSameLevelCB.SetClickHdl(LINK(this, SvxNumOptionsTabPage, SameLevelHdl_Impl)); |
| aBulRelSizeMF.SetModifyHdl(LINK(this,SvxNumOptionsTabPage, BulRelSizeHdl_Impl)); |
| aBulColLB.SetSelectHdl(LINK(this, SvxNumOptionsTabPage, BulColorHdl_Impl)); |
| aInvalidateTimer.SetTimeoutHdl(LINK(this, SvxNumOptionsTabPage, PreviewInvalidateHdl_Impl)); |
| aInvalidateTimer.SetTimeout(50); |
| |
| aBitmapMB.GetPopupMenu()->SetHighlightHdl(LINK(this, SvxNumOptionsTabPage, PopupActivateHdl_Impl)); |
| PopupMenu* pPopup = new PopupMenu; |
| aBitmapMB.GetPopupMenu()->SetPopupMenu( MN_GALLERY, pPopup ); |
| |
| pPopup->InsertItem( NUM_NO_GRAPHIC, String(CUI_RES(ST_POPUP_EMPTY_ENTRY)) ); |
| pPopup->EnableItem( NUM_NO_GRAPHIC, sal_False ); |
| |
| eCoreUnit = rSet.GetPool()->GetMetric(rSet.GetPool()->GetWhich(SID_ATTR_NUMBERING_RULE)); |
| |
| aBitmapMB.SetAccessibleRelationLabeledBy( &aBitmapFT ); |
| |
| FreeResource(); |
| |
| //get advanced numbering types from the component |
| Reference<XDefaultNumberingProvider> xDefNum = lcl_GetNumberingProvider(); |
| Reference<XNumberingTypeInfo> xInfo(xDefNum, UNO_QUERY); |
| |
| // Extended numbering schemes present in the resource but not offered by |
| // the i18n framework per configuration must be removed from the listbox. |
| // Watch out for the ugly 0x88/*SVX_NUM_BITMAP|0x80*/ to not remove that. |
| const sal_uInt16 nDontRemove = 0xffff; |
| ::std::vector< sal_uInt16> aRemove( aFmtLB.GetEntryCount(), nDontRemove); |
| for (size_t i=0; i<aRemove.size(); ++i) |
| { |
| sal_uInt16 nEntryData = (sal_uInt16)(sal_uLong)aFmtLB.GetEntryData( |
| sal::static_int_cast< sal_uInt16 >(i)); |
| if (nEntryData > NumberingType::CHARS_LOWER_LETTER_N && |
| nEntryData != (SVX_NUM_BITMAP | 0x80)) |
| aRemove[i] = nEntryData; |
| } |
| if(xInfo.is()) |
| { |
| Sequence<sal_Int16> aTypes = xInfo->getSupportedNumberingTypes( ); |
| const sal_Int16* pTypes = aTypes.getConstArray(); |
| for(sal_Int32 nType = 0; nType < aTypes.getLength(); nType++) |
| { |
| sal_Int16 nCurrent = pTypes[nType]; |
| if(nCurrent > NumberingType::CHARS_LOWER_LETTER_N) |
| { |
| sal_Bool bInsert = sal_True; |
| for(sal_uInt16 nEntry = 0; nEntry < aFmtLB.GetEntryCount(); nEntry++) |
| { |
| sal_uInt16 nEntryData = (sal_uInt16)(sal_uLong)aFmtLB.GetEntryData(nEntry); |
| if(nEntryData == (sal_uInt16) nCurrent) |
| { |
| bInsert = sal_False; |
| aRemove[nEntry] = nDontRemove; |
| break; |
| } |
| } |
| if(bInsert) |
| { |
| OUString aIdent = xInfo->getNumberingIdentifier( nCurrent ); |
| sal_uInt16 nPos = aFmtLB.InsertEntry(aIdent); |
| aFmtLB.SetEntryData(nPos,(void*)(sal_uLong)nCurrent); |
| } |
| } |
| } |
| } |
| for (size_t i=0; i<aRemove.size(); ++i) |
| { |
| if (aRemove[i] != nDontRemove) |
| { |
| sal_uInt16 nPos = aFmtLB.GetEntryPos( (void*)(sal_uLong)aRemove[i]); |
| aFmtLB.RemoveEntry( nPos); |
| } |
| } |
| |
| aBulletPB.SetAccessibleRelationMemberOf(&aFormatFL); |
| aBulletPB.SetAccessibleRelationLabeledBy(&aStartFT); |
| aBulletPB.SetAccessibleName(aStartFT.GetText()); |
| } |
| |
| /*-----------------01.12.97 16:30------------------- |
| |
| --------------------------------------------------*/ |
| SvxNumOptionsTabPage::~SvxNumOptionsTabPage() |
| { |
| delete aBitmapMB.GetPopupMenu()->GetPopupMenu( MN_GALLERY ); |
| String* pStr = (String*)aGrfNames.First(); |
| while( pStr ) |
| { |
| delete pStr; |
| pStr = (String*)aGrfNames.Next(); |
| } |
| delete pActNum; |
| delete pPreviewWIN; |
| delete pSaveNum; |
| } |
| |
| /*-----------------03.12.97 07:52------------------- |
| |
| --------------------------------------------------*/ |
| void SvxNumOptionsTabPage::SetMetric(FieldUnit eMetric) |
| { |
| if(eMetric == FUNIT_MM) |
| { |
| aWidthMF .SetDecimalDigits(1); |
| aHeightMF .SetDecimalDigits(1); |
| } |
| aWidthMF .SetUnit( eMetric ); |
| aHeightMF .SetUnit( eMetric ); |
| } |
| |
| /*-----------------01.12.97 16:30------------------- |
| |
| --------------------------------------------------*/ |
| SfxTabPage* SvxNumOptionsTabPage::Create( Window* pParent, |
| const SfxItemSet& rAttrSet) |
| { |
| return new SvxNumOptionsTabPage(pParent, rAttrSet); |
| }; |
| /*-----------------01.12.97 16:29------------------- |
| |
| --------------------------------------------------*/ |
| void SvxNumOptionsTabPage::ActivatePage(const SfxItemSet& rSet) |
| { |
| const SfxPoolItem* pItem; |
| const SfxItemSet* pExampleSet = GetTabDialog()->GetExampleSet(); |
| sal_uInt16 nTmpNumLvl = USHRT_MAX; |
| if(pExampleSet) |
| { |
| if(SFX_ITEM_SET == pExampleSet->GetItemState(SID_PARAM_NUM_PRESET, sal_False, &pItem)) |
| bPreset = ((const SfxBoolItem*)pItem)->GetValue(); |
| if(SFX_ITEM_SET == pExampleSet->GetItemState(SID_PARAM_CUR_NUM_LEVEL, sal_False, &pItem)) |
| nTmpNumLvl = ((const SfxUInt16Item*)pItem)->GetValue(); |
| } |
| if(SFX_ITEM_SET == rSet.GetItemState(nNumItemId, sal_False, &pItem)) |
| { |
| delete pSaveNum; |
| pSaveNum = new SvxNumRule(*((SvxNumBulletItem*)pItem)->GetNumRule()); |
| } |
| // |
| bModified = (!pActNum->Get( 0 ) || bPreset); |
| if(*pActNum != *pSaveNum || |
| nActNumLvl != nTmpNumLvl) |
| { |
| nActNumLvl = nTmpNumLvl; |
| sal_uInt16 nMask = 1; |
| aLevelLB.SetUpdateMode(sal_False); |
| aLevelLB.SetNoSelection(); |
| aLevelLB.SelectEntryPos( pActNum->GetLevelCount(), nActNumLvl == USHRT_MAX); |
| if(nActNumLvl != USHRT_MAX) |
| for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++) |
| { |
| if(nActNumLvl & nMask) |
| aLevelLB.SelectEntryPos( i, sal_True); |
| nMask <<= 1 ; |
| } |
| aLevelLB.SetUpdateMode(sal_True); |
| *pActNum = *pSaveNum; |
| InitControls(); |
| } |
| |
| } |
| /*-----------------01.12.97 16:29------------------- |
| |
| --------------------------------------------------*/ |
| int SvxNumOptionsTabPage::DeactivatePage(SfxItemSet * _pSet) |
| { |
| if(_pSet) |
| FillItemSet(*_pSet); |
| return sal_True; |
| } |
| /*-----------------01.12.97 16:29------------------- |
| |
| --------------------------------------------------*/ |
| sal_Bool SvxNumOptionsTabPage::FillItemSet( SfxItemSet& rSet ) |
| { |
| rSet.Put(SfxUInt16Item(SID_PARAM_CUR_NUM_LEVEL, nActNumLvl)); |
| if(bModified && pActNum) |
| { |
| *pSaveNum = *pActNum; |
| rSet.Put(SvxNumBulletItem( *pSaveNum ), nNumItemId); |
| rSet.Put(SfxBoolItem(SID_PARAM_NUM_PRESET, sal_False)); |
| } |
| return bModified; |
| }; |
| /*-----------------01.12.97 16:29------------------- |
| |
| --------------------------------------------------*/ |
| void SvxNumOptionsTabPage::Reset( const SfxItemSet& rSet ) |
| { |
| const SfxPoolItem* pItem; |
| //im Draw gibt es das Item als WhichId, im Writer nur als SlotId |
| SfxItemState eState = rSet.GetItemState(SID_ATTR_NUMBERING_RULE, sal_False, &pItem); |
| if(eState != SFX_ITEM_SET) |
| { |
| nNumItemId = rSet.GetPool()->GetWhich(SID_ATTR_NUMBERING_RULE); |
| eState = rSet.GetItemState(nNumItemId, sal_False, &pItem); |
| |
| if( eState != SFX_ITEM_SET ) |
| { |
| pItem = &static_cast< const SvxNumBulletItem& >( rSet.Get( nNumItemId, sal_True ) ); |
| eState = SFX_ITEM_SET; |
| } |
| |
| } |
| DBG_ASSERT(eState == SFX_ITEM_SET, "kein Item gefunden!"); |
| delete pSaveNum; |
| pSaveNum = new SvxNumRule(*((SvxNumBulletItem*)pItem)->GetNumRule()); |
| |
| // Ebenen einfuegen |
| if(!aLevelLB.GetEntryCount()) |
| { |
| for(sal_uInt16 i = 1; i <= pSaveNum->GetLevelCount(); i++) |
| aLevelLB.InsertEntry( UniString::CreateFromInt32(i)); |
| if(pSaveNum->GetLevelCount() > 1) |
| { |
| String sEntry( UniString::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "1 - " ) ) ); |
| sEntry += UniString::CreateFromInt32( pSaveNum->GetLevelCount() ); |
| aLevelLB.InsertEntry(sEntry); |
| aLevelLB.SelectEntry(sEntry); |
| } |
| else |
| aLevelLB.SelectEntryPos(0); |
| } |
| else |
| aLevelLB.SelectEntryPos(aLevelLB.GetEntryCount() - 1); |
| |
| // nActNumLvl = ((SwNumBulletTabDialog*)GetTabDialog())->GetActNumLevel(); |
| sal_uInt16 nMask = 1; |
| aLevelLB.SetUpdateMode(sal_False); |
| aLevelLB.SetNoSelection(); |
| if(nActNumLvl == USHRT_MAX) |
| { |
| aLevelLB.SelectEntryPos( pSaveNum->GetLevelCount(), sal_True); |
| } |
| else |
| for(sal_uInt16 i = 0; i < pSaveNum->GetLevelCount(); i++) |
| { |
| if(nActNumLvl & nMask) |
| aLevelLB.SelectEntryPos( i, sal_True); |
| nMask <<= 1 ; |
| } |
| aLevelLB.SetUpdateMode(sal_True); |
| |
| if(!pActNum) |
| pActNum = new SvxNumRule(*pSaveNum); |
| else if(*pSaveNum != *pActNum) |
| *pActNum = *pSaveNum; |
| pPreviewWIN->SetNumRule(pActNum); |
| aSameLevelCB.Check(pActNum->IsContinuousNumbering()); |
| |
| //ColorListBox bei Bedarf fuellen |
| if ( pActNum->IsFeatureSupported( NUM_BULLET_COLOR ) ) |
| { |
| SfxObjectShell* pDocSh = SfxObjectShell::Current(); |
| DBG_ASSERT( pDocSh, "DocShell not found!" ); |
| XColorListSharedPtr aColorTable; |
| |
| if ( pDocSh ) |
| { |
| pItem = pDocSh->GetItem( SID_COLOR_TABLE ); |
| if ( pItem ) |
| aColorTable = static_cast< const SvxColorTableItem* >(pItem)->GetColorTable(); |
| } |
| |
| if ( !aColorTable.get() ) |
| { |
| aColorTable = XPropertyListFactory::CreateSharedXColorList(SvtPathOptions().GetPalettePath()); |
| } |
| |
| aBulColLB.InsertEntry( Color( COL_AUTO ), SVX_RESSTR( RID_SVXSTR_AUTOMATIC )); |
| |
| for ( long i = 0; i < aColorTable->Count(); i++ ) |
| { |
| XColorEntry* pEntry = aColorTable->GetColor(i); |
| aBulColLB.InsertEntry( pEntry->GetColor(), pEntry->GetName() ); |
| } |
| } |
| |
| SfxObjectShell* pShell; |
| if ( SFX_ITEM_SET == rSet.GetItemState( SID_HTML_MODE, sal_False, &pItem ) |
| || ( 0 != ( pShell = SfxObjectShell::Current()) && |
| 0 != ( pItem = pShell->GetItem( SID_HTML_MODE ) ) ) ) |
| { |
| sal_uInt16 nHtmlMode = ((SfxUInt16Item*)pItem)->GetValue(); |
| bHTMLMode = 0 != (nHtmlMode&HTMLMODE_ON); |
| } |
| |
| sal_Bool bCharFmt = pActNum->IsFeatureSupported(NUM_CHAR_STYLE); |
| aCharFmtFT.Show(bCharFmt); |
| aCharFmtLB.Show(bCharFmt); |
| |
| sal_Bool bContinuous = pActNum->IsFeatureSupported(NUM_CONTINUOUS); |
| |
| sal_Bool bAllLevel = bContinuous && !bHTMLMode; |
| aAllLevelFT.Show(bAllLevel); |
| aAllLevelNF.Show(bAllLevel); |
| |
| aSameLevelFL.Show(bContinuous); |
| aSameLevelCB.Show(bContinuous); |
| //wieder Missbrauch: im Draw gibt es die Numerierung nur bis zum Bitmap |
| // without SVX_NUM_NUMBER_NONE |
| //remove types that are unsupported by Draw/Impress |
| if(!bContinuous) |
| { |
| sal_uInt16 nFmtCount = aFmtLB.GetEntryCount(); |
| for(sal_uInt16 i = nFmtCount; i; i--) |
| { |
| sal_uInt16 nEntryData = (sal_uInt16)(sal_uLong)aFmtLB.GetEntryData(i - 1); |
| if(/*SVX_NUM_NUMBER_NONE == nEntryData ||*/ |
| ((SVX_NUM_BITMAP|LINK_TOKEN) == nEntryData)) |
| aFmtLB.RemoveEntry(i - 1); |
| } |
| } |
| //one must be enabled |
| if(!pActNum->IsFeatureSupported(NUM_ENABLE_LINKED_BMP)) |
| { |
| long nData = SVX_NUM_BITMAP|LINK_TOKEN; |
| sal_uInt16 nPos = aFmtLB.GetEntryPos((void*)nData); |
| if(LISTBOX_ENTRY_NOTFOUND != nPos) |
| aFmtLB.RemoveEntry(nPos); |
| } |
| else if(!pActNum->IsFeatureSupported(NUM_ENABLE_EMBEDDED_BMP)) |
| { |
| long nData = SVX_NUM_BITMAP; |
| sal_uInt16 nPos = aFmtLB.GetEntryPos((void*)nData); |
| if(LISTBOX_ENTRY_NOTFOUND != nPos) |
| aFmtLB.RemoveEntry(nPos); |
| } |
| if(pActNum->IsFeatureSupported(NUM_SYMBOL_ALIGNMENT)) |
| { |
| aAlignFT.Show(); |
| aAlignLB.Show(); |
| Size aSz(aFormatFL.GetSizePixel()); |
| aSz.Height() = aLevelFT.GetSizePixel().Height(); |
| aFormatFL.SetSizePixel(aSz); |
| aAlignLB.SetSelectHdl(LINK(this, SvxNumOptionsTabPage, EditModifyHdl_Impl)); |
| } |
| |
| //MegaHack: Aufgrund eines nicht fixbaren 'designfehlers' im Impress |
| //Alle arten der numerischen Aufzaehlungen loeschen |
| if(pActNum->IsFeatureSupported(NUM_NO_NUMBERS)) |
| { |
| sal_uInt16 nFmtCount = aFmtLB.GetEntryCount(); |
| for(sal_uInt16 i = nFmtCount; i; i--) |
| { |
| sal_uInt16 nEntryData = (sal_uInt16)(sal_uLong)aFmtLB.GetEntryData(i - 1); |
| if( /*nEntryData >= SVX_NUM_CHARS_UPPER_LETTER &&*/ nEntryData <= SVX_NUM_NUMBER_NONE) |
| aFmtLB.RemoveEntry(i - 1); |
| } |
| } |
| |
| InitControls(); |
| bModified = sal_False; |
| |
| } |
| /*-----------------02.12.97 13:47------------------- |
| |
| --------------------------------------------------*/ |
| void SvxNumOptionsTabPage::InitControls() |
| { |
| sal_Bool bShowBullet = sal_True; |
| sal_Bool bShowBitmap = sal_True; |
| sal_Bool bSameType = sal_True; |
| sal_Bool bSameStart = sal_True; |
| sal_Bool bSamePrefix = sal_True; |
| sal_Bool bSameSuffix = sal_True; |
| sal_Bool bAllLevel = sal_True; |
| sal_Bool bSameCharFmt = sal_True; |
| sal_Bool bSameVOrient = sal_True; |
| sal_Bool bSameSize = sal_True; |
| sal_Bool bSameBulColor = sal_True; |
| sal_Bool bSameBulRelSize= sal_True; |
| sal_Bool bSameAdjust = sal_True; |
| |
| const SvxNumberFormat* aNumFmtArr[SVX_MAX_NUM]; |
| String sFirstCharFmt; |
| sal_Int16 eFirstOrient = text::VertOrientation::NONE; |
| Size aFirstSize(0,0); |
| sal_uInt16 nMask = 1; |
| sal_uInt16 nLvl = USHRT_MAX; |
| sal_uInt16 nHighestLevel = 0; |
| String aEmptyStr; |
| |
| sal_Bool bBullColor = pActNum->IsFeatureSupported(NUM_BULLET_COLOR); |
| sal_Bool bBullRelSize = pActNum->IsFeatureSupported(NUM_BULLET_REL_SIZE); |
| for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++) |
| { |
| if(nActNumLvl & nMask) |
| { |
| aNumFmtArr[i] = &pActNum->GetLevel(i); |
| bShowBullet &= aNumFmtArr[i]->GetNumberingType() == SVX_NUM_CHAR_SPECIAL; |
| bShowBitmap &= (aNumFmtArr[i]->GetNumberingType()&(~LINK_TOKEN)) == SVX_NUM_BITMAP; |
| if(USHRT_MAX == nLvl) |
| { |
| nLvl = i; |
| sFirstCharFmt = aNumFmtArr[i]->GetCharFmtName(); |
| eFirstOrient = aNumFmtArr[i]->GetVertOrient(); |
| if(bShowBitmap) |
| aFirstSize = aNumFmtArr[i]->GetGraphicSize(); |
| } |
| if( i > nLvl) |
| { |
| bSameType &= aNumFmtArr[i]->GetNumberingType() == aNumFmtArr[nLvl]->GetNumberingType(); |
| bSameStart = aNumFmtArr[i]->GetStart() == aNumFmtArr[nLvl]->GetStart(); |
| |
| bSamePrefix = aNumFmtArr[i]->GetPrefix() == aNumFmtArr[nLvl]->GetPrefix(); |
| bSameSuffix = aNumFmtArr[i]->GetSuffix() == aNumFmtArr[nLvl]->GetSuffix(); |
| bAllLevel &= aNumFmtArr[i]->GetIncludeUpperLevels() == aNumFmtArr[nLvl]->GetIncludeUpperLevels(); |
| bSameCharFmt &= sFirstCharFmt == aNumFmtArr[i]->GetCharFmtName(); |
| bSameVOrient &= eFirstOrient == aNumFmtArr[i]->GetVertOrient(); |
| if(bShowBitmap && bSameSize) |
| bSameSize &= aNumFmtArr[i]->GetGraphicSize() == aFirstSize; |
| bSameBulColor &= aNumFmtArr[i]->GetBulletColor() == aNumFmtArr[nLvl]->GetBulletColor(); |
| bSameBulRelSize &= aNumFmtArr[i]->GetBulletRelSize() == aNumFmtArr[nLvl]->GetBulletRelSize(); |
| bSameAdjust &= aNumFmtArr[i]->GetNumAdjust() == aNumFmtArr[nLvl]->GetNumAdjust(); |
| } |
| nHighestLevel = i; |
| } |
| else |
| aNumFmtArr[i] = 0; |
| |
| nMask <<= 1 ; |
| |
| } |
| SwitchNumberType(bShowBullet ? 1 : bShowBitmap ? 2 : 0); |
| CheckForStartValue_Impl(aNumFmtArr[nLvl]->GetNumberingType()); |
| if(bShowBitmap) |
| { |
| if(!bSameVOrient || eFirstOrient == text::VertOrientation::NONE) |
| aOrientLB.SetNoSelection(); |
| else |
| aOrientLB.SelectEntryPos( |
| sal::static_int_cast< sal_uInt16 >(eFirstOrient - 1)); |
| // kein text::VertOrientation::NONE |
| |
| if(bSameSize) |
| { |
| SetMetricValue(aHeightMF, aFirstSize.Height(), eCoreUnit); |
| SetMetricValue(aWidthMF, aFirstSize.Width(), eCoreUnit); |
| } |
| else |
| { |
| aHeightMF.SetText(aEmptyStr); |
| aWidthMF.SetText(aEmptyStr); |
| } |
| } |
| |
| if(bSameType) |
| { |
| sal_uInt16 nLBData = (sal_uInt16) aNumFmtArr[nLvl]->GetNumberingType(); |
| aFmtLB.SelectEntryPos(aFmtLB.GetEntryPos( (void*)sal::static_int_cast<sal_uIntPtr>( nLBData ) )); |
| } |
| else |
| aFmtLB.SetNoSelection(); |
| |
| aAllLevelNF.Enable(nHighestLevel > 0 && !aSameLevelCB.IsChecked()); |
| aAllLevelNF.SetMax(nHighestLevel + 1); |
| if(bAllLevel) |
| { |
| aAllLevelNF.SetValue(aNumFmtArr[nLvl]->GetIncludeUpperLevels()); |
| } |
| else |
| { |
| aAllLevelNF.SetText(aEmptyStr); |
| } |
| if(bSameAdjust) |
| { |
| sal_uInt16 nPos = 1; // zentriert |
| if(aNumFmtArr[nLvl]->GetNumAdjust() == SVX_ADJUST_LEFT) |
| nPos = 0; |
| else if(aNumFmtArr[nLvl]->GetNumAdjust() == SVX_ADJUST_RIGHT) |
| nPos = 2; |
| aAlignLB.SelectEntryPos(nPos); |
| } |
| else |
| { |
| aAlignLB.SetNoSelection(); |
| } |
| |
| if(bBullRelSize) |
| { |
| if(bSameBulRelSize) |
| aBulRelSizeMF.SetValue(aNumFmtArr[nLvl]->GetBulletRelSize()); |
| else |
| aBulRelSizeMF.SetText(aEmptyStr); |
| } |
| if(bBullColor) |
| { |
| if(bSameBulColor) |
| aBulColLB.SelectEntry(aNumFmtArr[nLvl]->GetBulletColor()); |
| else |
| aBulColLB.SetNoSelection(); |
| } |
| switch(nBullet) |
| { |
| case SHOW_NUMBERING: |
| if(bSameStart) |
| { |
| aStartED.SetValue(aNumFmtArr[nLvl]->GetStart()); |
| } |
| else |
| aStartED.SetText(aEmptyStr); |
| break; |
| case SHOW_BULLET: |
| { |
| // const Font* pFnt = aNumFmtArr[Lvl]->GetBulletFont(); |
| // if(pFnt) |
| // ChgTxtFont(aBulletFT, *pFnt); |
| // aBulletFT.SetText(String((char)aNumFmtArr[nLvl]->GetBulletChar())); |
| } |
| break; |
| case SHOW_BITMAP: |
| break; |
| } |
| |
| if(bSamePrefix) |
| aPrefixED.SetText(aNumFmtArr[nLvl]->GetPrefix()); |
| else |
| aPrefixED.SetText(aEmptyStr); |
| if(bSameSuffix) |
| aSuffixED.SetText(aNumFmtArr[nLvl]->GetSuffix()); |
| else |
| aSuffixED.SetText(aEmptyStr); |
| |
| if(bSameCharFmt) |
| { |
| if(sFirstCharFmt.Len()) |
| aCharFmtLB.SelectEntry(sFirstCharFmt); |
| else |
| aCharFmtLB.SelectEntryPos( 0 ); |
| } |
| else |
| aCharFmtLB.SetNoSelection(); |
| |
| pPreviewWIN->SetLevel(nActNumLvl); |
| pPreviewWIN->Invalidate(); |
| } |
| |
| /*-----------------02.12.97 14:01------------------- |
| 0 - Nummer; 1 - Bullet; 2 - Bitmap |
| --------------------------------------------------*/ |
| |
| void SvxNumOptionsTabPage::SwitchNumberType( sal_uInt8 nType, sal_Bool ) |
| { |
| if(nBullet == nType) |
| return; |
| nBullet = nType; |
| sal_Bool bBitmap = sal_False; |
| sal_Bool bBullet = sal_False; |
| sal_Bool bEnableBitmap = sal_False; |
| if(nType == SHOW_NUMBERING) |
| { |
| // Label umschalten, alten Text merken |
| aStartFT.SetText(sStartWith); |
| |
| } |
| else if(nType == SHOW_BULLET) |
| { |
| // Label umschalten, alten Text merken |
| aStartFT.SetText(sBullet); |
| bBullet = sal_True; |
| } |
| else |
| { |
| bBitmap = sal_True; |
| bEnableBitmap = sal_True; |
| } |
| sal_Bool bNumeric = !(bBitmap||bBullet); |
| aPrefixFT.Show(bNumeric); |
| aPrefixED.Show(bNumeric); |
| aSuffixFT.Show(bNumeric); |
| aSuffixED.Show(bNumeric); |
| |
| sal_Bool bCharFmt = pActNum->IsFeatureSupported(NUM_CHAR_STYLE); |
| aCharFmtFT.Show(!bBitmap && bCharFmt); |
| aCharFmtLB.Show(!bBitmap && bCharFmt); |
| |
| // das ist eigentlich Missbrauch, da fuer die vollst. Numerierung kein |
| // eigenes Flag existiert |
| sal_Bool bAllLevelFeature = pActNum->IsFeatureSupported(NUM_CONTINUOUS); |
| sal_Bool bAllLevel = bNumeric && bAllLevelFeature && !bHTMLMode; |
| aAllLevelFT.Show(bAllLevel); |
| aAllLevelNF.Show(bAllLevel); |
| |
| aStartFT.Show(!bBitmap); |
| aStartED.Show(!(bBullet||bBitmap)); |
| |
| aBulletPB.Show(bBullet); |
| sal_Bool bBullColor = pActNum->IsFeatureSupported(NUM_BULLET_COLOR); |
| aBulColorFT.Show( !bBitmap && bBullColor ); |
| aBulColLB.Show( !bBitmap && bBullColor ); |
| sal_Bool bBullResSize = pActNum->IsFeatureSupported(NUM_BULLET_REL_SIZE); |
| aBulRelSizeFT.Show( !bBitmap && bBullResSize ); |
| aBulRelSizeMF.Show( !bBitmap && bBullResSize ); |
| |
| aBitmapFT .Show(bBitmap); |
| aBitmapMB .Show(bBitmap); |
| |
| aSizeFT .Show(bBitmap); |
| aWidthMF .Show(bBitmap); |
| aMultFT .Show(bBitmap); |
| aHeightMF .Show(bBitmap); |
| aRatioCB .Show(bBitmap); |
| |
| aOrientFT .Show(bBitmap && bAllLevelFeature); |
| aOrientLB .Show(bBitmap && bAllLevelFeature); |
| |
| aSizeFT .Enable(bEnableBitmap); |
| aWidthMF .Enable(bEnableBitmap); |
| aMultFT .Enable(bEnableBitmap); |
| aHeightMF .Enable(bEnableBitmap); |
| aRatioCB .Enable(bEnableBitmap); |
| aOrientFT .Enable(bEnableBitmap); |
| aOrientLB .Enable(bEnableBitmap); |
| |
| } |
| /*-----------------02.12.97 13:51------------------- |
| |
| --------------------------------------------------*/ |
| IMPL_LINK( SvxNumOptionsTabPage, LevelHdl_Impl, ListBox *, pBox ) |
| { |
| sal_uInt16 nSaveNumLvl = nActNumLvl; |
| nActNumLvl = 0; |
| if(pBox->IsEntryPosSelected( pActNum->GetLevelCount() ) && |
| (pBox->GetSelectEntryCount() == 1 || nSaveNumLvl != 0xffff)) |
| { |
| nActNumLvl = 0xFFFF; |
| pBox->SetUpdateMode(sal_False); |
| for( sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++ ) |
| pBox->SelectEntryPos( i, sal_False ); |
| pBox->SetUpdateMode(sal_True); |
| } |
| else if(pBox->GetSelectEntryCount()) |
| { |
| sal_uInt16 nMask = 1; |
| for( sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++ ) |
| { |
| if(pBox->IsEntryPosSelected( i )) |
| nActNumLvl |= nMask; |
| nMask <<= 1; |
| } |
| pBox->SelectEntryPos( pActNum->GetLevelCount(), sal_False ); |
| } |
| else |
| { |
| nActNumLvl = nSaveNumLvl; |
| sal_uInt16 nMask = 1; |
| for( sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++ ) |
| { |
| if(nActNumLvl & nMask) |
| { |
| pBox->SelectEntryPos(i); |
| break; |
| } |
| nMask <<=1; |
| } |
| } |
| InitControls(); |
| return 0; |
| } |
| /* -----------------------------05.04.2002 15:30------------------------------ |
| |
| ---------------------------------------------------------------------------*/ |
| IMPL_LINK( SvxNumOptionsTabPage, PreviewInvalidateHdl_Impl, Timer*, EMPTYARG ) |
| { |
| pPreviewWIN->Invalidate(); |
| return 0; |
| } |
| /*-----------------03.12.97 12:01------------------- |
| |
| --------------------------------------------------*/ |
| IMPL_LINK( SvxNumOptionsTabPage, AllLevelHdl_Impl, NumericField*, pBox ) |
| { |
| for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++) |
| { |
| sal_uInt16 nMask = 1; |
| for(sal_uInt16 e = 0; e < pActNum->GetLevelCount(); e++) |
| { |
| if(nActNumLvl & nMask) |
| { |
| SvxNumberFormat aNumFmt(pActNum->GetLevel(e)); |
| aNumFmt.SetIncludeUpperLevels((sal_uInt8) std::min(pBox->GetValue(), sal_Int64(e + 1)) ); |
| pActNum->SetLevel(e, aNumFmt); |
| } |
| nMask <<= 1; |
| } |
| } |
| SetModified(); |
| return 0; |
| } |
| |
| /*-----------------02.12.97 08:56------------------- |
| |
| --------------------------------------------------*/ |
| IMPL_LINK( SvxNumOptionsTabPage, NumberTypeSelectHdl_Impl, ListBox *, pBox ) |
| { |
| String sSelectStyle; |
| sal_Int16 eOldType; |
| sal_Bool bShowOrient = sal_False; |
| sal_Bool bBmp = sal_False; |
| String aEmptyStr; |
| sal_uInt16 nMask = 1; |
| for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++) |
| { |
| if(nActNumLvl & nMask) |
| { |
| SvxNumberFormat aNumFmt(pActNum->GetLevel(i)); |
| eOldType = aNumFmt.GetNumberingType(); |
| // PAGEDESC gibt es nicht |
| sal_uInt16 nNumType = (sal_uInt16)(sal_uLong)pBox->GetEntryData(pBox->GetSelectEntryPos()); |
| aNumFmt.SetNumberingType((sal_Int16)nNumType); |
| sal_uInt16 nNumberingType = aNumFmt.GetNumberingType(); |
| if(SVX_NUM_BITMAP == (nNumberingType&(~LINK_TOKEN))) |
| { |
| bBmp |= 0 != aNumFmt.GetBrush(); |
| aNumFmt.SetIncludeUpperLevels( sal_False ); |
| aNumFmt.SetSuffix( aEmptyStr ); |
| aNumFmt.SetPrefix( aEmptyStr ); |
| if(!bBmp) |
| aNumFmt.SetGraphic(aEmptyStr); |
| pActNum->SetLevel(i, aNumFmt); |
| SwitchNumberType(SHOW_BITMAP, bBmp ); |
| bShowOrient = sal_True; |
| } |
| else if( SVX_NUM_CHAR_SPECIAL == nNumberingType ) |
| { |
| aNumFmt.SetIncludeUpperLevels( sal_False ); |
| aNumFmt.SetSuffix( aEmptyStr ); |
| aNumFmt.SetPrefix( aEmptyStr ); |
| if( !aNumFmt.GetBulletFont() ) |
| aNumFmt.SetBulletFont(&aActBulletFont); |
| if( !aNumFmt.GetBulletChar() ) |
| aNumFmt.SetBulletChar( SVX_DEF_BULLET ); |
| pActNum->SetLevel(i, aNumFmt); |
| SwitchNumberType(SHOW_BULLET); |
| //ChgTxtFont(aBulletFT, *aNumFmt.GetBulletFont()); |
| //aBulletFT.SetText( aNumFmt.GetBulletChar() ); |
| // Zuweisung der Zeichenvorlage automatisch |
| if(bAutomaticCharStyles) |
| { |
| sSelectStyle = sBulletCharFmtName; |
| } |
| } |
| else |
| { |
| aNumFmt.SetPrefix( aPrefixED.GetText() ); |
| aNumFmt.SetSuffix( aSuffixED.GetText() ); |
| // aNumFmt.SetBulletFont(0); |
| SwitchNumberType(SHOW_NUMBERING); |
| pActNum->SetLevel(i, aNumFmt); |
| CheckForStartValue_Impl(nNumberingType); |
| |
| // Zuweisung der Zeichenvorlage automatisch |
| if(bAutomaticCharStyles) |
| { |
| sSelectStyle = sNumCharFmtName; |
| } |
| } |
| } |
| nMask <<= 1; |
| } |
| sal_Bool bAllLevelFeature = pActNum->IsFeatureSupported(NUM_CONTINUOUS); |
| if(bShowOrient && bAllLevelFeature) |
| { |
| aOrientFT.Show(); |
| aOrientLB.Show(); |
| } |
| else |
| { |
| aOrientFT.Hide(); |
| aOrientLB.Hide(); |
| } |
| SetModified(); |
| if(sSelectStyle.Len()) |
| { |
| aCharFmtLB.SelectEntry(sSelectStyle); |
| CharFmtHdl_Impl(&aCharFmtLB); |
| // bAutomaticCharStyles wird im CharFmtHdl_Impl zurueckgesetzt |
| bAutomaticCharStyles = sal_True; |
| } |
| return 0; |
| } |
| /* -----------------06.11.2002 14:27----------------- |
| * |
| * --------------------------------------------------*/ |
| void SvxNumOptionsTabPage::CheckForStartValue_Impl(sal_uInt16 nNumberingType) |
| { |
| sal_Bool bIsNull = aStartED.GetValue() == 0; |
| sal_Bool bNoZeroAllowed = nNumberingType < SVX_NUM_ARABIC || |
| SVX_NUM_CHARS_UPPER_LETTER_N == nNumberingType || |
| SVX_NUM_CHARS_LOWER_LETTER_N == nNumberingType; |
| aStartED.SetMin(bNoZeroAllowed ? 1 : 0); |
| if(bIsNull && bNoZeroAllowed) |
| aStartED.GetModifyHdl().Call(&aStartED); |
| } |
| /*-----------------03.12.97 16:43------------------- |
| |
| --------------------------------------------------*/ |
| IMPL_LINK( SvxNumOptionsTabPage, OrientHdl_Impl, ListBox *, pBox ) |
| { |
| sal_uInt16 nPos = pBox->GetSelectEntryPos(); |
| nPos ++; // kein VERT_NONE |
| |
| sal_uInt16 nMask = 1; |
| for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++) |
| { |
| if(nActNumLvl & nMask) |
| { |
| SvxNumberFormat aNumFmt(pActNum->GetLevel(i)); |
| if(SVX_NUM_BITMAP == (aNumFmt.GetNumberingType()&(~LINK_TOKEN))) |
| { |
| const SvxBrushItem* pBrushItem = aNumFmt.GetBrush(); |
| const Size& rSize = aNumFmt.GetGraphicSize(); |
| sal_Int16 eOrient = (sal_Int16)nPos; |
| aNumFmt.SetGraphicBrush( pBrushItem, &rSize, &eOrient ); |
| pActNum->SetLevel(i, aNumFmt); |
| } |
| } |
| nMask <<= 1; |
| } |
| SetModified(sal_False); |
| return 0; |
| |
| } |
| |
| /*-----------------06.12.97 12:00------------------- |
| |
| --------------------------------------------------*/ |
| IMPL_LINK( SvxNumOptionsTabPage, SameLevelHdl_Impl, CheckBox *, pBox ) |
| { |
| sal_Bool bSet = pBox->IsChecked(); |
| pActNum->SetContinuousNumbering(bSet); |
| sal_Bool bRepaint = sal_False; |
| for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++) |
| { |
| SvxNumberFormat aNumFmt(pActNum->GetLevel(i)); |
| if(aNumFmt.GetNumberingType() != SVX_NUM_NUMBER_NONE) |
| { |
| bRepaint = sal_True; |
| break; |
| } |
| } |
| SetModified(bRepaint); |
| InitControls(); |
| return 0; |
| } |
| /* -----------------16.11.98 14:20------------------- |
| * |
| * --------------------------------------------------*/ |
| IMPL_LINK( SvxNumOptionsTabPage, BulColorHdl_Impl, ColorListBox*, pBox ) |
| { |
| Color nSetColor = pBox->GetSelectEntryColor(); |
| |
| sal_uInt16 nMask = 1; |
| for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++) |
| { |
| if(nActNumLvl & nMask) |
| { |
| SvxNumberFormat aNumFmt(pActNum->GetLevel(i)); |
| aNumFmt.SetBulletColor(nSetColor); |
| pActNum->SetLevel(i, aNumFmt); |
| } |
| nMask <<= 1; |
| } |
| SetModified(); |
| return 0; |
| } |
| /* -----------------16.11.98 14:20------------------- |
| * |
| * --------------------------------------------------*/ |
| IMPL_LINK( SvxNumOptionsTabPage, BulRelSizeHdl_Impl, MetricField *, pField) |
| { |
| sal_uInt16 nRelSize = (sal_uInt16)pField->GetValue(); |
| |
| sal_uInt16 nMask = 1; |
| for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++) |
| { |
| if(nActNumLvl & nMask) |
| { |
| SvxNumberFormat aNumFmt(pActNum->GetLevel(i)); |
| aNumFmt.SetBulletRelSize(nRelSize); |
| pActNum->SetLevel(i, aNumFmt); |
| } |
| nMask <<= 1; |
| } |
| SetModified(); |
| return 0; |
| } |
| |
| /*-----------------02.12.97 10:50------------------- |
| |
| --------------------------------------------------*/ |
| IMPL_LINK( SvxNumOptionsTabPage, GraphicHdl_Impl, MenuButton *, pButton ) |
| { |
| sal_uInt16 nItemId = pButton->GetCurItemId(); |
| String aGrfName; |
| Size aSize; |
| sal_Bool bSucc(sal_False); |
| SvxOpenGraphicDialog aGrfDlg( CUI_RES(RID_STR_EDIT_GRAPHIC) ); |
| |
| if(MN_GALLERY_ENTRY <= nItemId ) |
| { |
| aGrfName = *((String*)aGrfNames.GetObject( nItemId - MN_GALLERY_ENTRY)); |
| Graphic aGraphic; |
| if(GalleryExplorer::GetGraphicObj( GALLERY_THEME_BULLETS, nItemId - MN_GALLERY_ENTRY, &aGraphic)) |
| { |
| aSize = SvxNumberFormat::GetGraphicSizeMM100(&aGraphic); |
| bSucc = sal_True; |
| } |
| } |
| else |
| { |
| aGrfDlg.EnableLink( sal_False ); |
| aGrfDlg.AsLink( sal_False ); |
| if ( !aGrfDlg.Execute() ) |
| { |
| // ausgewaehlten Filter merken |
| aGrfName = aGrfDlg.GetPath(); |
| |
| Graphic aGraphic; |
| if( !aGrfDlg.GetGraphic(aGraphic) ) |
| { |
| aSize = SvxNumberFormat::GetGraphicSizeMM100(&aGraphic); |
| bSucc = sal_True; |
| } |
| } |
| } |
| if(bSucc) |
| { |
| aSize = OutputDevice::LogicToLogic(aSize, MAP_100TH_MM, (MapUnit)eCoreUnit); |
| |
| sal_uInt16 nMask = 1; |
| for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++) |
| { |
| if(nActNumLvl & nMask) |
| { |
| SvxNumberFormat aNumFmt(pActNum->GetLevel(i)); |
| aNumFmt.SetCharFmtName(sNumCharFmtName); |
| aNumFmt.SetGraphic(aGrfName); |
| |
| // Size schon mal fuer spaeteren Groessenabgleich setzen |
| const SvxBrushItem* pBrushItem = aNumFmt.GetBrush(); |
| // initiate asynchronous loading |
| sal_Int16 eOrient = aNumFmt.GetVertOrient(); |
| aNumFmt.SetGraphicBrush( pBrushItem, &aSize, &eOrient ); |
| aInitSize[i] = aNumFmt.GetGraphicSize(); |
| |
| pActNum->SetLevel(i, aNumFmt); |
| } |
| nMask <<= 1; |
| } |
| aRatioCB .Enable(); |
| aSizeFT .Enable(); |
| aMultFT.Enable(); |
| aWidthMF .Enable(); |
| aHeightMF.Enable(); |
| SetMetricValue(aWidthMF, aSize.Width(), eCoreUnit); |
| SetMetricValue(aHeightMF, aSize.Height(), eCoreUnit); |
| aOrientFT.Enable(); |
| aOrientLB.Enable(); |
| SetModified(); |
| //needed due to asynchronous loading of graphics in the SvxBrushItem |
| aInvalidateTimer.Start(); |
| } |
| return 0; |
| } |
| /* -----------------27.07.99 12:20------------------- |
| |
| --------------------------------------------------*/ |
| IMPL_LINK( SvxNumOptionsTabPage, PopupActivateHdl_Impl, Menu *, EMPTYARG ) |
| { |
| if(!bMenuButtonInitialized) |
| { |
| bMenuButtonInitialized = sal_True; |
| EnterWait(); |
| PopupMenu* pPopup = aBitmapMB.GetPopupMenu()->GetPopupMenu( MN_GALLERY ); |
| GalleryExplorer::FillObjList(GALLERY_THEME_BULLETS, aGrfNames); |
| if(aGrfNames.Count()) |
| { |
| pPopup->RemoveItem( pPopup->GetItemPos( NUM_NO_GRAPHIC )); |
| String aEmptyStr; |
| GalleryExplorer::BeginLocking(GALLERY_THEME_BULLETS); |
| |
| for(sal_uInt16 i = 0; i < aGrfNames.Count(); i++) |
| { |
| Graphic aGraphic; |
| String sGrfName = *(const String*)aGrfNames.GetObject(i); |
| INetURLObject aObj(sGrfName); |
| if(aObj.GetProtocol() == INET_PROT_FILE) |
| sGrfName = aObj.PathToFileName(); |
| if(GalleryExplorer::GetGraphicObj( GALLERY_THEME_BULLETS, i, &aGraphic)) |
| { |
| Bitmap aBitmap(aGraphic.GetBitmap()); |
| Size aSize(aBitmap.GetSizePixel()); |
| if(aSize.Width() > MAX_BMP_WIDTH || |
| aSize.Height() > MAX_BMP_HEIGHT) |
| { |
| sal_Bool bWidth = aSize.Width() > aSize.Height(); |
| double nScale = bWidth ? |
| (double)MAX_BMP_WIDTH / (double)aSize.Width(): |
| (double)MAX_BMP_HEIGHT / (double)aSize.Height(); |
| aBitmap.Scale(nScale, nScale); |
| } |
| Image aImage(aBitmap); |
| |
| pPopup->InsertItem(MN_GALLERY_ENTRY + i, sGrfName, aImage ); |
| } |
| else |
| { |
| Image aImage; |
| pPopup->InsertItem( |
| MN_GALLERY_ENTRY + i, sGrfName, aImage ); |
| } |
| } |
| GalleryExplorer::EndLocking(GALLERY_THEME_BULLETS); |
| } |
| LeaveWait(); |
| } |
| return 0; |
| } |
| |
| /*-----------------02.12.97 10:58------------------- |
| |
| --------------------------------------------------*/ |
| IMPL_LINK( SvxNumOptionsTabPage, BulletHdl_Impl, Button *, EMPTYARG ) |
| { |
| SvxCharacterMap* pMap = new SvxCharacterMap( this, sal_True ); |
| |
| sal_uInt16 nMask = 1; |
| const Font* pFmtFont = 0; |
| sal_Bool bSameBullet = sal_True; |
| sal_Unicode cBullet = 0; |
| sal_Bool bFirst = sal_True; |
| for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++) |
| { |
| if(nActNumLvl & nMask) |
| { |
| const SvxNumberFormat& rCurFmt = pActNum->GetLevel(i); |
| if(bFirst) |
| { |
| cBullet = rCurFmt.GetBulletChar(); |
| } |
| else if(rCurFmt.GetBulletChar() != cBullet ) |
| { |
| bSameBullet = sal_False; |
| break; |
| } |
| if(!pFmtFont) |
| pFmtFont = rCurFmt.GetBulletFont(); |
| bFirst = sal_False; |
| } |
| nMask <<= 1; |
| |
| } |
| |
| if(pFmtFont) |
| pMap->SetCharFont(*pFmtFont); |
| else |
| pMap->SetCharFont(aActBulletFont); |
| if(bSameBullet) |
| pMap->SetChar( cBullet ); |
| if(pMap->Execute() == RET_OK) |
| { |
| // Font Numrules umstellen |
| aActBulletFont = pMap->GetCharFont(); |
| |
| sal_uInt16 _nMask = 1; |
| for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++) |
| { |
| if(nActNumLvl & _nMask) |
| { |
| SvxNumberFormat aNumFmt(pActNum->GetLevel(i)); |
| aNumFmt.SetBulletFont(&aActBulletFont); ; |
| aNumFmt.SetBulletChar( (sal_Unicode) pMap->GetChar() ); |
| pActNum->SetLevel(i, aNumFmt); |
| } |
| _nMask <<= 1; |
| } |
| |
| SetModified(); |
| } |
| delete pMap; |
| return 0; |
| } |
| |
| /*-----------------03.03.97 15:21------------------- |
| |
| --------------------------------------------------*/ |
| |
| IMPL_LINK( SvxNumOptionsTabPage, SizeHdl_Impl, MetricField *, pField) |
| { |
| sal_Bool bWidth = pField == &aWidthMF; |
| bLastWidthModified = bWidth; |
| sal_Bool bRatio = aRatioCB.IsChecked(); |
| long nWidthVal = static_cast<long>(aWidthMF.Denormalize(aWidthMF.GetValue(FUNIT_100TH_MM))); |
| long nHeightVal = static_cast<long>(aHeightMF.Denormalize(aHeightMF.GetValue(FUNIT_100TH_MM))); |
| nWidthVal = OutputDevice::LogicToLogic( nWidthVal , |
| MAP_100TH_MM, (MapUnit)eCoreUnit ); |
| nHeightVal = OutputDevice::LogicToLogic( nHeightVal, |
| MAP_100TH_MM, (MapUnit)eCoreUnit); |
| double fSizeRatio; |
| |
| sal_Bool bRepaint = sal_False; |
| sal_uInt16 nMask = 1; |
| for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++) |
| { |
| if(nActNumLvl & nMask) |
| { |
| SvxNumberFormat aNumFmt(pActNum->GetLevel(i)); |
| if(SVX_NUM_BITMAP == (aNumFmt.GetNumberingType()&(~LINK_TOKEN))) |
| { |
| Size aSize(aNumFmt.GetGraphicSize() ); |
| Size aSaveSize(aSize); |
| |
| if (aInitSize[i].Height()) |
| fSizeRatio = (double)aInitSize[i].Width() / (double)aInitSize[i].Height(); |
| else |
| fSizeRatio = (double)1; |
| |
| if(bWidth) |
| { |
| long nDelta = nWidthVal - aInitSize[i].Width(); |
| aSize.Width() = nWidthVal; |
| if (bRatio) |
| { |
| aSize.Height() = aInitSize[i].Height() + (long)((double)nDelta / fSizeRatio); |
| aHeightMF.SetUserValue(aHeightMF.Normalize( |
| OutputDevice::LogicToLogic( aSize.Height(), (MapUnit)eCoreUnit, MAP_100TH_MM )), |
| FUNIT_100TH_MM); |
| } |
| } |
| else |
| { |
| long nDelta = nHeightVal - aInitSize[i].Height(); |
| aSize.Height() = nHeightVal; |
| if (bRatio) |
| { |
| aSize.Width() = aInitSize[i].Width() + (long)((double)nDelta * fSizeRatio); |
| aWidthMF.SetUserValue(aWidthMF.Normalize( |
| OutputDevice::LogicToLogic( aSize.Width(), (MapUnit)eCoreUnit, MAP_100TH_MM )), |
| FUNIT_100TH_MM); |
| } |
| } |
| const SvxBrushItem* pBrushItem = aNumFmt.GetBrush(); |
| sal_Int16 eOrient = aNumFmt.GetVertOrient(); |
| if(aSize != aSaveSize) |
| bRepaint = sal_True; |
| aNumFmt.SetGraphicBrush( pBrushItem, &aSize, &eOrient ); |
| pActNum->SetLevel(i, aNumFmt); |
| } |
| } |
| nMask <<= 1; |
| } |
| SetModified(bRepaint); |
| return 0; |
| } |
| |
| /*------------------------------------------------------------------------ |
| Beschreibung: |
| ------------------------------------------------------------------------*/ |
| |
| IMPL_LINK( SvxNumOptionsTabPage, RatioHdl_Impl, CheckBox *, pBox ) |
| { |
| if (pBox->IsChecked()) |
| { |
| if (bLastWidthModified) |
| SizeHdl_Impl(&aWidthMF); |
| else |
| SizeHdl_Impl(&aHeightMF); |
| } |
| return 0; |
| } |
| |
| /*-----------------02.12.97 16:07------------------- |
| |
| --------------------------------------------------*/ |
| IMPL_LINK( SvxNumOptionsTabPage, CharFmtHdl_Impl, ListBox *, EMPTYARG ) |
| { |
| bAutomaticCharStyles = sal_False; |
| sal_uInt16 nEntryPos = aCharFmtLB.GetSelectEntryPos(); |
| String sEntry = aCharFmtLB.GetSelectEntry(); |
| sal_uInt16 nMask = 1; |
| String aEmptyStr; |
| for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++) |
| { |
| if(nActNumLvl & nMask) |
| { |
| SvxNumberFormat aNumFmt(pActNum->GetLevel(i)); |
| if( 0 == nEntryPos ) |
| aNumFmt.SetCharFmtName(aEmptyStr); |
| else |
| { |
| if(SVX_NUM_BITMAP != (aNumFmt.GetNumberingType()&(~LINK_TOKEN))) |
| aNumFmt.SetCharFmtName(sEntry); |
| } |
| pActNum->SetLevel(i, aNumFmt); |
| } |
| nMask <<= 1; |
| } |
| SetModified(sal_False); |
| return 0; |
| |
| }; |
| |
| /*-----------------03.12.97 11:01------------------- |
| |
| --------------------------------------------------*/ |
| IMPL_LINK( SvxNumOptionsTabPage, EditModifyHdl_Impl, Edit *, pEdit ) |
| { |
| sal_Bool bPrefix = pEdit == &aPrefixED; |
| sal_Bool bSuffix = pEdit == &aSuffixED; |
| sal_Bool bStart = pEdit == &aStartED; |
| sal_uInt16 nMask = 1; |
| for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++) |
| { |
| if(nActNumLvl & nMask) |
| { |
| SvxNumberFormat aNumFmt(pActNum->GetLevel(i)); |
| if(bPrefix) |
| aNumFmt.SetPrefix( aPrefixED.GetText() ); |
| else if(bSuffix) |
| aNumFmt.SetSuffix( aSuffixED.GetText() ); |
| else if(bStart) |
| aNumFmt.SetStart( (sal_uInt16)aStartED.GetValue() ); |
| else //align |
| { |
| sal_uInt16 nPos = aAlignLB.GetSelectEntryPos(); |
| SvxAdjust eAdjust = SVX_ADJUST_CENTER; |
| if(nPos == 0) |
| eAdjust = SVX_ADJUST_LEFT; |
| else if(nPos == 2) |
| eAdjust = SVX_ADJUST_RIGHT; |
| aNumFmt.SetNumAdjust( eAdjust ); |
| } |
| pActNum->SetLevel(i, aNumFmt); |
| } |
| nMask <<= 1; |
| } |
| SetModified(); |
| |
| return 0; |
| } |
| |
| /*-----------------09.12.97 11:49------------------- |
| |
| --------------------------------------------------*/ |
| sal_uInt16 lcl_DrawGraphic(VirtualDevice* pVDev, const SvxNumberFormat &rFmt, sal_uInt16 nXStart, |
| sal_uInt16 nYStart, sal_uInt16 nDivision) |
| { |
| const SvxBrushItem* pBrushItem = rFmt.GetBrush(); |
| sal_uInt16 nRet = 0; |
| if(pBrushItem) |
| { |
| const Graphic* pGrf = pBrushItem->GetGraphic(); |
| if(pGrf) |
| { |
| Size aGSize( rFmt.GetGraphicSize() ); |
| aGSize.Width() /= nDivision; |
| nRet = (sal_uInt16)aGSize.Width(); |
| aGSize.Height() /= nDivision; |
| pGrf->Draw( pVDev, Point(nXStart,nYStart), |
| pVDev->PixelToLogic( aGSize ) ); |
| } |
| } |
| return nRet; |
| |
| } |
| |
| /*-----------------09.12.97 11:54------------------- |
| |
| --------------------------------------------------*/ |
| sal_uInt16 lcl_DrawBullet(VirtualDevice* pVDev, |
| const SvxNumberFormat& rFmt, sal_uInt16 nXStart, |
| sal_uInt16 nYStart, const Size& rSize) |
| { |
| Font aTmpFont(pVDev->GetFont()); |
| |
| //per Uno kann es sein, dass kein Font gesetzt ist! |
| Font aFont(rFmt.GetBulletFont() ? *rFmt.GetBulletFont() : aTmpFont); |
| Size aTmpSize(rSize); |
| aTmpSize.Width() *= rFmt.GetBulletRelSize(); |
| aTmpSize.Width() /= 100 ; |
| aTmpSize.Height() *= rFmt.GetBulletRelSize(); |
| aTmpSize.Height() /= 100 ; |
| // bei einer Hoehe von Null wird in Ursprungshoehe gezeichnet |
| if(!aTmpSize.Height()) |
| aTmpSize.Height() = 1; |
| aFont.SetSize(aTmpSize); |
| aFont.SetTransparent(sal_True); |
| Color aBulletColor = rFmt.GetBulletColor(); |
| if(aBulletColor.GetColor() == COL_AUTO) |
| aBulletColor = Color(pVDev->GetFillColor().IsDark() ? COL_WHITE : COL_BLACK); |
| else if(aBulletColor == pVDev->GetFillColor()) |
| aBulletColor.Invert(); |
| aFont.SetColor(aBulletColor); |
| pVDev->SetFont( aFont ); |
| String aText(sal_Unicode(rFmt.GetBulletChar())); |
| long nY = nYStart; |
| nY -= ((aTmpSize.Height() - rSize.Height())/ 2); |
| pVDev->DrawText( Point(nXStart, nY), aText ); |
| sal_uInt16 nRet = (sal_uInt16)pVDev->GetTextWidth(aText); |
| |
| pVDev->SetFont(aTmpFont); |
| return nRet; |
| } |
| /*-----------------02.12.97 10:34------------------- |
| Vorschau der Numerierung painten |
| --------------------------------------------------*/ |
| void SvxNumberingPreview::Paint( const Rectangle& /*rRect*/ ) |
| { |
| Size aSize(PixelToLogic(GetOutputSizePixel())); |
| Rectangle aRect(Point(0,0), aSize); |
| |
| const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings(); |
| const Color aBackColor = rStyleSettings.GetFieldColor(); |
| const Color aTextColor = rStyleSettings.GetFieldTextColor(); |
| |
| VirtualDevice* pVDev = new VirtualDevice(*this); |
| pVDev->EnableRTL( IsRTLEnabled() ); |
| pVDev->SetMapMode(GetMapMode()); |
| pVDev->SetOutputSize( aSize ); |
| |
| Color aLineColor(COL_LIGHTGRAY); |
| if(aLineColor == aBackColor) |
| aLineColor.Invert(); |
| pVDev->SetLineColor(aLineColor); |
| pVDev->SetFillColor( aBackColor ); |
| pVDev->DrawRect(aRect); |
| |
| if(pActNum) |
| { |
| sal_uInt16 nWidthRelation; |
| if(nPageWidth) |
| { |
| nWidthRelation = sal_uInt16 (nPageWidth / aSize.Width()); |
| if(bPosition) |
| nWidthRelation = nWidthRelation * 2 / 3; |
| else |
| nWidthRelation = nWidthRelation / 4; |
| } |
| else |
| nWidthRelation = 30; // Kapiteldialog |
| |
| //Hoehe pro Ebene |
| sal_uInt16 nXStep = sal::static_int_cast< sal_uInt16 >(aSize.Width() / (3 * pActNum->GetLevelCount())); |
| if(pActNum->GetLevelCount() < 10) |
| nXStep /= 2; |
| sal_uInt16 nYStart = 4; |
| // fuer ein einziges Level darf nicht die gesamte Hoehe benutzt werden |
| sal_uInt16 nYStep = sal::static_int_cast< sal_uInt16 >((aSize.Height() - 6)/ (pActNum->GetLevelCount() > 1 ? pActNum->GetLevelCount() : 5)); |
| aStdFont = OutputDevice::GetDefaultFont( |
| DEFAULTFONT_UI_SANS, MsLangId::getSystemLanguage(), DEFAULTFONT_FLAGS_ONLYONE); |
| aStdFont.SetColor(aTextColor); |
| aStdFont.SetFillColor(aBackColor); |
| |
| // |
| sal_uInt16 nFontHeight = nYStep * 6 / 10; |
| if(bPosition) |
| nFontHeight = nYStep * 15 / 10; |
| aStdFont.SetSize(Size( 0, nFontHeight )); |
| |
| SvxNodeNum aNum( (sal_uInt8)0 ); |
| sal_uInt16 nPreNum = pActNum->GetLevel(0).GetStart(); |
| |
| if(bPosition) |
| { |
| sal_uInt16 nLineHeight = nFontHeight * 8 / 7; |
| sal_uInt8 nStart = 0; |
| while( !(nActLevel & (1<<nStart)) ) |
| { |
| nStart++; |
| } |
| if(nStart) |
| nStart--; |
| sal_uInt8 nEnd = std::min( (sal_uInt8)(nStart + 3), (sal_uInt8)pActNum->GetLevelCount() ); |
| for( sal_uInt8 nLevel = nStart; nLevel < nEnd; ++nLevel ) |
| { |
| const SvxNumberFormat &rFmt = pActNum->GetLevel(nLevel); |
| aNum.GetLevelVal()[ nLevel ] = rFmt.GetStart(); |
| |
| // --> OD 2008-01-16 #newlistlevelattrs# |
| sal_uInt16 nXStart( 0 ); |
| short nTextOffset( 0 ); |
| sal_uInt16 nNumberXPos( 0 ); |
| if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_WIDTH_AND_POSITION ) |
| { |
| nXStart = rFmt.GetAbsLSpace() / nWidthRelation; |
| nTextOffset = rFmt.GetCharTextDistance() / nWidthRelation; |
| nNumberXPos = nXStart; |
| sal_uInt16 nFirstLineOffset = (-rFmt.GetFirstLineOffset()) / nWidthRelation; |
| |
| if(nFirstLineOffset <= nNumberXPos) |
| nNumberXPos = nNumberXPos - nFirstLineOffset; |
| else |
| nNumberXPos = 0; |
| //im draw ist das zulaeesig |
| if(nTextOffset < 0) |
| nNumberXPos = nNumberXPos + nTextOffset; |
| } |
| else if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_ALIGNMENT ) |
| { |
| const long nTmpNumberXPos( ( rFmt.GetIndentAt() + |
| rFmt.GetFirstLineIndent() ) / |
| nWidthRelation ); |
| if ( nTmpNumberXPos < 0 ) |
| { |
| nNumberXPos = 0; |
| } |
| else |
| { |
| nNumberXPos = static_cast<sal_uInt16>( nTmpNumberXPos ); |
| } |
| } |
| // <-- |
| |
| sal_uInt16 nBulletWidth = 0; |
| if( SVX_NUM_BITMAP == (rFmt.GetNumberingType() &(~LINK_TOKEN))) |
| { |
| nBulletWidth = rFmt.IsShowSymbol() ? lcl_DrawGraphic(pVDev, rFmt, |
| nNumberXPos, |
| nYStart, nWidthRelation) : 0; |
| } |
| else if( SVX_NUM_CHAR_SPECIAL == rFmt.GetNumberingType() ) |
| { |
| nBulletWidth = rFmt.IsShowSymbol() ? |
| lcl_DrawBullet(pVDev, rFmt, nNumberXPos, nYStart, aStdFont.GetSize()) : 0; |
| } |
| else |
| { |
| pVDev->SetFont(aStdFont); |
| aNum.SetLevel( nLevel ); |
| if(pActNum->IsContinuousNumbering()) |
| aNum.GetLevelVal()[nLevel] = nPreNum; |
| String aText(pActNum->MakeNumString( aNum )); |
| Font aSaveFont = pVDev->GetFont(); |
| Font aColorFont(aSaveFont); |
| Color aTmpBulletColor = rFmt.GetBulletColor(); |
| if(aTmpBulletColor.GetColor() == COL_AUTO) |
| aTmpBulletColor = Color(aBackColor.IsDark() ? COL_WHITE : COL_BLACK); |
| else if(aTmpBulletColor == aBackColor) |
| aTmpBulletColor.Invert(); |
| aColorFont.SetColor(aTmpBulletColor); |
| pVDev->SetFont(aColorFont); |
| pVDev->DrawText( Point(nNumberXPos, nYStart), aText ); |
| pVDev->SetFont(aSaveFont); |
| nBulletWidth = (sal_uInt16)pVDev->GetTextWidth(aText); |
| nPreNum++; |
| } |
| // --> OD 2008-01-16 #newlistlevelattrs# |
| if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_ALIGNMENT && |
| rFmt.GetLabelFollowedBy() == SvxNumberFormat::SPACE ) |
| { |
| pVDev->SetFont(aStdFont); |
| String aText(' '); |
| pVDev->DrawText( Point(nNumberXPos, nYStart), aText ); |
| nBulletWidth = nBulletWidth + (sal_uInt16)pVDev->GetTextWidth(aText); |
| } |
| |
| // --> OD 2008-01-16 #newlistlevelattrs# |
| sal_uInt16 nTextXPos( 0 ); |
| if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_WIDTH_AND_POSITION ) |
| { |
| nTextXPos = nXStart; |
| if(nTextOffset < 0) |
| nTextXPos = nTextXPos + nTextOffset; |
| if(nNumberXPos + nBulletWidth + nTextOffset > nTextXPos ) |
| nTextXPos = nNumberXPos + nBulletWidth + nTextOffset; |
| } |
| else if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_ALIGNMENT ) |
| { |
| switch ( rFmt.GetLabelFollowedBy() ) |
| { |
| case SvxNumberFormat::LISTTAB: |
| { |
| nTextXPos = static_cast<sal_uInt16>( |
| rFmt.GetListtabPos() / nWidthRelation ); |
| if ( nTextXPos < nNumberXPos + nBulletWidth ) |
| { |
| nTextXPos = nNumberXPos + nBulletWidth; |
| } |
| } |
| break; |
| case SvxNumberFormat::SPACE: |
| case SvxNumberFormat::NOTHING: |
| { |
| nTextXPos = nNumberXPos + nBulletWidth; |
| } |
| break; |
| } |
| |
| nXStart = static_cast<sal_uInt16>( rFmt.GetIndentAt() / nWidthRelation ); |
| } |
| // <-- |
| |
| Rectangle aRect1(Point(nTextXPos, nYStart + nFontHeight / 2), Size(aSize.Width() / 2, 2)); |
| pVDev->SetFillColor( aBackColor ); |
| pVDev->DrawRect( aRect1 ); |
| |
| Rectangle aRect2(Point(nXStart, nYStart + nLineHeight + nFontHeight / 2 ), Size(aSize.Width() / 2, 2)); |
| pVDev->DrawRect( aRect2 ); |
| nYStart += 2 * nLineHeight; |
| } |
| } |
| else |
| { |
| //#i5153# painting gray or black rectangles as 'normal' numbering text |
| String sMsg( RTL_CONSTASCII_USTRINGPARAM( "Preview") ); |
| long nWidth = pVDev->GetTextWidth(sMsg); |
| long nTextHeight = pVDev->GetTextHeight(); |
| long nRectHeight = nTextHeight * 2 / 3; |
| long nTopOffset = nTextHeight - nRectHeight; |
| Color aBlackColor(COL_BLACK); |
| if(aBlackColor == aBackColor) |
| aBlackColor.Invert(); |
| |
| for( sal_uInt8 nLevel = 0; nLevel < pActNum->GetLevelCount(); |
| ++nLevel, nYStart = nYStart + nYStep ) |
| { |
| const SvxNumberFormat &rFmt = pActNum->GetLevel(nLevel); |
| aNum.GetLevelVal()[ nLevel ] = rFmt.GetStart(); |
| // --> OD 2008-01-31 #newlistlevelattrs# |
| sal_uInt16 nXStart( 0 ); |
| if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_WIDTH_AND_POSITION ) |
| { |
| nXStart = rFmt.GetAbsLSpace() / nWidthRelation; |
| } |
| else if ( rFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_ALIGNMENT ) |
| { |
| const long nTmpXStart( ( rFmt.GetIndentAt() + |
| rFmt.GetFirstLineIndent() ) / |
| nWidthRelation ); |
| if ( nTmpXStart < 0 ) |
| { |
| nXStart = 0; |
| } |
| else |
| { |
| nXStart = static_cast<sal_uInt16>(nTmpXStart); |
| } |
| } |
| nXStart /= 2; |
| nXStart += 2; |
| // <-- |
| sal_uInt16 nTextOffset = 2 * nXStep; |
| if( SVX_NUM_BITMAP == (rFmt.GetNumberingType()&(~LINK_TOKEN)) ) |
| { |
| if(rFmt.IsShowSymbol()) |
| { |
| nTextOffset = lcl_DrawGraphic(pVDev, rFmt, nXStart, nYStart, nWidthRelation); |
| nTextOffset = nTextOffset + nXStep; |
| } |
| } |
| else if( SVX_NUM_CHAR_SPECIAL == rFmt.GetNumberingType() ) |
| { |
| if(rFmt.IsShowSymbol()) |
| { |
| nTextOffset = lcl_DrawBullet(pVDev, rFmt, nXStart, nYStart, aStdFont.GetSize()); |
| nTextOffset = nTextOffset + nXStep; |
| } |
| } |
| else |
| { |
| Font aColorFont(aStdFont); |
| Color aTmpBulletColor = rFmt.GetBulletColor(); |
| if(aTmpBulletColor.GetColor() == COL_AUTO) |
| aTmpBulletColor = Color(aBackColor.IsDark() ? COL_WHITE : COL_BLACK); |
| else if(aTmpBulletColor == aBackColor) |
| aTmpBulletColor.Invert(); |
| aColorFont.SetColor(aTmpBulletColor); |
| pVDev->SetFont(aColorFont); |
| aNum.SetLevel( nLevel ); |
| if(pActNum->IsContinuousNumbering()) |
| aNum.GetLevelVal()[nLevel] = nPreNum; |
| String aText(pActNum->MakeNumString( aNum )); |
| pVDev->DrawText( Point(nXStart, nYStart), aText ); |
| pVDev->SetFont(aStdFont); |
| nTextOffset = (sal_uInt16)pVDev->GetTextWidth(aText); |
| nTextOffset = nTextOffset + nXStep; |
| nPreNum++; |
| } |
| if(pOutlineNames) |
| { |
| //#i5153# outline numberings still use the style names as text |
| pVDev->SetFont(aStdFont); |
| sMsg = pOutlineNames[nLevel]; |
| pVDev->DrawText( Point(nXStart + nTextOffset, nYStart), sMsg ); |
| } |
| else |
| { |
| //#i5153# the selected rectangle(s) should be black |
| if( 0 != (nActLevel & (1<<nLevel))) |
| { |
| pVDev->SetFillColor( aBlackColor ); |
| pVDev->SetLineColor( aBlackColor ); |
| } |
| else |
| { |
| //#i5153# unselected levels are gray |
| pVDev->SetFillColor( aLineColor ); |
| pVDev->SetLineColor( aLineColor ); |
| } |
| Rectangle aRect1(Point(nXStart + nTextOffset, nYStart + nTopOffset), Size(nWidth, nRectHeight)); |
| pVDev->DrawRect(aRect1); |
| } |
| } |
| } |
| } |
| DrawOutDev( Point(0,0), aSize, |
| Point(0,0), aSize, |
| *pVDev ); |
| delete pVDev; |
| |
| } |
| |
| /*-----------------03.12.97 10:02------------------- |
| |
| --------------------------------------------------*/ |
| SvxNumPositionTabPage::SvxNumPositionTabPage(Window* pParent, |
| const SfxItemSet& rSet) : |
| SfxTabPage( pParent, CUI_RES( RID_SVXPAGE_NUM_POSITION ), rSet ), |
| aPositionFL( this, CUI_RES(FL_POSITION )), |
| aLevelFT( this, CUI_RES(FT_LEVEL )), |
| aLevelLB( this, CUI_RES(LB_LEVEL )), |
| aDistBorderFT( this, CUI_RES(FT_BORDERDIST )), |
| aDistBorderMF( this, CUI_RES(MF_BORDERDIST )), |
| aRelativeCB( this, CUI_RES(CB_RELATIVE )), |
| aIndentFT( this, CUI_RES(FT_INDENT )), |
| aIndentMF( this, CUI_RES(MF_INDENT )), |
| aDistNumFT( this, CUI_RES(FT_NUMDIST )), |
| aDistNumMF( this, CUI_RES(MF_NUMDIST )), |
| aAlignFT( this, CUI_RES(FT_ALIGN )), |
| aAlignLB( this, CUI_RES(LB_ALIGN )), |
| // --> OD 2008-01-10 #newlistlevelattrs# |
| aLabelFollowedByFT( this, CUI_RES(FT_LABEL_FOLLOWED_BY) ), |
| aLabelFollowedByLB( this, CUI_RES(LB_LABEL_FOLLOWED_BY) ), |
| aListtabFT( this, CUI_RES(FT_LISTTAB) ), |
| aListtabMF( this, CUI_RES(MF_LISTTAB) ), |
| aAlign2FT( this, CUI_RES(FT_ALIGN_2) ), |
| aAlign2LB( this, CUI_RES(LB_ALIGN_2) ), |
| aAlignedAtFT( this, CUI_RES(FT_ALIGNED_AT) ), |
| aAlignedAtMF( this, CUI_RES(MF_ALIGNED_AT) ), |
| aIndentAtFT( this, CUI_RES(FT_INDENT_AT) ), |
| aIndentAtMF( this, CUI_RES(MF_INDENT_AT) ), |
| // <-- |
| aStandardPB( this, CUI_RES(PB_STANDARD )), |
| pPreviewWIN( new SvxNumberingPreview(this, CUI_RES(WIN_PREVIEW ))), |
| pActNum(0), |
| pSaveNum(0), |
| nActNumLvl( USHRT_MAX ), |
| nNumItemId(SID_ATTR_NUMBERING_RULE), |
| bModified(false), |
| bPreset(false), |
| bInInintControl(sal_False), |
| // --> OD 2008-01-11 #newlistlevelattrs# |
| bLabelAlignmentPosAndSpaceModeActive( false ) |
| // <-- |
| { |
| FreeResource(); |
| SetExchangeSupport(); |
| pPreviewWIN->SetBackground(Wallpaper(Color(COL_TRANSPARENT))); |
| |
| aRelativeCB.Check(); |
| aAlignLB.SetSelectHdl(LINK(this, SvxNumPositionTabPage, EditModifyHdl_Impl)); |
| // --> OD 2008-01-10 #newlistlevelattrs# |
| aAlign2LB.SetSelectHdl(LINK(this, SvxNumPositionTabPage, EditModifyHdl_Impl)); |
| for ( sal_uInt16 i = 0; i < aAlignLB.GetEntryCount(); ++i ) |
| { |
| aAlign2LB.InsertEntry( aAlignLB.GetEntry( i ) ); |
| } |
| aAlign2LB.SetDropDownLineCount( aAlign2LB.GetEntryCount() ); |
| aAlign2FT.SetText( aAlignFT.GetText() ); |
| // <-- |
| |
| Link aLk = LINK(this, SvxNumPositionTabPage, DistanceHdl_Impl); |
| |
| aDistBorderMF.SetUpHdl(aLk); |
| aDistBorderMF.SetDownHdl(aLk); |
| aDistBorderMF.SetLoseFocusHdl(aLk); |
| |
| aDistNumMF.SetUpHdl(aLk); |
| aDistNumMF.SetDownHdl(aLk); |
| aDistNumMF.SetLoseFocusHdl(aLk); |
| |
| aIndentMF.SetUpHdl(aLk); |
| aIndentMF.SetDownHdl(aLk); |
| aIndentMF.SetLoseFocusHdl(aLk); |
| |
| // --> OD 2008-01-10 #newlistlevelattrs# |
| aLabelFollowedByLB.SetDropDownLineCount( aLabelFollowedByLB.GetEntryCount() ); |
| aLabelFollowedByLB.SetSelectHdl( LINK(this, SvxNumPositionTabPage, LabelFollowedByHdl_Impl) ); |
| |
| aLk = LINK(this, SvxNumPositionTabPage, ListtabPosHdl_Impl); |
| aListtabMF.SetUpHdl(aLk); |
| aListtabMF.SetDownHdl(aLk); |
| aListtabMF.SetLoseFocusHdl(aLk); |
| |
| aLk = LINK(this, SvxNumPositionTabPage, AlignAtHdl_Impl); |
| aAlignedAtMF.SetUpHdl(aLk); |
| aAlignedAtMF.SetDownHdl(aLk); |
| aAlignedAtMF.SetLoseFocusHdl(aLk); |
| |
| aLk = LINK(this, SvxNumPositionTabPage, IndentAtHdl_Impl); |
| aIndentAtMF.SetUpHdl(aLk); |
| aIndentAtMF.SetDownHdl(aLk); |
| aIndentAtMF.SetLoseFocusHdl(aLk); |
| // <-- |
| |
| aLevelLB.SetSelectHdl(LINK(this, SvxNumPositionTabPage, LevelHdl_Impl)); |
| aRelativeCB.SetClickHdl(LINK(this, SvxNumPositionTabPage, RelativeHdl_Impl)); |
| aStandardPB.SetClickHdl(LINK(this, SvxNumPositionTabPage, StandardHdl_Impl)); |
| |
| |
| aRelativeCB.Check(bLastRelative); |
| pPreviewWIN->SetPositionMode(); |
| eCoreUnit = rSet.GetPool()->GetMetric(rSet.GetPool()->GetWhich(SID_ATTR_NUMBERING_RULE)); |
| |
| //HACK("der Wert sollte mal sinnvol gesetzt werden") |
| long nWidth = 10000; |
| nWidth = OutputDevice::LogicToLogic( nWidth, |
| (MapUnit)eCoreUnit, MAP_100TH_MM ); |
| |
| aDistBorderMF.SetMax(aDistBorderMF.Normalize( nWidth ), FUNIT_100TH_MM ); |
| aDistNumMF .SetMax(aDistNumMF .Normalize( nWidth ), FUNIT_100TH_MM ); |
| aIndentMF .SetMax(aIndentMF .Normalize( nWidth ), FUNIT_100TH_MM ); |
| // --> OD 2008-02-18 #newlistlevelattrs# |
| aListtabMF.SetMax(aListtabMF.Normalize( nWidth ), FUNIT_100TH_MM ); |
| aAlignedAtMF.SetMax(aAlignedAtMF.Normalize( nWidth ), FUNIT_100TH_MM ); |
| aIndentAtMF.SetMax(aIndentAtMF.Normalize( nWidth ), FUNIT_100TH_MM ); |
| // <-- |
| long nLast2 = nWidth /2; |
| aDistBorderMF.SetLast( aDistBorderMF.Normalize( nLast2 ), FUNIT_100TH_MM ); |
| aDistNumMF .SetLast( aDistNumMF .Normalize( nLast2 ), FUNIT_100TH_MM ); |
| aIndentMF .SetLast( aIndentMF .Normalize( nLast2 ), FUNIT_100TH_MM ); |
| // --> OD 2008-02-18 #newlistlevelattrs# |
| aListtabMF.SetLast(aListtabMF.Normalize( nLast2 ), FUNIT_100TH_MM ); |
| aAlignedAtMF.SetLast(aAlignedAtMF.Normalize( nLast2 ), FUNIT_100TH_MM ); |
| aIndentAtMF.SetLast(aIndentAtMF.Normalize( nLast2 ), FUNIT_100TH_MM ); |
| // <-- |
| |
| #if OSL_DEBUG_LEVEL > 1 |
| pDebugFixedText = new FixedText(this, 0); |
| pDebugFixedText->Show(); |
| Size aSize(200, 20); |
| Point aPos(250,0); |
| |
| pDebugFixedText->SetPosSizePixel(aPos, aSize); |
| pDebugFixedText->SetText( UniString::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "Das ist ein Debug-Text" ) ) ); |
| #endif |
| |
| aStandardPB.SetAccessibleRelationMemberOf(&aPositionFL); |
| } |
| /*-----------------03.12.97 10:02------------------- |
| |
| --------------------------------------------------*/ |
| SvxNumPositionTabPage::~SvxNumPositionTabPage() |
| { |
| delete pActNum; |
| delete pPreviewWIN; |
| delete pSaveNum; |
| #if OSL_DEBUG_LEVEL > 1 |
| delete pDebugFixedText; |
| #endif |
| } |
| /*-------------------------------------------------------*/ |
| |
| #if OSL_DEBUG_LEVEL > 1 |
| void lcl_PrintDebugOutput(FixedText& rFixed, const SvxNumberFormat& rNumFmt) |
| { |
| #define TWIP_TO_MM100(TWIP) ((TWIP) >= 0 ? (((TWIP)*127L+36L)/72L) : (((TWIP)*127L-36L)/72L)) |
| |
| sal_Char const sHash[] = " # "; |
| if ( rNumFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_WIDTH_AND_POSITION ) |
| { |
| String sDebugText( UniString::CreateFromInt32( TWIP_TO_MM100(rNumFmt.GetAbsLSpace() ) ) ); |
| sDebugText.AppendAscii( RTL_CONSTASCII_STRINGPARAM( sHash ) ); |
| sDebugText += UniString::CreateFromInt32( TWIP_TO_MM100(rNumFmt.GetCharTextDistance() ) ); |
| sDebugText.AppendAscii( RTL_CONSTASCII_STRINGPARAM( sHash ) ); |
| sDebugText += UniString::CreateFromInt32( TWIP_TO_MM100(rNumFmt.GetFirstLineOffset() ) ); |
| rFixed.SetText(sDebugText); |
| } |
| else if ( rNumFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_ALIGNMENT ) |
| { |
| String sDebugText( UniString::CreateFromInt32( TWIP_TO_MM100(rNumFmt.GetListtabPos() ) ) ); |
| sDebugText.AppendAscii( RTL_CONSTASCII_STRINGPARAM( sHash ) ); |
| sDebugText += UniString::CreateFromInt32( TWIP_TO_MM100(rNumFmt.GetFirstLineIndent() ) ); |
| sDebugText.AppendAscii( RTL_CONSTASCII_STRINGPARAM( sHash ) ); |
| sDebugText += UniString::CreateFromInt32( TWIP_TO_MM100(rNumFmt.GetIndentAt() ) ); |
| rFixed.SetText(sDebugText); |
| } |
| |
| } |
| #endif |
| |
| /*-----------------03.12.97 10:06------------------- |
| |
| --------------------------------------------------*/ |
| void SvxNumPositionTabPage::InitControls() |
| { |
| bInInintControl = sal_True; |
| // --> OD 2008-01-11 #newlistlevelattrs# |
| const bool bRelative = !bLabelAlignmentPosAndSpaceModeActive && |
| aRelativeCB.IsEnabled() && aRelativeCB.IsChecked(); |
| // <-- |
| const bool bSingleSelection = aLevelLB.GetSelectEntryCount() == 1 && |
| USHRT_MAX != nActNumLvl; |
| |
| aDistBorderMF.Enable( !bLabelAlignmentPosAndSpaceModeActive && |
| ( bSingleSelection || bRelative ) ); |
| aDistBorderFT.Enable( !bLabelAlignmentPosAndSpaceModeActive && |
| ( bSingleSelection || bRelative ) ); |
| |
| bool bSetDistEmpty = false; |
| bool bSameDistBorderNum = !bLabelAlignmentPosAndSpaceModeActive; |
| bool bSameDist = !bLabelAlignmentPosAndSpaceModeActive; |
| bool bSameIndent = !bLabelAlignmentPosAndSpaceModeActive; |
| bool bSameAdjust = true; |
| |
| // --> OD 2008-01-11 #newlistlevelattrs# |
| bool bSameLabelFollowedBy = bLabelAlignmentPosAndSpaceModeActive; |
| bool bSameListtab = bLabelAlignmentPosAndSpaceModeActive; |
| bool bSameAlignAt = bLabelAlignmentPosAndSpaceModeActive; |
| bool bSameIndentAt = bLabelAlignmentPosAndSpaceModeActive; |
| // <-- |
| |
| const SvxNumberFormat* aNumFmtArr[SVX_MAX_NUM]; |
| sal_uInt16 nMask = 1; |
| sal_uInt16 nLvl = USHRT_MAX; |
| long nFirstBorderText = 0; |
| long nFirstBorderTextRelative = -1; |
| for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++) |
| { |
| aNumFmtArr[i] = &pActNum->GetLevel(i); |
| if(nActNumLvl & nMask) |
| { |
| if(USHRT_MAX == nLvl) |
| { |
| nLvl = i; |
| if ( !bLabelAlignmentPosAndSpaceModeActive ) |
| { |
| nFirstBorderText = nLvl > 0 ? |
| aNumFmtArr[nLvl]->GetAbsLSpace() + aNumFmtArr[nLvl]->GetFirstLineOffset() - |
| aNumFmtArr[nLvl - 1]->GetAbsLSpace() + aNumFmtArr[nLvl - 1]->GetFirstLineOffset(): |
| aNumFmtArr[nLvl]->GetAbsLSpace() + aNumFmtArr[nLvl]->GetFirstLineOffset(); |
| } |
| } |
| |
| if( i > nLvl) |
| { |
| // --> OD 2008-01-11 #newlistlevelattrs# |
| bSameAdjust &= aNumFmtArr[i]->GetNumAdjust() == aNumFmtArr[nLvl]->GetNumAdjust(); |
| if ( !bLabelAlignmentPosAndSpaceModeActive ) |
| { |
| if(bRelative) |
| { |
| if(nFirstBorderTextRelative == -1) |
| nFirstBorderTextRelative = |
| (aNumFmtArr[i]->GetAbsLSpace() + aNumFmtArr[i]->GetFirstLineOffset() - |
| aNumFmtArr[i - 1]->GetAbsLSpace() + aNumFmtArr[i - 1]->GetFirstLineOffset()); |
| else |
| bSameDistBorderNum &= nFirstBorderTextRelative == |
| (aNumFmtArr[i]->GetAbsLSpace() + aNumFmtArr[i]->GetFirstLineOffset() - |
| aNumFmtArr[i - 1]->GetAbsLSpace() + aNumFmtArr[i - 1]->GetFirstLineOffset()); |
| } |
| else |
| bSameDistBorderNum &= |
| aNumFmtArr[i]->GetAbsLSpace() - aNumFmtArr[i]->GetFirstLineOffset() == |
| aNumFmtArr[i - 1]->GetAbsLSpace() - aNumFmtArr[i - 1]->GetFirstLineOffset(); |
| |
| bSameDist &= aNumFmtArr[i]->GetCharTextDistance() == aNumFmtArr[nLvl]->GetCharTextDistance(); |
| bSameIndent &= aNumFmtArr[i]->GetFirstLineOffset() == aNumFmtArr[nLvl]->GetFirstLineOffset(); |
| } |
| else |
| { |
| bSameLabelFollowedBy &= |
| aNumFmtArr[i]->GetLabelFollowedBy() == aNumFmtArr[nLvl]->GetLabelFollowedBy(); |
| bSameListtab &= |
| aNumFmtArr[i]->GetListtabPos() == aNumFmtArr[nLvl]->GetListtabPos(); |
| bSameAlignAt &= |
| ( ( aNumFmtArr[i]->GetIndentAt() + aNumFmtArr[i]->GetFirstLineIndent() ) |
| == ( aNumFmtArr[nLvl]->GetIndentAt() + aNumFmtArr[nLvl]->GetFirstLineIndent() ) ); |
| bSameIndentAt &= |
| aNumFmtArr[i]->GetIndentAt() == aNumFmtArr[nLvl]->GetIndentAt(); |
| } |
| // <-- |
| } |
| } |
| nMask <<= 1; |
| |
| } |
| if (SVX_MAX_NUM <= nLvl) |
| { |
| OSL_ENSURE(false, "cannot happen."); |
| return; |
| } |
| |
| if(bSameDistBorderNum) |
| { |
| long nDistBorderNum; |
| if(bRelative) |
| { |
| nDistBorderNum = (long)aNumFmtArr[nLvl]->GetAbsLSpace()+ aNumFmtArr[nLvl]->GetFirstLineOffset(); |
| if(nLvl) |
| nDistBorderNum -= (long)aNumFmtArr[nLvl - 1]->GetAbsLSpace()+ aNumFmtArr[nLvl - 1]->GetFirstLineOffset(); |
| } |
| else |
| { |
| nDistBorderNum = (long)aNumFmtArr[nLvl]->GetAbsLSpace()+ aNumFmtArr[nLvl]->GetFirstLineOffset(); |
| } |
| SetMetricValue(aDistBorderMF, nDistBorderNum, eCoreUnit); |
| } |
| else |
| bSetDistEmpty = true; |
| |
| #if OSL_DEBUG_LEVEL > 1 |
| lcl_PrintDebugOutput(*pDebugFixedText, *aNumFmtArr[nLvl]); |
| #endif |
| |
| const String aEmptyStr; |
| if(bSameDist) |
| SetMetricValue(aDistNumMF, aNumFmtArr[nLvl]->GetCharTextDistance(), eCoreUnit); |
| else |
| aDistNumMF.SetText(aEmptyStr); |
| if(bSameIndent) |
| SetMetricValue(aIndentMF, - aNumFmtArr[nLvl]->GetFirstLineOffset(), eCoreUnit); |
| else |
| aIndentMF.SetText(aEmptyStr); |
| |
| if(bSameAdjust) |
| { |
| sal_uInt16 nPos = 1; // zentriert |
| if(aNumFmtArr[nLvl]->GetNumAdjust() == SVX_ADJUST_LEFT) |
| nPos = 0; |
| else if(aNumFmtArr[nLvl]->GetNumAdjust() == SVX_ADJUST_RIGHT) |
| nPos = 2; |
| aAlignLB.SelectEntryPos(nPos); |
| // --> OD 2008-01-11 #newlistlevelattrs# |
| aAlign2LB.SelectEntryPos( nPos ); |
| // <-- |
| } |
| else |
| { |
| aAlignLB.SetNoSelection(); |
| // --> OD 2008-01-11 #newlistlevelattrs# |
| aAlign2LB.SetNoSelection(); |
| // <-- |
| } |
| |
| // --> OD 2008-01-11 #newlistlevelattrs# |
| if ( bSameLabelFollowedBy ) |
| { |
| sal_uInt16 nPos = 0; // LISTTAB |
| if ( aNumFmtArr[nLvl]->GetLabelFollowedBy() == SvxNumberFormat::SPACE ) |
| { |
| nPos = 1; |
| } |
| else if ( aNumFmtArr[nLvl]->GetLabelFollowedBy() == SvxNumberFormat::NOTHING ) |
| { |
| nPos = 2; |
| } |
| aLabelFollowedByLB.SelectEntryPos( nPos ); |
| } |
| else |
| { |
| aLabelFollowedByLB.SetNoSelection(); |
| } |
| |
| if ( aNumFmtArr[nLvl]->GetLabelFollowedBy() == SvxNumberFormat::LISTTAB ) |
| { |
| aListtabFT.Enable( true ); |
| aListtabMF.Enable( true ); |
| if ( bSameListtab ) |
| { |
| SetMetricValue( aListtabMF, aNumFmtArr[nLvl]->GetListtabPos(), eCoreUnit ); |
| } |
| else |
| { |
| aListtabMF.SetText(aEmptyStr); |
| } |
| } |
| else |
| { |
| aListtabFT.Enable( false ); |
| aListtabMF.Enable( false ); |
| aListtabMF.SetText(aEmptyStr); |
| } |
| |
| if ( bSameAlignAt ) |
| { |
| SetMetricValue( aAlignedAtMF, |
| aNumFmtArr[nLvl]->GetIndentAt() + aNumFmtArr[nLvl]->GetFirstLineIndent(), |
| eCoreUnit ); |
| } |
| else |
| { |
| aAlignedAtMF.SetText(aEmptyStr); |
| } |
| |
| if ( bSameIndentAt ) |
| { |
| SetMetricValue( aIndentAtMF, aNumFmtArr[nLvl]->GetIndentAt(), eCoreUnit ); |
| } |
| else |
| { |
| aIndentAtMF.SetText(aEmptyStr); |
| } |
| // <-- |
| |
| if ( bSetDistEmpty ) |
| aDistBorderMF.SetText(aEmptyStr); |
| |
| bInInintControl = sal_False; |
| } |
| |
| /*-----------------03.12.97 10:02------------------- |
| |
| --------------------------------------------------*/ |
| void SvxNumPositionTabPage::ActivatePage(const SfxItemSet& rSet) |
| { |
| const SfxPoolItem* pItem; |
| sal_uInt16 nTmpNumLvl = USHRT_MAX; |
| const SfxItemSet* pExampleSet = GetTabDialog()->GetExampleSet(); |
| if(pExampleSet) |
| { |
| if(SFX_ITEM_SET == pExampleSet->GetItemState(SID_PARAM_NUM_PRESET, sal_False, &pItem)) |
| bPreset = ((const SfxBoolItem*)pItem)->GetValue(); |
| if(SFX_ITEM_SET == pExampleSet->GetItemState(SID_PARAM_CUR_NUM_LEVEL, sal_False, &pItem)) |
| nTmpNumLvl = ((const SfxUInt16Item*)pItem)->GetValue(); |
| } |
| // |
| if(SFX_ITEM_SET == rSet.GetItemState(nNumItemId, sal_False, &pItem)) |
| { |
| delete pSaveNum; |
| pSaveNum = new SvxNumRule(*((SvxNumBulletItem*)pItem)->GetNumRule()); |
| } |
| bModified = (!pActNum->Get( 0 ) || bPreset); |
| if(*pSaveNum != *pActNum || |
| nActNumLvl != nTmpNumLvl ) |
| { |
| *pActNum = *pSaveNum; |
| nActNumLvl = nTmpNumLvl; |
| sal_uInt16 nMask = 1; |
| aLevelLB.SetUpdateMode(sal_False); |
| aLevelLB.SetNoSelection(); |
| aLevelLB.SelectEntryPos( pActNum->GetLevelCount(), nActNumLvl == USHRT_MAX); |
| if(nActNumLvl != USHRT_MAX) |
| for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++) |
| { |
| if(nActNumLvl & nMask) |
| aLevelLB.SelectEntryPos( i, sal_True); |
| nMask <<= 1 ; |
| } |
| aRelativeCB.Enable(nActNumLvl != 1); |
| aLevelLB.SetUpdateMode(sal_True); |
| |
| // --> OD 2008-01-11 #newlistlevelattrs# |
| InitPosAndSpaceMode(); |
| ShowControlsDependingOnPosAndSpaceMode(); |
| // <-- |
| |
| InitControls(); |
| } |
| pPreviewWIN->SetLevel(nActNumLvl); |
| pPreviewWIN->Invalidate(); |
| } |
| |
| /*-----------------03.12.97 10:02------------------- |
| |
| --------------------------------------------------*/ |
| int SvxNumPositionTabPage::DeactivatePage(SfxItemSet *_pSet) |
| { |
| if(_pSet) |
| FillItemSet(*_pSet); |
| return sal_True; |
| } |
| |
| /*-----------------03.12.97 10:02------------------- |
| |
| --------------------------------------------------*/ |
| sal_Bool SvxNumPositionTabPage::FillItemSet( SfxItemSet& rSet ) |
| { |
| rSet.Put(SfxUInt16Item(SID_PARAM_CUR_NUM_LEVEL, nActNumLvl)); |
| |
| if(bModified && pActNum) |
| { |
| *pSaveNum = *pActNum; |
| rSet.Put(SvxNumBulletItem( *pSaveNum ), nNumItemId); |
| rSet.Put(SfxBoolItem(SID_PARAM_NUM_PRESET, sal_False)); |
| } |
| return bModified; |
| } |
| |
| /*-----------------03.12.97 10:02------------------- |
| |
| --------------------------------------------------*/ |
| void SvxNumPositionTabPage::Reset( const SfxItemSet& rSet ) |
| { |
| const SfxPoolItem* pItem; |
| //im Draw gibt es das Item als WhichId, im Writer nur als SlotId |
| SfxItemState eState = rSet.GetItemState(SID_ATTR_NUMBERING_RULE, sal_False, &pItem); |
| if(eState != SFX_ITEM_SET) |
| { |
| nNumItemId = rSet.GetPool()->GetWhich(SID_ATTR_NUMBERING_RULE); |
| eState = rSet.GetItemState(nNumItemId, sal_False, &pItem); |
| |
| if( eState != SFX_ITEM_SET ) |
| { |
| pItem = &static_cast< const SvxNumBulletItem& >( rSet.Get( nNumItemId, sal_True ) ); |
| eState = SFX_ITEM_SET; |
| } |
| |
| } |
| DBG_ASSERT(eState == SFX_ITEM_SET, "kein Item gefunden!"); |
| delete pSaveNum; |
| pSaveNum = new SvxNumRule(*((SvxNumBulletItem*)pItem)->GetNumRule()); |
| |
| // Ebenen einfuegen |
| if(!aLevelLB.GetEntryCount()) |
| { |
| for(sal_uInt16 i = 1; i <= pSaveNum->GetLevelCount(); i++) |
| aLevelLB.InsertEntry(UniString::CreateFromInt32(i)); |
| if(pSaveNum->GetLevelCount() > 1) |
| { |
| String sEntry( UniString::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "1 - ") ) ); |
| sEntry.Append( UniString::CreateFromInt32( pSaveNum->GetLevelCount() ) ); |
| aLevelLB.InsertEntry(sEntry); |
| aLevelLB.SelectEntry(sEntry); |
| } |
| else |
| aLevelLB.SelectEntryPos(0); |
| } |
| else |
| aLevelLB.SelectEntryPos(aLevelLB.GetEntryCount() - 1); |
| sal_uInt16 nMask = 1; |
| aLevelLB.SetUpdateMode(sal_False); |
| aLevelLB.SetNoSelection(); |
| if(nActNumLvl == USHRT_MAX) |
| { |
| aLevelLB.SelectEntryPos( pSaveNum->GetLevelCount(), sal_True); |
| } |
| else |
| for(sal_uInt16 i = 0; i < pSaveNum->GetLevelCount(); i++) |
| { |
| if(nActNumLvl & nMask) |
| aLevelLB.SelectEntryPos( i, sal_True); |
| nMask <<= 1; |
| } |
| aLevelLB.SetUpdateMode(sal_True); |
| |
| if(!pActNum) |
| pActNum = new SvxNumRule(*pSaveNum); |
| else if(*pSaveNum != *pActNum) |
| *pActNum = *pSaveNum; |
| pPreviewWIN->SetNumRule(pActNum); |
| |
| // --> OD 2008-01-11 #newlistlevelattrs# |
| InitPosAndSpaceMode(); |
| ShowControlsDependingOnPosAndSpaceMode(); |
| // const sal_Bool bDraw = pActNum->IsFeatureSupported(NUM_CONTINUOUS); |
| // aDistNumFT.Show(bDraw); |
| // aDistNumMF.Show(bDraw); |
| // <-- |
| |
| InitControls(); |
| bModified = sal_False; |
| } |
| |
| // --> OD 2008-01-11 #newlistlevelattrs# |
| void SvxNumPositionTabPage::InitPosAndSpaceMode() |
| { |
| if ( pActNum == 0 ) |
| { |
| DBG_ASSERT( false, |
| "<SvxNumPositionTabPage::InitPosAndSpaceMode()> - misusage of method -> <pAktNum> has to be already set!" ); |
| return; |
| } |
| |
| SvxNumberFormat::SvxNumPositionAndSpaceMode ePosAndSpaceMode = |
| SvxNumberFormat::LABEL_ALIGNMENT; |
| sal_uInt16 nMask = 1; |
| for( sal_uInt16 i = 0; i < pActNum->GetLevelCount(); ++i ) |
| { |
| if(nActNumLvl & nMask) |
| { |
| SvxNumberFormat aNumFmt( pActNum->GetLevel(i) ); |
| ePosAndSpaceMode = aNumFmt.GetPositionAndSpaceMode(); |
| if ( ePosAndSpaceMode == SvxNumberFormat::LABEL_ALIGNMENT ) |
| { |
| break; |
| } |
| } |
| nMask <<= 1; |
| } |
| |
| bLabelAlignmentPosAndSpaceModeActive = |
| ePosAndSpaceMode == SvxNumberFormat::LABEL_ALIGNMENT; |
| } |
| |
| void SvxNumPositionTabPage::ShowControlsDependingOnPosAndSpaceMode() |
| { |
| aDistBorderFT.Show( !bLabelAlignmentPosAndSpaceModeActive ); |
| aDistBorderMF.Show( !bLabelAlignmentPosAndSpaceModeActive ); |
| aRelativeCB.Show( !bLabelAlignmentPosAndSpaceModeActive ); |
| aIndentFT.Show( !bLabelAlignmentPosAndSpaceModeActive ); |
| aIndentMF.Show( !bLabelAlignmentPosAndSpaceModeActive ); |
| aDistNumFT.Show( !bLabelAlignmentPosAndSpaceModeActive && |
| pActNum->IsFeatureSupported(NUM_CONTINUOUS) ); |
| aDistNumMF.Show( !bLabelAlignmentPosAndSpaceModeActive && |
| pActNum->IsFeatureSupported(NUM_CONTINUOUS)); |
| aAlignFT.Show( !bLabelAlignmentPosAndSpaceModeActive ); |
| aAlignLB.Show( !bLabelAlignmentPosAndSpaceModeActive ); |
| |
| aLabelFollowedByFT.Show( bLabelAlignmentPosAndSpaceModeActive ); |
| aLabelFollowedByLB.Show( bLabelAlignmentPosAndSpaceModeActive ); |
| aListtabFT.Show( bLabelAlignmentPosAndSpaceModeActive ); |
| aListtabMF.Show( bLabelAlignmentPosAndSpaceModeActive ); |
| aAlign2FT.Show( bLabelAlignmentPosAndSpaceModeActive ); |
| aAlign2LB.Show( bLabelAlignmentPosAndSpaceModeActive ); |
| aAlignedAtFT.Show( bLabelAlignmentPosAndSpaceModeActive ); |
| aAlignedAtMF.Show( bLabelAlignmentPosAndSpaceModeActive ); |
| aIndentAtFT.Show( bLabelAlignmentPosAndSpaceModeActive ); |
| aIndentAtMF.Show( bLabelAlignmentPosAndSpaceModeActive ); |
| } |
| // <-- |
| |
| /*-----------------03.12.97 10:02------------------- |
| |
| --------------------------------------------------*/ |
| SfxTabPage* SvxNumPositionTabPage::Create( Window* pParent, |
| const SfxItemSet& rAttrSet) |
| { |
| return new SvxNumPositionTabPage(pParent, rAttrSet); |
| } |
| |
| /*-----------------04.12.97 12:51------------------- |
| |
| --------------------------------------------------*/ |
| void SvxNumPositionTabPage::SetMetric(FieldUnit eMetric) |
| { |
| if(eMetric == FUNIT_MM) |
| { |
| aDistBorderMF .SetDecimalDigits(1); |
| aDistNumMF .SetDecimalDigits(1); |
| aIndentMF .SetDecimalDigits(1); |
| // --> OD 2008-02-18 #newlistlevelattrs# |
| aListtabMF.SetDecimalDigits(1); |
| aAlignedAtMF.SetDecimalDigits(1); |
| aIndentAtMF.SetDecimalDigits(1); |
| // <-- |
| } |
| aDistBorderMF .SetUnit( eMetric ); |
| aDistNumMF .SetUnit( eMetric ); |
| aIndentMF .SetUnit( eMetric ); |
| // --> OD 2008-02-18 #newlistlevelattrs# |
| aListtabMF.SetUnit( eMetric ); |
| aAlignedAtMF.SetUnit( eMetric ); |
| aIndentAtMF.SetUnit( eMetric ); |
| // <-- |
| } |
| |
| /*-----------------03.12.97 11:06------------------- |
| |
| --------------------------------------------------*/ |
| IMPL_LINK( SvxNumPositionTabPage, EditModifyHdl_Impl, Edit *, EMPTYARG ) |
| { |
| sal_uInt16 nMask = 1; |
| for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++) |
| { |
| if(nActNumLvl & nMask) |
| { |
| SvxNumberFormat aNumFmt(pActNum->GetLevel(i)); |
| |
| // --> OD 2008-01-11 #newlistlevelattrs# |
| const sal_uInt16 nPos = aAlignLB.IsVisible() |
| ? aAlignLB.GetSelectEntryPos() |
| : aAlign2LB.GetSelectEntryPos(); |
| // <-- |
| SvxAdjust eAdjust = SVX_ADJUST_CENTER; |
| if(nPos == 0) |
| eAdjust = SVX_ADJUST_LEFT; |
| else if(nPos == 2) |
| eAdjust = SVX_ADJUST_RIGHT; |
| aNumFmt.SetNumAdjust( eAdjust ); |
| pActNum->SetLevel(i, aNumFmt); |
| } |
| nMask <<= 1; |
| } |
| SetModified(); |
| return 0; |
| } |
| /*-----------------03.12.97 11:11------------------- |
| |
| --------------------------------------------------*/ |
| IMPL_LINK( SvxNumPositionTabPage, LevelHdl_Impl, ListBox *, pBox ) |
| { |
| sal_uInt16 nSaveNumLvl = nActNumLvl; |
| nActNumLvl = 0; |
| if(pBox->IsEntryPosSelected( pActNum->GetLevelCount() ) && |
| (pBox->GetSelectEntryCount() == 1 || nSaveNumLvl != 0xffff)) |
| { |
| nActNumLvl = 0xFFFF; |
| pBox->SetUpdateMode(sal_False); |
| for( sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++ ) |
| pBox->SelectEntryPos( i, sal_False ); |
| pBox->SetUpdateMode(sal_True); |
| } |
| else if(pBox->GetSelectEntryCount()) |
| { |
| sal_uInt16 nMask = 1; |
| for( sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++ ) |
| { |
| if(pBox->IsEntryPosSelected( i )) |
| nActNumLvl |= nMask; |
| nMask <<= 1; |
| } |
| pBox->SelectEntryPos( pActNum->GetLevelCount(), sal_False ); |
| } |
| else |
| { |
| nActNumLvl = nSaveNumLvl; |
| sal_uInt16 nMask = 1; |
| for( sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++ ) |
| { |
| if(nActNumLvl & nMask) |
| { |
| pBox->SelectEntryPos(i); |
| break; |
| } |
| nMask <<=1; |
| } |
| } |
| aRelativeCB.Enable(nActNumLvl != 1); |
| SetModified(); |
| // --> OD 2008-01-15 #newlistlevelattrs# |
| InitPosAndSpaceMode(); |
| ShowControlsDependingOnPosAndSpaceMode(); |
| // <-- |
| InitControls(); |
| return 0; |
| } |
| /*-----------------03.12.97 12:24------------------- |
| |
| --------------------------------------------------*/ |
| IMPL_LINK( SvxNumPositionTabPage, DistanceHdl_Impl, MetricField *, pFld ) |
| { |
| if(bInInintControl) |
| return 0; |
| long nValue = GetCoreValue(*pFld, eCoreUnit); |
| sal_uInt16 nMask = 1; |
| #if OSL_DEBUG_LEVEL > 1 |
| sal_Bool bFirst = sal_True; |
| #endif |
| for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++) |
| { |
| if(nActNumLvl & nMask) |
| { |
| SvxNumberFormat aNumFmt( pActNum->GetLevel( i ) ); |
| if(pFld == &aDistBorderMF) |
| { |
| |
| if(aRelativeCB.IsChecked()) |
| { |
| if(0 == i) |
| { |
| long nTmp = aNumFmt.GetFirstLineOffset(); |
| aNumFmt.SetAbsLSpace( sal_uInt16(nValue - nTmp)); |
| } |
| else |
| { |
| long nTmp = pActNum->GetLevel( i - 1 ).GetAbsLSpace() + |
| pActNum->GetLevel( i - 1 ).GetFirstLineOffset() - |
| pActNum->GetLevel( i ).GetFirstLineOffset(); |
| |
| aNumFmt.SetAbsLSpace( sal_uInt16(nValue + nTmp)); |
| } |
| } |
| else |
| { |
| aNumFmt.SetAbsLSpace( (short)nValue - aNumFmt.GetFirstLineOffset()); |
| } |
| } |
| else if(pFld == &aDistNumMF) |
| { |
| aNumFmt.SetCharTextDistance( (short)nValue ); |
| } |
| else if(pFld == &aIndentMF) |
| { |
| //jetzt muss mit dem FirstLineOffset auch der AbsLSpace veraendert werden |
| long nDiff = nValue + aNumFmt.GetFirstLineOffset(); |
| long nAbsLSpace = aNumFmt.GetAbsLSpace(); |
| aNumFmt.SetAbsLSpace(sal_uInt16(nAbsLSpace + nDiff)); |
| aNumFmt.SetFirstLineOffset( -(short)nValue ); |
| } |
| |
| #if OSL_DEBUG_LEVEL > 1 |
| if(bFirst) |
| lcl_PrintDebugOutput(*pDebugFixedText, aNumFmt); |
| bFirst = sal_False; |
| #endif |
| pActNum->SetLevel( i, aNumFmt ); |
| } |
| nMask <<= 1; |
| } |
| |
| SetModified(); |
| if(!aDistBorderMF.IsEnabled()) |
| { |
| String aEmptyStr; |
| aDistBorderMF.SetText(aEmptyStr); |
| } |
| |
| return 0; |
| } |
| |
| /*-----------------04.12.97 12:35------------------- |
| |
| --------------------------------------------------*/ |
| IMPL_LINK( SvxNumPositionTabPage, RelativeHdl_Impl, CheckBox *, pBox ) |
| { |
| sal_Bool bOn = pBox->IsChecked(); |
| sal_Bool bSingleSelection = aLevelLB.GetSelectEntryCount() == 1 && USHRT_MAX != nActNumLvl; |
| sal_Bool bSetValue = sal_False; |
| long nValue = 0; |
| if(bOn || bSingleSelection) |
| { |
| sal_uInt16 nMask = 1; |
| sal_Bool bFirst = sal_True; |
| bSetValue = sal_True; |
| for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++) |
| { |
| if(nActNumLvl & nMask) |
| { |
| const SvxNumberFormat &rNumFmt = pActNum->GetLevel(i); |
| if(bFirst) |
| { |
| nValue = rNumFmt.GetAbsLSpace() + rNumFmt.GetFirstLineOffset(); |
| if(bOn && i) |
| nValue -= (pActNum->GetLevel(i - 1).GetAbsLSpace() + pActNum->GetLevel(i - 1).GetFirstLineOffset()); |
| } |
| else |
| bSetValue = nValue == |
| (rNumFmt.GetAbsLSpace() + rNumFmt.GetFirstLineOffset()) - |
| (pActNum->GetLevel(i - 1).GetAbsLSpace() + pActNum->GetLevel(i - 1).GetFirstLineOffset()); |
| bFirst = sal_False; |
| } |
| nMask <<= 1; |
| } |
| |
| } |
| String aEmptyStr; |
| if(bSetValue) |
| SetMetricValue(aDistBorderMF, nValue, eCoreUnit); |
| else |
| aDistBorderMF.SetText(aEmptyStr); |
| aDistBorderMF.Enable(bOn || bSingleSelection); |
| aDistBorderFT.Enable(bOn || bSingleSelection); |
| bLastRelative = bOn; |
| return 0; |
| } |
| |
| // --> OD 2008-01-14 #newlistlevelattrs# |
| IMPL_LINK( SvxNumPositionTabPage, LabelFollowedByHdl_Impl, ListBox*, EMPTYARG ) |
| { |
| // determine value to be set at the chosen list levels |
| SvxNumberFormat::SvxNumLabelFollowedBy eLabelFollowedBy = |
| SvxNumberFormat::LISTTAB; |
| { |
| const sal_uInt16 nPos = aLabelFollowedByLB.GetSelectEntryPos(); |
| if ( nPos == 1 ) |
| { |
| eLabelFollowedBy = SvxNumberFormat::SPACE; |
| } |
| else if ( nPos == 2 ) |
| { |
| eLabelFollowedBy = SvxNumberFormat::NOTHING; |
| } |
| } |
| |
| // set value at the chosen list levels |
| bool bSameListtabPos = true; |
| sal_uInt16 nFirstLvl = USHRT_MAX; |
| sal_uInt16 nMask = 1; |
| for( sal_uInt16 i = 0; i < pActNum->GetLevelCount(); ++i ) |
| { |
| if ( nActNumLvl & nMask ) |
| { |
| SvxNumberFormat aNumFmt( pActNum->GetLevel(i) ); |
| aNumFmt.SetLabelFollowedBy( eLabelFollowedBy ); |
| pActNum->SetLevel( i, aNumFmt ); |
| |
| if ( nFirstLvl == USHRT_MAX ) |
| { |
| nFirstLvl = i; |
| } |
| else |
| { |
| bSameListtabPos &= aNumFmt.GetListtabPos() == |
| pActNum->GetLevel( nFirstLvl ).GetListtabPos(); |
| } |
| } |
| nMask <<= 1; |
| } |
| |
| // enable/disable metric field for list tab stop position depending on |
| // selected item following the list label. |
| aListtabFT.Enable( eLabelFollowedBy == SvxNumberFormat::LISTTAB ); |
| aListtabMF.Enable( eLabelFollowedBy == SvxNumberFormat::LISTTAB ); |
| if ( bSameListtabPos && eLabelFollowedBy == SvxNumberFormat::LISTTAB ) |
| { |
| SetMetricValue( aListtabMF, pActNum->GetLevel( nFirstLvl ).GetListtabPos(), eCoreUnit ); |
| } |
| else |
| { |
| aListtabMF.SetText( String() ); |
| } |
| |
| SetModified(); |
| |
| return 0; |
| } |
| // <-- |
| |
| // --> OD 2008-01-14 #newlistlevelattrs# |
| IMPL_LINK( SvxNumPositionTabPage, ListtabPosHdl_Impl, MetricField*, pFld ) |
| { |
| // determine value to be set at the chosen list levels |
| const long nValue = GetCoreValue( *pFld, eCoreUnit ); |
| |
| // set value at the chosen list levels |
| sal_uInt16 nMask = 1; |
| for( sal_uInt16 i = 0; i < pActNum->GetLevelCount(); ++i ) |
| { |
| if ( nActNumLvl & nMask ) |
| { |
| SvxNumberFormat aNumFmt( pActNum->GetLevel(i) ); |
| aNumFmt.SetListtabPos( nValue ); |
| pActNum->SetLevel( i, aNumFmt ); |
| #if OSL_DEBUG_LEVEL > 1 |
| lcl_PrintDebugOutput(*pDebugFixedText, aNumFmt); |
| #endif |
| } |
| nMask <<= 1; |
| } |
| |
| SetModified(); |
| |
| return 0; |
| } |
| // <-- |
| |
| // --> OD 2008-01-14 #newlistlevelattrs# |
| IMPL_LINK( SvxNumPositionTabPage, AlignAtHdl_Impl, MetricField*, pFld ) |
| { |
| // determine value to be set at the chosen list levels |
| const long nValue = GetCoreValue( *pFld, eCoreUnit ); |
| |
| // set value at the chosen list levels |
| sal_uInt16 nMask = 1; |
| for( sal_uInt16 i = 0; i < pActNum->GetLevelCount(); ++i ) |
| { |
| if ( nActNumLvl & nMask ) |
| { |
| SvxNumberFormat aNumFmt( pActNum->GetLevel(i) ); |
| const long nFirstLineIndent = nValue - aNumFmt.GetIndentAt(); |
| aNumFmt.SetFirstLineIndent( nFirstLineIndent ); |
| pActNum->SetLevel( i, aNumFmt ); |
| #if OSL_DEBUG_LEVEL > 1 |
| lcl_PrintDebugOutput(*pDebugFixedText, aNumFmt); |
| #endif |
| } |
| nMask <<= 1; |
| } |
| |
| SetModified(); |
| |
| return 0; |
| } |
| // <-- |
| |
| // --> OD 2008-01-14 #newlistlevelattrs# |
| IMPL_LINK( SvxNumPositionTabPage, IndentAtHdl_Impl, MetricField*, pFld ) |
| { |
| // determine value to be set at the chosen list levels |
| const long nValue = GetCoreValue( *pFld, eCoreUnit ); |
| |
| // set value at the chosen list levels |
| sal_uInt16 nMask = 1; |
| for( sal_uInt16 i = 0; i < pActNum->GetLevelCount(); ++i ) |
| { |
| if ( nActNumLvl & nMask ) |
| { |
| SvxNumberFormat aNumFmt( pActNum->GetLevel(i) ); |
| const long nAlignedAt = aNumFmt.GetIndentAt() + |
| aNumFmt.GetFirstLineIndent(); |
| aNumFmt.SetIndentAt( nValue ); |
| const long nNewFirstLineIndent = nAlignedAt - nValue; |
| aNumFmt.SetFirstLineIndent( nNewFirstLineIndent ); |
| pActNum->SetLevel( i, aNumFmt ); |
| #if OSL_DEBUG_LEVEL > 1 |
| lcl_PrintDebugOutput(*pDebugFixedText, aNumFmt); |
| #endif |
| } |
| nMask <<= 1; |
| } |
| |
| SetModified(); |
| |
| return 0; |
| } |
| // <-- |
| /*-----------------05.12.97 15:33------------------- |
| |
| --------------------------------------------------*/ |
| IMPL_LINK( SvxNumPositionTabPage, StandardHdl_Impl, PushButton *, EMPTYARG ) |
| { |
| sal_uInt16 nMask = 1; |
| // --> OD 2008-02-11 #newlistlevelattrs# |
| SvxNumRule aTmpNumRule( pActNum->GetFeatureFlags(), |
| pActNum->GetLevelCount(), |
| pActNum->IsContinuousNumbering(), |
| SVX_RULETYPE_NUMBERING, |
| pActNum->GetLevel( 0 ).GetPositionAndSpaceMode() ); |
| // <-- |
| for(sal_uInt16 i = 0; i < pActNum->GetLevelCount(); i++) |
| { |
| if(nActNumLvl & nMask) |
| { |
| SvxNumberFormat aNumFmt( pActNum->GetLevel( i ) ); |
| SvxNumberFormat aTempFmt(aTmpNumRule.GetLevel( i )); |
| // --> OD 2008-02-05 #newlistlevelattrs# |
| aNumFmt.SetPositionAndSpaceMode( aTempFmt.GetPositionAndSpaceMode() ); |
| if ( aTempFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_WIDTH_AND_POSITION ) |
| { |
| aNumFmt.SetAbsLSpace( aTempFmt.GetAbsLSpace() ); |
| aNumFmt.SetCharTextDistance( aTempFmt.GetCharTextDistance() ); |
| aNumFmt.SetFirstLineOffset( aTempFmt.GetFirstLineOffset() ); |
| } |
| else if ( aTempFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_ALIGNMENT ) |
| { |
| aNumFmt.SetNumAdjust( aTempFmt.GetNumAdjust() ); |
| aNumFmt.SetLabelFollowedBy( aTempFmt.GetLabelFollowedBy() ); |
| aNumFmt.SetListtabPos( aTempFmt.GetListtabPos() ); |
| aNumFmt.SetFirstLineIndent( aTempFmt.GetFirstLineIndent() ); |
| aNumFmt.SetIndentAt( aTempFmt.GetIndentAt() ); |
| } |
| // <-- |
| |
| pActNum->SetLevel( i, aNumFmt ); |
| } |
| nMask <<= 1; |
| } |
| |
| InitControls(); |
| SetModified(); |
| return 0; |
| } |
| |
| void SvxNumPositionTabPage::SetModified(sal_Bool bRepaint) |
| { |
| bModified = sal_True; |
| if(bRepaint) |
| { |
| pPreviewWIN->SetLevel(nActNumLvl); |
| pPreviewWIN->Invalidate(); |
| } |
| } |
| |
| void SvxNumOptionsTabPage::SetModified(sal_Bool bRepaint) |
| { |
| bModified = sal_True; |
| if(bRepaint) |
| { |
| pPreviewWIN->SetLevel(nActNumLvl); |
| pPreviewWIN->Invalidate(); |
| } |
| } |
| |
| //Add CHINA001 |
| void SvxNumOptionsTabPage::PageCreated(SfxAllItemSet aSet) |
| { |
| SFX_ITEMSET_ARG (&aSet,pListItem,SfxStringListItem,SID_CHAR_FMT_LIST_BOX,sal_False); |
| SFX_ITEMSET_ARG (&aSet,pNumCharFmt,SfxStringItem,SID_NUM_CHAR_FMT,sal_False); |
| SFX_ITEMSET_ARG (&aSet,pBulletCharFmt,SfxStringItem,SID_BULLET_CHAR_FMT,sal_False); |
| SFX_ITEMSET_ARG (&aSet,pMetricItem,SfxAllEnumItem,SID_METRIC_ITEM,sal_False); |
| |
| if (pNumCharFmt &&pBulletCharFmt) |
| SetCharFmts( pNumCharFmt->GetValue(),pBulletCharFmt->GetValue()); |
| |
| if (pListItem) |
| { |
| ListBox& myCharFmtLB = GetCharFmtListBox(); |
| const List *pList = (pListItem)->GetList(); |
| sal_uInt32 nCount = pList->Count();; |
| for(sal_uInt32 i = 0; i < nCount; i++) |
| { |
| myCharFmtLB.InsertEntry(*(const String*)(pList->GetObject(i)) ); |
| |
| } |
| } |
| if (pMetricItem) |
| SetMetric(static_cast<FieldUnit>(pMetricItem->GetValue())); |
| } |
| |
| //end of add CHINA001 |
| |
| //add CHINA001 begin |
| |
| void SvxNumPositionTabPage::PageCreated(SfxAllItemSet aSet) |
| { |
| SFX_ITEMSET_ARG (&aSet,pMetricItem,SfxAllEnumItem,SID_METRIC_ITEM,sal_False); |
| |
| if (pMetricItem) |
| SetMetric(static_cast<FieldUnit>(pMetricItem->GetValue())); |
| } |