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_sd.hxx" 26 #include <editeng/eeitem.hxx> 27 #include <editeng/flditem.hxx> 28 #include <sfx2/printer.hxx> 29 #include <svl/inethist.hxx> 30 #include <svl/poolitem.hxx> 31 #include <svl/flagitem.hxx> 32 #include <unotools/useroptions.hxx> 33 #include <sfx2/bindings.hxx> 34 #include <vcl/msgbox.hxx> 35 #include <sfx2/viewfrm.hxx> 36 #include <sfx2/docfile.hxx> 37 #include <sfx2/request.hxx> 38 39 #include <editeng/measfld.hxx> 40 #include <editeng/editstat.hxx> 41 #include <editeng/editeng.hxx> 42 43 #include <svx/dialogs.hrc> 44 #include <svx/svdotext.hxx> 45 #include <svx/svdpagv.hxx> 46 #include <svx/svdopage.hxx> 47 48 #include <sfx2/sfxdlg.hxx> 49 50 51 #include <svx/sdr/contact/displayinfo.hxx> 52 53 #define _SD_DLL // fuer SD_MOD() 54 #include "sdmod.hxx" 55 #include "sddll.hxx" 56 #include "app.hrc" 57 #include "glob.hrc" 58 #include "strings.hrc" 59 #include "res_bmp.hrc" 60 #include "ViewShell.hxx" 61 #ifndef SD_FRAMW_VIEW_HXX 62 #include "FrameView.hxx" 63 #endif 64 #include "sdattr.hxx" 65 #include "tpoption.hrc" 66 #include "optsitem.hxx" 67 #include "DrawDocShell.hxx" 68 #include "drawdoc.hxx" 69 #include "Outliner.hxx" 70 #include "sdresid.hxx" 71 #include "pres.hxx" 72 #include "DrawViewShell.hxx" 73 #include "OutlineViewShell.hxx" 74 #include "OutlineView.hxx" 75 #include "ViewShellBase.hxx" 76 #include "sdpage.hxx" 77 #include "sdxfer.hxx" 78 #include "sdabstdlg.hxx" 79 #include "tpoption.hrc" 80 #include "prntopts.hrc" 81 #include <svl/intitem.hxx> 82 83 /** retrieves the page that is currently painted. This will only be the master page 84 if the current drawn view only shows the master page*/ 85 static SdPage* GetCurrentPage( sd::ViewShell* pViewSh, EditFieldInfo* pInfo, bool& bMasterView ) 86 { 87 if( !pInfo ) 88 return 0; 89 90 bMasterView = false; 91 SdPage* pPage = dynamic_cast< SdPage* >( pInfo->GetSdrPage() ); 92 SdrOutliner* pOutliner = dynamic_cast< SdrOutliner* >( pInfo->GetOutliner() ); 93 94 // special case, someone already set the current page on the EditFieldInfo 95 // This is used from the svx::UnoGraphicsExporter f.e. 96 if( pPage ) 97 { 98 bMasterView = false; 99 return pPage; 100 } 101 102 // first try to check if we are inside the outline view 103 sd::OutlineView* pSdView = NULL; 104 if( pViewSh && pViewSh->ISA(sd::OutlineViewShell)) 105 pSdView = static_cast<sd::OutlineView*> (static_cast<sd::OutlineViewShell*>(pViewSh)->GetView()); 106 107 if (pSdView != NULL && (pOutliner == pSdView->GetOutliner())) 108 { 109 // outline mode 110 int nPgNum = 0; 111 Outliner* pOutl = pSdView->GetOutliner(); 112 long nPos = pInfo->GetPara(); 113 sal_uLong nParaPos = 0; 114 115 for( Paragraph* pPara = pOutl->GetParagraph( 0 ); pPara && nPos >= 0; pPara = pOutl->GetParagraph( ++nParaPos ), nPos-- ) 116 { 117 if( pOutl->HasParaFlag( pPara, PARAFLAG_ISPAGE ) ) 118 nPgNum++; 119 } 120 121 pPage = pViewSh->GetDoc()->GetSdPage( (sal_uInt16)nPgNum, PK_STANDARD ); 122 } 123 else 124 { 125 // draw mode, slide mode and preview. Get the processed page from the outliner 126 if(pOutliner) 127 { 128 pPage = dynamic_cast< SdPage* >(const_cast< SdrPage* >(pOutliner->getVisualizedPage())); 129 } 130 131 // The path using GetPaintingPageView() and GetCurrentPaintingDisplayInfo() 132 // is no longer needed. I debugged and checked all usages of PageNumber decompositions 133 // which all use the new possibility of setting the visualized page at the SdrOutliner. 134 135 // if all else failed, geht the current page from the object that is 136 // currently formated from the document 137 if(!pPage) 138 { 139 const SdrTextObj* pTextObj = (pViewSh && pViewSh->GetDoc()) ? pViewSh->GetDoc()->GetFormattingTextObj() : NULL; 140 141 if( pTextObj ) 142 { 143 pPage = dynamic_cast< SdPage* >( pTextObj->GetPage() ); 144 } 145 } 146 147 if(pPage) 148 { 149 bMasterView = pPage && pPage->IsMasterPage(); 150 } 151 } 152 153 return pPage; 154 } 155 156 /************************************************************************* 157 |* 158 |* Link fuer CalcFieldValue des Outliners 159 |* 160 \************************************************************************/ 161 162 IMPL_LINK(SdModule, CalcFieldValueHdl, EditFieldInfo*, pInfo) 163 { 164 if (pInfo) 165 { 166 const SvxFieldData* pField = pInfo->GetField().GetField(); 167 ::sd::DrawDocShell* pDocShell = NULL; 168 SdDrawDocument* pDoc = 0; 169 170 SdrOutliner* pSdrOutliner = dynamic_cast< SdrOutliner* >( pInfo->GetOutliner() ); 171 if( pSdrOutliner ) 172 { 173 const SdrTextObj* pTextObj = pSdrOutliner->GetTextObj(); 174 175 if( pTextObj ) 176 pDoc = dynamic_cast< SdDrawDocument* >( pTextObj->GetModel() ); 177 178 if( pDoc ) 179 pDocShell = pDoc->GetDocSh(); 180 } 181 182 if( !pDocShell ) 183 pDocShell = dynamic_cast< ::sd::DrawDocShell *>( SfxObjectShell::Current() ); 184 185 const SvxDateField* pDateField = 0; 186 const SvxExtTimeField* pExtTimeField = 0; 187 const SvxExtFileField* pExtFileField = 0; 188 const SvxAuthorField* pAuthorField = 0; 189 const SvxURLField* pURLField = 0; 190 191 if( (pDateField = dynamic_cast< const SvxDateField* >(pField)) != 0 ) 192 { 193 LanguageType eLang = pInfo->GetOutliner()->GetLanguage( pInfo->GetPara(), pInfo->GetPos() ); 194 pInfo->SetRepresentation( pDateField->GetFormatted( *GetNumberFormatter(), eLang ) ); 195 } 196 else if( (pExtTimeField = dynamic_cast< const SvxExtTimeField *>(pField)) != 0 ) 197 { 198 LanguageType eLang = pInfo->GetOutliner()->GetLanguage( pInfo->GetPara(), pInfo->GetPos() ); 199 pInfo->SetRepresentation( pExtTimeField->GetFormatted( *GetNumberFormatter(), eLang ) ); 200 } 201 else if( (pExtFileField = dynamic_cast< const SvxExtFileField * >(pField)) != 0 ) 202 { 203 if( pDocShell && (pExtFileField->GetType() != SVXFILETYPE_FIX) ) 204 { 205 String aName; 206 if( pDocShell->HasName() ) 207 aName = pDocShell->GetMedium()->GetName(); 208 else 209 aName = pDocShell->GetName(); 210 211 const_cast< SvxExtFileField* >(pExtFileField)->SetFile( aName ); 212 } 213 pInfo->SetRepresentation( pExtFileField->GetFormatted() ); 214 215 } 216 else if( (pAuthorField = dynamic_cast< const SvxAuthorField* >( pField )) != 0 ) 217 { 218 if( pAuthorField->GetType() != SVXAUTHORTYPE_FIX ) 219 { 220 SvtUserOptions aUserOptions; 221 SvxAuthorField aAuthorField( 222 aUserOptions.GetFirstName(), aUserOptions.GetLastName(), aUserOptions.GetID(), 223 pAuthorField->GetType(), pAuthorField->GetFormat() ); 224 225 *(const_cast< SvxAuthorField* >(pAuthorField)) = aAuthorField; 226 } 227 pInfo->SetRepresentation( pAuthorField->GetFormatted() ); 228 229 } 230 else if( dynamic_cast< const SvxPageField* >(pField) ) 231 { 232 String aRepresentation; 233 aRepresentation += sal_Unicode( ' ' ); 234 235 ::sd::ViewShell* pViewSh = pDocShell ? pDocShell->GetViewShell() : NULL; 236 if(pViewSh == NULL) 237 { 238 ::sd::ViewShellBase* pBase = PTR_CAST(::sd::ViewShellBase, SfxViewShell::Current()); 239 if(pBase) 240 pViewSh = pBase->GetMainViewShell().get(); 241 } 242 if( !pDoc && pViewSh ) 243 pDoc = pViewSh->GetDoc(); 244 245 bool bMasterView; 246 SdPage* pPage = GetCurrentPage( pViewSh, pInfo, bMasterView ); 247 248 if( pPage && pDoc && !bMasterView ) 249 { 250 int nPgNum; 251 252 if( (pPage->GetPageKind() == PK_HANDOUT) && pViewSh ) 253 { 254 nPgNum = pViewSh->GetPrintedHandoutPageNum(); 255 } 256 else 257 { 258 nPgNum = (pPage->GetPageNum() - 1) / 2 + 1; 259 } 260 aRepresentation = pDoc->CreatePageNumValue((sal_uInt16)nPgNum); 261 } 262 else 263 { 264 static String aNumberText( SdResId( STR_FIELD_PLACEHOLDER_NUMBER ) ); 265 aRepresentation = aNumberText; 266 } 267 268 pInfo->SetRepresentation( aRepresentation ); 269 } 270 else if( dynamic_cast< const SvxPagesField* >(pField) ) 271 { 272 String aRepresentation; 273 aRepresentation += sal_Unicode( ' ' ); 274 275 ::sd::ViewShell* pViewSh = pDocShell ? pDocShell->GetViewShell() : NULL; 276 if(pViewSh == NULL) 277 { 278 ::sd::ViewShellBase* pBase = PTR_CAST(::sd::ViewShellBase, SfxViewShell::Current()); 279 if(pBase) 280 pViewSh = pBase->GetMainViewShell().get(); 281 } 282 if( !pDoc && pViewSh ) 283 pDoc = pViewSh->GetDoc(); 284 285 bool bMasterView; 286 SdPage* pPage = GetCurrentPage( pViewSh, pInfo, bMasterView ); 287 288 sal_uInt16 nPageCount = 0; 289 290 if( !bMasterView ) 291 { 292 if( pPage && (pPage->GetPageKind() == PK_HANDOUT) && pViewSh ) 293 { 294 nPageCount = pViewSh->GetPrintedHandoutPageCount(); 295 } 296 else if( pDoc ) 297 { 298 nPageCount = (sal_uInt16)pDoc->GetSdPageCount(PK_STANDARD); 299 } 300 } 301 302 if( nPageCount > 0 ) 303 { 304 aRepresentation = pDoc->CreatePageNumValue(nPageCount); 305 } 306 else 307 { 308 static String aNumberText( SdResId( STR_FIELD_PLACEHOLDER_COUNT ) ); 309 aRepresentation = aNumberText; 310 } 311 312 pInfo->SetRepresentation( aRepresentation ); 313 } 314 else if( (pURLField = dynamic_cast< const SvxURLField* >(pField)) != 0 ) 315 { 316 switch ( pURLField->GetFormat() ) 317 { 318 case SVXURLFORMAT_APPDEFAULT: //!!! einstellbar an App??? 319 case SVXURLFORMAT_REPR: 320 pInfo->SetRepresentation( pURLField->GetRepresentation() ); 321 break; 322 323 case SVXURLFORMAT_URL: 324 pInfo->SetRepresentation( pURLField->GetURL() ); 325 break; 326 } 327 328 String aURL = pURLField->GetURL(); 329 330 svtools::ColorConfig aConfig; 331 svtools::ColorConfigEntry eEntry = 332 INetURLHistory::GetOrCreate()->QueryUrl( aURL ) ? svtools::LINKSVISITED : svtools::LINKS; 333 pInfo->SetTxtColor( aConfig.GetColorValue(eEntry).nColor ); 334 } 335 else if ( dynamic_cast< const SdrMeasureField* >(pField)) 336 { 337 pInfo->ClearFldColor(); 338 } 339 else 340 { 341 String aRepresentation; 342 343 bool bHeaderField = dynamic_cast< const SvxHeaderField* >( pField ) != 0; 344 bool bFooterField = !bHeaderField && (dynamic_cast< const SvxFooterField* >( pField ) != 0 ); 345 bool bDateTimeField = !bHeaderField && !bFooterField && (dynamic_cast< const SvxDateTimeField* >( pField ) != 0); 346 347 if( bHeaderField || bFooterField || bDateTimeField ) 348 { 349 sd::ViewShell* pViewSh = pDocShell ? pDocShell->GetViewShell() : NULL; 350 bool bMasterView = false; 351 SdPage* pPage = GetCurrentPage( pViewSh, pInfo, bMasterView ); 352 353 if( (pPage == NULL) || bMasterView ) 354 { 355 if( bHeaderField ) 356 { 357 static String aHeaderStr( SdResId( STR_FIELD_PLACEHOLDER_HEADER ) ); 358 aRepresentation = aHeaderStr; 359 } 360 else if (bFooterField ) 361 { 362 static String aFooterStr( SdResId( STR_FIELD_PLACEHOLDER_FOOTER ) ); 363 aRepresentation = aFooterStr; 364 } 365 else if (bDateTimeField ) 366 { 367 static String aDateTimeStr( SdResId( STR_FIELD_PLACEHOLDER_DATETIME ) ); 368 aRepresentation = aDateTimeStr; 369 } 370 } 371 else 372 { 373 const sd::HeaderFooterSettings &rSettings = pPage->getHeaderFooterSettings(); 374 375 if( bHeaderField ) 376 { 377 aRepresentation = rSettings.maHeaderText; 378 } 379 else if( bFooterField ) 380 { 381 aRepresentation = rSettings.maFooterText; 382 } 383 else if( bDateTimeField ) 384 { 385 if( rSettings.mbDateTimeIsFixed ) 386 { 387 aRepresentation = rSettings.maDateTimeText; 388 } 389 else 390 { 391 Date aDate; 392 Time aTime; 393 LanguageType eLang = pInfo->GetOutliner()->GetLanguage( pInfo->GetPara(), pInfo->GetPos() ); 394 aRepresentation = SvxDateTimeField::GetFormatted( aDate, aTime, (SvxDateFormat)rSettings.meDateTimeFormat, *GetNumberFormatter(), eLang ); 395 } 396 } 397 } 398 } 399 else 400 { 401 DBG_ERROR("sd::SdModule::CalcFieldValueHdl(), unknown field type!"); 402 } 403 404 if( aRepresentation.Len() == 0 ) // TODO: Edit engine doesn't handle empty fields? 405 aRepresentation += sal_Unicode( ' ' ); 406 pInfo->SetRepresentation( aRepresentation ); 407 } 408 } 409 410 return(0); 411 } 412 413 414 415 /************************************************************************* 416 |* 417 |* virt. Methoden fuer Optionendialog 418 |* 419 \************************************************************************/ 420 SfxItemSet* SdModule::CreateItemSet( sal_uInt16 nSlot ) 421 { 422 ::sd::FrameView* pFrameView = NULL; 423 ::sd::DrawDocShell* pDocSh = PTR_CAST(::sd::DrawDocShell, SfxObjectShell::Current() ); 424 SdDrawDocument* pDoc = NULL; 425 426 // Hier wird der DocType vom Optionsdialog gesetzt (nicht Dokument!) 427 DocumentType eDocType = DOCUMENT_TYPE_IMPRESS; 428 if( nSlot == SID_SD_GRAPHIC_OPTIONS ) 429 eDocType = DOCUMENT_TYPE_DRAW; 430 431 ::sd::ViewShell* pViewShell = NULL; 432 433 if (pDocSh) 434 { 435 pDoc = pDocSh->GetDoc(); 436 437 // Wenn der Optionsdialog zum Dokumenttyp identisch ist, 438 // kann auch die FrameView mit uebergeben werden: 439 if( pDoc && eDocType == pDoc->GetDocumentType() ) 440 pFrameView = pDocSh->GetFrameView(); 441 442 pViewShell = pDocSh->GetViewShell(); 443 if (pViewShell != NULL) 444 pViewShell->WriteFrameViewData(); 445 } 446 447 SdOptions* pOptions = GetSdOptions(eDocType); 448 449 // Pool hat standardmaessig MapUnit Twips (Baeh!) 450 SfxItemPool& rPool = GetPool(); 451 rPool.SetDefaultMetric( SFX_MAPUNIT_100TH_MM ); 452 453 SfxItemSet* pRet = new SfxItemSet( rPool, 454 SID_ATTR_METRIC, SID_ATTR_METRIC, 455 SID_ATTR_DEFTABSTOP, SID_ATTR_DEFTABSTOP, 456 457 ATTR_OPTIONS_LAYOUT, ATTR_OPTIONS_LAYOUT, 458 ATTR_OPTIONS_CONTENTS, ATTR_OPTIONS_CONTENTS, 459 ATTR_OPTIONS_MISC, ATTR_OPTIONS_MISC, 460 461 ATTR_OPTIONS_SNAP, ATTR_OPTIONS_SNAP, 462 463 ATTR_OPTIONS_SCALE_START, ATTR_OPTIONS_SCALE_END, 464 465 ATTR_OPTIONS_PRINT, ATTR_OPTIONS_PRINT, 466 467 SID_ATTR_GRID_OPTIONS, SID_ATTR_GRID_OPTIONS, 468 0 ); 469 470 // TP_OPTIONS_LAYOUT: 471 pRet->Put( SdOptionsLayoutItem( ATTR_OPTIONS_LAYOUT, pOptions, pFrameView ) ); 472 473 sal_uInt16 nDefTab = 0; 474 if( pFrameView) 475 nDefTab = pDoc->GetDefaultTabulator(); 476 else 477 nDefTab = pOptions->GetDefTab(); 478 pRet->Put( SfxUInt16Item( SID_ATTR_DEFTABSTOP, nDefTab ) ); 479 480 FieldUnit nMetric = (FieldUnit)0xffff; 481 if( pFrameView) 482 nMetric = pDoc->GetUIUnit(); 483 else 484 nMetric = (FieldUnit)pOptions->GetMetric(); 485 486 if( nMetric == (FieldUnit)0xffff ) 487 nMetric = GetFieldUnit(); 488 489 pRet->Put( SfxUInt16Item( SID_ATTR_METRIC, (sal_uInt16)nMetric ) ); 490 491 // TP_OPTIONS_CONTENTS: 492 pRet->Put( SdOptionsContentsItem( ATTR_OPTIONS_CONTENTS, pOptions, pFrameView ) ); 493 494 // TP_OPTIONS_MISC: 495 SdOptionsMiscItem aSdOptionsMiscItem( ATTR_OPTIONS_MISC, pOptions, pFrameView ); 496 if ( pFrameView ) 497 { 498 aSdOptionsMiscItem.GetOptionsMisc().SetSummationOfParagraphs( pDoc->IsSummationOfParagraphs() ); 499 aSdOptionsMiscItem.GetOptionsMisc().SetPrinterIndependentLayout ( 500 (sal_uInt16)pDoc->GetPrinterIndependentLayout()); 501 } 502 pRet->Put( aSdOptionsMiscItem ); 503 504 505 // TP_OPTIONS_SNAP: 506 pRet->Put( SdOptionsSnapItem( ATTR_OPTIONS_SNAP, pOptions, pFrameView ) ); 507 508 // TP_SCALE: 509 sal_uInt32 nW = 10L; 510 sal_uInt32 nH = 10L; 511 sal_Int32 nX; 512 sal_Int32 nY; 513 if( pDocSh ) 514 { 515 SdrPage* pPage = (SdrPage*) pDoc->GetSdPage(0, PK_STANDARD); 516 Size aSize(pPage->GetSize()); 517 nW = aSize.Width(); 518 nH = aSize.Height(); 519 } 520 521 if(pFrameView) 522 { 523 const Fraction& rFraction = pDoc->GetUIScale(); 524 nX=rFraction.GetNumerator(); 525 nY=rFraction.GetDenominator(); 526 } 527 else 528 { 529 // Optionen aus Configdatei holen 530 pOptions->GetScale( nX, nY ); 531 } 532 533 pRet->Put( SfxInt32Item( ATTR_OPTIONS_SCALE_X, nX ) ); 534 pRet->Put( SfxInt32Item( ATTR_OPTIONS_SCALE_Y, nY ) ); 535 pRet->Put( SfxUInt32Item( ATTR_OPTIONS_SCALE_WIDTH, nW ) ); 536 pRet->Put( SfxUInt32Item( ATTR_OPTIONS_SCALE_HEIGHT, nH ) ); 537 538 539 // TP_OPTIONS_PRINT: 540 pRet->Put( SdOptionsPrintItem( ATTR_OPTIONS_PRINT, pOptions ) ); 541 542 // RID_SVXPAGE_GRID: 543 pRet->Put( SdOptionsGridItem( SID_ATTR_GRID_OPTIONS, pOptions ) ); 544 545 return pRet; 546 } 547 void SdModule::ApplyItemSet( sal_uInt16 nSlot, const SfxItemSet& rSet ) 548 { 549 const SfxPoolItem* pItem = NULL; 550 sal_Bool bNewDefTab = sal_False; 551 sal_Bool bNewPrintOptions = sal_False; 552 sal_Bool bMiscOptions = sal_False; 553 554 ::sd::FrameView* pFrameView = NULL; 555 ::sd::DrawDocShell* pDocSh = PTR_CAST(::sd::DrawDocShell, SfxObjectShell::Current() ); 556 SdDrawDocument* pDoc = NULL; 557 // Hier wird der DocType vom Optionsdialog gesetzt (nicht Dokument!) 558 DocumentType eDocType = DOCUMENT_TYPE_IMPRESS; 559 if( nSlot == SID_SD_GRAPHIC_OPTIONS ) 560 eDocType = DOCUMENT_TYPE_DRAW; 561 562 ::sd::ViewShell* pViewShell = NULL; 563 564 if (pDocSh) 565 { 566 pDoc = pDocSh->GetDoc(); 567 568 // Wenn der Optionsdialog zum Dokumenttyp identisch ist, 569 // kann auch die FrameView mit uebergeben werden: 570 if( pDoc && eDocType == pDoc->GetDocumentType() ) 571 pFrameView = pDocSh->GetFrameView(); 572 573 pViewShell = pDocSh->GetViewShell(); 574 if (pViewShell != NULL) 575 pViewShell->WriteFrameViewData(); 576 } 577 SdOptions* pOptions = GetSdOptions(eDocType); 578 // Raster 579 if( SFX_ITEM_SET == rSet.GetItemState( SID_ATTR_GRID_OPTIONS , 580 sal_False, (const SfxPoolItem**) &pItem )) 581 { 582 const SdOptionsGridItem* pGridItem = (SdOptionsGridItem*) pItem; 583 pGridItem->SetOptions( pOptions ); 584 } 585 586 // Layout 587 const SdOptionsLayoutItem* pLayoutItem = NULL; 588 if( SFX_ITEM_SET == rSet.GetItemState( ATTR_OPTIONS_LAYOUT, 589 sal_False, (const SfxPoolItem**) &pLayoutItem )) 590 { 591 pLayoutItem->SetOptions( pOptions ); 592 } 593 594 // Metric 595 if( SFX_ITEM_SET == rSet.GetItemState( SID_ATTR_METRIC, sal_False, &pItem ) ) 596 { 597 if( pDoc && eDocType == pDoc->GetDocumentType() ) 598 PutItem( *pItem ); 599 pOptions->SetMetric( ( (SfxUInt16Item*) pItem )->GetValue() ); 600 } 601 sal_uInt16 nDefTab = pOptions->GetDefTab(); 602 // Default-Tabulator 603 if( SFX_ITEM_SET == rSet.GetItemState( SID_ATTR_DEFTABSTOP, sal_False, &pItem ) ) 604 { 605 nDefTab = ( (SfxUInt16Item*) pItem )->GetValue(); 606 pOptions->SetDefTab( nDefTab ); 607 608 bNewDefTab = sal_True; 609 } 610 611 // Massstab 612 if( SFX_ITEM_SET == rSet.GetItemState( ATTR_OPTIONS_SCALE_X, sal_False, &pItem ) ) 613 { 614 sal_Int32 nX = ( (SfxInt32Item*) pItem )->GetValue(); 615 if( SFX_ITEM_SET == rSet.GetItemState( ATTR_OPTIONS_SCALE_Y, sal_False, &pItem ) ) 616 { 617 sal_Int32 nY = ( (SfxInt32Item*) pItem )->GetValue(); 618 pOptions->SetScale( nX, nY ); 619 620 // #92067# Apply to document only if doc type match 621 if( pDocSh && pDoc && eDocType == pDoc->GetDocumentType() ) 622 { 623 pDoc->SetUIScale( Fraction( nX, nY ) ); 624 if( pViewShell ) 625 pViewShell->SetRuler( pViewShell->HasRuler() ); 626 } 627 } 628 } 629 630 // Contents (Inhalte) 631 const SdOptionsContentsItem* pContentsItem = NULL; 632 if( SFX_ITEM_SET == rSet.GetItemState( ATTR_OPTIONS_CONTENTS, 633 sal_False, (const SfxPoolItem**) &pContentsItem )) 634 { 635 pContentsItem->SetOptions( pOptions ); 636 } 637 638 // Misc (Sonstiges) 639 const SdOptionsMiscItem* pMiscItem = NULL; 640 if( SFX_ITEM_SET == rSet.GetItemState( ATTR_OPTIONS_MISC, 641 sal_False, (const SfxPoolItem**) &pMiscItem )) 642 { 643 pMiscItem->SetOptions( pOptions ); 644 bMiscOptions = sal_True; 645 } 646 647 // Fangen/Einrasten 648 const SdOptionsSnapItem* pSnapItem = NULL; 649 if( SFX_ITEM_SET == rSet.GetItemState( ATTR_OPTIONS_SNAP, 650 sal_False, (const SfxPoolItem**) &pSnapItem )) 651 { 652 pSnapItem->SetOptions( pOptions ); 653 } 654 655 SfxItemSet aPrintSet( GetPool(), 656 SID_PRINTER_NOTFOUND_WARN, SID_PRINTER_NOTFOUND_WARN, 657 SID_PRINTER_CHANGESTODOC, SID_PRINTER_CHANGESTODOC, 658 ATTR_OPTIONS_PRINT, ATTR_OPTIONS_PRINT, 659 0 ); 660 661 // Drucken 662 const SdOptionsPrintItem* pPrintItem = NULL; 663 if( SFX_ITEM_SET == rSet.GetItemState( ATTR_OPTIONS_PRINT, 664 sal_False, (const SfxPoolItem**) &pPrintItem )) 665 { 666 pPrintItem->SetOptions( pOptions ); 667 668 // PrintOptionsSet setzen 669 SdOptionsPrintItem aPrintItem( ATTR_OPTIONS_PRINT, pOptions ); 670 SfxFlagItem aFlagItem( SID_PRINTER_CHANGESTODOC ); 671 sal_uInt16 nFlags = 0; 672 673 nFlags = (aPrintItem.GetOptionsPrint().IsWarningSize() ? SFX_PRINTER_CHG_SIZE : 0) | 674 (aPrintItem.GetOptionsPrint().IsWarningOrientation() ? SFX_PRINTER_CHG_ORIENTATION : 0); 675 aFlagItem.SetValue( nFlags ); 676 677 aPrintSet.Put( aPrintItem ); 678 aPrintSet.Put( SfxBoolItem( SID_PRINTER_NOTFOUND_WARN, aPrintItem.GetOptionsPrint().IsWarningPrinter() ) ); 679 aPrintSet.Put( aFlagItem ); 680 681 bNewPrintOptions = sal_True; 682 } 683 684 // Nur, wenn auch der Dokumenttyp uebereinstimmt... 685 if( pDocSh && pDoc && eDocType == pDoc->GetDocumentType() ) 686 { 687 if( bNewPrintOptions ) 688 { 689 pDocSh->GetPrinter(sal_True)->SetOptions( aPrintSet ); 690 } 691 692 // Am Model den DefTab setzen 693 if( bNewDefTab ) 694 { 695 SdDrawDocument* pDocument = pDocSh->GetDoc(); 696 pDocument->SetDefaultTabulator( nDefTab ); 697 698 ::sd::Outliner* pOutl = pDocument->GetOutliner( sal_False ); 699 if( pOutl ) 700 pOutl->SetDefTab( nDefTab ); 701 702 ::sd::Outliner* pInternalOutl = pDocument->GetInternalOutliner( sal_False ); 703 if( pInternalOutl ) 704 pInternalOutl->SetDefTab( nDefTab ); 705 } 706 if ( bMiscOptions ) 707 { 708 pDoc->SetSummationOfParagraphs( pMiscItem->GetOptionsMisc().IsSummationOfParagraphs() ); 709 sal_uInt32 nSum = pMiscItem->GetOptionsMisc().IsSummationOfParagraphs() ? EE_CNTRL_ULSPACESUMMATION : 0; 710 sal_uInt32 nCntrl; 711 712 SdDrawDocument* pDocument = pDocSh->GetDoc(); 713 SdrOutliner& rOutl = pDocument->GetDrawOutliner( NULL ); 714 nCntrl = rOutl.GetControlWord() &~ EE_CNTRL_ULSPACESUMMATION; 715 rOutl.SetControlWord( nCntrl | nSum ); 716 ::sd::Outliner* pOutl = pDocument->GetOutliner( sal_False ); 717 if( pOutl ) 718 { 719 nCntrl = pOutl->GetControlWord() &~ EE_CNTRL_ULSPACESUMMATION; 720 pOutl->SetControlWord( nCntrl | nSum ); 721 } 722 pOutl = pDocument->GetInternalOutliner( sal_False ); 723 if( pOutl ) 724 { 725 nCntrl = pOutl->GetControlWord() &~ EE_CNTRL_ULSPACESUMMATION; 726 pOutl->SetControlWord( nCntrl | nSum ); 727 } 728 729 // Set printer independent layout mode. 730 if( pDoc->GetPrinterIndependentLayout() != pMiscItem->GetOptionsMisc().GetPrinterIndependentLayout() ) 731 pDoc->SetPrinterIndependentLayout (pMiscItem->GetOptionsMisc().GetPrinterIndependentLayout()); 732 } 733 } 734 735 pOptions->StoreConfig(); 736 737 // Nur, wenn auch der Dokumenttyp uebereinstimmt... 738 if( pDocSh && pDoc && eDocType == pDoc->GetDocumentType() ) 739 { 740 FieldUnit eUIUnit = (FieldUnit) pOptions->GetMetric(); 741 pDoc->SetUIUnit(eUIUnit); 742 743 if (pViewShell) 744 { 745 // #74495# make sure no one is in text edit mode, cause there 746 // are some pointers remembered else (!) 747 if(pViewShell->GetView()) 748 pViewShell->GetView()->SdrEndTextEdit(); 749 750 ::sd::FrameView* pFrame = pViewShell->GetFrameView(); 751 pFrame->Update(pOptions); 752 pViewShell->ReadFrameViewData(pFrame); 753 pViewShell->SetUIUnit(eUIUnit); 754 pViewShell->SetDefTabHRuler( nDefTab ); 755 } 756 } 757 758 if( pViewShell && pViewShell->GetViewFrame() ) 759 pViewShell->GetViewFrame()->GetBindings().InvalidateAll( sal_True ); 760 } 761 762 SfxTabPage* SdModule::CreateTabPage( sal_uInt16 nId, Window* pParent, const SfxItemSet& rSet ) 763 { 764 SfxTabPage* pRet = NULL; 765 SfxAllItemSet aSet(*(rSet.GetPool())); 766 SdAbstractDialogFactory* pFact = SdAbstractDialogFactory::Create(); 767 if( pFact ) 768 { 769 switch(nId) 770 { 771 case SID_SD_TP_CONTENTS: 772 case SID_SI_TP_CONTENTS: 773 { ::CreateTabPage fnCreatePage = pFact->GetSdOptionsContentsTabPageCreatorFunc(); 774 if( fnCreatePage ) 775 pRet = (*fnCreatePage)( pParent, rSet ); 776 } 777 break; 778 case SID_SD_TP_SNAP: 779 case SID_SI_TP_SNAP: 780 { ::CreateTabPage fnCreatePage = pFact->GetSdOptionsSnapTabPageCreatorFunc(); 781 if( fnCreatePage ) 782 pRet = (*fnCreatePage)( pParent, rSet ); 783 } 784 break; 785 case SID_SD_TP_PRINT: 786 case SID_SI_TP_PRINT: 787 { 788 ::CreateTabPage fnCreatePage = pFact->GetSdPrintOptionsTabPageCreatorFunc(); 789 if( fnCreatePage ) 790 { 791 pRet = (*fnCreatePage)( pParent, rSet ); 792 if(SID_SD_TP_PRINT == nId) 793 aSet.Put (SfxUInt32Item(SID_SDMODE_FLAG,SD_DRAW_MODE)); 794 pRet->PageCreated(aSet); 795 } 796 } 797 break; 798 case SID_SI_TP_MISC: 799 case SID_SD_TP_MISC: 800 { 801 ::CreateTabPage fnCreatePage = pFact->GetSdOptionsMiscTabPageCreatorFunc(); 802 if( fnCreatePage ) 803 { 804 pRet = (*fnCreatePage)( pParent, rSet ); 805 if(SID_SD_TP_MISC == nId) 806 aSet.Put (SfxUInt32Item(SID_SDMODE_FLAG,SD_DRAW_MODE)); 807 else 808 aSet.Put (SfxUInt32Item(SID_SDMODE_FLAG,SD_IMPRESS_MODE)); 809 pRet->PageCreated(aSet); 810 } 811 } 812 break; 813 case RID_OFA_TP_INTERNATIONAL_SD: 814 case RID_OFA_TP_INTERNATIONAL_IMPR: 815 case RID_SVXPAGE_TEXTANIMATION : 816 { 817 SfxAbstractDialogFactory* pSfxFact = SfxAbstractDialogFactory::Create(); 818 if ( pSfxFact ) 819 { 820 ::CreateTabPage fnCreatePage = pSfxFact->GetTabPageCreatorFunc( nId ); 821 if ( fnCreatePage ) 822 pRet = (*fnCreatePage)( pParent, rSet ); 823 } 824 } 825 break; 826 } 827 DBG_ASSERT( pRet, "SdModule::CreateTabPage(): no valid ID for TabPage!" ); 828 } 829 830 return pRet; 831 } 832