1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_sw.hxx" 26 27 28 #include <hintids.hxx> 29 30 #include <tools/datetime.hxx> 31 #include <vcl/svapp.hxx> 32 #include <unotools/collatorwrapper.hxx> 33 #include <svl/urihelper.hxx> 34 #include <svl/stritem.hxx> 35 #include <unotools/syslocale.hxx> 36 #include <sfx2/app.hxx> 37 #include <sfx2/docfile.hxx> 38 #include <sfx2/docfilt.hxx> 39 #include <editeng/pmdlitem.hxx> 40 #ifndef _SVX_TSTPITEM_HXX //autogen 41 #include <editeng/tstpitem.hxx> 42 #endif 43 #include <editeng/boxitem.hxx> 44 #include <editeng/sizeitem.hxx> 45 #include <svx/pageitem.hxx> 46 #include <editeng/lrspitem.hxx> 47 #include <svl/style.hxx> 48 #ifndef _VCL_LSTBOX_HXX //autogen 49 #include <vcl/lstbox.hxx> 50 #endif 51 #include <unotools/localedatawrapper.hxx> 52 #include <com/sun/star/frame/XDispatch.hpp> 53 #include <com/sun/star/frame/XDispatchProvider.hpp> 54 #include <com/sun/star/util/XURLTransformer.hpp> 55 #include <comphelper/processfactory.hxx> 56 #include <sfx2/viewfrm.hxx> 57 #include <fmtornt.hxx> 58 #include <tabcol.hxx> 59 #include <edtwin.hxx> 60 #include <fmtfsize.hxx> 61 #include <fmthdft.hxx> 62 #include <fmtpdsc.hxx> 63 #include <wview.hxx> 64 #include <uiitems.hxx> 65 #ifndef _DOCSH_HXX 66 #include <docsh.hxx> 67 #endif 68 #include <wrtsh.hxx> 69 #include <swmodule.hxx> 70 #ifndef _VIEW_HXX 71 #include <view.hxx> 72 #endif 73 #include <uitool.hxx> 74 #include <frmatr.hxx> 75 #include <paratr.hxx> 76 #include <fmtcol.hxx> 77 #include <poolfmt.hxx> 78 #include "usrpref.hxx" 79 80 #ifndef _ERROR_H 81 #include <error.h> 82 #endif 83 #ifndef _CMDID_H 84 #include <cmdid.h> 85 #endif 86 #ifndef _GLOBALS_HRC 87 #include <globals.hrc> 88 #endif 89 #ifndef _UTLUI_HRC 90 #include <utlui.hrc> 91 #endif 92 #include <doc.hxx> 93 #include <docary.hxx> 94 #include <charfmt.hxx> 95 #include <SwStyleNameMapper.hxx> 96 // 50 cm 28350 97 // 98 #define MAXHEIGHT 28350 99 #define MAXWIDTH 28350 100 101 using namespace ::com::sun::star; 102 /*-------------------------------------------------------------------- 103 Beschreibung: Allgemeine List von StringPointern 104 --------------------------------------------------------------------*/ 105 106 107 /*-------------------------------------------------------------------- 108 Beschreibung: Metric umschalten 109 --------------------------------------------------------------------*/ 110 111 112 void SetMetric(MetricFormatter& rCtrl, FieldUnit eUnit) 113 { 114 SwTwips nMin = static_cast< SwTwips >(rCtrl.GetMin(FUNIT_TWIP)); 115 SwTwips nMax = static_cast< SwTwips >(rCtrl.GetMax(FUNIT_TWIP)); 116 117 rCtrl.SetUnit(eUnit); 118 119 rCtrl.SetMin(nMin, FUNIT_TWIP); 120 rCtrl.SetMax(nMax, FUNIT_TWIP); 121 } 122 123 /*-------------------------------------------------------------------- 124 Beschreibung: Boxinfo-Attribut setzen 125 --------------------------------------------------------------------*/ 126 127 128 void PrepareBoxInfo(SfxItemSet& rSet, const SwWrtShell& rSh) 129 { 130 SvxBoxInfoItem aBoxInfo( SID_ATTR_BORDER_INNER ); 131 const SfxPoolItem *pBoxInfo; 132 if ( SFX_ITEM_SET == rSet.GetItemState( SID_ATTR_BORDER_INNER, 133 sal_True, &pBoxInfo)) 134 aBoxInfo = *(SvxBoxInfoItem*)pBoxInfo; 135 136 // Tabellenvariante, wenn mehrere Tabellenzellen selektiert 137 rSh.GetCrsr(); //Damit GetCrsrCnt() auch das Richtige liefert 138 aBoxInfo.SetTable (rSh.IsTableMode() && rSh.GetCrsrCnt() > 1); 139 // Abstandsfeld immer anzeigen 140 aBoxInfo.SetDist ((sal_Bool) sal_True); 141 // Minimalgroesse in Tabellen und Absaetzen setzen 142 aBoxInfo.SetMinDist (rSh.IsTableMode() || rSh.GetSelectionType() & (nsSelectionType::SEL_TXT | nsSelectionType::SEL_TBL)); 143 // Default-Abstand immer setzen 144 aBoxInfo.SetDefDist (MIN_BORDER_DIST); 145 // Einzelne Linien koennen nur in Tabellen DontCare-Status haben 146 aBoxInfo.SetValid(VALID_DISABLE, !rSh.IsTableMode()); 147 148 rSet.Put(aBoxInfo); 149 } 150 151 /*-------------------------------------------------------------------- 152 Beschreibung: Header Footer fuellen 153 --------------------------------------------------------------------*/ 154 155 156 void FillHdFt(SwFrmFmt* pFmt, const SfxItemSet& rSet) 157 { 158 SwAttrSet aSet(pFmt->GetAttrSet()); 159 aSet.Put(rSet); 160 161 const SvxSizeItem& rSize = (const SvxSizeItem&)rSet.Get(SID_ATTR_PAGE_SIZE); 162 const SfxBoolItem& rDynamic = (const SfxBoolItem&)rSet.Get(SID_ATTR_PAGE_DYNAMIC); 163 164 // Groesse umsetzen 165 // 166 SwFmtFrmSize aFrmSize(rDynamic.GetValue() ? ATT_MIN_SIZE : ATT_FIX_SIZE, 167 rSize.GetSize().Width(), 168 rSize.GetSize().Height()); 169 aSet.Put(aFrmSize); 170 pFmt->SetFmtAttr(aSet); 171 } 172 173 /*-------------------------------------------------------------------- 174 Beschreibung: PageDesc <-> in Sets wandeln und zurueck 175 --------------------------------------------------------------------*/ 176 177 178 void ItemSetToPageDesc( const SfxItemSet& rSet, SwPageDesc& rPageDesc ) 179 { 180 SwFrmFmt& rMaster = rPageDesc.GetMaster(); 181 182 // alle allgemeinen Rahmen-Attribute uebertragen 183 // 184 rMaster.SetFmtAttr(rSet); 185 186 // PageData 187 // 188 if(rSet.GetItemState(SID_ATTR_PAGE) == SFX_ITEM_SET) 189 { 190 const SvxPageItem& rPageItem = (const SvxPageItem&)rSet.Get(SID_ATTR_PAGE); 191 192 sal_uInt16 nUse = (sal_uInt16)rPageItem.GetPageUsage(); 193 if(nUse & 0x04) 194 nUse |= 0x03; 195 if(nUse) 196 rPageDesc.SetUseOn( (UseOnPage) nUse ); 197 rPageDesc.SetLandscape(rPageItem.IsLandscape()); 198 SvxNumberType aNumType; 199 aNumType.SetNumberingType( static_cast< sal_Int16 >(rPageItem.GetNumType()) ); 200 rPageDesc.SetNumType(aNumType); 201 } 202 // Groesse 203 // 204 if(rSet.GetItemState(SID_ATTR_PAGE_SIZE) == SFX_ITEM_SET) 205 { 206 const SvxSizeItem& rSizeItem = (const SvxSizeItem&)rSet.Get(SID_ATTR_PAGE_SIZE); 207 SwFmtFrmSize aSize(ATT_FIX_SIZE); 208 aSize.SetSize(rSizeItem.GetSize()); 209 rMaster.SetFmtAttr(aSize); 210 } 211 // Kopzeilen-Attribute auswerten 212 // 213 const SfxPoolItem* pItem; 214 if( SFX_ITEM_SET == rSet.GetItemState( SID_ATTR_PAGE_HEADERSET, 215 sal_False, &pItem ) ) 216 { 217 const SfxItemSet& rHeaderSet = ((SvxSetItem*)pItem)->GetItemSet(); 218 const SfxBoolItem& rHeaderOn = (const SfxBoolItem&)rHeaderSet.Get(SID_ATTR_PAGE_ON); 219 220 if(rHeaderOn.GetValue()) 221 { 222 // Werte uebernehmen 223 if(!rMaster.GetHeader().IsActive()) 224 rMaster.SetFmtAttr(SwFmtHeader(sal_True)); 225 226 // Das Headerformat rausholen und anpassen 227 // 228 SwFmtHeader aHeaderFmt(rMaster.GetHeader()); 229 SwFrmFmt *pHeaderFmt = aHeaderFmt.GetHeaderFmt(); 230 ASSERT(pHeaderFmt != 0, "kein HeaderFormat"); 231 232 ::FillHdFt(pHeaderFmt, rHeaderSet); 233 234 rPageDesc.ChgHeaderShare(((const SfxBoolItem&) 235 rHeaderSet.Get(SID_ATTR_PAGE_SHARED)).GetValue()); 236 } 237 else 238 { // Header ausschalten 239 // 240 if(rMaster.GetHeader().IsActive()) 241 { 242 rMaster.SetFmtAttr(SwFmtHeader(sal_Bool(sal_False))); 243 rPageDesc.ChgHeaderShare(sal_False); 244 } 245 } 246 } 247 248 // Fusszeilen-Attribute auswerten 249 // 250 if( SFX_ITEM_SET == rSet.GetItemState( SID_ATTR_PAGE_FOOTERSET, 251 sal_False, &pItem ) ) 252 { 253 const SfxItemSet& rFooterSet = ((SvxSetItem*)pItem)->GetItemSet(); 254 const SfxBoolItem& rFooterOn = (const SfxBoolItem&)rFooterSet.Get(SID_ATTR_PAGE_ON); 255 256 if(rFooterOn.GetValue()) 257 { 258 // Werte uebernehmen 259 if(!rMaster.GetFooter().IsActive()) 260 rMaster.SetFmtAttr(SwFmtFooter(sal_True)); 261 262 // Das Footerformat rausholen und anpassen 263 // 264 SwFmtFooter aFooterFmt(rMaster.GetFooter()); 265 SwFrmFmt *pFooterFmt = aFooterFmt.GetFooterFmt(); 266 ASSERT(pFooterFmt != 0, "kein FooterFormat"); 267 268 ::FillHdFt(pFooterFmt, rFooterSet); 269 270 rPageDesc.ChgFooterShare(((const SfxBoolItem&) 271 rFooterSet.Get(SID_ATTR_PAGE_SHARED)).GetValue()); 272 } 273 else 274 { // Footer ausschalten 275 // 276 if(rMaster.GetFooter().IsActive()) 277 { 278 rMaster.SetFmtAttr(SwFmtFooter(sal_Bool(sal_False))); 279 rPageDesc.ChgFooterShare(sal_False); 280 } 281 } 282 } 283 284 // Fussnoten 285 // 286 if( SFX_ITEM_SET == rSet.GetItemState( FN_PARAM_FTN_INFO, 287 sal_False, &pItem ) ) 288 rPageDesc.SetFtnInfo( ((SwPageFtnInfoItem*)pItem)->GetPageFtnInfo() ); 289 290 291 // 292 // Columns 293 // 294 295 // Registerhaltigkeit 296 297 if(SFX_ITEM_SET == rSet.GetItemState( 298 SID_SWREGISTER_MODE, sal_False, &pItem)) 299 { 300 sal_Bool bSet = ((const SfxBoolItem*)pItem)->GetValue(); 301 if(!bSet) 302 rPageDesc.SetRegisterFmtColl(0); 303 else if(SFX_ITEM_SET == rSet.GetItemState( 304 SID_SWREGISTER_COLLECTION, sal_False, &pItem)) 305 { 306 const String& rColl = ((const SfxStringItem*)pItem)->GetValue(); 307 SwDoc& rDoc = *rMaster.GetDoc(); 308 SwTxtFmtColl* pColl = rDoc.FindTxtFmtCollByName( rColl ); 309 if( !pColl ) 310 { 311 sal_uInt16 nId = SwStyleNameMapper::GetPoolIdFromUIName( rColl, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL ); 312 if( USHRT_MAX != nId ) 313 pColl = rDoc.GetTxtCollFromPool( nId ); 314 else 315 pColl = rDoc.MakeTxtFmtColl( rColl, 316 (SwTxtFmtColl*)rDoc.GetDfltTxtFmtColl() ); 317 } 318 if( pColl ) 319 pColl->SetFmtAttr( SwRegisterItem ( sal_True )); 320 rPageDesc.SetRegisterFmtColl( pColl ); 321 } 322 } 323 } 324 325 /*-------------------------------------------------------------------- 326 Beschreibung: 327 --------------------------------------------------------------------*/ 328 329 330 void PageDescToItemSet( const SwPageDesc& rPageDesc, SfxItemSet& rSet) 331 { 332 const SwFrmFmt& rMaster = rPageDesc.GetMaster(); 333 334 // Seitendaten 335 // 336 SvxPageItem aPageItem(SID_ATTR_PAGE); 337 aPageItem.SetDescName(rPageDesc.GetName()); 338 aPageItem.SetPageUsage(rPageDesc.GetUseOn()); 339 aPageItem.SetLandscape(rPageDesc.GetLandscape()); 340 aPageItem.SetNumType((SvxNumType)rPageDesc.GetNumType().GetNumberingType()); 341 rSet.Put(aPageItem); 342 343 // Groesse 344 SvxSizeItem aSizeItem(SID_ATTR_PAGE_SIZE, rMaster.GetFrmSize().GetSize()); 345 rSet.Put(aSizeItem); 346 347 // Maximale Groesse 348 SvxSizeItem aMaxSizeItem(SID_ATTR_PAGE_MAXSIZE, Size(MAXWIDTH, MAXHEIGHT)); 349 rSet.Put(aMaxSizeItem); 350 351 // Raender, Umrandung und das andere Zeug 352 // 353 rSet.Put(rMaster.GetAttrSet()); 354 355 SvxBoxInfoItem aBoxInfo( SID_ATTR_BORDER_INNER ); 356 const SfxPoolItem *pBoxInfo; 357 if ( SFX_ITEM_SET == rSet.GetItemState( SID_ATTR_BORDER_INNER, 358 sal_True, &pBoxInfo) ) 359 aBoxInfo = *(SvxBoxInfoItem*)pBoxInfo; 360 361 aBoxInfo.SetTable( sal_False ); 362 // Abstandsfeld immer anzeigen 363 aBoxInfo.SetDist( sal_True); 364 // Minimalgroesse in Tabellen und Absaetzen setzen 365 aBoxInfo.SetMinDist( sal_False ); 366 // Default-Abstand immer setzen 367 aBoxInfo.SetDefDist( MIN_BORDER_DIST ); 368 // Einzelne Linien koennen nur in Tabellen DontCare-Status haben 369 aBoxInfo.SetValid( VALID_DISABLE ); 370 rSet.Put( aBoxInfo ); 371 372 373 SfxStringItem aFollow(SID_ATTR_PAGE_EXT1, aEmptyStr); 374 if(rPageDesc.GetFollow()) 375 aFollow.SetValue(rPageDesc.GetFollow()->GetName()); 376 rSet.Put(aFollow); 377 378 // Header 379 // 380 if(rMaster.GetHeader().IsActive()) 381 { 382 const SwFmtHeader &rHeaderFmt = rMaster.GetHeader(); 383 const SwFrmFmt *pHeaderFmt = rHeaderFmt.GetHeaderFmt(); 384 ASSERT(pHeaderFmt != 0, kein HeaderFormat.); 385 386 // HeaderInfo, Raender, Hintergrund, Umrandung 387 // 388 SfxItemSet aHeaderSet(*rSet.GetPool(), 389 RES_FRMATR_BEGIN,RES_FRMATR_END - 1, // [82 390 391 //UUUU FillAttribute support 392 XATTR_FILL_FIRST, XATTR_FILL_LAST, // [1014 393 394 SID_ATTR_BORDER_INNER,SID_ATTR_BORDER_INNER, // [10023 395 SID_ATTR_PAGE_SIZE,SID_ATTR_PAGE_SIZE, // [10051 396 SID_ATTR_PAGE_ON,SID_ATTR_PAGE_SHARED, // [10060 397 0, 0); 398 399 //UUUU set correct parent to get the XFILL_NONE FillStyle as needed 400 aHeaderSet.SetParent(&rMaster.GetDoc()->GetDfltFrmFmt()->GetAttrSet()); 401 402 // dynamische oder feste Hoehe 403 // 404 SfxBoolItem aOn(SID_ATTR_PAGE_ON, sal_True); 405 aHeaderSet.Put(aOn); 406 407 const SwFmtFrmSize &rFrmSize = pHeaderFmt->GetFrmSize(); 408 const SwFrmSize eSizeType = rFrmSize.GetHeightSizeType(); 409 SfxBoolItem aDynamic(SID_ATTR_PAGE_DYNAMIC, eSizeType != ATT_FIX_SIZE); 410 aHeaderSet.Put(aDynamic); 411 412 // Links gleich rechts 413 // 414 SfxBoolItem aShared(SID_ATTR_PAGE_SHARED, rPageDesc.IsHeaderShared()); 415 aHeaderSet.Put(aShared); 416 417 // Groesse 418 SvxSizeItem aSize(SID_ATTR_PAGE_SIZE, Size(rFrmSize.GetSize())); 419 aHeaderSet.Put(aSize); 420 421 // Rahmen-Attribute umschaufeln 422 // 423 aHeaderSet.Put(pHeaderFmt->GetAttrSet()); 424 aHeaderSet.Put( aBoxInfo ); 425 426 // SetItem erzeugen 427 // 428 SvxSetItem aSetItem(SID_ATTR_PAGE_HEADERSET, aHeaderSet); 429 rSet.Put(aSetItem); 430 } 431 432 // Footer 433 if(rMaster.GetFooter().IsActive()) 434 { 435 const SwFmtFooter &rFooterFmt = rMaster.GetFooter(); 436 const SwFrmFmt *pFooterFmt = rFooterFmt.GetFooterFmt(); 437 ASSERT(pFooterFmt != 0, kein FooterFormat.); 438 439 // FooterInfo, Raender, Hintergrund, Umrandung 440 // 441 SfxItemSet aFooterSet(*rSet.GetPool(), 442 RES_FRMATR_BEGIN,RES_FRMATR_END - 1, // [82 443 444 //UUUU FillAttribute support 445 XATTR_FILL_FIRST, XATTR_FILL_LAST, // [1014 446 447 SID_ATTR_BORDER_INNER,SID_ATTR_BORDER_INNER, // [10023 448 SID_ATTR_PAGE_SIZE,SID_ATTR_PAGE_SIZE, // [10051 449 SID_ATTR_PAGE_ON,SID_ATTR_PAGE_SHARED, // [10060 450 0, 0); 451 452 //UUUU set correct parent to get the XFILL_NONE FillStyle as needed 453 aFooterSet.SetParent(&rMaster.GetDoc()->GetDfltFrmFmt()->GetAttrSet()); 454 455 // dynamische oder feste Hoehe 456 // 457 SfxBoolItem aOn(SID_ATTR_PAGE_ON, sal_True); 458 aFooterSet.Put(aOn); 459 460 const SwFmtFrmSize &rFrmSize = pFooterFmt->GetFrmSize(); 461 const SwFrmSize eSizeType = rFrmSize.GetHeightSizeType(); 462 SfxBoolItem aDynamic(SID_ATTR_PAGE_DYNAMIC, eSizeType != ATT_FIX_SIZE); 463 aFooterSet.Put(aDynamic); 464 465 // Links gleich rechts 466 // 467 SfxBoolItem aShared(SID_ATTR_PAGE_SHARED, rPageDesc.IsFooterShared()); 468 aFooterSet.Put(aShared); 469 470 // Groesse 471 SvxSizeItem aSize(SID_ATTR_PAGE_SIZE, Size(rFrmSize.GetSize())); 472 aFooterSet.Put(aSize); 473 474 // Rahmen-Attribute umschaufeln 475 // 476 aFooterSet.Put(pFooterFmt->GetAttrSet()); 477 aFooterSet.Put( aBoxInfo ); 478 479 // SetItem erzeugen 480 // 481 SvxSetItem aSetItem(SID_ATTR_PAGE_FOOTERSET, aFooterSet); 482 rSet.Put(aSetItem); 483 } 484 485 // Fussnoten einbauen 486 // 487 SwPageFtnInfo& rInfo = (SwPageFtnInfo&)rPageDesc.GetFtnInfo(); 488 SwPageFtnInfoItem aFtnItem(FN_PARAM_FTN_INFO, rInfo); 489 rSet.Put(aFtnItem); 490 491 // Registerhaltigkeit 492 493 const SwTxtFmtColl* pCol = rPageDesc.GetRegisterFmtColl(); 494 SwRegisterItem aReg(pCol != 0); 495 aReg.SetWhich(SID_SWREGISTER_MODE); 496 rSet.Put(aReg); 497 if(pCol) 498 rSet.Put(SfxStringItem(SID_SWREGISTER_COLLECTION, pCol->GetName())); 499 500 } 501 502 503 /*-------------------------------------------------------------------- 504 Beschreibung: DefaultTabs setzen 505 --------------------------------------------------------------------*/ 506 507 508 void MakeDefTabs(SwTwips nDefDist, SvxTabStopItem& rTabs) 509 { 510 if( rTabs.Count() ) 511 return; 512 { 513 SvxTabStop aSwTabStop( nDefDist, SVX_TAB_ADJUST_DEFAULT ); 514 rTabs.Insert( aSwTabStop ); 515 } 516 } 517 518 /*-------------------------------------------------------------------- 519 Beschreibung: Abstand zwischen zwei Tabs 520 --------------------------------------------------------------------*/ 521 522 523 sal_uInt16 GetTabDist(const SvxTabStopItem& rTabs) 524 { 525 sal_uInt16 nDefDist; 526 if( rTabs.Count() ) 527 nDefDist = (sal_uInt16)( rTabs[0].GetTabPos() ); 528 else 529 nDefDist = 1134; // 2cm 530 return nDefDist; 531 } 532 533 534 // erfrage ob im Set eine Sfx-PageDesc-Kombination vorliegt und returne diese 535 void SfxToSwPageDescAttr( const SwWrtShell& rShell, SfxItemSet& rSet ) 536 { 537 const SfxPoolItem* pItem; 538 SwFmtPageDesc aPgDesc; 539 540 sal_Bool bChanged = sal_False; 541 // Seitennummer 542 if(SFX_ITEM_SET == rSet.GetItemState(SID_ATTR_PARA_PAGENUM, sal_False, &pItem)) 543 { 544 aPgDesc.SetNumOffset(((SfxUInt16Item*)pItem)->GetValue()); 545 bChanged = sal_True; 546 } 547 if( SFX_ITEM_SET == rSet.GetItemState( SID_ATTR_PARA_MODEL, sal_False, &pItem )) 548 { 549 const String& rDescName = ((SvxPageModelItem*)pItem)->GetValue(); 550 if( rDescName.Len() ) // kein Name -> PageDesc ausschalten! 551 { 552 // nur loeschen, wenn PageDesc eingschaltet wird! 553 rSet.ClearItem( RES_BREAK ); 554 SwPageDesc* pDesc = ((SwWrtShell&)rShell).FindPageDescByName( 555 rDescName, sal_True ); 556 if( pDesc ) 557 aPgDesc.RegisterToPageDesc( *pDesc ); 558 } 559 rSet.ClearItem( SID_ATTR_PARA_MODEL ); 560 bChanged = sal_True; 561 } 562 else 563 { 564 SfxItemSet aCoreSet(rShell.GetView().GetPool(), RES_PAGEDESC, RES_PAGEDESC ); 565 rShell.GetCurAttr( aCoreSet ); 566 if(SFX_ITEM_SET == aCoreSet.GetItemState( RES_PAGEDESC, sal_True, &pItem ) ) 567 { 568 if( ((SwFmtPageDesc*)pItem)->GetPageDesc() ) 569 { 570 aPgDesc.RegisterToPageDesc( *((SwFmtPageDesc*)pItem)->GetPageDesc() ); 571 } 572 } 573 } 574 575 576 if(bChanged) 577 rSet.Put( aPgDesc ); 578 } 579 580 581 // erfrage ob im Set eine Sfx-PageDesc-Kombination vorliegt und returne diese 582 void SwToSfxPageDescAttr( SfxItemSet& rCoreSet ) 583 { 584 const SfxPoolItem* pItem = 0; 585 String aName; 586 sal_uInt16 nPageNum = 0; 587 sal_Bool bPut = sal_True; 588 switch( rCoreSet.GetItemState( RES_PAGEDESC, sal_True, &pItem ) ) 589 { 590 case SFX_ITEM_SET: 591 { 592 if( ((SwFmtPageDesc*)pItem)->GetPageDesc() ) 593 { 594 aName = ((SwFmtPageDesc*)pItem)->GetPageDesc()->GetName(); 595 nPageNum = ((SwFmtPageDesc*)pItem)->GetNumOffset(); 596 } 597 rCoreSet.ClearItem( RES_PAGEDESC ); 598 // Seitennummer 599 } 600 break; 601 602 case SFX_ITEM_AVAILABLE: 603 break; 604 605 default: 606 bPut = sal_False; 607 } 608 SfxUInt16Item aPageNum( SID_ATTR_PARA_PAGENUM, nPageNum ); 609 rCoreSet.Put( aPageNum ); 610 611 if(bPut) 612 rCoreSet.Put( SvxPageModelItem( aName, sal_True, SID_ATTR_PARA_MODEL ) ); 613 } 614 615 /*-------------------------------------------------------------------- 616 Beschreibung: Metric ermitteln 617 --------------------------------------------------------------------*/ 618 619 620 FieldUnit GetDfltMetric(sal_Bool bWeb) 621 { 622 return SW_MOD()->GetUsrPref(bWeb)->GetMetric(); 623 } 624 625 /*-------------------------------------------------------------------- 626 Beschreibung: Metric ermitteln 627 --------------------------------------------------------------------*/ 628 629 630 void SetDfltMetric( FieldUnit eMetric, sal_Bool bWeb ) 631 { 632 SW_MOD()->ApplyUserMetric(eMetric, bWeb); 633 } 634 635 /*-----------------09.04.98 16:58------------------- 636 637 --------------------------------------------------*/ 638 sal_uInt16 InsertStringSorted(const String& rEntry, ListBox& rToFill, sal_uInt16 nOffset ) 639 { 640 sal_uInt16 i = nOffset; 641 CollatorWrapper& rCaseColl = ::GetAppCaseCollator(); 642 643 for( ; i < rToFill.GetEntryCount(); i++ ) 644 { 645 if( 0 < rCaseColl.compareString( rToFill.GetEntry(i), rEntry )) 646 break; 647 } 648 return rToFill.InsertEntry(rEntry, i); 649 } 650 void FillCharStyleListBox(ListBox& rToFill, SwDocShell* pDocSh, sal_Bool bSorted, sal_Bool bWithDefault) 651 { 652 sal_Bool bHasOffset = rToFill.GetEntryCount() > 0; 653 SfxStyleSheetBasePool* pPool = pDocSh->GetStyleSheetPool(); 654 pPool->SetSearchMask(SFX_STYLE_FAMILY_CHAR, SFXSTYLEBIT_ALL); 655 SwDoc* pDoc = pDocSh->GetDoc(); 656 const SfxStyleSheetBase* pBase = pPool->First(); 657 String sStandard; 658 SwStyleNameMapper::FillUIName( RES_POOLCOLL_STANDARD, sStandard ); 659 while(pBase) 660 { 661 if(bWithDefault || pBase->GetName() != sStandard) 662 { 663 sal_uInt16 nPos; 664 if(bSorted) 665 nPos = InsertStringSorted(pBase->GetName(), rToFill, bHasOffset ); 666 else 667 nPos = rToFill.InsertEntry(pBase->GetName()); 668 long nPoolId = SwStyleNameMapper::GetPoolIdFromUIName( pBase->GetName(), nsSwGetPoolIdFromName::GET_POOLID_CHRFMT ); 669 rToFill.SetEntryData( nPos, (void*) (nPoolId)); 670 } 671 pBase = pPool->Next(); 672 } 673 // non-pool styles 674 const SwCharFmts* pFmts = pDoc->GetCharFmts(); 675 for(sal_uInt16 i = 0; i < pFmts->Count(); i++) 676 { 677 const SwCharFmt* pFmt = (*pFmts)[i]; 678 if(pFmt->IsDefault()) 679 continue; 680 const String& rName = pFmt->GetName(); 681 if(rToFill.GetEntryPos(rName) == LISTBOX_ENTRY_NOTFOUND) 682 { 683 sal_uInt16 nPos; 684 if(bSorted) 685 nPos = InsertStringSorted(rName, rToFill, bHasOffset ); 686 else 687 nPos = rToFill.InsertEntry(rName); 688 long nPoolId = USHRT_MAX; 689 rToFill.SetEntryData( nPos, (void*) (nPoolId)); 690 } 691 } 692 }; 693 694 /* -----------------27.04.98 08:26------------------- 695 * 696 * --------------------------------------------------*/ 697 SwTwips GetTableWidth( SwFrmFmt* pFmt, SwTabCols& rCols, sal_uInt16 *pPercent, 698 SwWrtShell* pSh ) 699 { 700 //Die Breite zu besorgen ist etwas komplizierter. 701 SwTwips nWidth = 0; 702 const sal_Int16 eOri = pFmt->GetHoriOrient().GetHoriOrient(); 703 switch(eOri) 704 { 705 case text::HoriOrientation::FULL: nWidth = rCols.GetRight(); break; 706 case text::HoriOrientation::LEFT_AND_WIDTH: 707 case text::HoriOrientation::LEFT: 708 case text::HoriOrientation::RIGHT: 709 case text::HoriOrientation::CENTER: 710 nWidth = pFmt->GetFrmSize().GetWidth(); 711 break; 712 default: 713 { 714 if(pSh) 715 { 716 const SwFrmFmt *pFlyFmt; 717 if ( 0 == (pFlyFmt = pSh->GetFlyFrmFmt()) ) 718 { 719 nWidth = pSh->GetAnyCurRect(RECT_PAGE_PRT).Width(); 720 } 721 else 722 { 723 nWidth = pSh->GetAnyCurRect(RECT_FLY_PRT_EMBEDDED).Width(); 724 } 725 } 726 else 727 { 728 DBG_ERROR("wo soll die Breite denn herkommen?"); 729 } 730 const SvxLRSpaceItem& rLRSpace = pFmt->GetLRSpace(); 731 nWidth -= (rLRSpace.GetRight() + rLRSpace.GetLeft()); 732 } 733 } 734 if (pPercent) 735 *pPercent = pFmt->GetFrmSize().GetWidthPercent(); 736 return nWidth; 737 } 738 739 /*------------------------------------------------------------------------*/ 740 741 String GetAppLangDateTimeString( const DateTime& rDT ) 742 { 743 const SvtSysLocale aSysLocale; 744 const LocaleDataWrapper& rAppLclData = aSysLocale.GetLocaleData(); 745 String sRet( rAppLclData.getDate( rDT )); 746 ( sRet += ' ' ) += rAppLclData.getTime( rDT, sal_False, sal_False ); 747 return sRet; 748 } 749 750 /*-- 26.01.2006 08:06:33--------------------------------------------------- 751 752 -----------------------------------------------------------------------*/ 753 bool ExecuteMenuCommand( PopupMenu& rMenu, SfxViewFrame& rViewFrame, sal_uInt16 nId ) 754 { 755 bool bRet = false; 756 sal_uInt16 nItemCount = rMenu.GetItemCount(); 757 String sCommand; 758 for( sal_uInt16 nItem = 0; nItem < nItemCount; ++nItem) 759 { 760 PopupMenu* pPopup = rMenu.GetPopupMenu( rMenu.GetItemId( nItem ) ); 761 if(pPopup) 762 { 763 sCommand = pPopup->GetItemCommand(nId); 764 if(sCommand.Len()) 765 break; 766 } 767 } 768 if(sCommand.Len()) 769 { 770 uno::Reference< frame::XFrame > xFrame = rViewFrame.GetFrame().GetFrameInterface(); 771 uno::Reference < frame::XDispatchProvider > xProv( xFrame, uno::UNO_QUERY ); 772 util::URL aURL; 773 aURL.Complete = sCommand; 774 uno::Reference < util::XURLTransformer > xTrans( ::comphelper::getProcessServiceFactory()->createInstance( rtl::OUString::createFromAscii("com.sun.star.util.URLTransformer" )), uno::UNO_QUERY ); 775 xTrans->parseStrict( aURL ); 776 uno::Reference< frame::XDispatch > xDisp = xProv->queryDispatch( aURL, ::rtl::OUString(), 0 ); 777 if( xDisp.is() ) 778 { 779 uno::Sequence< beans::PropertyValue > aSeq; 780 xDisp->dispatch( aURL, aSeq ); 781 bRet = true; 782 } 783 } 784 return bRet; 785 } 786