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 <com/sun/star/ui/dialogs/XExecutableDialog.hpp> 27 #include <comphelper/processfactory.hxx> 28 #include <svx/svdlayer.hxx> 29 #ifndef _SVXIDS_HXX 30 #include <svx/svxids.hrc> 31 #endif 32 #include <sfx2/msgpool.hxx> 33 #include <svx/hyprlink.hxx> 34 #include <sfx2/viewfrm.hxx> 35 #include <svx/hlnkitem.hxx> 36 #include <tools/urlobj.hxx> 37 #include <editeng/eeitem.hxx> 38 #ifndef _FLDITEM_HXX 39 #include <editeng/flditem.hxx> 40 #endif 41 #include <vcl/msgbox.hxx> 42 #include <sfx2/request.hxx> 43 #include <sfx2/dispatch.hxx> 44 #include <svx/svdorect.hxx> 45 #include <sfx2/docfile.hxx> 46 #include <basic/sbstar.hxx> 47 #include <basic/sberrors.hxx> 48 #include <svx/fmshell.hxx> 49 #include <svx/svxdlg.hxx> 50 #include <svx/dialogs.hrc> 51 #include <unotools/useroptions.hxx> 52 53 #include "app.hrc" 54 #include "strings.hrc" 55 #include "res_bmp.hrc" 56 #include "glob.hrc" 57 #include "Outliner.hxx" 58 #include "Window.hxx" 59 #include "app.hxx" 60 #include "sdattr.hxx" 61 #include "drawdoc.hxx" 62 #include "DrawDocShell.hxx" 63 #include "sdresid.hxx" 64 #include "sdpage.hxx" 65 #include "DrawViewShell.hxx" 66 #include "drawview.hxx" 67 #include "unmodpg.hxx" 68 #include "undolayer.hxx" 69 #include "ViewShellBase.hxx" 70 #include "FormShellManager.hxx" 71 #include "LayerTabBar.hxx" 72 #include "sdabstdlg.hxx" 73 #include "SlideSorterViewShell.hxx" 74 #include "SlideSorter.hxx" 75 #include "controller/SlideSorterController.hxx" 76 77 #define RET_DELETE 100 78 79 namespace sd { 80 81 /************************************************************************* 82 |* 83 |* SfxRequests fuer temporaere Funktionen 84 |* 85 \************************************************************************/ 86 87 void DrawViewShell::FuTemp02(SfxRequest& rReq) 88 { 89 sal_uInt16 nSId = rReq.GetSlot(); 90 switch( nSId ) 91 { 92 case SID_INSERTLAYER: 93 { 94 if ( mpDrawView->IsTextEdit() ) 95 { 96 mpDrawView->SdrEndTextEdit(); 97 } 98 99 SdrLayerAdmin& rLayerAdmin = GetDoc()->GetLayerAdmin(); 100 sal_uInt16 nLayerCnt = rLayerAdmin.GetLayerCount(); 101 sal_uInt16 nLayer = nLayerCnt - 2 + 1; 102 String aLayerName ( SdResId(STR_LAYER) ), aLayerTitle, aLayerDesc; 103 aLayerName += String::CreateFromInt32( (sal_Int32)nLayer ); 104 sal_Bool bIsVisible = sal_False; 105 sal_Bool bIsLocked = sal_False; 106 sal_Bool bIsPrintable = sal_False; 107 108 const SfxItemSet* pArgs = rReq.GetArgs(); 109 110 if (! pArgs) 111 { 112 SfxItemSet aNewAttr( GetDoc()->GetPool(), ATTR_LAYER_START, ATTR_LAYER_END ); 113 114 aNewAttr.Put( SdAttrLayerName( aLayerName ) ); 115 aNewAttr.Put( SdAttrLayerTitle() ); 116 aNewAttr.Put( SdAttrLayerDesc() ); 117 aNewAttr.Put( SdAttrLayerVisible() ); 118 aNewAttr.Put( SdAttrLayerPrintable() ); 119 aNewAttr.Put( SdAttrLayerLocked() ); 120 aNewAttr.Put( SdAttrLayerThisPage() ); 121 122 SdAbstractDialogFactory* pFact = SdAbstractDialogFactory::Create(); 123 AbstractSdInsertLayerDlg* pDlg = pFact ? pFact->CreateSdInsertLayerDlg(NULL, aNewAttr, true, String( SdResId( STR_INSERTLAYER ) ) ) : 0; 124 if( pDlg ) 125 { 126 pDlg->SetHelpId( SD_MOD()->GetSlotPool()->GetSlot( SID_INSERTLAYER )->GetCommand() ); 127 128 // Ueberpruefung auf schon vorhandene Namen 129 sal_Bool bLoop = sal_True; 130 while( bLoop && pDlg->Execute() == RET_OK ) 131 { 132 pDlg->GetAttr( aNewAttr ); 133 aLayerName = ((SdAttrLayerName &) aNewAttr.Get (ATTR_LAYER_NAME)).GetValue (); 134 135 if( rLayerAdmin.GetLayer( aLayerName, sal_False ) 136 || aLayerName.Len()==0 ) 137 { 138 // Name ist schon vorhanden 139 WarningBox aWarningBox ( 140 GetParentWindow(), 141 WinBits( WB_OK ), 142 String(SdResId( STR_WARN_NAME_DUPLICATE))); 143 aWarningBox.Execute(); 144 } 145 else 146 bLoop = sal_False; 147 } 148 if( bLoop ) // wurde abgebrochen 149 { 150 delete pDlg; 151 152 Cancel(); 153 rReq.Ignore (); 154 break; 155 } 156 else 157 { 158 //pDlg->GetAttr( aNewAttr ); 159 //aLayerName = ((SdAttrLayerName &) aNewAttr.Get (ATTR_LAYER_NAME)).GetValue (); 160 aLayerTitle = ((SdAttrLayerTitle &) aNewAttr.Get (ATTR_LAYER_TITLE)).GetValue (); 161 aLayerDesc = ((SdAttrLayerDesc &) aNewAttr.Get (ATTR_LAYER_DESC)).GetValue (); 162 bIsVisible = ((SdAttrLayerVisible &) aNewAttr.Get (ATTR_LAYER_VISIBLE)).GetValue (); 163 bIsLocked = ((SdAttrLayerLocked &) aNewAttr.Get (ATTR_LAYER_LOCKED)).GetValue () ; 164 bIsPrintable = ((SdAttrLayerPrintable &) aNewAttr.Get (ATTR_LAYER_PRINTABLE)).GetValue () ; 165 166 delete pDlg; 167 } 168 } 169 } 170 else if (pArgs->Count () != 4) 171 { 172 StarBASIC::FatalError (SbERR_WRONG_ARGS); 173 Cancel(); 174 rReq.Ignore (); 175 break; 176 } 177 else 178 { 179 SFX_REQUEST_ARG (rReq, pLayerName, SfxStringItem, ID_VAL_LAYERNAME, sal_False); 180 SFX_REQUEST_ARG (rReq, pIsVisible, SfxBoolItem, ID_VAL_ISVISIBLE, sal_False); 181 SFX_REQUEST_ARG (rReq, pIsLocked, SfxBoolItem, ID_VAL_ISLOCKED, sal_False); 182 SFX_REQUEST_ARG (rReq, pIsPrintable, SfxBoolItem, ID_VAL_ISPRINTABLE, sal_False); 183 184 aLayerName = pLayerName->GetValue (); 185 bIsVisible = pIsVisible->GetValue (); 186 bIsLocked = pIsLocked->GetValue (); 187 bIsPrintable = pIsPrintable->GetValue (); 188 } 189 190 String aPrevLayer = mpDrawView->GetActiveLayer(); 191 String aName; 192 SdrLayer* pLayer; 193 sal_uInt16 nPrevLayer = 0; 194 nLayerCnt = rLayerAdmin.GetLayerCount(); 195 196 for ( nLayer = 0; nLayer < nLayerCnt; nLayer++ ) 197 { 198 pLayer = rLayerAdmin.GetLayer(nLayer); 199 aName = pLayer->GetName(); 200 201 if ( aPrevLayer == aName ) 202 { 203 // nPrevLayer = nLayer; 204 nPrevLayer = Max(nLayer, (sal_uInt16) 4); 205 } 206 } 207 208 mpDrawView->InsertNewLayer(aLayerName, nPrevLayer + 1); 209 pLayer = rLayerAdmin.GetLayer(aLayerName, sal_False); 210 if( pLayer ) 211 { 212 pLayer->SetTitle( aLayerTitle ); 213 pLayer->SetDescription( aLayerDesc ); 214 } 215 216 mpDrawView->SetLayerVisible( aLayerName, bIsVisible ); 217 mpDrawView->SetLayerLocked( aLayerName, bIsLocked); 218 mpDrawView->SetLayerPrintable(aLayerName, bIsPrintable); 219 220 mpDrawView->SetActiveLayer(aLayerName); 221 222 ResetActualLayer(); 223 224 GetDoc()->SetChanged(sal_True); 225 226 GetViewFrame()->GetDispatcher()->Execute(SID_SWITCHLAYER, 227 SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD); 228 229 Cancel(); 230 rReq.Done (); 231 } 232 break; 233 234 case SID_MODIFYLAYER: 235 { 236 if ( mpDrawView->IsTextEdit() ) 237 { 238 mpDrawView->SdrEndTextEdit(); 239 } 240 241 SdrLayerAdmin& rLayerAdmin = GetDoc()->GetLayerAdmin(); 242 sal_uInt16 nCurPage = GetLayerTabControl()->GetCurPageId(); 243 String aLayerName( GetLayerTabControl()->GetPageText(nCurPage) ); 244 SdrLayer* pLayer = rLayerAdmin.GetLayer(aLayerName, sal_False); 245 246 String aLayerTitle( pLayer->GetTitle() ); 247 String aLayerDesc( pLayer->GetDescription() ); 248 249 String aOldLayerName( aLayerName ); 250 String aOldLayerTitle( aLayerTitle ); 251 String aOldLayerDesc( aLayerDesc ); 252 253 sal_Bool bIsVisible, bIsLocked, bIsPrintable; 254 sal_Bool bOldIsVisible = bIsVisible = mpDrawView->IsLayerVisible(aLayerName); 255 sal_Bool bOldIsLocked = bIsLocked = mpDrawView->IsLayerLocked(aLayerName); 256 sal_Bool bOldIsPrintable = bIsPrintable = mpDrawView->IsLayerPrintable(aLayerName); 257 258 259 const SfxItemSet* pArgs = rReq.GetArgs(); 260 // darf der Layer geloescht werden ? 261 bool bDelete = true; 262 263 String aLayoutLayer ( SdResId(STR_LAYER_LAYOUT) ); 264 String aControlsLayer ( SdResId(STR_LAYER_CONTROLS) ); 265 String aMeasureLinesLayer ( SdResId(STR_LAYER_MEASURELINES) ); 266 String aBackgroundLayer( SdResId(STR_LAYER_BCKGRND) ); 267 String aBackgroundObjLayer( SdResId(STR_LAYER_BCKGRNDOBJ) ); 268 269 if( aLayerName == aLayoutLayer || aLayerName == aControlsLayer || 270 aLayerName == aMeasureLinesLayer || 271 aLayerName == aBackgroundLayer || aLayerName == aBackgroundObjLayer ) 272 { 273 bDelete = false; 274 } 275 276 if (! pArgs) 277 { 278 SfxItemSet aNewAttr( GetDoc()->GetPool(), ATTR_LAYER_START, ATTR_LAYER_END ); 279 280 aNewAttr.Put( SdAttrLayerName( aLayerName ) ); 281 aNewAttr.Put( SdAttrLayerTitle( aLayerTitle ) ); 282 aNewAttr.Put( SdAttrLayerDesc( aLayerDesc ) ); 283 aNewAttr.Put( SdAttrLayerVisible( bIsVisible ) ); 284 aNewAttr.Put( SdAttrLayerLocked( bIsLocked ) ); 285 aNewAttr.Put( SdAttrLayerPrintable( bIsPrintable ) ); 286 aNewAttr.Put( SdAttrLayerThisPage() ); 287 288 SdAbstractDialogFactory* pFact = SdAbstractDialogFactory::Create(); 289 AbstractSdInsertLayerDlg* pDlg = pFact ? pFact->CreateSdInsertLayerDlg(NULL, aNewAttr, bDelete, String( SdResId( STR_MODIFYLAYER ) ) ) : 0; 290 if( pDlg ) 291 { 292 pDlg->SetHelpId( SD_MOD()->GetSlotPool()->GetSlot( SID_MODIFYLAYER )->GetCommand() ); 293 294 // Ueberpruefung auf schon vorhandene Namen 295 sal_Bool bLoop = sal_True; 296 sal_uInt16 nRet = 0; 297 while( bLoop && ( (nRet = pDlg->Execute()) == RET_OK ) ) 298 { 299 pDlg->GetAttr( aNewAttr ); 300 aLayerName = ((SdAttrLayerName &) aNewAttr.Get (ATTR_LAYER_NAME)).GetValue (); 301 302 if( (rLayerAdmin.GetLayer( aLayerName, sal_False ) && 303 aLayerName != aOldLayerName) || aLayerName.Len()==0 ) 304 { 305 // Name ist schon vorhanden 306 WarningBox aWarningBox ( 307 GetParentWindow(), 308 WinBits( WB_OK ), 309 String( SdResId( STR_WARN_NAME_DUPLICATE))); 310 aWarningBox.Execute(); 311 } 312 else 313 bLoop = sal_False; 314 } 315 switch (nRet) 316 { 317 case RET_OK : 318 aLayerTitle = ((SdAttrLayerTitle &) aNewAttr.Get (ATTR_LAYER_TITLE)).GetValue (); 319 aLayerDesc = ((SdAttrLayerDesc &) aNewAttr.Get (ATTR_LAYER_DESC)).GetValue (); 320 bIsVisible = ((const SdAttrLayerVisible &) aNewAttr.Get (ATTR_LAYER_VISIBLE)).GetValue (); 321 bIsLocked = ((const SdAttrLayerLocked &) aNewAttr.Get (ATTR_LAYER_LOCKED)).GetValue (); 322 bIsPrintable = ((const SdAttrLayerLocked &) aNewAttr.Get (ATTR_LAYER_PRINTABLE)).GetValue (); 323 324 delete pDlg; 325 break; 326 327 default : 328 delete pDlg; 329 rReq.Ignore (); 330 Cancel (); 331 return; 332 } 333 } 334 } 335 else if (pArgs->Count () == 4) 336 { 337 SFX_REQUEST_ARG (rReq, pLayerName, SfxStringItem, ID_VAL_LAYERNAME, sal_False); 338 SFX_REQUEST_ARG (rReq, pIsVisible, SfxBoolItem, ID_VAL_ISVISIBLE, sal_False); 339 SFX_REQUEST_ARG (rReq, pIsLocked, SfxBoolItem, ID_VAL_ISLOCKED, sal_False); 340 SFX_REQUEST_ARG (rReq, pIsPrintable, SfxBoolItem, ID_VAL_ISPRINTABLE, sal_False); 341 342 aLayerName = pLayerName->GetValue (); 343 bIsVisible = pIsVisible->GetValue (); 344 bIsLocked = pIsLocked->GetValue (); 345 bIsPrintable = pIsPrintable->GetValue (); 346 } 347 else 348 { 349 StarBASIC::FatalError (SbERR_WRONG_ARGS); 350 Cancel (); 351 rReq.Ignore (); 352 break; 353 } 354 355 ::svl::IUndoManager* pManager = GetDoc()->GetDocSh()->GetUndoManager(); 356 SdLayerModifyUndoAction* pAction = new SdLayerModifyUndoAction( 357 GetDoc(), 358 pLayer, 359 // old values 360 aOldLayerName, 361 aOldLayerTitle, 362 aOldLayerDesc, 363 bOldIsVisible, 364 bOldIsLocked, 365 bOldIsPrintable, 366 // new values 367 aLayerName, 368 aLayerTitle, 369 aLayerDesc, 370 bIsVisible, 371 bIsLocked, 372 bIsPrintable 373 ); 374 pManager->AddUndoAction( pAction ); 375 376 ModifyLayer( pLayer, aLayerName, aLayerTitle, aLayerDesc, bIsVisible, bIsLocked, bIsPrintable ); 377 378 Cancel(); 379 rReq.Done (); 380 } 381 break; 382 383 case SID_RENAMELAYER: 384 { 385 if ( mpDrawView->IsTextEdit() ) 386 { 387 mpDrawView->SdrEndTextEdit(); 388 } 389 390 GetLayerTabControl()->StartEditMode( 391 GetLayerTabControl()->GetCurPageId() ); 392 393 Cancel(); 394 rReq.Ignore (); 395 } 396 break; 397 398 case SID_EDIT_HYPERLINK : 399 { 400 GetViewFrame()->GetDispatcher()->Execute( SID_HYPERLINK_DIALOG ); 401 402 Cancel(); 403 rReq.Done (); 404 } 405 break; 406 407 case SID_OPEN_HYPERLINK: 408 { 409 OutlinerView* pOutView = mpDrawView->GetTextEditOutlinerView(); 410 if ( pOutView ) 411 { 412 const SvxFieldItem* pFieldItem = pOutView->GetFieldAtSelection(); 413 if ( pFieldItem ) 414 { 415 const SvxFieldData* pField = pFieldItem->GetField(); 416 if( pField && pField->ISA( SvxURLField ) ) 417 { 418 const SvxURLField* pURLField = static_cast< const SvxURLField* >( pField ); 419 420 SfxStringItem aUrl( SID_FILE_NAME, pURLField->GetURL() ); 421 SfxStringItem aTarget( SID_TARGETNAME, pURLField->GetTargetFrame() ); 422 423 String aReferName; 424 SfxViewFrame* pFrame = GetViewFrame(); 425 SfxMedium* pMed = pFrame->GetObjectShell()->GetMedium(); 426 if (pMed) 427 aReferName = pMed->GetName(); 428 429 SfxFrameItem aFrm( SID_DOCFRAME, pFrame ); 430 SfxStringItem aReferer( SID_REFERER, aReferName ); 431 432 SfxBoolItem aNewView( SID_OPEN_NEW_VIEW, sal_False ); 433 SfxBoolItem aBrowsing( SID_BROWSE, sal_True ); 434 435 SfxViewFrame* pViewFrm = SfxViewFrame::Current(); 436 if (pViewFrm) 437 pViewFrm->GetDispatcher()->Execute( SID_OPENDOC, 438 SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD, 439 &aUrl, &aTarget, 440 &aFrm, &aReferer, 441 &aNewView, &aBrowsing, 442 0L ); 443 } 444 } 445 } 446 Cancel(); 447 rReq.Done (); 448 } 449 break; 450 451 case SID_HYPERLINK_SETLINK: 452 { 453 const SfxItemSet* pReqArgs = rReq.GetArgs(); 454 455 if (pReqArgs) 456 { 457 SvxHyperlinkItem* pHLItem = 458 (SvxHyperlinkItem*) &pReqArgs->Get(SID_HYPERLINK_SETLINK); 459 460 if (pHLItem->GetInsertMode() == HLINK_FIELD) 461 { 462 InsertURLField(pHLItem->GetURL(), pHLItem->GetName(), 463 pHLItem->GetTargetFrame(), NULL); 464 } 465 else if (pHLItem->GetInsertMode() == HLINK_BUTTON) 466 { 467 InsertURLButton(pHLItem->GetURL(), pHLItem->GetName(), 468 pHLItem->GetTargetFrame(), NULL); 469 } 470 else if (pHLItem->GetInsertMode() == HLINK_DEFAULT) 471 { 472 OutlinerView* pOlView = mpDrawView->GetTextEditOutlinerView(); 473 474 if (pOlView) 475 { 476 InsertURLField(pHLItem->GetURL(), pHLItem->GetName(), 477 pHLItem->GetTargetFrame(), NULL); 478 } 479 else 480 { 481 InsertURLButton(pHLItem->GetURL(), pHLItem->GetName(), 482 pHLItem->GetTargetFrame(), NULL); 483 } 484 } 485 } 486 487 Cancel(); 488 rReq.Ignore (); 489 } 490 break; 491 492 case SID_INSERT_FLD_DATE_FIX: 493 case SID_INSERT_FLD_DATE_VAR: 494 case SID_INSERT_FLD_TIME_FIX: 495 case SID_INSERT_FLD_TIME_VAR: 496 case SID_INSERT_FLD_AUTHOR: 497 case SID_INSERT_FLD_PAGE: 498 case SID_INSERT_FLD_PAGES: 499 case SID_INSERT_FLD_FILE: 500 { 501 sal_uInt16 nMul = 1; 502 SvxFieldItem* pFieldItem = 0; 503 504 switch( nSId ) 505 { 506 case SID_INSERT_FLD_DATE_FIX: 507 pFieldItem = new SvxFieldItem( 508 SvxDateField( Date(), SVXDATETYPE_FIX ), EE_FEATURE_FIELD ); 509 break; 510 511 case SID_INSERT_FLD_DATE_VAR: 512 pFieldItem = new SvxFieldItem( SvxDateField(), EE_FEATURE_FIELD ); 513 break; 514 515 case SID_INSERT_FLD_TIME_FIX: 516 pFieldItem = new SvxFieldItem( 517 SvxExtTimeField( Time(), SVXTIMETYPE_FIX ), EE_FEATURE_FIELD ); 518 break; 519 520 case SID_INSERT_FLD_TIME_VAR: 521 pFieldItem = new SvxFieldItem( SvxExtTimeField(), EE_FEATURE_FIELD ); 522 break; 523 524 case SID_INSERT_FLD_AUTHOR: 525 { 526 SvtUserOptions aUserOptions; 527 pFieldItem = new SvxFieldItem( 528 SvxAuthorField( 529 aUserOptions.GetFirstName(), aUserOptions.GetLastName(), aUserOptions.GetID() ), EE_FEATURE_FIELD ); 530 } 531 break; 532 533 case SID_INSERT_FLD_PAGE: 534 { 535 pFieldItem = new SvxFieldItem( SvxPageField(), EE_FEATURE_FIELD ); 536 nMul = 3; 537 } 538 break; 539 540 case SID_INSERT_FLD_PAGES: 541 { 542 pFieldItem = new SvxFieldItem( SvxPagesField(), EE_FEATURE_FIELD ); 543 nMul = 3; 544 } 545 break; 546 547 case SID_INSERT_FLD_FILE: 548 { 549 String aName; 550 if( GetDocSh()->HasName() ) 551 aName = GetDocSh()->GetMedium()->GetName(); 552 //else 553 // aName = GetDocSh()->GetName(); 554 pFieldItem = new SvxFieldItem( SvxExtFileField( aName ), EE_FEATURE_FIELD ); 555 } 556 break; 557 } 558 559 OutlinerView* pOLV = mpDrawView->GetTextEditOutlinerView(); 560 561 if( pOLV ) 562 { 563 const SvxFieldItem* pOldFldItem = pOLV->GetFieldAtSelection(); 564 565 if( pOldFldItem && ( pOldFldItem->GetField()->ISA( SvxURLField ) || 566 pOldFldItem->GetField()->ISA( SvxDateField ) || 567 pOldFldItem->GetField()->ISA( SvxTimeField ) || 568 pOldFldItem->GetField()->ISA( SvxExtTimeField ) || 569 pOldFldItem->GetField()->ISA( SvxExtFileField ) || 570 pOldFldItem->GetField()->ISA( SvxAuthorField ) || 571 pOldFldItem->GetField()->ISA( SvxPageField ) ) ) 572 { 573 // Feld selektieren, so dass es beim Insert geloescht wird 574 ESelection aSel = pOLV->GetSelection(); 575 if( aSel.nStartPos == aSel.nEndPos ) 576 aSel.nEndPos++; 577 pOLV->SetSelection( aSel ); 578 } 579 580 if( pFieldItem ) 581 pOLV->InsertField( *pFieldItem ); 582 } 583 else 584 { 585 Outliner* pOutl = GetDoc()->GetInternalOutliner(); 586 pOutl->Init( OUTLINERMODE_TEXTOBJECT ); 587 sal_uInt16 nOutlMode = pOutl->GetMode(); 588 pOutl->SetStyleSheet( 0, NULL ); 589 pOutl->QuickInsertField( *pFieldItem, ESelection() ); 590 OutlinerParaObject* pOutlParaObject = pOutl->CreateParaObject(); 591 592 SdrRectObj* pRectObj = new SdrRectObj( OBJ_TEXT ); 593 pRectObj->SetMergedItem(SdrTextAutoGrowWidthItem(sal_True)); 594 595 pOutl->UpdateFields(); 596 pOutl->SetUpdateMode( sal_True ); 597 Size aSize( pOutl->CalcTextSize() ); 598 aSize.Width() *= nMul; 599 pOutl->SetUpdateMode( sal_False ); 600 601 Point aPos; 602 Rectangle aRect( aPos, GetActiveWindow()->GetOutputSizePixel() ); 603 aPos = aRect.Center(); 604 aPos = GetActiveWindow()->PixelToLogic(aPos); 605 aPos.X() -= aSize.Width() / 2; 606 aPos.Y() -= aSize.Height() / 2; 607 608 Rectangle aLogicRect(aPos, aSize); 609 pRectObj->SetLogicRect(aLogicRect); 610 pRectObj->SetOutlinerParaObject( pOutlParaObject ); 611 mpDrawView->InsertObjectAtView(pRectObj, *mpDrawView->GetSdrPageView()); 612 pOutl->Init( nOutlMode ); 613 } 614 615 delete pFieldItem; 616 617 Cancel(); 618 rReq.Ignore (); 619 } 620 break; 621 622 case SID_MODIFY_FIELD: 623 { 624 OutlinerView* pOLV = mpDrawView->GetTextEditOutlinerView(); 625 626 if( pOLV ) 627 { 628 const SvxFieldItem* pFldItem = pOLV->GetFieldAtSelection(); 629 630 if( pFldItem && (pFldItem->GetField()->ISA( SvxDateField ) || 631 pFldItem->GetField()->ISA( SvxAuthorField ) || 632 pFldItem->GetField()->ISA( SvxExtFileField ) || 633 pFldItem->GetField()->ISA( SvxExtTimeField ) ) ) 634 { 635 // Dialog... 636 SdAbstractDialogFactory* pFact = SdAbstractDialogFactory::Create(); 637 AbstractSdModifyFieldDlg* pDlg = pFact ? pFact->CreateSdModifyFieldDlg(GetActiveWindow(), pFldItem->GetField(), pOLV->GetAttribs() ) : 0; 638 if( pDlg && pDlg->Execute() == RET_OK ) 639 { 640 // #108538# 641 // To make a correct SetAttribs() call at the utlinerView 642 // it is necessary to split the actions here 643 SvxFieldData* pField = pDlg->GetField(); 644 ESelection aSel = pOLV->GetSelection(); 645 sal_Bool bSelectionWasModified(sal_False); 646 647 if( pField ) 648 { 649 SvxFieldItem aFieldItem( *pField, EE_FEATURE_FIELD ); 650 651 if( aSel.nStartPos == aSel.nEndPos ) 652 { 653 bSelectionWasModified = sal_True; 654 aSel.nEndPos++; 655 pOLV->SetSelection( aSel ); 656 } 657 658 pOLV->InsertField( aFieldItem ); 659 660 // #108538# select again for eventual SetAttribs call 661 pOLV->SetSelection( aSel ); 662 } 663 664 SfxItemSet aSet( pDlg->GetItemSet() ); 665 666 if( aSet.Count() ) 667 { 668 pOLV->SetAttribs( aSet ); 669 670 ::Outliner* pOutliner = pOLV->GetOutliner(); 671 if( pOutliner ) 672 pOutliner->UpdateFields(); 673 } 674 675 if(pField) 676 { 677 // #108538# restore selection to original 678 if(bSelectionWasModified) 679 { 680 aSel.nEndPos--; 681 pOLV->SetSelection( aSel ); 682 } 683 684 delete pField; 685 } 686 } 687 delete pDlg; 688 } 689 } 690 691 Cancel(); 692 rReq.Ignore (); 693 } 694 break; 695 696 case SID_OPEN_XML_FILTERSETTINGS: 697 { 698 try 699 { 700 com::sun::star::uno::Reference < ::com::sun::star::ui::dialogs::XExecutableDialog > xDialog(::comphelper::getProcessServiceFactory()->createInstance(rtl::OUString::createFromAscii("com.sun.star.comp.ui.XSLTFilterDialog")), com::sun::star::uno::UNO_QUERY); 701 if( xDialog.is() ) 702 { 703 xDialog->execute(); 704 } 705 } 706 catch( ::com::sun::star::uno::RuntimeException& ) 707 { 708 } 709 710 Cancel(); 711 rReq.Ignore (); 712 } 713 break; 714 715 default: 716 { 717 // switch Anweisung wegen CLOOKS aufgeteilt. Alle case-Anweisungen die 718 // eine Fu???? -Funktion aufrufen, sind in die Methode FuTemp03 (drviewsb) 719 // gewandert. 720 FuTemp03(rReq); 721 } 722 break; 723 }; 724 }; 725 726 bool DrawViewShell::RenameSlide( sal_uInt16 nPageId, const String & rName ) 727 { 728 sal_Bool bOutDummy; 729 if( GetDoc()->GetPageByName( rName, bOutDummy ) != SDRPAGE_NOTFOUND ) 730 return false; 731 732 SdPage* pPageToRename = NULL; 733 PageKind ePageKind = GetPageKind(); 734 735 if( GetEditMode() == EM_PAGE ) 736 { 737 pPageToRename = GetDoc()->GetSdPage( nPageId - 1, ePageKind ); 738 739 // Undo 740 SdPage* pUndoPage = pPageToRename; 741 SdrLayerAdmin & rLayerAdmin = GetDoc()->GetLayerAdmin(); 742 sal_uInt8 nBackground = rLayerAdmin.GetLayerID( String( SdResId( STR_LAYER_BCKGRND )), sal_False ); 743 sal_uInt8 nBgObj = rLayerAdmin.GetLayerID( String( SdResId( STR_LAYER_BCKGRNDOBJ )), sal_False ); 744 SetOfByte aVisibleLayers = mpActualPage->TRG_GetMasterPageVisibleLayers(); 745 746 // (#67720#) 747 ::svl::IUndoManager* pManager = GetDoc()->GetDocSh()->GetUndoManager(); 748 ModifyPageUndoAction* pAction = new ModifyPageUndoAction( 749 GetDoc(), pUndoPage, rName, pUndoPage->GetAutoLayout(), 750 aVisibleLayers.IsSet( nBackground ), 751 aVisibleLayers.IsSet( nBgObj )); 752 pManager->AddUndoAction( pAction ); 753 754 // rename 755 pPageToRename->SetName( rName ); 756 757 if( ePageKind == PK_STANDARD ) 758 { 759 // also rename notes-page 760 SdPage* pNotesPage = GetDoc()->GetSdPage( nPageId - 1, PK_NOTES ); 761 pNotesPage->SetName( rName ); 762 } 763 } 764 else 765 { 766 // rename MasterPage -> rename LayoutTemplate 767 pPageToRename = GetDoc()->GetMasterSdPage( nPageId - 1, ePageKind ); 768 GetDoc()->RenameLayoutTemplate( pPageToRename->GetLayoutName(), rName ); 769 } 770 771 bool bSuccess = ( sal_False != rName.Equals( pPageToRename->GetName())); 772 773 if( bSuccess ) 774 { 775 // user edited page names may be changed by the page so update control 776 maTabControl.SetPageText( nPageId, rName ); 777 778 // set document to modified state 779 GetDoc()->SetChanged( sal_True ); 780 781 // inform navigator about change 782 SfxBoolItem aItem( SID_NAVIGATOR_INIT, sal_True ); 783 GetViewFrame()->GetDispatcher()->Execute( 784 SID_NAVIGATOR_INIT, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD, &aItem, 0L ); 785 786 // Tell the slide sorter about the name change (necessary for 787 // accessibility.) 788 slidesorter::SlideSorterViewShell* pSlideSorterViewShell 789 = slidesorter::SlideSorterViewShell::GetSlideSorter(GetViewShellBase()); 790 if (pSlideSorterViewShell != NULL) 791 { 792 pSlideSorterViewShell->GetSlideSorter().GetController().PageNameHasChanged( 793 nPageId-1, rName); 794 } 795 } 796 797 return bSuccess; 798 } 799 800 801 802 803 IMPL_LINK( DrawViewShell, RenameSlideHdl, AbstractSvxNameDialog*, pDialog ) 804 { 805 if( ! pDialog ) 806 return 0; 807 808 String aNewName; 809 pDialog->GetName( aNewName ); 810 811 SdPage* pCurrentPage = GetDoc()->GetSdPage( maTabControl.GetCurPageId() - 1, GetPageKind() ); 812 813 return pCurrentPage && ( aNewName.Equals( pCurrentPage->GetName() ) || GetDocSh()->IsNewPageNameValid( aNewName ) ); 814 } 815 816 817 818 819 void DrawViewShell::ModifyLayer ( 820 SdrLayer* pLayer, 821 const String& rLayerName, 822 const String& rLayerTitle, 823 const String& rLayerDesc, 824 bool bIsVisible, 825 bool bIsLocked, 826 bool bIsPrintable) 827 { 828 if( pLayer ) 829 { 830 const sal_uInt16 nPageCount = GetLayerTabControl()->GetPageCount(); 831 sal_uInt16 nCurPage = 0; 832 sal_uInt16 nPos; 833 for( nPos = 0; nPos < nPageCount; nPos++ ) 834 { 835 sal_uInt16 nId = GetLayerTabControl()->GetPageId( nPos ); 836 if( pLayer->GetName() == GetLayerTabControl()->GetPageText( nId ) ) 837 { 838 nCurPage = nId; 839 break; 840 } 841 } 842 843 pLayer->SetName( rLayerName ); 844 pLayer->SetTitle( rLayerTitle ); 845 pLayer->SetDescription( rLayerDesc ); 846 mpDrawView->SetLayerVisible( rLayerName, bIsVisible ); 847 mpDrawView->SetLayerLocked( rLayerName, bIsLocked); 848 mpDrawView->SetLayerPrintable(rLayerName, bIsPrintable); 849 850 GetDoc()->SetChanged(sal_True); 851 852 GetLayerTabControl()->SetPageText(nCurPage, rLayerName); 853 854 TabBarPageBits nBits = 0; 855 856 if (!bIsVisible) 857 { 858 // Unsichtbare Layer werden anders dargestellt 859 nBits = TPB_SPECIAL; 860 } 861 862 GetLayerTabControl()->SetPageBits(nCurPage, nBits); 863 864 GetViewFrame()->GetDispatcher()->Execute( 865 SID_SWITCHLAYER, 866 SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD); 867 868 // Call Invalidate at the form shell. 869 FmFormShell* pFormShell = GetViewShellBase().GetFormShellManager()->GetFormShell(); 870 if (pFormShell != NULL) 871 pFormShell->Invalidate(); 872 } 873 } 874 875 } // end of namespace sd 876