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