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