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 ---------------------------------------------------------------------------*/ 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 ---------------------------------------------------------------------------*/ 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 --------------------------------------------------*/ 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 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 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 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 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 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 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 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 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 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 --------------------------------------------------*/ 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 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 479 SvxBulletPickTabPage::~SvxBulletPickTabPage() 480 { 481 delete pActNum; 482 delete pExamplesVS; 483 delete pSaveNum; 484 } 485 /*-----------------07.02.97 12.10------------------- 486 487 --------------------------------------------------*/ 488 489 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 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 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 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 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 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 --------------------------------------------------*/ 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 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 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 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 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 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 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 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 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 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 --------------------------------------------------*/ 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 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 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 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 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 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 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 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 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 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 --------------------------------------------------*/ 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 --------------------------------------------------*/ 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 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 --------------------------------------------------*/ 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 --------------------------------------------------*/ 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 --------------------------------------------------*/ 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 --------------------------------------------------*/ 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 --------------------------------------------------*/ 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 --------------------------------------------------*/ 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 --------------------------------------------------*/ 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 --------------------------------------------------*/ 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 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 --------------------------------------------------*/ 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 ---------------------------------------------------------------------------*/ 2020 IMPL_LINK( SvxNumOptionsTabPage, PreviewInvalidateHdl_Impl, Timer*, EMPTYARG ) 2021 { 2022 pPreviewWIN->Invalidate(); 2023 return 0; 2024 } 2025 /*-----------------03.12.97 12:01------------------- 2026 2027 --------------------------------------------------*/ 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 --------------------------------------------------*/ 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 * --------------------------------------------------*/ 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 --------------------------------------------------*/ 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 --------------------------------------------------*/ 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 * --------------------------------------------------*/ 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 * --------------------------------------------------*/ 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 --------------------------------------------------*/ 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 --------------------------------------------------*/ 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 --------------------------------------------------*/ 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 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 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 --------------------------------------------------*/ 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 --------------------------------------------------*/ 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 --------------------------------------------------*/ 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 --------------------------------------------------*/ 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 --------------------------------------------------*/ 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 --------------------------------------------------*/ 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 --------------------------------------------------*/ 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 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 --------------------------------------------------*/ 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 --------------------------------------------------*/ 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 --------------------------------------------------*/ 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 --------------------------------------------------*/ 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 --------------------------------------------------*/ 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# 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 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 --------------------------------------------------*/ 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 --------------------------------------------------*/ 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 --------------------------------------------------*/ 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 --------------------------------------------------*/ 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 --------------------------------------------------*/ 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 --------------------------------------------------*/ 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# 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# 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# 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# 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 --------------------------------------------------*/ 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 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 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 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 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