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