1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 #include "precompiled_svx.hxx" 25 #ifndef _NBDTMG_HXX 26 #include <svx/nbdtmg.hxx> 27 #endif 28 #ifndef _SVX_SVXIDS_HRC 29 #include <svx/svxids.hrc> 30 #endif 31 #ifndef _SV_SVAPP_HXX 32 #include <vcl/svapp.hxx> 33 #endif 34 #ifndef _SFXITEMSET_HXX 35 #include <svl/itemset.hxx> 36 #endif 37 #ifndef _SFXREQUEST_HXX 38 #include <sfx2/request.hxx> 39 #endif 40 #ifndef _SFXSTRITEM_HXX 41 #include <svl/stritem.hxx> 42 #endif 43 #ifndef _UNO_LINGU_HXX 44 #include <editeng/unolingu.hxx> 45 #endif 46 #ifndef _CTRLTOOL_HXX 47 #include <svtools/ctrltool.hxx> 48 #endif 49 #ifndef _SFX_OBJSH_HXX 50 #include <sfx2/objsh.hxx> 51 #endif 52 #ifndef _SVX_FLSTITEM_HXX 53 #include <editeng/flstitem.hxx> 54 #endif 55 #ifndef _SFXITEMPOOL_HXX 56 #include <svl/itempool.hxx> 57 #endif 58 #ifndef _SV_OUTDEV_HXX 59 #include <vcl/outdev.hxx> 60 #endif 61 #ifndef _GALLERY_HXX_ 62 #include <svx/gallery.hxx> 63 #endif 64 #ifndef _SVX_BRSHITEM_HXX 65 #include <editeng/brshitem.hxx> 66 #endif 67 #include <svx/dialmgr.hxx> 68 #ifndef _SVX_DIALOGS_HRC 69 #include <svx/dialogs.hrc> 70 #endif 71 #ifndef _SV_GRAPH_HXX 72 #include <vcl/graph.hxx> 73 #endif 74 75 #include <unotools/streamwrap.hxx> 76 #include <unotools/ucbstreamhelper.hxx> 77 #include <unotools/pathoptions.hxx> 78 #include <editeng/eeitem.hxx> 79 80 #include <com/sun/star/text/HoriOrientation.hpp> 81 #include <com/sun/star/text/VertOrientation.hpp> 82 #include <com/sun/star/text/RelOrientation.hpp> 83 #include <com/sun/star/style/NumberingType.hpp> 84 #include <com/sun/star/lang/XMultiServiceFactory.hpp> 85 #include <com/sun/star/container/XIndexAccess.hpp> 86 #include <com/sun/star/text/XDefaultNumberingProvider.hpp> 87 #include <com/sun/star/text/XNumberingFormatter.hpp> 88 #include <com/sun/star/beans/PropertyValue.hpp> 89 #include <comphelper/processfactory.hxx> 90 #include <com/sun/star/text/XNumberingTypeInfo.hpp> 91 92 using namespace com::sun::star; 93 using namespace com::sun::star::uno; 94 using namespace com::sun::star::beans; 95 using namespace com::sun::star::lang; 96 using namespace com::sun::star::text; 97 using namespace com::sun::star::container; 98 using namespace com::sun::star::style; 99 using rtl::OUString; 100 101 namespace svx { namespace sidebar { 102 #define NUM_TYPE_MEMBER 4 103 #define NUM_VALUSET_COUNT 16 104 #define MAX_VALUESET_GRAPHIC 30 105 106 typedef NumSettings_Impl* NumSettings_ImplPtr; 107 SV_DECL_PTRARR_DEL(NumSettingsArr_Impl,NumSettings_ImplPtr,8,4) 108 SV_IMPL_PTRARR( NumSettingsArr_Impl, NumSettings_ImplPtr ) 109 110 typedef NumberSettings_Impl* NumberSettings_ImplPtr; 111 SV_DECL_PTRARR_DEL(NumberSettingsArr_Impl,NumberSettings_ImplPtr,8,4) 112 SV_IMPL_PTRARR( NumberSettingsArr_Impl, NumberSettings_ImplPtr ) 113 114 Font& lcl_GetDefaultBulletFont() 115 { 116 static sal_Bool bInit = 0; 117 static Font aDefBulletFont( UniString::CreateFromAscii( 118 RTL_CONSTASCII_STRINGPARAM( "StarSymbol" ) ), 119 String(), Size( 0, 14 ) ); 120 if(!bInit) 121 { 122 aDefBulletFont.SetCharSet( RTL_TEXTENCODING_SYMBOL ); 123 aDefBulletFont.SetFamily( FAMILY_DONTKNOW ); 124 aDefBulletFont.SetPitch( PITCH_DONTKNOW ); 125 aDefBulletFont.SetWeight( WEIGHT_DONTKNOW ); 126 aDefBulletFont.SetTransparent( sal_True ); 127 bInit = sal_True; 128 } 129 return aDefBulletFont; 130 } 131 132 static const sal_Unicode aDefaultBulletTypes[] = 133 { 134 0x2022, 135 0x25cf, 136 0xe00c, 137 0xe00a, 138 0x2794, 139 0x27a2, 140 0x2717, 141 0x2714 142 }; 143 144 static const sal_Unicode aDefaultRTLBulletTypes[] = 145 { 146 0x2022, 147 0x25cf, 148 0xe00c, 149 0xe00a, 150 0x25c4, 151 0x272b, 152 0x2717, 153 0x2714 154 }; 155 156 static const sal_Char sNumberingType[] = "NumberingType"; 157 static const sal_Char sValue[] = "Value"; 158 static const sal_Char sParentNumbering[] = "ParentNumbering"; 159 static const sal_Char sPrefix[] = "Prefix"; 160 static const sal_Char sSuffix[] = "Suffix"; 161 static const sal_Char sBulletChar[] = "BulletChar"; 162 static const sal_Char sBulletFontName[] = "BulletFontName"; 163 164 NumSettings_ImplPtr lcl_CreateNumberingSettingsPtr(const Sequence<PropertyValue>& rLevelProps) 165 { 166 const PropertyValue* pValues = rLevelProps.getConstArray(); 167 NumSettings_ImplPtr pNew = new NumSettings_Impl; 168 for(sal_Int32 j = 0; j < rLevelProps.getLength(); j++) 169 { 170 if(pValues[j].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sNumberingType))) 171 pValues[j].Value >>= pNew->nNumberType; 172 else if(pValues[j].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sPrefix))) 173 pValues[j].Value >>= pNew->sPrefix; 174 else if(pValues[j].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sSuffix))) 175 pValues[j].Value >>= pNew->sSuffix; 176 else if(pValues[j].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sParentNumbering))) 177 pValues[j].Value >>= pNew->nParentNumbering; 178 else if(pValues[j].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sBulletChar))) 179 pValues[j].Value >>= pNew->sBulletChar; 180 else if(pValues[j].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sBulletFontName))) 181 pValues[j].Value >>= pNew->sBulletFont; 182 } 183 const sal_Unicode cLocalPrefix = pNew->sPrefix.getLength() ? pNew->sPrefix.getStr()[0] : 0; 184 const sal_Unicode cLocalSuffix = pNew->sSuffix.getLength() ? pNew->sSuffix.getStr()[0] : 0; 185 String aEmptyStr; 186 if( cLocalPrefix == ' ') pNew->sPrefix=aEmptyStr; 187 if( cLocalSuffix == ' ') pNew->sSuffix=aEmptyStr; 188 return pNew; 189 } 190 191 sal_uInt16 NBOTypeMgrBase:: IsSingleLevel(sal_uInt16 nCurLevel) 192 { 193 sal_uInt16 nLv = (sal_uInt16)0xFFFF; 194 sal_uInt16 nCount = 0; 195 sal_uInt16 nMask = 1; 196 for( sal_uInt16 i = 0; i < SVX_MAX_NUM; i++ ) 197 { 198 if(nCurLevel & nMask) 199 { 200 nCount++; 201 nLv=i; 202 } 203 nMask <<= 1 ; 204 } 205 206 if ( nCount == 1) 207 return nLv; 208 else 209 return (sal_uInt16)0xFFFF; 210 } 211 212 void NBOTypeMgrBase::StoreBulCharFmtName_impl() { 213 if ( pSet ) 214 { 215 SfxAllItemSet aSet(*pSet); 216 SFX_ITEMSET_ARG(&aSet,pBulletCharFmt,SfxStringItem,SID_BULLET_CHAR_FMT,sal_False); 217 218 if ( pBulletCharFmt ) 219 { 220 aNumCharFmtName = String(pBulletCharFmt->GetValue()); 221 } 222 } 223 } 224 String NBOTypeMgrBase::GetBulCharFmtName() 225 { 226 return aNumCharFmtName; 227 } 228 void NBOTypeMgrBase::ImplLoad(String filename) 229 { 230 bIsLoading = true; 231 SfxMapUnit eOldCoreUnit=eCoreUnit; 232 eCoreUnit = SFX_MAPUNIT_100TH_MM; 233 INetURLObject aFile( SvtPathOptions().GetPalettePath() ); 234 aFile.Append( filename); 235 SvStream* pIStm = ::utl::UcbStreamHelper::CreateStream( aFile.GetMainURL( INetURLObject::NO_DECODE ), STREAM_READ ); 236 if( pIStm ) { 237 sal_uInt32 nVersion; 238 sal_Int32 nNumIndex; 239 *pIStm >> nVersion; 240 if (nVersion==DEFAULT_NUMBERING_CACHE_FORMAT_VERSION) // first version 241 { 242 *pIStm >> nNumIndex; 243 sal_uInt16 mLevel = 0x1; 244 while (nNumIndex>=0 && nNumIndex<DEFAULT_NUM_VALUSET_COUNT) { 245 SvxNumRule aNum(*pIStm); 246 // bullet color in font properties is not stored correctly. Need set transparency bits manually 247 for(sal_uInt16 i = 0; i < aNum.GetLevelCount(); i++) 248 { 249 SvxNumberFormat aFmt(aNum.GetLevel(i)); 250 if (aFmt.GetBulletFont()) { 251 Font aFont(*aFmt.GetBulletFont()); 252 Color c=aFont.GetColor(); 253 c.SetTransparency(0xFF); 254 aFont.SetColor(c); 255 aFmt.SetBulletFont(&aFont); 256 aNum.SetLevel(i, aFmt); 257 } 258 } 259 RelplaceNumRule(aNum,nNumIndex,mLevel); 260 *pIStm >> nNumIndex; 261 } 262 delete pIStm; 263 } 264 } 265 eCoreUnit = eOldCoreUnit; 266 bIsLoading = false; 267 } 268 void NBOTypeMgrBase::ImplStore(String filename) 269 { 270 if (bIsLoading) return; 271 SfxMapUnit eOldCoreUnit=eCoreUnit; 272 eCoreUnit = SFX_MAPUNIT_100TH_MM; 273 INetURLObject aFile( SvtPathOptions().GetPalettePath() ); 274 aFile.Append( filename); 275 SvStream* pOStm = ::utl::UcbStreamHelper::CreateStream( aFile.GetMainURL( INetURLObject::NO_DECODE ), STREAM_WRITE ); 276 if( pOStm ) { 277 sal_uInt32 nVersion; 278 sal_Int32 nNumIndex; 279 nVersion = DEFAULT_NUMBERING_CACHE_FORMAT_VERSION; 280 *pOStm << nVersion; 281 for(sal_Int32 nItem = 0; nItem < DEFAULT_NUM_VALUSET_COUNT; nItem++ ) { 282 if (IsCustomized(nItem)) { 283 SvxNumRule aDefNumRule( NUM_BULLET_REL_SIZE|NUM_CONTINUOUS|NUM_BULLET_COLOR|NUM_CHAR_TEXT_DISTANCE|NUM_SYMBOL_ALIGNMENT,10, sal_False , 284 SVX_RULETYPE_NUMBERING,SvxNumberFormat::LABEL_ALIGNMENT); 285 sal_uInt16 mLevel = 0x1; 286 *pOStm << nItem; 287 ApplyNumRule(aDefNumRule,nItem,mLevel,false,true); 288 aDefNumRule.Store(*pOStm); 289 } 290 } 291 nNumIndex = -1; 292 *pOStm << nNumIndex; // write end flag 293 delete pOStm; 294 } 295 eCoreUnit = eOldCoreUnit; 296 } 297 298 void NBOTypeMgrBase::StoreMapUnit_impl() { 299 if ( pSet ) 300 { 301 const SfxPoolItem* pItem; 302 SfxItemState eState = pSet->GetItemState(SID_ATTR_NUMBERING_RULE, sal_False, &pItem); 303 if(eState == SFX_ITEM_SET) 304 { 305 eCoreUnit = pSet->GetPool()->GetMetric(pSet->GetPool()->GetWhich(SID_ATTR_NUMBERING_RULE)); 306 } else { 307 // sd use different sid for numbering rule 308 eState = pSet->GetItemState(EE_PARA_NUMBULLET, sal_False, &pItem); 309 if(eState == SFX_ITEM_SET) 310 { 311 eCoreUnit = pSet->GetPool()->GetMetric(pSet->GetPool()->GetWhich(EE_PARA_NUMBULLET)); 312 } 313 } 314 } 315 } 316 SfxMapUnit NBOTypeMgrBase::GetMapUnit() 317 { 318 return eCoreUnit; 319 } 320 /*************************************************************************************************** 321 **********************Character Bullet Type lib********************************************************** 322 ****************************************************************************************************/ 323 BulletsTypeMgr* BulletsTypeMgr::_instance = 0; 324 BulletsSettings_Impl* BulletsTypeMgr::pActualBullets[] ={0,0,0,0,0,0,0,0}; 325 sal_Unicode BulletsTypeMgr::aDynamicBulletTypes[]={' ',' ',' ',' ',' ',' ',' ',' '}; 326 sal_Unicode BulletsTypeMgr::aDynamicRTLBulletTypes[]={' ',' ',' ',' ',' ',' ',' ',' '}; 327 328 BulletsTypeMgr::BulletsTypeMgr(const NBOType aType): 329 NBOTypeMgrBase(aType) 330 { 331 Init(); 332 } 333 334 BulletsTypeMgr::BulletsTypeMgr(const NBOType aType,const SfxItemSet* pArg): 335 NBOTypeMgrBase(aType,pArg) 336 { 337 Init(); 338 } 339 340 BulletsTypeMgr::BulletsTypeMgr(const BulletsTypeMgr& aTypeMgr): 341 NBOTypeMgrBase(aTypeMgr) 342 { 343 for (sal_uInt16 i=0;i<DEFAULT_BULLET_TYPES;i++) 344 { 345 pActualBullets[i]->bIsCustomized = aTypeMgr.pActualBullets[i]->bIsCustomized; 346 pActualBullets[i]->cBulletChar = aTypeMgr.pActualBullets[i]->cBulletChar; 347 pActualBullets[i]->aFont = aTypeMgr.pActualBullets[i]->aFont; 348 pActualBullets[i]->sDescription = aTypeMgr. pActualBullets[i]->sDescription; 349 pActualBullets[i]->eType = aTypeMgr. pActualBullets[i]->eType; 350 } 351 } 352 void BulletsTypeMgr::Init() 353 { 354 Font& rActBulletFont = lcl_GetDefaultBulletFont(); 355 String sName = rActBulletFont.GetName(); 356 if( Application::GetSettings().GetLayoutRTL() ) 357 { 358 for (sal_uInt16 i=0;i<DEFAULT_BULLET_TYPES;i++) 359 { 360 pActualBullets[i] = new BulletsSettings_Impl(eNBType::BULLETS); 361 pActualBullets[i]->cBulletChar = aDefaultRTLBulletTypes[i]; 362 pActualBullets[i]->aFont = rActBulletFont; 363 if (i==4 || i==5) 364 pActualBullets[i]->sDescription = SVX_RESSTR( RID_SVXSTR_BULLET_RTL_DESCRIPTION_4 - 4 + i ); 365 else 366 pActualBullets[i]->sDescription = SVX_RESSTR( RID_SVXSTR_BULLET_DESCRIPTION_0 + i ); 367 } 368 }else 369 { 370 for (sal_uInt16 i=0;i<DEFAULT_BULLET_TYPES;i++) 371 { 372 pActualBullets[i] = new BulletsSettings_Impl(eNBType::BULLETS); 373 pActualBullets[i]->cBulletChar = aDefaultBulletTypes[i]; 374 pActualBullets[i]->aFont =rActBulletFont; 375 pActualBullets[i]->sDescription = SVX_RESSTR( RID_SVXSTR_BULLET_DESCRIPTION_0 + i ); 376 } 377 } 378 } 379 sal_uInt16 BulletsTypeMgr::GetNBOIndexForNumRule(SvxNumRule& aNum,sal_uInt16 mLevel,sal_uInt16 nFromIndex) 380 { 381 if ( mLevel == (sal_uInt16)0xFFFF || mLevel == 0) 382 return (sal_uInt16)0xFFFF; 383 //if ( !lcl_IsNumFmtSet(pNR, mLevel) ) return (sal_uInt16)0xFFFF; 384 385 sal_uInt16 nActLv = IsSingleLevel(mLevel); 386 387 if ( nActLv == (sal_uInt16)0xFFFF ) 388 return (sal_uInt16)0xFFFF; 389 390 SvxNumberFormat aFmt(aNum.GetLevel(nActLv)); 391 sal_Unicode cChar = aFmt.GetBulletChar(); 392 //sal_uInt16 nLength = 0; 393 /*if( Application::GetSettings().GetLayoutRTL() ) 394 { 395 nLength = sizeof(aDynamicRTLBulletTypes)/sizeof(sal_Unicode); 396 for(sal_uInt16 i = 0; i < nLength; i++) 397 { 398 if ( cChar == aDynamicRTLBulletTypes[i] || 399 (cChar == 9830 && 57356 == aDynamicRTLBulletTypes[i]) || 400 (cChar == 9632 && 57354 == aDynamicRTLBulletTypes[i]) ) 401 { 402 return i+1; 403 } 404 } 405 } else 406 { 407 nLength = sizeof(aDynamicBulletTypes)/sizeof(sal_Unicode); 408 for(sal_uInt16 i = 0; i < nLength; i++) 409 { 410 if ( cChar == aDynamicBulletTypes[i] || 411 (cChar == 9830 && 57356 == aDynamicBulletTypes[i]) || 412 (cChar == 9632 && 57354 == aDynamicBulletTypes[i]) ) 413 { 414 return i+1; 415 } 416 } 417 }*/ 418 //nLength = sizeof(pActualBullets)/sizeof(BulletsSettings_Impl); 419 for(sal_uInt16 i = nFromIndex; i < DEFAULT_BULLET_TYPES; i++) 420 { 421 if ( (cChar == pActualBullets[i]->cBulletChar|| 422 (cChar == 9830 && 57356 == pActualBullets[i]->cBulletChar) || 423 (cChar == 9632 && 57354 == pActualBullets[i]->cBulletChar)))// && pFont && (pFont->GetName().CompareTo(pActualBullets[i]->aFont.GetName())==COMPARE_EQUAL)) 424 { 425 return i+1; 426 } 427 } 428 429 return (sal_uInt16)0xFFFF; 430 } 431 432 sal_Bool BulletsTypeMgr::RelplaceNumRule(SvxNumRule& aNum,sal_uInt16 nIndex,sal_uInt16 mLevel) 433 { 434 if ( mLevel == (sal_uInt16)0xFFFF || mLevel == 0) 435 return sal_False; 436 437 if ( GetNBOIndexForNumRule(aNum,mLevel) != (sal_uInt16)0xFFFF ) 438 return sal_False; 439 440 sal_uInt16 nActLv = IsSingleLevel(mLevel); 441 442 if ( nActLv == (sal_uInt16)0xFFFF ) 443 return sal_False; 444 445 SvxNumberFormat aFmt(aNum.GetLevel(nActLv)); 446 sal_Unicode cChar = aFmt.GetBulletChar(); 447 const Font* pFont = aFmt.GetBulletFont(); 448 //sal_uInt16 nLength = 0; 449 /*if( Application::GetSettings().GetLayoutRTL() ) 450 { 451 nLength = sizeof(aDynamicRTLBulletTypes)/sizeof(sal_Unicode); 452 453 if ( nIndex >= nLength ) 454 return sal_False; 455 456 aDynamicRTLBulletTypes[nIndex] = cChar; 457 } else 458 { 459 nLength = sizeof(aDynamicBulletTypes)/sizeof(sal_Unicode); 460 461 if ( nIndex >= nLength ) 462 return sal_False; 463 464 aDynamicBulletTypes[nIndex] = cChar; 465 }*/ 466 //nLength = sizeof(pActualBullets)/sizeof(BulletsSettings_Impl); 467 if ( nIndex >= DEFAULT_BULLET_TYPES ) 468 return sal_False; 469 470 pActualBullets[nIndex]->cBulletChar = cChar; 471 if ( pFont ) 472 pActualBullets[nIndex]->aFont = *pFont; 473 pActualBullets[nIndex]->bIsCustomized = sal_True; 474 475 String aStrFromRES = String(SVX_RESSTR( RID_SVXSTR_NUMBULLET_CUSTOM_BULLET_DESCRIPTION)); 476 String aReplace = String::CreateFromAscii("%LIST_NUM"); 477 String sNUM = String::CreateFromInt32( nIndex + 1 ); 478 aStrFromRES.SearchAndReplace(aReplace,sNUM); 479 pActualBullets[nIndex]->sDescription = aStrFromRES; 480 481 return sal_True; 482 } 483 484 sal_Bool BulletsTypeMgr::ApplyNumRule(SvxNumRule& aNum,sal_uInt16 nIndex,sal_uInt16 mLevel,sal_Bool /* isDefault */,sal_Bool isResetSize) 485 { 486 //if ( mLevel == (sal_uInt16)0xFFFF ) 487 // return sal_False; 488 489 sal_Unicode cChar; 490 //sal_uInt16 nLength = 0; 491 /*if( Application::GetSettings().GetLayoutRTL() ) 492 { 493 nLength = sizeof(aDynamicRTLBulletTypes)/sizeof(sal_Unicode); 494 495 if ( nIndex >= nLength ) 496 return sal_False; 497 498 cChar = aDynamicRTLBulletTypes[nIndex]; 499 }else 500 { 501 nLength = sizeof(aDynamicBulletTypes)/sizeof(sal_Unicode); 502 503 if ( nIndex >= nLength ) 504 return sal_False; 505 506 cChar = aDynamicBulletTypes[nIndex]; 507 }*/ 508 //nLength = sizeof(pActualBullets)/sizeof(BulletsSettings_Impl); 509 if ( nIndex >= DEFAULT_BULLET_TYPES ) 510 return sal_False; 511 cChar = pActualBullets[nIndex]->cBulletChar; 512 //Font& rActBulletFont = lcl_GetDefaultBulletFont(); 513 Font rActBulletFont = pActualBullets[nIndex]->aFont; 514 515 sal_uInt16 nMask = 1; 516 String sBulletCharFmtName = GetBulCharFmtName(); 517 for(sal_uInt16 i = 0; i < aNum.GetLevelCount(); i++) 518 { 519 if(mLevel & nMask) 520 { 521 SvxNumberFormat aFmt(aNum.GetLevel(i)); 522 aFmt.SetNumberingType( SVX_NUM_CHAR_SPECIAL ); 523 aFmt.SetBulletFont(&rActBulletFont); 524 aFmt.SetBulletChar(cChar ); 525 aFmt.SetCharFmtName(sBulletCharFmtName); 526 if (isResetSize) aFmt.SetBulletRelSize(45); 527 aNum.SetLevel(i, aFmt); 528 } 529 nMask <<= 1; 530 } 531 532 return sal_True; 533 } 534 535 String BulletsTypeMgr::GetDescription(sal_uInt16 nIndex,sal_Bool /* isDefault */) 536 { 537 String sRet; 538 //sal_uInt16 nLength = 0; 539 //nLength = sizeof(pActualBullets)/sizeof(BulletsSettings_Impl); 540 541 if ( nIndex >= DEFAULT_BULLET_TYPES ) 542 return sRet; 543 else 544 sRet = pActualBullets[nIndex]->sDescription; 545 546 return sRet; 547 } 548 sal_Bool BulletsTypeMgr::IsCustomized(sal_uInt16 nIndex) 549 { 550 sal_Bool bRet = sal_False; 551 //sal_uInt16 nLength = 0; 552 //nLength = sizeof(pActualBullets)/sizeof(BulletsSettings_Impl); 553 554 if ( nIndex >= DEFAULT_BULLET_TYPES ) 555 bRet = sal_False; 556 else 557 bRet = pActualBullets[nIndex]->bIsCustomized; 558 559 return bRet; 560 } 561 562 sal_Unicode BulletsTypeMgr::GetBulChar(sal_uInt16 nIndex) 563 { 564 sal_Unicode cChar; 565 //sal_uInt16 nLength = 0; 566 //nLength = sizeof(pActualBullets)/sizeof(BulletsSettings_Impl); 567 568 if ( nIndex >= DEFAULT_BULLET_TYPES ) 569 cChar = ' '; 570 else 571 cChar = pActualBullets[nIndex]->cBulletChar; 572 573 /*if( Application::GetSettings().GetLayoutRTL() ) 574 { 575 nLength = sizeof(aDynamicRTLBulletTypes)/sizeof(sal_Unicode); 576 577 if ( nIndex >= nLength ) 578 cChar = ' '; 579 else 580 cChar = aDynamicRTLBulletTypes[nIndex]; 581 }else 582 { 583 nLength = sizeof(aDynamicBulletTypes)/sizeof(sal_Unicode); 584 585 if ( nIndex >= nLength ) 586 cChar = ' '; 587 else 588 cChar = aDynamicBulletTypes[nIndex]; 589 }*/ 590 591 return cChar; 592 } 593 Font BulletsTypeMgr::GetBulCharFont(sal_uInt16 nIndex) 594 { 595 Font aRet; 596 if ( nIndex >= DEFAULT_BULLET_TYPES ) 597 aRet = lcl_GetDefaultBulletFont(); 598 else 599 aRet = pActualBullets[nIndex]->aFont; 600 601 return aRet; 602 } 603 /*************************************************************************************************** 604 **********************Graphic Bullet Type lib*********************************************************** 605 ****************************************************************************************************/ 606 GraphicBulletsTypeMgr* GraphicBulletsTypeMgr::_instance = 0; 607 GraphicBulletsTypeMgr::GraphicBulletsTypeMgr(const NBOType aType): 608 NBOTypeMgrBase(aType) 609 { 610 Init(); 611 } 612 613 GraphicBulletsTypeMgr::GraphicBulletsTypeMgr(const NBOType aType,const SfxItemSet* pArg): 614 NBOTypeMgrBase(aType,pArg) 615 { 616 Init(); 617 } 618 GraphicBulletsTypeMgr::GraphicBulletsTypeMgr(const GraphicBulletsTypeMgr& aTypeMgr): 619 NBOTypeMgrBase(aTypeMgr) 620 { 621 for (sal_uInt16 i=0;i< aTypeMgr.aGrfDataLst.Count();i++) 622 { 623 GrfBulDataRelation* pEntry = new GrfBulDataRelation(eNBType::GRAPHICBULLETS); 624 GrfBulDataRelation* pSrcEntry = (GrfBulDataRelation*)(aTypeMgr.aGrfDataLst.GetObject(i)); 625 if ( pEntry && pSrcEntry) 626 { 627 pEntry->bIsCustomized = pSrcEntry->bIsCustomized; 628 pEntry->nTabIndex = pSrcEntry->nTabIndex; 629 pEntry->nGallaryIndex = pSrcEntry->nGallaryIndex; 630 pEntry->sGrfName = pSrcEntry->sGrfName; 631 pEntry->sDescription = pSrcEntry->sDescription; 632 aGrfDataLst.Insert( pEntry, LIST_APPEND ); 633 } 634 else 635 delete pEntry; 636 } 637 } 638 void GraphicBulletsTypeMgr::Init() 639 { 640 List aGrfNames; 641 GalleryExplorer::FillObjList(GALLERY_THEME_BULLETS, aGrfNames); 642 for(sal_uInt16 i = 0; i < aGrfNames.Count(); i++) 643 { 644 String* pGrfNm = (String*) aGrfNames.GetObject(i); 645 INetURLObject aObj(*pGrfNm); 646 if(aObj.GetProtocol() == INET_PROT_FILE) 647 *pGrfNm = aObj.PathToFileName(); 648 649 GrfBulDataRelation* pEntry = new GrfBulDataRelation(eNBType::GRAPHICBULLETS); 650 pEntry->nTabIndex = i+1; 651 pEntry->nGallaryIndex = i; 652 pEntry->sGrfName = *pGrfNm; 653 654 if( i < MAX_VALUESET_GRAPHIC ) 655 { 656 pEntry->sDescription = SVX_RESSTR( RID_SVXSTR_GRAPHICS_DESCRIPTIONS + i ); 657 }else 658 { 659 pEntry->sDescription = *pGrfNm; 660 } 661 662 aGrfDataLst.Insert( pEntry, LIST_APPEND ); 663 } 664 } 665 sal_uInt16 GraphicBulletsTypeMgr::GetNBOIndexForNumRule(SvxNumRule& aNum,sal_uInt16 mLevel,sal_uInt16 /* nFromIndex */) 666 { 667 if ( mLevel == (sal_uInt16)0xFFFF || mLevel == 0) 668 return (sal_uInt16)0xFFFF; 669 670 sal_uInt16 nActLv = IsSingleLevel(mLevel); 671 672 if ( nActLv == (sal_uInt16)0xFFFF ) 673 return (sal_uInt16)0xFFFF; 674 675 SvxNumberFormat aFmt(aNum.GetLevel(nActLv)); 676 const SvxBrushItem* pBrsh = aFmt.GetBrush(); 677 const Graphic* pGrf = 0; 678 if ( pBrsh ) 679 pGrf = pBrsh->GetGraphic(); 680 681 if ( pGrf ) 682 { 683 Graphic aGraphic; 684 for(sal_uInt16 i=0;i<aGrfDataLst.Count();i++) 685 { 686 GrfBulDataRelation* pEntry = (GrfBulDataRelation*) aGrfDataLst.GetObject(i); 687 sal_Bool bExist = sal_False; 688 if ( pEntry) // && pEntry->sGrfName.CompareTo(*pGrfName)==COMPARE_EQUAL ) 689 bExist = GalleryExplorer::GetGraphicObj(GALLERY_THEME_BULLETS, pEntry->nGallaryIndex,&aGraphic); 690 if (bExist) { 691 Bitmap aSum=pGrf->GetBitmap(); 692 Bitmap aSum1=aGraphic.GetBitmap(); 693 if (aSum.IsEqual(aSum1)) 694 return pEntry->nTabIndex; 695 } 696 } 697 } 698 699 return (sal_uInt16)0xFFFF; 700 } 701 702 sal_Bool GraphicBulletsTypeMgr::RelplaceNumRule(SvxNumRule& aNum,sal_uInt16 nIndex,sal_uInt16 mLevel) 703 { 704 if ( mLevel == (sal_uInt16)0xFFFF || mLevel > aNum.GetLevelCount() || mLevel == 0) 705 return sal_False; 706 707 if ( GetNBOIndexForNumRule(aNum,mLevel) != (sal_uInt16)0xFFFF ) 708 return sal_False; 709 710 if ( nIndex >= aGrfDataLst.Count() ) 711 return sal_False; 712 713 sal_uInt16 nActLv = IsSingleLevel(mLevel); 714 if ( nActLv == (sal_uInt16)0xFFFF ) 715 return sal_False; 716 717 SvxNumberFormat aFmt(aNum.GetLevel(nActLv)); 718 const SvxBrushItem* pBrsh = aFmt.GetBrush(); 719 const Graphic* pGrf = 0; 720 if ( pBrsh ) 721 pGrf = pBrsh->GetGraphic(); 722 else 723 return sal_False; 724 725 String sEmpty; 726 if ( pGrf ) 727 { 728 const String* pGrfName = pBrsh->GetGraphicLink(); 729 //String* pGrfName = (String*)(pBrsh->GetGraphicLink()); 730 GrfBulDataRelation* pEntry = (GrfBulDataRelation*) aGrfDataLst.GetObject(nIndex); 731 if ( pGrfName ) 732 pEntry->sGrfName = *pGrfName; 733 //pEntry->sDescription = sEmpty; 734 pEntry->nGallaryIndex = (sal_uInt16)0xFFFF; 735 pEntry->bIsCustomized = sal_True; 736 String aStrFromRES = String(SVX_RESSTR( RID_SVXSTR_NUMBULLET_CUSTOM_BULLET_DESCRIPTION)); 737 String aReplace = String::CreateFromAscii("%LIST_NUM"); 738 String sNUM = String::CreateFromInt32( nIndex + 1 ); 739 aStrFromRES.SearchAndReplace(aReplace,sNUM); 740 pEntry->sDescription = aStrFromRES; 741 }else 742 { 743 return sal_False; 744 } 745 746 return sal_True; 747 } 748 749 sal_Bool GraphicBulletsTypeMgr::ApplyNumRule(SvxNumRule& aNum,sal_uInt16 nIndex,sal_uInt16 mLevel,sal_Bool /* isDefault */,sal_Bool /* isResetSize */) 750 { 751 //if ( mLevel == (sal_uInt16)0xFFFF ) 752 // return sal_False; 753 754 if ( nIndex >= aGrfDataLst.Count() ) 755 return sal_False; 756 757 String sGrfName; 758 GrfBulDataRelation* pEntry = (GrfBulDataRelation*) aGrfDataLst.GetObject(nIndex); 759 sGrfName= pEntry->sGrfName; 760 761 sal_uInt16 nMask = 1; 762 String aEmptyStr; 763 sal_uInt16 nSetNumberingType = SVX_NUM_BITMAP; 764 String sNumCharFmtName = GetBulCharFmtName(); 765 for(sal_uInt16 i = 0; i < aNum.GetLevelCount(); i++) 766 { 767 if(mLevel & nMask) 768 { 769 SvxNumberFormat aFmt(aNum.GetLevel(i)); 770 aFmt.SetNumberingType(nSetNumberingType); 771 aFmt.SetPrefix( aEmptyStr ); 772 aFmt.SetSuffix( aEmptyStr ); 773 aFmt.SetCharFmtName( sNumCharFmtName ); 774 775 Graphic aGraphic; 776 if(GalleryExplorer::GetGraphicObj( GALLERY_THEME_BULLETS, pEntry->nGallaryIndex, &aGraphic)) 777 { 778 Size aSize = SvxNumberFormat::GetGraphicSizeMM100(&aGraphic); 779 sal_Int16 eOrient = text::VertOrientation::LINE_CENTER; 780 aSize = OutputDevice::LogicToLogic(aSize, MAP_100TH_MM, (MapUnit)GetMapUnit()); 781 SvxBrushItem aBrush(aGraphic, GPOS_AREA, SID_ATTR_BRUSH ); 782 aFmt.SetGraphicBrush( &aBrush, &aSize, &eOrient ); 783 } 784 else // if(pGrfName) 785 aFmt.SetGraphic( sGrfName ); 786 787 aNum.SetLevel(i, aFmt); 788 } 789 nMask <<= 1 ; 790 } 791 792 return sal_True; 793 } 794 String GraphicBulletsTypeMgr::GetDescription(sal_uInt16 nIndex,sal_Bool /* isDefault */) 795 { 796 String sRet; 797 sal_uInt16 nLength = 0; 798 nLength = aGrfDataLst.Count() ; 799 800 if ( nIndex >= nLength ) 801 return sRet; 802 else 803 { 804 GrfBulDataRelation* pEntry = (GrfBulDataRelation*) aGrfDataLst.GetObject(nIndex); 805 if ( pEntry ) 806 { 807 sRet = pEntry->sDescription; 808 }; 809 } 810 return sRet; 811 } 812 sal_Bool GraphicBulletsTypeMgr::IsCustomized(sal_uInt16 nIndex) 813 { 814 sal_Bool bRet = sal_False; 815 816 sal_uInt16 nLength = 0; 817 nLength = aGrfDataLst.Count() ; 818 819 if ( nIndex >= nLength ) 820 return bRet; 821 else 822 { 823 GrfBulDataRelation* pEntry = (GrfBulDataRelation*) aGrfDataLst.GetObject(nIndex); 824 if ( pEntry ) 825 { 826 bRet = pEntry->bIsCustomized; 827 }; 828 } 829 830 return bRet; 831 } 832 String GraphicBulletsTypeMgr::GetGrfName(sal_uInt16 nIndex) 833 { 834 String sRet; 835 if ( nIndex < aGrfDataLst.Count() ) 836 { 837 GrfBulDataRelation* pEntry = (GrfBulDataRelation*) aGrfDataLst.GetObject(nIndex); 838 if ( pEntry ) 839 { 840 sRet = pEntry->sGrfName; 841 } 842 } 843 844 return sRet; 845 } 846 /*************************************************************************************************** 847 **********************Mix Bullets Type lib************************************************************** 848 ****************************************************************************************************/ 849 MixBulletsTypeMgr* MixBulletsTypeMgr::_instance = 0; 850 MixBulletsSettings_Impl* MixBulletsTypeMgr::pActualBullets[] ={0,0,0,0,0,0,0,0}; 851 MixBulletsSettings_Impl* MixBulletsTypeMgr::pDefaultActualBullets[] ={0,0,0,0,0,0,0,0}; 852 853 MixBulletsTypeMgr::MixBulletsTypeMgr(const NBOType aType): 854 NBOTypeMgrBase(aType) 855 { 856 Init(); 857 for(sal_Int32 nItem = 0; nItem < DEFAULT_BULLET_TYPES; nItem++ ) 858 { 859 pDefaultActualBullets[nItem] = pActualBullets[nItem]; 860 } 861 // Initialize the first time to store the default value. Then do it again for customized value 862 Init(); 863 ImplLoad(String::CreateFromAscii("standard.sya")); 864 } 865 866 MixBulletsTypeMgr::MixBulletsTypeMgr(const NBOType aType,const SfxItemSet* pArg): 867 NBOTypeMgrBase(aType,pArg) 868 { 869 Init(); 870 for(sal_Int32 nItem = 0; nItem < DEFAULT_BULLET_TYPES; nItem++ ) 871 { 872 pDefaultActualBullets[nItem] = pActualBullets[nItem]; 873 } 874 // Initialize the first time to store the default value. Then do it again for customized value 875 Init(); 876 ImplLoad(String::CreateFromAscii("standard.sya")); 877 } 878 879 MixBulletsTypeMgr::MixBulletsTypeMgr(const MixBulletsTypeMgr& aTypeMgr): 880 NBOTypeMgrBase(aTypeMgr) 881 { 882 for (sal_uInt16 i=0;i<DEFAULT_BULLET_TYPES;i++) 883 { 884 if ( aTypeMgr.pActualBullets[i]->eType == eNBType::BULLETS ) 885 { 886 pActualBullets[i]->eType = aTypeMgr.pActualBullets[i]->eType; 887 pActualBullets[i]->nIndex = aTypeMgr.pActualBullets[i]->nIndex; // Index in the tab page display 888 pActualBullets[i]->nIndexDefault = aTypeMgr.pActualBullets[i]->nIndexDefault; 889 pActualBullets[i]->pBullets = new BulletsSettings_Impl(eNBType::BULLETS) ; 890 ((BulletsSettings_Impl*)(pActualBullets[i]->pBullets))->cBulletChar = ((BulletsSettings_Impl*)(aTypeMgr.pActualBullets[i]->pBullets))->cBulletChar; 891 ((BulletsSettings_Impl*)(pActualBullets[i]->pBullets))->aFont = ((BulletsSettings_Impl*)(aTypeMgr.pActualBullets[i]->pBullets))->aFont; 892 ((BulletsSettings_Impl*)(pActualBullets[i]->pBullets))->sDescription = ((BulletsSettings_Impl*)(aTypeMgr.pActualBullets[i]->pBullets))->sDescription; 893 ((BulletsSettings_Impl*)(pActualBullets[i]->pBullets))->bIsCustomized = ((BulletsSettings_Impl*)(aTypeMgr.pActualBullets[i]->pBullets))->bIsCustomized; 894 ((BulletsSettings_Impl*)(pActualBullets[i]->pBullets))->eType = ((BulletsSettings_Impl*)(aTypeMgr.pActualBullets[i]->pBullets))->eType; 895 }else if ( aTypeMgr.pActualBullets[i]->eType == eNBType::GRAPHICBULLETS ) 896 { 897 pActualBullets[i]->eType = aTypeMgr.pActualBullets[i]->eType; 898 pActualBullets[i]->nIndex = aTypeMgr.pActualBullets[i]->nIndex; // Index in the tab page display 899 pActualBullets[i]->nIndexDefault = aTypeMgr.pActualBullets[i]->nIndexDefault; 900 pActualBullets[i]->pBullets = new GrfBulDataRelation(eNBType::GRAPHICBULLETS) ; 901 ((GrfBulDataRelation*)(pActualBullets[i]->pBullets))->sGrfName = ((GrfBulDataRelation*)(aTypeMgr.pActualBullets[i]->pBullets))->sGrfName; 902 ((GrfBulDataRelation*)(pActualBullets[i]->pBullets))->sDescription = ((GrfBulDataRelation*)(aTypeMgr.pActualBullets[i]->pBullets))->sDescription; 903 ((GrfBulDataRelation*)(pActualBullets[i]->pBullets))->bIsCustomized = ((GrfBulDataRelation*)(aTypeMgr.pActualBullets[i]->pBullets))->bIsCustomized; 904 ((GrfBulDataRelation*)(pActualBullets[i]->pBullets))->eType = ((GrfBulDataRelation*)(aTypeMgr.pActualBullets[i]->pBullets))->eType; 905 if ( ((GrfBulDataRelation*)(aTypeMgr.pActualBullets[i]->pBullets))->bIsCustomized && ((GrfBulDataRelation*)(aTypeMgr.pActualBullets[i]->pBullets))->pGrfObj != NULL) 906 { 907 ((GrfBulDataRelation*)(pActualBullets[i]->pBullets))->pGrfObj = ((GrfBulDataRelation*)(aTypeMgr.pActualBullets[i]->pBullets))->pGrfObj; 908 } 909 } 910 } 911 ImplLoad(String::CreateFromAscii("standard.sya")); 912 } 913 void MixBulletsTypeMgr::Init() 914 { 915 BulletsTypeMgr* pBTMgr = BulletsTypeMgr::GetInstance(); 916 if ( pBTMgr ) 917 { 918 // Index 1 919 pActualBullets[0] = new MixBulletsSettings_Impl(eNBType::BULLETS); 920 pActualBullets[0]->eType = eNBType::BULLETS; 921 pActualBullets[0]->nIndex = 0+1; // Index in the tab page display,decrease 1 to the index within arr 922 pActualBullets[0]->nIndexDefault = 2; // Index in the tab page display,decrease 1 to the index within arr 923 pActualBullets[0]->pBullets = new BulletsSettings_Impl(eNBType::BULLETS) ; 924 ((BulletsSettings_Impl*)(pActualBullets[0]->pBullets))->cBulletChar = pBTMgr->GetBulChar(pActualBullets[0]->nIndexDefault-1); 925 ((BulletsSettings_Impl*)(pActualBullets[0]->pBullets))->aFont = pBTMgr->GetBulCharFont(pActualBullets[0]->nIndexDefault-1); 926 ((BulletsSettings_Impl*)(pActualBullets[0]->pBullets))->sDescription = pBTMgr->GetDescription(pActualBullets[0]->nIndexDefault-1); 927 ((BulletsSettings_Impl*)(pActualBullets[0]->pBullets))->bIsCustomized = pBTMgr->IsCustomized(pActualBullets[0]->nIndexDefault-1); 928 ((BulletsSettings_Impl*)(pActualBullets[0]->pBullets))->eType = eNBType::BULLETS; 929 930 // Index 2 931 pActualBullets[1] = new MixBulletsSettings_Impl(eNBType::BULLETS); 932 pActualBullets[1]->eType = eNBType::BULLETS; 933 pActualBullets[1]->nIndex = 1+1; // Index in the tab page display,decrease 1 to the index within arr 934 pActualBullets[1]->nIndexDefault = 3; // Index in the tab page display,decrease 1 to the index within arr 935 pActualBullets[1]->pBullets = new BulletsSettings_Impl(eNBType::BULLETS) ; 936 ((BulletsSettings_Impl*)(pActualBullets[1]->pBullets))->cBulletChar = pBTMgr->GetBulChar(pActualBullets[1]->nIndexDefault-1); 937 ((BulletsSettings_Impl*)(pActualBullets[1]->pBullets))->aFont = pBTMgr->GetBulCharFont(pActualBullets[1]->nIndexDefault-1); 938 ((BulletsSettings_Impl*)(pActualBullets[1]->pBullets))->sDescription = pBTMgr->GetDescription(pActualBullets[1]->nIndexDefault-1); 939 ((BulletsSettings_Impl*)(pActualBullets[1]->pBullets))->bIsCustomized = pBTMgr->IsCustomized(pActualBullets[1]->nIndexDefault-1); 940 ((BulletsSettings_Impl*)(pActualBullets[1]->pBullets))->eType = eNBType::BULLETS; 941 942 // Index 3 943 pActualBullets[2] = new MixBulletsSettings_Impl(eNBType::BULLETS); 944 pActualBullets[2]->eType = eNBType::BULLETS; 945 pActualBullets[2]->nIndex = 2+1; // Index in the tab page display,decrease 1 to the index within arr 946 pActualBullets[2]->nIndexDefault = 4; // Index in the tab page display,decrease 1 to the index within arr 947 pActualBullets[2]->pBullets = new BulletsSettings_Impl(eNBType::BULLETS) ; 948 ((BulletsSettings_Impl*)(pActualBullets[2]->pBullets))->cBulletChar = pBTMgr->GetBulChar(pActualBullets[2]->nIndexDefault-1); 949 ((BulletsSettings_Impl*)(pActualBullets[2]->pBullets))->aFont = pBTMgr->GetBulCharFont(pActualBullets[2]->nIndexDefault-1); 950 ((BulletsSettings_Impl*)(pActualBullets[2]->pBullets))->sDescription = pBTMgr->GetDescription(pActualBullets[2]->nIndexDefault-1); 951 ((BulletsSettings_Impl*)(pActualBullets[2]->pBullets))->bIsCustomized = pBTMgr->IsCustomized(pActualBullets[2]->nIndexDefault-1); 952 ((BulletsSettings_Impl*)(pActualBullets[2]->pBullets))->eType = eNBType::BULLETS; 953 954 // Index 4 955 pActualBullets[3] = new MixBulletsSettings_Impl(eNBType::BULLETS); 956 pActualBullets[3]->eType = eNBType::BULLETS; 957 pActualBullets[3]->nIndex = 3+1; // Index in the tab page display,decrease 1 to the index within arr 958 pActualBullets[3]->nIndexDefault = 5; // Index in the tab page display,decrease 1 to the index within arr 959 pActualBullets[3]->pBullets = new BulletsSettings_Impl(eNBType::BULLETS) ; 960 ((BulletsSettings_Impl*)(pActualBullets[3]->pBullets))->cBulletChar = pBTMgr->GetBulChar(pActualBullets[3]->nIndexDefault-1); 961 ((BulletsSettings_Impl*)(pActualBullets[3]->pBullets))->aFont = pBTMgr->GetBulCharFont(pActualBullets[3]->nIndexDefault-1); 962 ((BulletsSettings_Impl*)(pActualBullets[3]->pBullets))->sDescription = pBTMgr->GetDescription(pActualBullets[3]->nIndexDefault-1); 963 ((BulletsSettings_Impl*)(pActualBullets[3]->pBullets))->bIsCustomized = pBTMgr->IsCustomized(pActualBullets[3]->nIndexDefault-1); 964 ((BulletsSettings_Impl*)(pActualBullets[3]->pBullets))->eType = eNBType::BULLETS; 965 966 // Index 5 967 pActualBullets[4] = new MixBulletsSettings_Impl(eNBType::BULLETS); 968 pActualBullets[4]->eType = eNBType::BULLETS; 969 pActualBullets[4]->nIndex = 4+1; // Index in the tab page display,decrease 1 to the index within arr 970 pActualBullets[4]->nIndexDefault = 6; // Index in the tab page display,decrease 1 to the index within arr 971 pActualBullets[4]->pBullets = new BulletsSettings_Impl(eNBType::BULLETS) ; 972 ((BulletsSettings_Impl*)(pActualBullets[4]->pBullets))->cBulletChar = pBTMgr->GetBulChar(pActualBullets[4]->nIndexDefault-1); 973 ((BulletsSettings_Impl*)(pActualBullets[4]->pBullets))->aFont = pBTMgr->GetBulCharFont(pActualBullets[4]->nIndexDefault-1); 974 ((BulletsSettings_Impl*)(pActualBullets[4]->pBullets))->sDescription = pBTMgr->GetDescription(pActualBullets[4]->nIndexDefault-1); 975 ((BulletsSettings_Impl*)(pActualBullets[4]->pBullets))->bIsCustomized = pBTMgr->IsCustomized(pActualBullets[4]->nIndexDefault-1); 976 ((BulletsSettings_Impl*)(pActualBullets[4]->pBullets))->eType = eNBType::BULLETS; 977 978 // Index 6 979 pActualBullets[5] = new MixBulletsSettings_Impl(eNBType::BULLETS); 980 pActualBullets[5]->eType = eNBType::BULLETS; 981 pActualBullets[5]->nIndex = 5+1; // Index in the tab page display,decrease 1 to the index within arr 982 pActualBullets[5]->nIndexDefault = 8; // Index in the tab page display,decrease 1 to the index within arr 983 pActualBullets[5]->pBullets = new BulletsSettings_Impl(eNBType::BULLETS) ; 984 ((BulletsSettings_Impl*)(pActualBullets[5]->pBullets))->cBulletChar = pBTMgr->GetBulChar(pActualBullets[5]->nIndexDefault-1); 985 ((BulletsSettings_Impl*)(pActualBullets[5]->pBullets))->aFont = pBTMgr->GetBulCharFont(pActualBullets[5]->nIndexDefault-1); 986 ((BulletsSettings_Impl*)(pActualBullets[5]->pBullets))->sDescription = pBTMgr->GetDescription(pActualBullets[5]->nIndexDefault-1); 987 ((BulletsSettings_Impl*)(pActualBullets[5]->pBullets))->bIsCustomized = pBTMgr->IsCustomized(pActualBullets[5]->nIndexDefault-1); 988 ((BulletsSettings_Impl*)(pActualBullets[5]->pBullets))->eType = eNBType::BULLETS; 989 } 990 991 GraphicBulletsTypeMgr* mGrfTMgr = GraphicBulletsTypeMgr::GetInstance(); 992 if ( mGrfTMgr ) 993 { 994 // Index 7 995 pActualBullets[6] = new MixBulletsSettings_Impl(eNBType::GRAPHICBULLETS); 996 pActualBullets[6]->eType = eNBType::GRAPHICBULLETS; 997 pActualBullets[6]->nIndex = 6+1; // Index in the tab page display,decrease 1 to the index within arr 998 pActualBullets[6]->nIndexDefault = 9; // Index in the tab page display,decrease 1 to the index within arr 999 pActualBullets[6]->pBullets = new GrfBulDataRelation(eNBType::GRAPHICBULLETS) ; 1000 ((GrfBulDataRelation*)(pActualBullets[6]->pBullets))->sGrfName = mGrfTMgr->GetGrfName(pActualBullets[6]->nIndexDefault); 1001 ((GrfBulDataRelation*)(pActualBullets[6]->pBullets))->sDescription = mGrfTMgr->GetDescription(pActualBullets[6]->nIndexDefault); 1002 ((GrfBulDataRelation*)(pActualBullets[6]->pBullets))->bIsCustomized = mGrfTMgr->IsCustomized(pActualBullets[6]->nIndexDefault); 1003 ((GrfBulDataRelation*)(pActualBullets[6]->pBullets))->eType = eNBType::GRAPHICBULLETS; 1004 1005 // Index 8 1006 pActualBullets[7] = new MixBulletsSettings_Impl(eNBType::GRAPHICBULLETS); 1007 pActualBullets[7]->eType = eNBType::GRAPHICBULLETS; 1008 pActualBullets[7]->nIndex = 7+1; // Index in the tab page display,decrease 1 to the index within arr 1009 pActualBullets[7]->nIndexDefault = 23; // Index in the tab page display,decrease 1 to the index within arr 1010 pActualBullets[7]->pBullets = new GrfBulDataRelation(eNBType::GRAPHICBULLETS) ; 1011 ((GrfBulDataRelation*)(pActualBullets[7]->pBullets))->sGrfName = mGrfTMgr->GetGrfName(pActualBullets[7]->nIndexDefault); 1012 ((GrfBulDataRelation*)(pActualBullets[7]->pBullets))->sDescription = mGrfTMgr->GetDescription(pActualBullets[7]->nIndexDefault); 1013 ((GrfBulDataRelation*)(pActualBullets[7]->pBullets))->bIsCustomized = mGrfTMgr->IsCustomized(pActualBullets[7]->nIndexDefault); 1014 ((GrfBulDataRelation*)(pActualBullets[7]->pBullets))->eType = eNBType::GRAPHICBULLETS; 1015 } 1016 1017 } 1018 sal_uInt16 MixBulletsTypeMgr::GetNBOIndexForNumRule(SvxNumRule& aNum,sal_uInt16 mLevel,sal_uInt16 nFromIndex) 1019 { 1020 if ( mLevel == (sal_uInt16)0xFFFF || mLevel == 0) 1021 return (sal_uInt16)0xFFFF; 1022 //if ( !lcl_IsNumFmtSet(pNR, mLevel) ) return (sal_uInt16)0xFFFF; 1023 1024 sal_uInt16 nActLv = IsSingleLevel(mLevel); 1025 1026 if ( nActLv == (sal_uInt16)0xFFFF ) 1027 return (sal_uInt16)0xFFFF; 1028 1029 SvxNumberFormat aFmt(aNum.GetLevel(nActLv)); 1030 sal_Int16 eNumType = aFmt.GetNumberingType(); 1031 if( eNumType == SVX_NUM_CHAR_SPECIAL) 1032 { 1033 sal_Unicode cChar = aFmt.GetBulletChar(); 1034 const Font* pFont = aFmt.GetBulletFont(); 1035 String sName = pFont?pFont->GetName():String(); 1036 1037 for(sal_uInt16 i = nFromIndex; i < DEFAULT_BULLET_TYPES; i++) 1038 { 1039 if ( pActualBullets[i]->eType == eNBType::BULLETS ) 1040 { 1041 String ssName = ((BulletsSettings_Impl*)(pActualBullets[i]->pBullets))->aFont.GetName(); 1042 if ( (cChar == ((BulletsSettings_Impl*)(pActualBullets[i]->pBullets))->cBulletChar|| 1043 (cChar == 9830 && 57356 == ((BulletsSettings_Impl*)(pActualBullets[i]->pBullets))->cBulletChar) || 1044 (cChar == 9632 && 57354 == ((BulletsSettings_Impl*)(pActualBullets[i]->pBullets))->cBulletChar)))//&& 1045 //(pFont && pFont->GetName().CompareTo(((BulletsSettings_Impl*)(pActualBullets[i]->pBullets))->aFont.GetName())==COMPARE_EQUAL) ) 1046 { 1047 return pActualBullets[i]->nIndex; 1048 } 1049 } 1050 } 1051 }else if ( (eNumType&(~LINK_TOKEN)) == SVX_NUM_BITMAP ) 1052 { 1053 const SvxBrushItem* pBrsh = aFmt.GetBrush(); 1054 const Graphic* pGrf = 0; 1055 if ( pBrsh ) 1056 pGrf = pBrsh->GetGraphic(); 1057 1058 if ( pGrf ) 1059 { 1060 for(sal_uInt16 i = nFromIndex; i < DEFAULT_BULLET_TYPES; i++) 1061 { 1062 if ( pActualBullets[i]->eType == eNBType::GRAPHICBULLETS ) 1063 { 1064 GrfBulDataRelation* pEntry = (GrfBulDataRelation*) (pActualBullets[i]->pBullets); 1065 //sal_Bool bExist = sal_False; 1066 if ( pEntry && pActualBullets[i]->nIndexDefault == (sal_uInt16)0xFFFF && pEntry->pGrfObj) 1067 { 1068 if ( pEntry->pGrfObj->GetBitmap().IsEqual(pGrf->GetBitmap())) 1069 { 1070 return pActualBullets[i]->nIndex; 1071 } 1072 }else { //if ( pEntry && pGrfName && pEntry->sGrfName.CompareTo(*pGrfName)==COMPARE_EQUAL ) 1073 //bExist = GalleryExplorer::GetGraphicObj(GALLERY_THEME_BULLETS, pActualBullets[i]->nIndexDefault-1,pSrGrf); 1074 Graphic aSrGrf; 1075 if (pEntry) 1076 GalleryExplorer::GetGraphicObj(GALLERY_THEME_BULLETS, pActualBullets[i]->nIndexDefault,&aSrGrf); 1077 Bitmap aSum=pGrf->GetBitmap(); 1078 Bitmap aSum1=aSrGrf.GetBitmap(); 1079 if (aSum.IsEqual(aSum1)) 1080 return pActualBullets[i]->nIndex; 1081 } 1082 } 1083 } 1084 } 1085 } 1086 1087 return (sal_uInt16)0xFFFF; 1088 } 1089 1090 sal_Bool MixBulletsTypeMgr::RelplaceNumRule(SvxNumRule& aNum,sal_uInt16 nIndex,sal_uInt16 mLevel) 1091 { 1092 if ( mLevel == (sal_uInt16)0xFFFF || mLevel == 0 || nIndex>=DEFAULT_BULLET_TYPES) 1093 return sal_False; 1094 1095 //if ( GetNBOIndexForNumRule(aNum,mLevel) != (sal_uInt16)0xFFFF ) 1096 // return sal_False; 1097 1098 sal_uInt16 nActLv = IsSingleLevel(mLevel); 1099 1100 if ( nActLv == (sal_uInt16)0xFFFF ) 1101 return sal_False; 1102 1103 SvxNumberFormat aFmt(aNum.GetLevel(nActLv)); 1104 sal_Int16 eNumType = aFmt.GetNumberingType(); 1105 if( eNumType == SVX_NUM_CHAR_SPECIAL && pActualBullets[nIndex]->eType == eNBType::BULLETS ) 1106 { 1107 sal_Unicode cChar = aFmt.GetBulletChar(); 1108 const Font* pFont = aFmt.GetBulletFont(); 1109 BulletsSettings_Impl* pEntry = (BulletsSettings_Impl*) (pActualBullets[nIndex]->pBullets); 1110 pEntry->cBulletChar = cChar; 1111 pEntry->aFont = pFont?*pFont:lcl_GetDefaultBulletFont(); 1112 pEntry->bIsCustomized = sal_True; 1113 String aStrFromRES = String(SVX_RESSTR( RID_SVXSTR_NUMBULLET_CUSTOM_BULLET_DESCRIPTION)); 1114 String aReplace = String::CreateFromAscii("%LIST_NUM"); 1115 String sNUM = String::CreateFromInt32( nIndex + 1 ); 1116 aStrFromRES.SearchAndReplace(aReplace,sNUM); 1117 pEntry->sDescription = aStrFromRES; 1118 1119 }else if ( (eNumType&(~LINK_TOKEN)) == SVX_NUM_BITMAP && pActualBullets[nIndex]->eType == eNBType::GRAPHICBULLETS ) 1120 { 1121 const SvxBrushItem* pBrsh = aFmt.GetBrush(); 1122 const Graphic* pGrf = 0; 1123 if ( pBrsh ) 1124 pGrf = pBrsh->GetGraphic(); 1125 else 1126 return sal_False; 1127 1128 String sEmpty; 1129 if ( pGrf ) 1130 { 1131 const String* pGrfName = pBrsh->GetGraphicLink(); 1132 //String* pGrfName = (String*)(pBrsh->GetGraphicLink()); 1133 GrfBulDataRelation* pEntry = (GrfBulDataRelation*) (pActualBullets[nIndex]->pBullets); 1134 if ( pGrfName ) 1135 pEntry->sGrfName = *pGrfName; 1136 GraphicBulletsTypeMgr* mGrfTMgr = GraphicBulletsTypeMgr::GetInstance(); 1137 if ( mGrfTMgr ) 1138 { 1139 //sal_uInt16 nDIndex = mGrfTMgr->GetNBOIndexForNumRule(aNum,mLevel); 1140 //if ( nDIndex != (sal_uInt16)0xFFFF) 1141 //{ 1142 // pActualBullets[nIndex]->nIndexDefault = nDIndex -1; 1143 // sEmpty = mGrfTMgr->GetDescription( nDIndex -1); 1144 //}else 1145 { 1146 pActualBullets[nIndex]->nIndexDefault = (sal_uInt16)0xFFFF; 1147 sEmpty = String(SVX_RESSTR( RID_SVXSTR_NUMBULLET_CUSTOM_BULLET_DESCRIPTION)); 1148 String aReplace = String::CreateFromAscii("%LIST_NUM"); 1149 String sNUM = String::CreateFromInt32( nIndex + 1 ); 1150 sEmpty.SearchAndReplace(aReplace,sNUM); 1151 //pEntry->pGrfObj = pGrf; 1152 pEntry->pGrfObj = new Graphic(*pGrf); 1153 pEntry->aSize = aFmt.GetGraphicSize(); 1154 pEntry->aSize = OutputDevice::LogicToLogic(pEntry->aSize,(MapUnit)GetMapUnit(),MAP_100TH_MM); 1155 sal_uInt16 nDIndex = mGrfTMgr->GetNBOIndexForNumRule(aNum,mLevel); 1156 if (nDIndex!=(sal_uInt16)0xFFFF) pEntry->aSize=Size(0,0); 1157 } 1158 } 1159 pEntry->sDescription = sEmpty; 1160 pEntry->bIsCustomized = sal_True; 1161 }else 1162 { 1163 return sal_False; 1164 } 1165 }else 1166 { 1167 delete pActualBullets[nIndex]->pBullets; 1168 pActualBullets[nIndex]->pBullets = 0; 1169 if ( eNumType == SVX_NUM_CHAR_SPECIAL ) 1170 { 1171 sal_Unicode cChar = aFmt.GetBulletChar(); 1172 const Font* pFont = aFmt.GetBulletFont(); 1173 pActualBullets[nIndex]->eType = eNBType::BULLETS; 1174 pActualBullets[nIndex]->nIndex = nIndex+1; // Index in the tab page display, decrease 1 to the index within arr 1175 pActualBullets[nIndex]->pBullets = new BulletsSettings_Impl(eNBType::BULLETS) ; 1176 ((BulletsSettings_Impl*)(pActualBullets[nIndex]->pBullets))->cBulletChar = cChar; 1177 ((BulletsSettings_Impl*)(pActualBullets[nIndex]->pBullets))->aFont = pFont?*pFont:lcl_GetDefaultBulletFont(); 1178 ((BulletsSettings_Impl*)(pActualBullets[nIndex]->pBullets))->bIsCustomized = sal_True; 1179 ((BulletsSettings_Impl*)(pActualBullets[nIndex]->pBullets))->eType = eNBType::BULLETS; 1180 BulletsTypeMgr* pBTMgr = BulletsTypeMgr::GetInstance(); 1181 if ( pBTMgr ) 1182 { 1183 //sal_uInt16 nDIndex = pBTMgr->GetNBOIndexForNumRule(aNum,mLevel); 1184 //if ( nDIndex != (sal_uInt16)0xFFFF) 1185 //{ 1186 // pActualBullets[nIndex]->nIndexDefault = nDIndex -1; 1187 // ((BulletsSettings_Impl*)(pActualBullets[nIndex]->pBullets))->sDescription = pBTMgr->GetDescription(nDIndex - 1); 1188 //}else 1189 { 1190 pActualBullets[nIndex]->nIndexDefault = (sal_uInt16)0xFFFF; 1191 String aStrFromRES = String(SVX_RESSTR( RID_SVXSTR_NUMBULLET_CUSTOM_BULLET_DESCRIPTION)); 1192 String aReplace = String::CreateFromAscii("%LIST_NUM"); 1193 String sNUM = String::CreateFromInt32( nIndex + 1 ); 1194 aStrFromRES.SearchAndReplace(aReplace,sNUM); 1195 ((BulletsSettings_Impl*)(pActualBullets[nIndex]->pBullets))->sDescription = aStrFromRES; 1196 } 1197 } 1198 }else if ( (eNumType&(~LINK_TOKEN)) == SVX_NUM_BITMAP ) 1199 { 1200 const SvxBrushItem* pBrsh = aFmt.GetBrush(); 1201 const Graphic* pGrf = 0; 1202 if ( pBrsh ) 1203 pGrf = pBrsh->GetGraphic(); 1204 else 1205 return sal_False; 1206 1207 String sEmpty; 1208 const String* pGrfName = 0; 1209 if ( pGrf ) 1210 { 1211 pGrfName = pBrsh->GetGraphicLink(); 1212 1213 pActualBullets[nIndex]->eType = eNBType::GRAPHICBULLETS; 1214 pActualBullets[nIndex]->nIndex = nIndex+1; // Index in the tab page display, decrease 1 to the index within arr 1215 pActualBullets[nIndex]->pBullets = new GrfBulDataRelation(eNBType::GRAPHICBULLETS) ; 1216 if (pGrfName) 1217 ((GrfBulDataRelation*)(pActualBullets[nIndex]->pBullets))->sGrfName = *pGrfName; 1218 ((GrfBulDataRelation*)(pActualBullets[nIndex]->pBullets))->bIsCustomized = sal_True; 1219 ((GrfBulDataRelation*)(pActualBullets[nIndex]->pBullets))->eType = eNBType::GRAPHICBULLETS; 1220 GraphicBulletsTypeMgr* mGrfTMgr = GraphicBulletsTypeMgr::GetInstance(); 1221 if ( mGrfTMgr ) 1222 { 1223 //sal_uInt16 nDIndex = mGrfTMgr->GetNBOIndexForNumRule(aNum,mLevel); 1224 //if ( nDIndex != (sal_uInt16)0xFFFF) 1225 //{ 1226 // pActualBullets[nIndex]->nIndexDefault = nDIndex - 1; 1227 // ((GrfBulDataRelation*)(pActualBullets[nIndex]->pBullets))->sDescription = mGrfTMgr->GetDescription(nDIndex - 1); 1228 //}else 1229 { 1230 pActualBullets[nIndex]->nIndexDefault = (sal_uInt16)0xFFFF; 1231 String aStrFromRES = String(SVX_RESSTR( RID_SVXSTR_NUMBULLET_CUSTOM_BULLET_DESCRIPTION)); 1232 String aReplace = String::CreateFromAscii("%LIST_NUM"); 1233 String sNUM = String::CreateFromInt32( nIndex + 1 ); 1234 aStrFromRES.SearchAndReplace(aReplace,sNUM); 1235 ((GrfBulDataRelation*)(pActualBullets[nIndex]->pBullets))->sDescription = aStrFromRES; 1236 //((GrfBulDataRelation*)(pActualBullets[nIndex]->pBullets))->pGrfObj = pGrf; 1237 ((GrfBulDataRelation*)(pActualBullets[nIndex]->pBullets))->pGrfObj = new Graphic(*pGrf); 1238 ((GrfBulDataRelation*)(pActualBullets[nIndex]->pBullets))->pGrfObj = new Graphic(*pGrf); 1239 Size aTmpSize = aFmt.GetGraphicSize(); 1240 aTmpSize = OutputDevice::LogicToLogic(aTmpSize,(MapUnit)GetMapUnit(),MAP_100TH_MM); 1241 sal_uInt16 nDIndex = mGrfTMgr->GetNBOIndexForNumRule(aNum,mLevel); 1242 if (nDIndex!=(sal_uInt16)0xFFFF) aTmpSize=Size(0,0); 1243 ((GrfBulDataRelation*)(pActualBullets[nIndex]->pBullets))->aSize = aTmpSize; 1244 1245 } 1246 } 1247 } 1248 } 1249 } 1250 SvxNumRule aTmpRule1(aNum); 1251 ApplyNumRule(aTmpRule1,nIndex,mLevel,true); 1252 if (GetNBOIndexForNumRule(aTmpRule1,mLevel,nIndex)==nIndex+1) { 1253 if (pActualBullets[nIndex]->eType == eNBType::BULLETS) { 1254 BulletsSettings_Impl* pEntry = (BulletsSettings_Impl*) (pActualBullets[nIndex]->pBullets); 1255 pEntry->bIsCustomized = false; 1256 pEntry->sDescription = GetDescription(nIndex,true); 1257 } 1258 if (pActualBullets[nIndex]->eType == eNBType::GRAPHICBULLETS) { 1259 GrfBulDataRelation* pEntry = (GrfBulDataRelation*) (pActualBullets[nIndex]->pBullets); 1260 pEntry->bIsCustomized = false; 1261 pEntry->sDescription = GetDescription(nIndex,true); 1262 } 1263 } 1264 ImplStore(String::CreateFromAscii("standard.sya")); 1265 return sal_True; 1266 } 1267 1268 sal_Bool MixBulletsTypeMgr::ApplyNumRule(SvxNumRule& aNum,sal_uInt16 nIndex,sal_uInt16 mLevel,sal_Bool isDefault,sal_Bool isResetSize) 1269 { 1270 //if ( mLevel == (sal_uInt16)0xFFFF || nIndex>=DEFAULT_BULLET_TYPES ) 1271 if ( nIndex>=DEFAULT_BULLET_TYPES ) 1272 return sal_False; 1273 MixBulletsSettings_Impl* pCurrentBullets = pActualBullets[nIndex]; 1274 if (isDefault) pCurrentBullets=pDefaultActualBullets[nIndex]; 1275 1276 if ( pCurrentBullets->eType == eNBType::BULLETS ) 1277 { 1278 sal_Unicode cChar; 1279 cChar = ((BulletsSettings_Impl*)(pCurrentBullets->pBullets))->cBulletChar; 1280 1281 //Font& rActBulletFont = lcl_GetDefaultBulletFont(); 1282 Font rActBulletFont = ((BulletsSettings_Impl*)(pCurrentBullets->pBullets))->aFont; 1283 sal_uInt16 nMask = 1; 1284 String sBulletCharFmtName = GetBulCharFmtName(); 1285 for(sal_uInt16 i = 0; i < aNum.GetLevelCount(); i++) 1286 { 1287 if(mLevel & nMask) 1288 { 1289 SvxNumberFormat aFmt(aNum.GetLevel(i)); 1290 if (SVX_NUM_CHAR_SPECIAL !=aFmt.GetNumberingType()) isResetSize=true; 1291 aFmt.SetNumberingType( SVX_NUM_CHAR_SPECIAL ); 1292 aFmt.SetBulletFont(&rActBulletFont); 1293 aFmt.SetBulletChar(cChar ); 1294 aFmt.SetCharFmtName(sBulletCharFmtName); 1295 String aEmptyStr; 1296 aFmt.SetPrefix( aEmptyStr ); 1297 aFmt.SetSuffix( aEmptyStr ); 1298 if (isResetSize) aFmt.SetBulletRelSize(45); 1299 aNum.SetLevel(i, aFmt); 1300 } 1301 nMask <<= 1; 1302 } 1303 }else if ( pCurrentBullets->eType == eNBType::GRAPHICBULLETS ) 1304 { 1305 String sGrfName; 1306 GrfBulDataRelation* pEntry = (GrfBulDataRelation*) (pCurrentBullets->pBullets); 1307 sGrfName= pEntry->sGrfName; 1308 1309 sal_uInt16 nMask = 1; 1310 String aEmptyStr; 1311 sal_uInt16 nSetNumberingType = SVX_NUM_BITMAP; 1312 String sNumCharFmtName = GetBulCharFmtName(); 1313 for(sal_uInt16 i = 0; i < aNum.GetLevelCount(); i++) 1314 { 1315 if(mLevel & nMask) 1316 { 1317 SvxNumberFormat aFmt(aNum.GetLevel(i)); 1318 if (SVX_NUM_BITMAP !=aFmt.GetNumberingType()) isResetSize=true; 1319 aFmt.SetNumberingType(nSetNumberingType); 1320 aFmt.SetPrefix( aEmptyStr ); 1321 aFmt.SetSuffix( aEmptyStr ); 1322 aFmt.SetCharFmtName( sNumCharFmtName ); 1323 if ( pCurrentBullets->nIndexDefault == (sal_uInt16)0xFFFF && pEntry->pGrfObj ) 1324 { 1325 Size aSize = pEntry->aSize; 1326 sal_Int16 eOrient = text::VertOrientation::LINE_CENTER; 1327 if (!isResetSize && aFmt.GetGraphicSize()!=Size(0,0)) aSize=aFmt.GetGraphicSize(); 1328 else { 1329 if (aSize.Width()==0 && aSize.Height()==0) { 1330 aSize = SvxNumberFormat::GetGraphicSizeMM100( pEntry->pGrfObj ); 1331 } 1332 aSize = OutputDevice::LogicToLogic(aSize, MAP_100TH_MM, (MapUnit)GetMapUnit()); 1333 } 1334 SvxBrushItem aBrush(*(pEntry->pGrfObj), GPOS_AREA, SID_ATTR_BRUSH ); 1335 aFmt.SetGraphicBrush( &aBrush, &aSize, &eOrient ); 1336 }else 1337 { 1338 Graphic aGraphic; 1339 if(GalleryExplorer::GetGraphicObj( GALLERY_THEME_BULLETS, pCurrentBullets->nIndexDefault, &aGraphic)) 1340 { 1341 Size aSize = pEntry->aSize; 1342 sal_Int16 eOrient = text::VertOrientation::LINE_CENTER; 1343 if (!isResetSize && aFmt.GetGraphicSize()!=Size(0,0)) aSize=aFmt.GetGraphicSize(); 1344 else { 1345 if (aSize.Width()==0 && aSize.Height()==0) { 1346 aSize = SvxNumberFormat::GetGraphicSizeMM100(&aGraphic); 1347 } 1348 aSize = OutputDevice::LogicToLogic(aSize, MAP_100TH_MM, (MapUnit)GetMapUnit()); 1349 } 1350 SvxBrushItem aBrush(aGraphic, GPOS_AREA, SID_ATTR_BRUSH ); 1351 aFmt.SetGraphicBrush( &aBrush, &aSize, &eOrient ); 1352 }else 1353 aFmt.SetGraphic( sGrfName ); 1354 } 1355 1356 aNum.SetLevel(i, aFmt); 1357 } 1358 nMask <<= 1 ; 1359 } 1360 } 1361 1362 return sal_True; 1363 } 1364 1365 String MixBulletsTypeMgr::GetDescription(sal_uInt16 nIndex,sal_Bool isDefault) 1366 { 1367 String sRet; 1368 //sal_uInt16 nLength = 0; 1369 //nLength = sizeof(pActualBullets)/sizeof(BulletsSettings_Impl); 1370 1371 if ( nIndex >= DEFAULT_BULLET_TYPES ) 1372 return sRet; 1373 else 1374 sRet = pActualBullets[nIndex]->pBullets->sDescription; 1375 if (isDefault) sRet = pDefaultActualBullets[nIndex]->pBullets->sDescription; 1376 return sRet; 1377 } 1378 sal_Bool MixBulletsTypeMgr::IsCustomized(sal_uInt16 nIndex) 1379 { 1380 sal_Bool bRet = sal_False; 1381 //sal_uInt16 nLength = 0; 1382 //nLength = sizeof(pActualBullets)/sizeof(BulletsSettings_Impl); 1383 1384 if ( nIndex >= DEFAULT_BULLET_TYPES ) 1385 bRet = sal_False; 1386 else 1387 bRet = pActualBullets[nIndex]->pBullets->bIsCustomized; 1388 1389 return bRet; 1390 } 1391 /*************************************************************************************************** 1392 **********************Numbering Type lib************************************************************** 1393 ****************************************************************************************************/ 1394 NumberingTypeMgr* NumberingTypeMgr::_instance = 0; 1395 1396 NumberingTypeMgr::NumberingTypeMgr(const NBOType aType): 1397 NBOTypeMgrBase(aType), 1398 //pNumSettingsArr( new NumSettingsArr_Impl ), 1399 pNumberSettingsArr (new NumberSettingsArr_Impl) 1400 { 1401 Init(); 1402 pDefaultNumberSettingsArr = pNumberSettingsArr; 1403 pNumberSettingsArr = new NumberSettingsArr_Impl; 1404 // Initialize the first time to store the default value. Then do it again for customized value 1405 Init(); 1406 ImplLoad(String::CreateFromAscii("standard.syb")); 1407 } 1408 1409 NumberingTypeMgr::NumberingTypeMgr(const NBOType aType,const SfxItemSet* pArg): 1410 NBOTypeMgrBase(aType,pArg), 1411 //pNumSettingsArr( new NumSettingsArr_Impl ), 1412 pNumberSettingsArr (new NumberSettingsArr_Impl) 1413 { 1414 Init(); 1415 pDefaultNumberSettingsArr = pNumberSettingsArr; 1416 pNumberSettingsArr = new NumberSettingsArr_Impl; 1417 // Initialize the first time to store the default value. Then do it again for customized value 1418 Init(); 1419 ImplLoad(String::CreateFromAscii("standard.syb")); 1420 } 1421 1422 NumberingTypeMgr::NumberingTypeMgr(const NumberingTypeMgr& aTypeMgr): 1423 NBOTypeMgrBase(aTypeMgr), 1424 //pNumSettingsArr( new NumSettingsArr_Impl ), 1425 pNumberSettingsArr (new NumberSettingsArr_Impl) 1426 { 1427 /* 1428 for(sal_uInt16 i=0;i<aTypeMgr.GetNumCount();i++) 1429 { 1430 NumberSettings_Impl* _pSet = aTypeMgr.GetNumSettingByIndex(i); 1431 if ( _pSet ) 1432 { 1433 pNumberSettingsArr->GetObject(i)->nIndex = _pSet->nIndex; 1434 pNumberSettingsArr->GetObject(i)->nIndexDefault = _pSet->nIndexDefault; 1435 pNumberSettingsArr->GetObject(i)->sDescription = _pSet->sDescription; 1436 pNumberSettingsArr->GetObject(i)->bIsCustomized = _pSet->bIsCustomized; 1437 if ( _pSet->pNumSetting ) 1438 { 1439 pNumberSettingsArr->GetObject(i)->pNumSetting->nNumberType = _pSet->pNumSetting->nNumberType; 1440 pNumberSettingsArr->GetObject(i)->pNumSetting->nParentNumbering = _pSet->pNumSetting->nParentNumbering; 1441 pNumberSettingsArr->GetObject(i)->pNumSetting->sPrefix = _pSet->pNumSetting->sPrefix; 1442 pNumberSettingsArr->GetObject(i)->pNumSetting->sSuffix = _pSet->pNumSetting->sSuffix; 1443 pNumberSettingsArr->GetObject(i)->pNumSetting->sBulletChar = _pSet->pNumSetting->sBulletChar; 1444 pNumberSettingsArr->GetObject(i)->pNumSetting->sBulletFont = _pSet->pNumSetting->sBulletFont; 1445 1446 pNumberSettingsArr->GetObject(i)->pNumSetting->eLabelFollowedBy = _pSet->pNumSetting->eLabelFollowedBy; 1447 pNumberSettingsArr->GetObject(i)->pNumSetting->nTabValue = _pSet->pNumSetting->nTabValue; 1448 pNumberSettingsArr->GetObject(i)->pNumSetting->eNumAlign = _pSet->pNumSetting->eNumAlign; 1449 pNumberSettingsArr->GetObject(i)->pNumSetting->nNumAlignAt = _pSet->pNumSetting->nNumAlignAt; 1450 pNumberSettingsArr->GetObject(i)->pNumSetting->nNumIndentAt = _pSet->pNumSetting->nNumIndentAt; 1451 } 1452 } 1453 } 1454 */ 1455 ImplLoad(String::CreateFromAscii("standard.syb")); 1456 } 1457 1458 void NumberingTypeMgr::Init() 1459 { 1460 Reference< XMultiServiceFactory > xMSF = ::comphelper::getProcessServiceFactory(); 1461 Reference < XInterface > xI = xMSF->createInstance( 1462 ::rtl::OUString::createFromAscii( "com.sun.star.text.DefaultNumberingProvider" ) ); 1463 Reference<XDefaultNumberingProvider> xDefNum(xI, UNO_QUERY); 1464 1465 if(xDefNum.is()) 1466 { 1467 Sequence< Sequence< PropertyValue > > aNumberings; 1468 LanguageType eLang = Application::GetSettings().GetLanguage(); 1469 Locale aLocale = SvxCreateLocale(eLang); 1470 try 1471 { 1472 aNumberings = xDefNum->getDefaultContinuousNumberingLevels( aLocale ); 1473 1474 sal_Int32 nLength = aNumberings.getLength() > DEFAULT_NUM_VALUSET_COUNT ? DEFAULT_NUM_VALUSET_COUNT :aNumberings.getLength(); 1475 1476 const Sequence<PropertyValue>* pValuesArr = aNumberings.getConstArray(); 1477 for(sal_Int32 i = 0; i < nLength; i++) 1478 { 1479 NumSettings_ImplPtr pNew = lcl_CreateNumberingSettingsPtr(pValuesArr[i]); 1480 NumberSettings_Impl* pNumEntry = new NumberSettings_Impl; 1481 pNumEntry->nIndex = i + 1; 1482 pNumEntry->nIndexDefault = i; 1483 pNumEntry->pNumSetting = pNew; 1484 //SetItemText( i + 1, SVX_RESSTR( RID_SVXSTR_SINGLENUM_DESCRIPTIONS + i )); 1485 // { 1486 // String sText; 1487 // //const OUString sValue(C2U("Value")); 1488 // Reference<XNumberingFormatter> xFormatter(xDefNum, UNO_QUERY); 1489 // if(xFormatter.is() && aNumberings.getLength() > i) 1490 // { 1491 1492 // for (sal_uInt16 j=0;j<3;j++) 1493 // { 1494 // Sequence<PropertyValue> aLevel = aNumberings.getConstArray()[i]; 1495 // try 1496 // { 1497 // aLevel.realloc(aLevel.getLength() + 1); 1498 // PropertyValue& rValue = aLevel.getArray()[aLevel.getLength() - 1]; 1499 // rValue.Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Value")); 1500 // rValue.Value <<= (sal_Int32)(j + 1); 1501 1502 // if (j!=0) 1503 // sText += String::CreateFromAscii(" "); 1504 1505 // sText+=String(xFormatter->makeNumberingString( aLevel, aLocale )); 1506 // } 1507 // catch(Exception&) 1508 // { 1509 // DBG_ERROR("Exception in DefaultNumberingProvider::makeNumberingString"); 1510 // } 1511 // } 1512 // } 1513 // String aStrFromRES(SVX_RESSTR( RID_SVXSTR_SINGLENUM_DESCRIPTIONS)); 1514 // String aReplace = String::CreateFromAscii("%NUMBERINGSAMPLE"); 1515 // aStrFromRES.SearchAndReplace(aReplace,sText); 1516 // pNumEntry->sDescription = aStrFromRES; 1517 // } 1518 // End modification 1519 1520 pNumEntry->sDescription = SVX_RESSTR( RID_SVXSTR_SINGLENUM_DESCRIPTIONS + i ); 1521 pNumberSettingsArr->Insert(pNumEntry, pNumberSettingsArr->Count()); 1522 } 1523 } 1524 catch(Exception&) 1525 { 1526 } 1527 } 1528 } 1529 1530 sal_uInt16 NumberingTypeMgr::GetNBOIndexForNumRule(SvxNumRule& aNum,sal_uInt16 mLevel,sal_uInt16 nFromIndex) 1531 { 1532 if ( mLevel == (sal_uInt16)0xFFFF || mLevel > aNum.GetLevelCount() || mLevel == 0) 1533 return (sal_uInt16)0xFFFF; 1534 1535 sal_uInt16 nActLv = IsSingleLevel(mLevel); 1536 1537 if ( nActLv == (sal_uInt16)0xFFFF ) 1538 return (sal_uInt16)0xFFFF; 1539 1540 SvxNumberFormat aFmt(aNum.GetLevel(nActLv)); 1541 String sPreFix = aFmt.GetPrefix(); 1542 String sSuffix = aFmt.GetSuffix(); 1543 String sEmpty; 1544 sal_Int16 eNumType = aFmt.GetNumberingType(); 1545 1546 sal_uInt16 nCount = pNumberSettingsArr->Count(); 1547 for(sal_uInt16 i = nFromIndex; i < nCount; i++) 1548 { 1549 NumberSettings_ImplPtr _pSet = pNumberSettingsArr->GetObject(i); 1550 sal_Int16 eNType = _pSet->pNumSetting->nNumberType; 1551 String sLocalPreFix = _pSet->pNumSetting->sPrefix.getStr(); 1552 String sLocalSuffix = _pSet->pNumSetting->sSuffix.getStr(); 1553 if (sPreFix.CompareTo(sLocalPreFix)==COMPARE_EQUAL && 1554 sSuffix.CompareTo(sLocalSuffix)==COMPARE_EQUAL && 1555 eNumType == eNType ) 1556 { 1557 return i+1; 1558 } 1559 } 1560 1561 1562 return (sal_uInt16)0xFFFF; 1563 } 1564 1565 sal_Bool NumberingTypeMgr::RelplaceNumRule(SvxNumRule& aNum,sal_uInt16 nIndex,sal_uInt16 mLevel) 1566 { 1567 //if ( mLevel == (sal_uInt16)0xFFFF || mLevel == 0) 1568 // return sal_False; 1569 1570 //if ( GetNBOIndexForNumRule(aNum,mLevel) != (sal_uInt16)0xFFFF ) 1571 // return sal_False; 1572 1573 sal_uInt16 nActLv = IsSingleLevel(mLevel); 1574 1575 if ( nActLv == (sal_uInt16)0xFFFF ) 1576 return sal_False; 1577 1578 SvxNumberFormat aFmt(aNum.GetLevel(nActLv)); 1579 //sal_Unicode cPrefix = rtl::OUString(aFmt.GetPrefix()).getStr()[0]; 1580 //sal_Unicode cSuffix = rtl::OUString(aFmt.GetSuffix()).getStr()[0]; 1581 sal_Int16 eNumType = aFmt.GetNumberingType(); 1582 1583 sal_uInt16 nCount = pNumberSettingsArr->Count(); 1584 if ( nIndex >= nCount ) 1585 return sal_False; 1586 1587 NumberSettings_ImplPtr _pSet = pNumberSettingsArr->GetObject(nIndex); 1588 1589 _pSet->pNumSetting->sPrefix = aFmt.GetPrefix(); 1590 _pSet->pNumSetting->sSuffix = aFmt.GetSuffix(); 1591 _pSet->pNumSetting->nNumberType = eNumType; 1592 _pSet->bIsCustomized = sal_True; 1593 1594 SvxNumRule aTmpRule1(aNum); 1595 SvxNumRule aTmpRule2(aNum); 1596 ApplyNumRule(aTmpRule1,nIndex,mLevel,true); 1597 ApplyNumRule(aTmpRule2,nIndex,mLevel,false); 1598 if (aTmpRule1==aTmpRule2) _pSet->bIsCustomized=false; 1599 if (_pSet->bIsCustomized) { 1600 String aStrFromRES = String(SVX_RESSTR( RID_SVXSTR_NUMBULLET_CUSTOM_NUMBERING_DESCRIPTION)); 1601 String aReplace = String::CreateFromAscii("%LIST_NUM"); 1602 String sNUM = String::CreateFromInt32( nIndex + 1 ); 1603 aStrFromRES.SearchAndReplace(aReplace,sNUM); 1604 _pSet->sDescription = aStrFromRES; 1605 } else { 1606 _pSet->sDescription = GetDescription(nIndex,true); 1607 } 1608 ImplStore(String::CreateFromAscii("standard.syb")); 1609 return sal_True; 1610 } 1611 1612 sal_Bool NumberingTypeMgr::ApplyNumRule(SvxNumRule& aNum,sal_uInt16 nIndex,sal_uInt16 mLevel,sal_Bool isDefault,sal_Bool isResetSize) 1613 { 1614 //if ( mLevel == (sal_uInt16)0xFFFF ) 1615 // return sal_False; 1616 1617 //DBG_ASSERT(pNumSettingsArr->Count() > nIndex, "wrong index"); 1618 if(pNumberSettingsArr->Count() <= nIndex) 1619 return sal_False; 1620 NumberSettingsArr_Impl* pCurrentNumberSettingsArr=pNumberSettingsArr; 1621 if (isDefault) pCurrentNumberSettingsArr=pDefaultNumberSettingsArr; 1622 NumberSettings_ImplPtr _pSet = pCurrentNumberSettingsArr->GetObject(nIndex); 1623 sal_Int16 eNewType = _pSet->pNumSetting->nNumberType; 1624 1625 sal_uInt16 nMask = 1; 1626 String sNumCharFmtName = GetBulCharFmtName(); 1627 for(sal_uInt16 i = 0; i < aNum.GetLevelCount(); i++) 1628 { 1629 if(mLevel & nMask) 1630 { 1631 SvxNumberFormat aFmt(aNum.GetLevel(i)); 1632 if (eNewType!=aFmt.GetNumberingType()) isResetSize=true; 1633 aFmt.SetNumberingType(eNewType); 1634 aFmt.SetPrefix(_pSet->pNumSetting->sPrefix); 1635 aFmt.SetSuffix(_pSet->pNumSetting->sSuffix); 1636 1637 aFmt.SetCharFmtName(sNumCharFmtName); 1638 if (isResetSize) aFmt.SetBulletRelSize(100); 1639 aNum.SetLevel(i, aFmt); 1640 } 1641 nMask <<= 1 ; 1642 } 1643 1644 return sal_True; 1645 } 1646 String NumberingTypeMgr::GetDescription(sal_uInt16 nIndex,sal_Bool isDefault) 1647 { 1648 String sRet; 1649 sal_uInt16 nLength = 0; 1650 nLength = pNumberSettingsArr->Count(); 1651 1652 if ( nIndex >= nLength ) 1653 return sRet; 1654 else 1655 sRet = pNumberSettingsArr->GetObject(nIndex)->sDescription; 1656 if (isDefault) sRet = pDefaultNumberSettingsArr->GetObject(nIndex)->sDescription; 1657 1658 return sRet; 1659 } 1660 sal_Bool NumberingTypeMgr::IsCustomized(sal_uInt16 nIndex) 1661 { 1662 sal_Bool bRet = sal_False; 1663 sal_uInt16 nLength = 0; 1664 nLength = pNumberSettingsArr->Count(); 1665 1666 if ( nIndex >= nLength ) 1667 bRet = sal_False; 1668 else 1669 bRet = pNumberSettingsArr->GetObject(nIndex)->bIsCustomized; 1670 1671 return bRet; 1672 } 1673 sal_uInt16 NumberingTypeMgr::GetNumCount() const 1674 { 1675 sal_uInt16 nRet = 0; 1676 if ( pNumberSettingsArr ) 1677 nRet = pNumberSettingsArr->Count(); 1678 1679 return nRet; 1680 } 1681 NumberSettings_Impl* NumberingTypeMgr::GetNumSettingByIndex(sal_uInt16 nIndex) const 1682 { 1683 NumberSettings_Impl* pRet = 0; 1684 if ( pNumberSettingsArr && nIndex< pNumberSettingsArr->Count() ) 1685 { 1686 pRet = pNumberSettingsArr->GetObject(nIndex); 1687 } 1688 1689 return pRet; 1690 } 1691 /*************************************************************************************************** 1692 **********************Multi-level /Outline Type lib******************************************************* 1693 ****************************************************************************************************/ 1694 OutlineTypeMgr* OutlineTypeMgr::_instance = 0; 1695 1696 OutlineTypeMgr::OutlineTypeMgr(const NBOType aType): 1697 NBOTypeMgrBase(aType)//, 1698 //pNumSettingsArrs( new NumSettingsArr_Impl[DEFAULT_NUM_VALUSET_COUNT] ) 1699 { 1700 Init(); 1701 for(sal_Int32 nItem = 0; nItem < DEFAULT_NUM_VALUSET_COUNT; nItem++ ) 1702 { 1703 pDefaultOutlineSettingsArrs[nItem] = pOutlineSettingsArrs[nItem]; 1704 } 1705 // Initialize the first time to store the default value. Then do it again for customized value 1706 Init(); 1707 ImplLoad(String::CreateFromAscii("standard.syc")); 1708 } 1709 1710 OutlineTypeMgr::OutlineTypeMgr(const NBOType aType,const SfxItemSet* pArg): 1711 NBOTypeMgrBase(aType,pArg)//, 1712 //pNumSettingsArrs( new NumSettingsArr_Impl[DEFAULT_NUM_VALUSET_COUNT]) 1713 { 1714 Init(); 1715 for(sal_Int32 nItem = 0; nItem < DEFAULT_NUM_VALUSET_COUNT; nItem++ ) 1716 { 1717 pDefaultOutlineSettingsArrs[nItem] = pOutlineSettingsArrs[nItem]; 1718 } 1719 // Initialize the first time to store the default value. Then do it again for customized value 1720 Init(); 1721 ImplLoad(String::CreateFromAscii("standard.syc")); 1722 } 1723 1724 OutlineTypeMgr::OutlineTypeMgr(const OutlineTypeMgr& aTypeMgr): 1725 NBOTypeMgrBase(aTypeMgr)//, 1726 //pNumSettingsArrs( new NumSettingsArr_Impl[DEFAULT_NUM_VALUSET_COUNT]) 1727 { 1728 Init(); 1729 for(sal_Int32 nItem = 0; nItem < DEFAULT_NUM_VALUSET_COUNT; nItem++ ) 1730 { 1731 pDefaultOutlineSettingsArrs[nItem] = pOutlineSettingsArrs[nItem]; 1732 } 1733 // Initialize the first time to store the default value. Then do it again for customized value 1734 Init(); 1735 ImplLoad(String::CreateFromAscii("standard.syc")); 1736 } 1737 1738 void OutlineTypeMgr::Init() 1739 { 1740 Reference< XMultiServiceFactory > xMSF = ::comphelper::getProcessServiceFactory(); 1741 Reference < XInterface > xI = xMSF->createInstance( 1742 ::rtl::OUString::createFromAscii( "com.sun.star.text.DefaultNumberingProvider" ) ); 1743 Reference<XDefaultNumberingProvider> xDefNum(xI, UNO_QUERY); 1744 1745 if(xDefNum.is()) 1746 { 1747 Sequence<Reference<XIndexAccess> > aOutlineAccess; 1748 LanguageType eLang = Application::GetSettings().GetLanguage(); 1749 Locale aLocale = SvxCreateLocale(eLang); 1750 try 1751 { 1752 aOutlineAccess = xDefNum->getDefaultOutlineNumberings( aLocale ); 1753 1754 SvxNumRule aDefNumRule( NUM_BULLET_REL_SIZE|NUM_CONTINUOUS|NUM_BULLET_COLOR|NUM_CHAR_TEXT_DISTANCE|NUM_SYMBOL_ALIGNMENT,10, sal_False , 1755 SVX_RULETYPE_NUMBERING,SvxNumberFormat::LABEL_ALIGNMENT); 1756 1757 for(sal_Int32 nItem = 0; 1758 nItem < aOutlineAccess.getLength() && nItem < DEFAULT_NUM_VALUSET_COUNT; 1759 nItem++ ) 1760 { 1761 pOutlineSettingsArrs[ nItem ] = new OutlineSettings_Impl; 1762 OutlineSettings_Impl* pItemArr = pOutlineSettingsArrs[ nItem ]; 1763 pItemArr->sDescription = SVX_RESSTR( RID_SVXSTR_OUTLINENUM_DESCRIPTION_0 + nItem ); 1764 pItemArr->pNumSettingsArr = new NumSettingsArr_Impl; 1765 Reference<XIndexAccess> xLevel = aOutlineAccess.getConstArray()[nItem]; 1766 for(sal_Int32 nLevel = 0; nLevel < xLevel->getCount() && nLevel < 5; nLevel++) 1767 { 1768 Any aValueAny = xLevel->getByIndex(nLevel); 1769 Sequence<PropertyValue> aLevelProps; 1770 aValueAny >>= aLevelProps; 1771 NumSettings_ImplPtr pNew = lcl_CreateNumberingSettingsPtr(aLevelProps); 1772 SvxNumberFormat aNumFmt( aDefNumRule.GetLevel( nLevel) ); 1773 pNew->eLabelFollowedBy = aNumFmt.GetLabelFollowedBy(); 1774 pNew->nTabValue = aNumFmt.GetListtabPos(); 1775 pNew->eNumAlign = aNumFmt.GetNumAdjust(); 1776 pNew->nNumAlignAt = aNumFmt.GetFirstLineIndent(); 1777 pNew->nNumIndentAt = aNumFmt.GetIndentAt(); 1778 pItemArr->pNumSettingsArr->Insert( pNew, pItemArr->pNumSettingsArr->Count() ); 1779 } 1780 } 1781 } 1782 catch(Exception&) 1783 { 1784 } 1785 } 1786 } 1787 1788 sal_uInt16 OutlineTypeMgr::GetNBOIndexForNumRule(SvxNumRule& aNum,sal_uInt16 /* mLevel */,sal_uInt16 nFromIndex) 1789 { 1790 sal_uInt16 nLength = sizeof(pOutlineSettingsArrs)/sizeof(OutlineSettings_Impl*); 1791 for(sal_uInt16 iDex = nFromIndex; iDex < nLength; iDex++) 1792 { 1793 sal_Bool bNotMatch = sal_False; 1794 OutlineSettings_Impl* pItemArr = pOutlineSettingsArrs[iDex]; 1795 sal_uInt16 nCount = pItemArr->pNumSettingsArr->Count(); 1796 for (sal_uInt16 iLevel=0;iLevel < nCount;iLevel++) 1797 { 1798 NumSettings_ImplPtr _pSet = pItemArr->pNumSettingsArr->GetObject(iLevel); 1799 sal_Int16 eNType = _pSet->nNumberType; 1800 1801 SvxNumberFormat aFmt(aNum.GetLevel(iLevel)); 1802 String sPreFix = aFmt.GetPrefix(); 1803 String sSuffix = aFmt.GetSuffix(); 1804 String sEmpty; 1805 sal_Int16 eNumType = aFmt.GetNumberingType(); 1806 if( eNumType == SVX_NUM_CHAR_SPECIAL) 1807 { 1808 sal_Unicode cChar = aFmt.GetBulletChar(); 1809 sal_Unicode ccChar = _pSet->sBulletChar.getStr()[0]; 1810 rtl::OUString sFont = _pSet->sBulletFont; 1811 if ( !((cChar == ccChar) && //pFont && sFont.compareTo(pFont->GetName()) && 1812 _pSet->eLabelFollowedBy == aFmt.GetLabelFollowedBy() && 1813 _pSet->nTabValue == aFmt.GetListtabPos() && 1814 _pSet->eNumAlign == aFmt.GetNumAdjust() && 1815 _pSet->nNumAlignAt == aFmt.GetFirstLineIndent() && 1816 _pSet->nNumIndentAt == aFmt.GetIndentAt())) 1817 { 1818 bNotMatch = sal_True; 1819 break; 1820 } 1821 }else if ((eNumType&(~LINK_TOKEN)) == SVX_NUM_BITMAP ) { 1822 const SvxBrushItem* pBrsh1 = aFmt.GetBrush(); 1823 const SvxBrushItem* pBrsh2 = _pSet->pBrushItem; 1824 sal_Bool bIsMatch = false; 1825 if (pBrsh1==pBrsh2) bIsMatch = true; 1826 if (pBrsh1 && pBrsh2) { 1827 const Graphic* pGrf1 = pBrsh1->GetGraphic();; 1828 const Graphic* pGrf2 = pBrsh2->GetGraphic();; 1829 if (pGrf1==pGrf2) bIsMatch = true; 1830 if (pGrf1 && pGrf2) { 1831 if ( pGrf1->GetBitmap().IsEqual(pGrf2->GetBitmap()) && 1832 _pSet->aSize==aFmt.GetGraphicSize()) 1833 bIsMatch = true; 1834 } 1835 } 1836 if (!bIsMatch) { 1837 bNotMatch = sal_True; 1838 break; 1839 } 1840 } else 1841 { 1842 if (!((sPreFix.CompareTo(_pSet->sPrefix.getStr())==COMPARE_EQUAL) && 1843 ( sSuffix.CompareTo(_pSet->sSuffix.getStr())==COMPARE_EQUAL ) && 1844 eNumType == eNType && 1845 _pSet->eLabelFollowedBy == aFmt.GetLabelFollowedBy() && 1846 _pSet->nTabValue == aFmt.GetListtabPos() && 1847 _pSet->eNumAlign == aFmt.GetNumAdjust() && 1848 _pSet->nNumAlignAt == aFmt.GetFirstLineIndent() && 1849 _pSet->nNumIndentAt == aFmt.GetIndentAt())) 1850 { 1851 bNotMatch = sal_True; 1852 break; 1853 } 1854 } 1855 } 1856 if ( !bNotMatch ) 1857 return iDex+1; 1858 } 1859 1860 1861 return (sal_uInt16)0xFFFF; 1862 } 1863 1864 sal_Bool OutlineTypeMgr::RelplaceNumRule(SvxNumRule& aNum,sal_uInt16 nIndex,sal_uInt16 mLevel) 1865 { 1866 //if ( mLevel == 0 || mLevel == (sal_uInt16)0xFFFF ) 1867 // return sal_False; 1868 1869 sal_uInt16 nLength = sizeof(pOutlineSettingsArrs)/sizeof(OutlineSettings_Impl*); 1870 if ( nIndex >= nLength ) 1871 return sal_False; 1872 1873 OutlineSettings_Impl* pItemArr = pOutlineSettingsArrs[nIndex]; 1874 sal_uInt16 nCount = pItemArr->pNumSettingsArr->Count(); 1875 for (sal_uInt16 iLevel=0;iLevel < nCount;iLevel++) 1876 { 1877 SvxNumberFormat aFmt(aNum.GetLevel(iLevel)); 1878 sal_Int16 eNumType = aFmt.GetNumberingType(); 1879 1880 NumSettings_ImplPtr _pSet = pItemArr->pNumSettingsArr->GetObject(iLevel); 1881 1882 _pSet->eLabelFollowedBy = aFmt.GetLabelFollowedBy(); 1883 _pSet->nTabValue = aFmt.GetListtabPos(); 1884 _pSet->eNumAlign = aFmt.GetNumAdjust(); 1885 _pSet->nNumAlignAt = aFmt.GetFirstLineIndent(); 1886 _pSet->nNumIndentAt = aFmt.GetIndentAt(); 1887 1888 if( eNumType == SVX_NUM_CHAR_SPECIAL) 1889 { 1890 sal_Unicode cChar = aFmt.GetBulletChar(); 1891 OUString sChar(cChar); 1892 _pSet->sBulletChar = sChar;//OUString(cChar); 1893 if ( aFmt.GetBulletFont() ) 1894 _pSet->sBulletFont = rtl::OUString(aFmt.GetBulletFont()->GetName()); 1895 _pSet->nNumberType = eNumType; 1896 pItemArr->bIsCustomized = sal_True; 1897 }else if ((eNumType&(~LINK_TOKEN)) == SVX_NUM_BITMAP ) { 1898 if (_pSet->pBrushItem) { 1899 delete (_pSet->pBrushItem); 1900 _pSet->pBrushItem=NULL; 1901 } 1902 if (aFmt.GetBrush()) 1903 _pSet->pBrushItem = new SvxBrushItem(*aFmt.GetBrush()); 1904 _pSet->aSize = aFmt.GetGraphicSize(); 1905 _pSet->nNumberType = eNumType; 1906 } else 1907 { 1908 _pSet->sPrefix = aFmt.GetPrefix(); 1909 _pSet->sSuffix = aFmt.GetSuffix(); 1910 _pSet->nNumberType = eNumType; 1911 if ( aFmt.GetBulletFont() ) 1912 _pSet->sBulletFont = rtl::OUString(aFmt.GetBulletFont()->GetName()); 1913 pItemArr->bIsCustomized = sal_True; 1914 } 1915 } 1916 SvxNumRule aTmpRule1(aNum); 1917 SvxNumRule aTmpRule2(aNum); 1918 ApplyNumRule(aTmpRule1,nIndex,mLevel,true); 1919 ApplyNumRule(aTmpRule2,nIndex,mLevel,false); 1920 if (aTmpRule1==aTmpRule2) pItemArr->bIsCustomized=false; 1921 if (pItemArr->bIsCustomized) { 1922 String aStrFromRES = String(SVX_RESSTR( RID_SVXSTR_NUMBULLET_CUSTOM_MULTILEVEL_DESCRIPTION)); 1923 String aReplace = String::CreateFromAscii("%LIST_NUM"); 1924 String sNUM = String::CreateFromInt32( nIndex + 1 ); 1925 aStrFromRES.SearchAndReplace(aReplace,sNUM); 1926 pItemArr->sDescription = aStrFromRES; 1927 } else { 1928 pItemArr->sDescription = GetDescription(nIndex,true); 1929 } 1930 ImplStore(String::CreateFromAscii("standard.syc")); 1931 return sal_True; 1932 } 1933 1934 sal_Bool OutlineTypeMgr::ApplyNumRule(SvxNumRule& aNum,sal_uInt16 nIndex,sal_uInt16 /* mLevel */,sal_Bool isDefault,sal_Bool isResetSize) 1935 { 1936 //if ( mLevel == (sal_uInt16)0xFFFF ) 1937 // return sal_False; 1938 1939 DBG_ASSERT(DEFAULT_NUM_VALUSET_COUNT > nIndex, "wrong index"); 1940 if(DEFAULT_NUM_VALUSET_COUNT <= nIndex) 1941 return sal_False; 1942 1943 const FontList* pList = 0; 1944 1945 OutlineSettings_Impl* pItemArr = pOutlineSettingsArrs[nIndex]; 1946 if (isDefault) pItemArr=pDefaultOutlineSettingsArrs[nIndex]; 1947 1948 //Font& rActBulletFont = lcl_GetDefaultBulletFont(); 1949 NumSettingsArr_Impl *pNumSettingsArr=pItemArr->pNumSettingsArr; 1950 1951 NumSettings_ImplPtr pLevelSettings = 0; 1952 String sBulletCharFmtName = GetBulCharFmtName(); 1953 for(sal_uInt16 i = 0; i < aNum.GetLevelCount(); i++) 1954 { 1955 if(pNumSettingsArr->Count() > i) 1956 pLevelSettings = pNumSettingsArr->GetObject(i); 1957 1958 if(!pLevelSettings) 1959 break; 1960 1961 SvxNumberFormat aFmt(aNum.GetLevel(i)); 1962 //aFmt.SetBulletFont(&pLevelSettings->aFont); 1963 Font& rActBulletFont = lcl_GetDefaultBulletFont(); 1964 if (pLevelSettings->nNumberType !=aFmt.GetNumberingType()) isResetSize=true; 1965 aFmt.SetNumberingType( pLevelSettings->nNumberType ); 1966 sal_uInt16 nUpperLevelOrChar = (sal_uInt16)pLevelSettings->nParentNumbering; 1967 if(aFmt.GetNumberingType() == SVX_NUM_CHAR_SPECIAL) 1968 { 1969 if( pLevelSettings->sBulletFont.getLength() && 1970 pLevelSettings->sBulletFont.compareTo(rActBulletFont.GetName())) 1971 { 1972 // search for the font 1973 if(!pList) 1974 { 1975 SfxObjectShell* pCurDocShell = SfxObjectShell::Current(); 1976 const SvxFontListItem* pFontListItem = (const SvxFontListItem* )pCurDocShell->GetItem( SID_ATTR_CHAR_FONTLIST ); 1977 pList = pFontListItem ? pFontListItem->GetFontList() : 0; 1978 } 1979 if(pList && pList->IsAvailable( pLevelSettings->sBulletFont ) ) 1980 { 1981 FontInfo aInfo = pList->Get(pLevelSettings->sBulletFont,WEIGHT_NORMAL, ITALIC_NONE); 1982 Font aFont(aInfo); 1983 aFmt.SetBulletFont(&aFont); 1984 } 1985 else 1986 { 1987 // if it cannot be found then create a new one 1988 Font aCreateFont( pLevelSettings->sBulletFont,String(), Size( 0, 14 ) ); 1989 aCreateFont.SetCharSet( RTL_TEXTENCODING_DONTKNOW ); 1990 aCreateFont.SetFamily( FAMILY_DONTKNOW ); 1991 aCreateFont.SetPitch( PITCH_DONTKNOW ); 1992 aCreateFont.SetWeight( WEIGHT_DONTKNOW ); 1993 aCreateFont.SetTransparent( sal_True ); 1994 aFmt.SetBulletFont( &aCreateFont ); 1995 } 1996 }else 1997 aFmt.SetBulletFont( &rActBulletFont ); 1998 1999 sal_Unicode cChar = 0; 2000 if( pLevelSettings->sBulletChar.getLength() ) 2001 cChar = pLevelSettings->sBulletChar.getStr()[0]; 2002 if( Application::GetSettings().GetLayoutRTL() ) 2003 { 2004 if( 0 == i && cChar == BulletsTypeMgr::aDynamicBulletTypes[5] ) 2005 cChar = BulletsTypeMgr::aDynamicRTLBulletTypes[5]; 2006 else if( 1 == i ) 2007 { 2008 const SvxNumberFormat& numberFmt = aNum.GetLevel(0); 2009 if( numberFmt.GetBulletChar() == BulletsTypeMgr::aDynamicRTLBulletTypes[5] ) 2010 cChar = BulletsTypeMgr::aDynamicRTLBulletTypes[4]; 2011 } 2012 } 2013 2014 aFmt.SetBulletChar(cChar); 2015 aFmt.SetCharFmtName( sBulletCharFmtName ); 2016 if (isResetSize) aFmt.SetBulletRelSize(45); 2017 }else if ((aFmt.GetNumberingType()&(~LINK_TOKEN)) == SVX_NUM_BITMAP ) { 2018 if (pLevelSettings->pBrushItem) { 2019 const Graphic* pGrf = pLevelSettings->pBrushItem->GetGraphic();; 2020 Size aSize = pLevelSettings->aSize; 2021 sal_Int16 eOrient = text::VertOrientation::LINE_CENTER; 2022 if (!isResetSize && aFmt.GetGraphicSize()!=Size(0,0)) aSize=aFmt.GetGraphicSize(); 2023 else { 2024 if (aSize.Width()==0 && aSize.Height()==0 && pGrf) { 2025 aSize = SvxNumberFormat::GetGraphicSizeMM100( pGrf ); 2026 } 2027 } 2028 aSize = OutputDevice::LogicToLogic(aSize, MAP_100TH_MM, (MapUnit)GetMapUnit()); 2029 aFmt.SetGraphicBrush( pLevelSettings->pBrushItem, &aSize, &eOrient ); 2030 } 2031 } else 2032 { 2033 aFmt.SetIncludeUpperLevels(sal::static_int_cast< sal_uInt8 >(0 != nUpperLevelOrChar ? aNum.GetLevelCount() : 0)); 2034 aFmt.SetCharFmtName(sBulletCharFmtName); 2035 if (isResetSize) aFmt.SetBulletRelSize(100); 2036 } 2037 if(pNumSettingsArr->Count() > i) { 2038 aFmt.SetLabelFollowedBy(pLevelSettings->eLabelFollowedBy); 2039 aFmt.SetListtabPos(pLevelSettings->nTabValue); 2040 aFmt.SetNumAdjust(pLevelSettings->eNumAlign); 2041 aFmt.SetFirstLineIndent(pLevelSettings->nNumAlignAt); 2042 aFmt.SetIndentAt(pLevelSettings->nNumIndentAt); 2043 } 2044 aFmt.SetPrefix(pLevelSettings->sPrefix); 2045 aFmt.SetSuffix(pLevelSettings->sSuffix); 2046 aNum.SetLevel(i, aFmt); 2047 } 2048 2049 return sal_True; 2050 } 2051 String OutlineTypeMgr::GetDescription(sal_uInt16 nIndex,sal_Bool isDefault) 2052 { 2053 String sRet; 2054 sal_uInt16 nLength = 0; 2055 nLength = sizeof(pOutlineSettingsArrs)/sizeof(OutlineSettings_Impl*); 2056 2057 if ( nIndex >= nLength ) 2058 return sRet; 2059 else 2060 { 2061 OutlineSettings_Impl* pItemArr = pOutlineSettingsArrs[nIndex]; 2062 if (isDefault) pItemArr = pDefaultOutlineSettingsArrs[nIndex]; 2063 if ( pItemArr ) 2064 { 2065 sRet = pItemArr->sDescription; 2066 }; 2067 } 2068 return sRet; 2069 } 2070 sal_Bool OutlineTypeMgr::IsCustomized(sal_uInt16 nIndex) 2071 { 2072 sal_Bool bRet = sal_False; 2073 2074 sal_uInt16 nLength = 0; 2075 nLength = sizeof(pOutlineSettingsArrs)/sizeof(OutlineSettings_Impl*); 2076 2077 if ( nIndex >= nLength ) 2078 return bRet; 2079 else 2080 { 2081 OutlineSettings_Impl* pItemArr = pOutlineSettingsArrs[nIndex]; 2082 if ( pItemArr ) 2083 { 2084 bRet = pItemArr->bIsCustomized; 2085 }; 2086 } 2087 2088 return bRet; 2089 } 2090 2091 2092 }} 2093 2094 /* vim: set noet sw=4 ts=4: */ 2095