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 27 #include "DrawViewShell.hxx" 28 #include "ViewShellImplementation.hxx" 29 #include <vcl/waitobj.hxx> 30 #include <svx/svdograf.hxx> 31 #ifndef _SVXIDS_HRC 32 #include <svx/svxids.hrc> 33 #endif 34 #include <svx/svdpagv.hxx> 35 #include <svx/svdundo.hxx> 36 #ifndef _ZOOMITEM_HXX 37 #include <svx/zoomitem.hxx> 38 #endif 39 #ifndef _EDITDATA_HXX 40 #include <editeng/editdata.hxx> 41 #endif 42 #include <basic/sberrors.hxx> 43 #include <vcl/msgbox.hxx> 44 #include <sfx2/request.hxx> 45 #include <sfx2/dispatch.hxx> 46 #include <svx/xfillit0.hxx> 47 #include <svx/xflclit.hxx> 48 #include <svl/aeitem.hxx> 49 #include <editeng/eeitem.hxx> 50 #include <basic/sbstar.hxx> 51 #include <editeng/flditem.hxx> 52 #include <svx/xlineit0.hxx> 53 #include <svx/xfillit0.hxx> 54 55 #ifndef _SDOUTL_HXX //autogen 56 #include <svx/svdoutl.hxx> 57 #endif 58 #include <svx/xlnwtit.hxx> 59 #include <svx/svdoattr.hxx> 60 #include <svx/xlnstwit.hxx> 61 #include <svx/sdtmfitm.hxx> 62 #include <svx/sdtagitm.hxx> 63 #include <svx/xlnedwit.hxx> 64 #include <svx/fontworkbar.hxx> 65 66 #include <editeng/escpitem.hxx> 67 #include <editeng/kernitem.hxx> 68 #include <editeng/wghtitem.hxx> 69 #include <editeng/postitem.hxx> 70 #include <editeng/udlnitem.hxx> 71 #include <editeng/crsditem.hxx> 72 #include <editeng/cntritem.hxx> 73 #include <editeng/shdditem.hxx> 74 #include <svx/xtable.hxx> 75 #include <svx/svdobj.hxx> 76 #include <editeng/outlobj.hxx> 77 #include <editeng/flstitem.hxx> 78 #include <editeng/scripttypeitem.hxx> 79 #include <editeng/fontitem.hxx> 80 #include <editeng/fhgtitem.hxx> 81 #include <editeng/colritem.hxx> 82 #include <editeng/brshitem.hxx> 83 84 #include <svl/whiter.hxx> 85 86 #include <svx/svxdlg.hxx> 87 #include <svx/dialogs.hrc> 88 89 #include <sfx2/viewfrm.hxx> 90 #include "sdgrffilter.hxx" 91 92 #include "app.hrc" 93 #include "glob.hrc" 94 #include "helpids.h" 95 #include "sdattr.hxx" 96 #include "drawview.hxx" 97 #include "Window.hxx" 98 #include "drawdoc.hxx" 99 #include "DrawDocShell.hxx" 100 #include "sdpage.hxx" 101 #include "fuscale.hxx" 102 #include "sdresid.hxx" 103 #include "GraphicViewShell.hxx" 104 #include "unmodpg.hxx" 105 #include "slideshow.hxx" 106 #include "fuvect.hxx" 107 #include "stlpool.hxx" 108 109 // #90356# 110 #include "optsitem.hxx" 111 #include "sdabstdlg.hxx" 112 #include <com/sun/star/drawing/XMasterPagesSupplier.hpp> 113 #include <com/sun/star/drawing/XDrawPages.hpp> 114 115 #include <strings.hrc> 116 117 using namespace ::com::sun::star; 118 using namespace ::com::sun::star::uno; 119 120 namespace sd { 121 122 /************************************************************************* 123 |* 124 |* SfxRequests fuer temporaere Funktionen 125 |* 126 \************************************************************************/ 127 128 void DrawViewShell::FuTemporary(SfxRequest& rReq) 129 { 130 // Waehrend einer Native-Diashow wird nichts ausgefuehrt! 131 if(SlideShow::IsRunning( GetViewShellBase() ) && (rReq.GetSlot() != SID_NAVIGATOR)) 132 return; 133 134 DBG_ASSERT( mpDrawView, "sd::DrawViewShell::FuTemporary(), no draw view!" ); 135 if( !mpDrawView ) 136 return; 137 138 CheckLineTo (rReq); 139 140 DeactivateCurrentFunction(); 141 142 sal_uInt16 nSId = rReq.GetSlot(); 143 144 // Slot wird gemapped (ToolboxImages/-Slots) 145 MapSlot( nSId ); 146 147 switch ( nSId ) 148 { 149 // Flaechen und Linien-Attribute: 150 // Sollten (wie StateMethode) eine eigene 151 // Execute-Methode besitzen 152 case SID_ATTR_FILL_STYLE: 153 case SID_ATTR_FILL_COLOR: 154 case SID_ATTR_FILL_GRADIENT: 155 case SID_ATTR_FILL_HATCH: 156 case SID_ATTR_FILL_BITMAP: 157 case SID_ATTR_FILL_SHADOW: 158 case SID_ATTR_FILL_TRANSPARENCE: 159 case SID_ATTR_FILL_FLOATTRANSPARENCE: 160 161 case SID_ATTR_LINE_STYLE: 162 case SID_ATTR_LINE_DASH: 163 case SID_ATTR_LINE_WIDTH: 164 case SID_ATTR_LINE_COLOR: 165 case SID_ATTR_LINEEND_STYLE: 166 case SID_ATTR_LINE_START: 167 case SID_ATTR_LINE_END: 168 case SID_ATTR_LINE_TRANSPARENCE: 169 case SID_ATTR_LINE_JOINT: 170 case SID_ATTR_LINE_CAP: 171 172 case SID_ATTR_TEXT_FITTOSIZE: 173 { 174 if( rReq.GetArgs() ) 175 { 176 sal_Bool bMergeUndo = sal_False; 177 ::svl::IUndoManager* pUndoManager = GetDocSh()->GetUndoManager(); 178 179 // Anpassungen Start/EndWidth #63083# 180 if(nSId == SID_ATTR_LINE_WIDTH) 181 { 182 SdrObject* pObj = NULL; 183 const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList(); 184 sal_uLong nCount = rMarkList.GetMarkCount(); 185 const sal_Int32 nNewLineWidth(((const XLineWidthItem&)rReq.GetArgs()->Get(XATTR_LINEWIDTH)).GetValue()); 186 const bool bUndo(mpDrawView->IsUndoEnabled()); 187 188 for (sal_uLong i=0; i<nCount; i++) 189 { 190 SfxItemSet aAttr(GetDoc()->GetPool()); 191 pObj = rMarkList.GetMark(i)->GetMarkedSdrObj(); 192 aAttr.Put(pObj->GetMergedItemSet()); 193 194 sal_Int32 nActLineWidth = ((const XLineWidthItem&)aAttr.Get(XATTR_LINEWIDTH)).GetValue(); 195 196 if(nActLineWidth != nNewLineWidth) 197 { 198 sal_Bool bSetItemSet(sal_False); 199 200 // #86265# do this for SFX_ITEM_DEFAULT and for SFX_ITEM_SET 201 if(SFX_ITEM_DONTCARE != aAttr.GetItemState(XATTR_LINESTARTWIDTH)) 202 { 203 sal_Int32 nValAct = ((const XLineStartWidthItem&)aAttr.Get(XATTR_LINESTARTWIDTH)).GetValue(); 204 sal_Int32 nValNew = nValAct + (((nNewLineWidth - nActLineWidth) * 15) / 10); 205 if(nValNew < 0) 206 nValNew = 0; 207 bSetItemSet = sal_True; 208 aAttr.Put(XLineStartWidthItem(nValNew)); 209 } 210 211 // #86265# do this for SFX_ITEM_DEFAULT and for SFX_ITEM_SET 212 if(SFX_ITEM_DONTCARE != aAttr.GetItemState(XATTR_LINEENDWIDTH)) 213 { 214 sal_Int32 nValAct = ((const XLineEndWidthItem&)aAttr.Get(XATTR_LINEENDWIDTH)).GetValue(); 215 sal_Int32 nValNew = nValAct + (((nNewLineWidth - nActLineWidth) * 15) / 10); 216 if(nValNew < 0) 217 nValNew = 0; 218 bSetItemSet = sal_True; 219 aAttr.Put(XLineEndWidthItem(nValNew)); 220 } 221 222 if(bSetItemSet) 223 { 224 if(bUndo) 225 { 226 if(!bMergeUndo) 227 { 228 pUndoManager->EnterListAction( String(), String() ); 229 mpDrawView->BegUndo(); 230 bMergeUndo = sal_True; 231 } 232 233 mpDrawView->AddUndo(GetDoc()->GetSdrUndoFactory().CreateUndoAttrObject(*pObj)); 234 } 235 236 pObj->SetMergedItemSet(aAttr); 237 } 238 } 239 } 240 241 if(bMergeUndo) 242 { 243 mpDrawView->EndUndo(); 244 } 245 } 246 247 if (nSId == SID_ATTR_FILL_SHADOW) 248 { 249 // Ggf. werden transparente Objekte wei?gefuellt 250 SdrObject* pObj = NULL; 251 const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList(); 252 sal_uLong nCount = rMarkList.GetMarkCount(); 253 const bool bUndo = mpDrawView->IsUndoEnabled(); 254 255 for (sal_uLong i=0; i<nCount; i++) 256 { 257 SfxItemSet aAttr(GetDoc()->GetPool()); 258 pObj = rMarkList.GetMark(i)->GetMarkedSdrObj(); 259 260 // #i25616# 261 if(!pObj->ISA(SdrGrafObj)) 262 { 263 aAttr.Put(pObj->GetMergedItemSet()); 264 265 const XFillStyleItem& rFillStyle = (const XFillStyleItem&) aAttr.Get(XATTR_FILLSTYLE); 266 const XLineStyleItem& rLineStyle = (const XLineStyleItem&) aAttr.Get(XATTR_LINESTYLE); 267 268 if(XFILL_NONE == rFillStyle.GetValue() && XLINE_NONE == rLineStyle.GetValue()) 269 { 270 if( bUndo ) 271 { 272 // Vorlage hat keine Fuellung, 273 // daher hart attributieren: Fuellung setzen 274 if (!bMergeUndo) 275 { 276 bMergeUndo = sal_True; 277 pUndoManager->EnterListAction( String(), String() ); 278 mpDrawView->BegUndo(); 279 } 280 281 mpDrawView->AddUndo(GetDoc()->GetSdrUndoFactory().CreateUndoAttrObject(*pObj)); 282 } 283 284 aAttr.Put(XFillStyleItem(XFILL_SOLID)); 285 aAttr.Put(XFillColorItem(String(), COL_WHITE)); 286 287 pObj->SetMergedItemSet(aAttr); 288 } 289 } 290 } 291 292 if (bMergeUndo) 293 { 294 mpDrawView->EndUndo(); 295 } 296 } 297 298 mpDrawView->SetAttributes(*rReq.GetArgs()); 299 300 if (bMergeUndo) 301 { 302 pUndoManager->LeaveListAction(); 303 } 304 305 rReq.Done(); 306 } 307 else 308 { 309 switch( rReq.GetSlot() ) 310 { 311 case SID_ATTR_FILL_SHADOW: 312 case SID_ATTR_FILL_STYLE: 313 case SID_ATTR_FILL_COLOR: 314 case SID_ATTR_FILL_GRADIENT: 315 case SID_ATTR_FILL_HATCH: 316 case SID_ATTR_FILL_BITMAP: 317 case SID_ATTR_FILL_TRANSPARENCE: 318 case SID_ATTR_FILL_FLOATTRANSPARENCE: 319 GetViewFrame()->GetDispatcher()->Execute( SID_ATTRIBUTES_AREA, SFX_CALLMODE_ASYNCHRON ); 320 break; 321 case SID_ATTR_LINE_STYLE: 322 case SID_ATTR_LINE_DASH: 323 case SID_ATTR_LINE_WIDTH: 324 case SID_ATTR_LINE_COLOR: 325 case SID_ATTR_LINE_TRANSPARENCE: 326 case SID_ATTR_LINE_JOINT: 327 case SID_ATTR_LINE_CAP: 328 GetViewFrame()->GetDispatcher()->Execute( SID_ATTRIBUTES_LINE, SFX_CALLMODE_ASYNCHRON ); 329 break; 330 case SID_ATTR_TEXT_FITTOSIZE: 331 GetViewFrame()->GetDispatcher()->Execute( SID_TEXTATTR_DLG, SFX_CALLMODE_ASYNCHRON ); 332 break; 333 } 334 } 335 Cancel(); 336 } 337 break; 338 339 case SID_HYPHENATION: 340 { 341 // const SfxPoolItem* pItem = rReq.GetArg( SID_HYPHENATION ); 342 // ^-- Soll so nicht benutzt werden (Defaults sind falsch) ! 343 SFX_REQUEST_ARG( rReq, pItem, SfxBoolItem, SID_HYPHENATION, sal_False); 344 345 if( pItem ) 346 { 347 SfxItemSet aSet( GetPool(), EE_PARA_HYPHENATE, EE_PARA_HYPHENATE ); 348 sal_Bool bValue = ( (const SfxBoolItem*) pItem)->GetValue(); 349 aSet.Put( SfxBoolItem( EE_PARA_HYPHENATE, bValue ) ); 350 mpDrawView->SetAttributes( aSet ); 351 } 352 else // nur zum Test 353 { 354 DBG_ERROR(" Kein Wert fuer Silbentrennung!"); 355 SfxItemSet aSet( GetPool(), EE_PARA_HYPHENATE, EE_PARA_HYPHENATE ); 356 sal_Bool bValue = sal_True; 357 aSet.Put( SfxBoolItem( EE_PARA_HYPHENATE, bValue ) ); 358 mpDrawView->SetAttributes( aSet ); 359 } 360 rReq.Done(); 361 Cancel(); 362 } 363 break; 364 365 case SID_INSERTPAGE: 366 case SID_INSERTPAGE_QUICK: 367 case SID_DUPLICATE_PAGE: 368 { 369 SdPage* pNewPage = CreateOrDuplicatePage (rReq, mePageKind, GetActualPage()); 370 Cancel(); 371 if(HasCurrentFunction(SID_BEZIER_EDIT) ) 372 GetViewFrame()->GetDispatcher()->Execute(SID_OBJECT_SELECT, SFX_CALLMODE_ASYNCHRON); 373 if (pNewPage != NULL) 374 SwitchPage((pNewPage->GetPageNum()-1)/2); 375 rReq.Done (); 376 } 377 break; 378 379 case SID_INSERT_MASTER_PAGE: 380 { 381 // Use the API to create a new page. 382 Reference<drawing::XMasterPagesSupplier> xMasterPagesSupplier ( 383 GetDoc()->getUnoModel(), UNO_QUERY); 384 if (xMasterPagesSupplier.is()) 385 { 386 Reference<drawing::XDrawPages> xMasterPages ( 387 xMasterPagesSupplier->getMasterPages()); 388 if (xMasterPages.is()) 389 { 390 sal_uInt16 nIndex = GetCurPageId(); 391 xMasterPages->insertNewByIndex (nIndex); 392 393 // Create shapes for the default layout. 394 SdPage* pMasterPage = GetDoc()->GetMasterSdPage( 395 nIndex, PK_STANDARD); 396 pMasterPage->CreateTitleAndLayout (sal_True,sal_True); 397 } 398 } 399 400 Cancel(); 401 if(HasCurrentFunction(SID_BEZIER_EDIT)) 402 GetViewFrame()->GetDispatcher()->Execute( 403 SID_OBJECT_SELECT, SFX_CALLMODE_ASYNCHRON); 404 rReq.Done (); 405 } 406 break; 407 408 case SID_MODIFYPAGE: 409 { 410 if (mePageKind==PK_STANDARD || mePageKind==PK_NOTES || 411 (mePageKind==PK_HANDOUT && meEditMode==EM_MASTERPAGE) ) 412 { 413 if ( mpDrawView->IsTextEdit() ) 414 { 415 mpDrawView->SdrEndTextEdit(); 416 } 417 sal_uInt16 nPage = maTabControl.GetCurPageId() - 1; 418 mpActualPage = GetDoc()->GetSdPage(nPage, mePageKind); 419 ::sd::ViewShell::mpImpl->ProcessModifyPageSlot ( 420 rReq, 421 mpActualPage, 422 mePageKind); 423 } 424 425 Cancel(); 426 rReq.Done (); 427 } 428 break; 429 430 case SID_ASSIGN_LAYOUT: 431 { 432 if (mePageKind==PK_STANDARD || mePageKind==PK_NOTES || (mePageKind==PK_HANDOUT && meEditMode==EM_MASTERPAGE)) 433 { 434 if ( mpDrawView->IsTextEdit() ) 435 mpDrawView->SdrEndTextEdit(); 436 437 ::sd::ViewShell::mpImpl->AssignLayout(rReq, mePageKind); 438 } 439 Cancel(); 440 rReq.Done (); 441 } 442 break; 443 444 case SID_RENAMEPAGE: 445 case SID_RENAME_MASTER_PAGE: 446 { 447 if (mePageKind==PK_STANDARD || mePageKind==PK_NOTES ) 448 { 449 if ( mpDrawView->IsTextEdit() ) 450 { 451 mpDrawView->SdrEndTextEdit(); 452 } 453 454 sal_uInt16 nPageId = maTabControl.GetCurPageId(); 455 SdPage* pCurrentPage = ( GetEditMode() == EM_PAGE ) 456 ? GetDoc()->GetSdPage( nPageId - 1, GetPageKind() ) 457 : GetDoc()->GetMasterSdPage( nPageId - 1, GetPageKind() ); 458 459 String aTitle( SdResId( STR_TITLE_RENAMESLIDE ) ); 460 String aDescr( SdResId( STR_DESC_RENAMESLIDE ) ); 461 String aPageName = pCurrentPage->GetName(); 462 463 SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); 464 DBG_ASSERT(pFact, "Dialogdiet fail!"); 465 AbstractSvxNameDialog* aNameDlg = pFact->CreateSvxNameDialog( GetActiveWindow(), aPageName, aDescr ); 466 DBG_ASSERT(aNameDlg, "Dialogdiet fail!"); 467 aNameDlg->SetText( aTitle ); 468 aNameDlg->SetCheckNameHdl( LINK( this, DrawViewShell, RenameSlideHdl ), true ); 469 aNameDlg->SetEditHelpId( HID_SD_NAMEDIALOG_PAGE ); 470 471 if( aNameDlg->Execute() == RET_OK ) 472 { 473 String aNewName; 474 aNameDlg->GetName( aNewName ); 475 if( ! aNewName.Equals( aPageName ) ) 476 { 477 #ifdef DBG_UTIL 478 bool bResult = 479 #endif 480 RenameSlide( nPageId, aNewName ); 481 DBG_ASSERT( bResult, "Couldn't rename slide" ); 482 } 483 } 484 delete aNameDlg; 485 } 486 487 Cancel(); 488 rReq.Ignore (); 489 } 490 break; 491 492 case SID_RENAMEPAGE_QUICK: 493 { 494 if (mePageKind==PK_STANDARD || mePageKind==PK_NOTES ) 495 { 496 if ( mpDrawView->IsTextEdit() ) 497 { 498 mpDrawView->SdrEndTextEdit(); 499 } 500 501 maTabControl.StartEditMode( maTabControl.GetCurPageId() ); 502 } 503 504 Cancel(); 505 rReq.Ignore (); 506 } 507 break; 508 509 case SID_PAGESIZE : // entweder dieses (kein menueeintrag o. ae. !!) 510 { 511 const SfxItemSet *pArgs = rReq.GetArgs (); 512 513 if (pArgs) 514 if (pArgs->Count () == 3) 515 { 516 SFX_REQUEST_ARG (rReq, pWidth, SfxUInt32Item, ID_VAL_PAGEWIDTH, sal_False); 517 SFX_REQUEST_ARG (rReq, pHeight, SfxUInt32Item, ID_VAL_PAGEHEIGHT, sal_False); 518 SFX_REQUEST_ARG (rReq, pScaleAll, SfxBoolItem, ID_VAL_SCALEOBJECTS, sal_False); 519 520 Size aSize (pWidth->GetValue (), pHeight->GetValue ()); 521 522 SetupPage (aSize, 0, 0, 0, 0, sal_True, sal_False, pScaleAll->GetValue ()); 523 rReq.Ignore (); 524 break; 525 } 526 527 StarBASIC::FatalError (SbERR_WRONG_ARGS); 528 rReq.Ignore (); 529 break; 530 } 531 532 case SID_PAGEMARGIN : // oder dieses (kein menueeintrag o. ae. !!) 533 { 534 const SfxItemSet *pArgs = rReq.GetArgs (); 535 536 if (pArgs) 537 if (pArgs->Count () == 5) 538 { 539 SFX_REQUEST_ARG (rReq, pLeft, SfxUInt32Item, ID_VAL_PAGELEFT, sal_False); 540 SFX_REQUEST_ARG (rReq, pRight, SfxUInt32Item, ID_VAL_PAGERIGHT, sal_False); 541 SFX_REQUEST_ARG (rReq, pUpper, SfxUInt32Item, ID_VAL_PAGETOP, sal_False); 542 SFX_REQUEST_ARG (rReq, pLower, SfxUInt32Item, ID_VAL_PAGEBOTTOM, sal_False); 543 SFX_REQUEST_ARG (rReq, pScaleAll, SfxBoolItem, ID_VAL_SCALEOBJECTS, sal_False); 544 545 Size aEmptySize (0, 0); 546 547 SetupPage (aEmptySize, pLeft->GetValue (), pRight->GetValue (), 548 pUpper->GetValue (), pLower->GetValue (), 549 sal_False, sal_True, pScaleAll->GetValue ()); 550 rReq.Ignore (); 551 break; 552 } 553 554 StarBASIC::FatalError (SbERR_WRONG_ARGS); 555 rReq.Ignore (); 556 break; 557 } 558 559 case SID_ATTR_ZOOMSLIDER: 560 { 561 const SfxItemSet* pArgs = rReq.GetArgs(); 562 563 if (pArgs && pArgs->Count () == 1 ) 564 { 565 SFX_REQUEST_ARG (rReq, pScale, SfxUInt16Item, SID_ATTR_ZOOMSLIDER, sal_False); 566 if (CHECK_RANGE (5, pScale->GetValue (), 3000)) 567 { 568 SetZoom (pScale->GetValue ()); 569 570 SfxBindings& rBindings = GetViewFrame()->GetBindings(); 571 rBindings.Invalidate( SID_ATTR_ZOOM ); 572 rBindings.Invalidate( SID_ZOOM_IN ); 573 rBindings.Invalidate( SID_ZOOM_OUT ); 574 rBindings.Invalidate( SID_ATTR_ZOOMSLIDER ); 575 576 } 577 } 578 579 Cancel(); 580 rReq.Done (); 581 break; 582 } 583 case SID_ZOOMING : // kein Menueintrag, sondern aus dem Zoomdialog generiert 584 { 585 const SfxItemSet* pArgs = rReq.GetArgs(); 586 587 if (pArgs) 588 if (pArgs->Count () == 1) 589 { 590 SFX_REQUEST_ARG (rReq, pScale, SfxUInt32Item, ID_VAL_ZOOM, sal_False); 591 if (CHECK_RANGE (10, pScale->GetValue (), 1000)) 592 { 593 SetZoom (pScale->GetValue ()); 594 595 SfxBindings& rBindings = GetViewFrame()->GetBindings(); 596 rBindings.Invalidate( SID_ATTR_ZOOM ); 597 rBindings.Invalidate( SID_ZOOM_IN ); 598 rBindings.Invalidate( SID_ZOOM_OUT ); 599 rBindings.Invalidate( SID_ATTR_ZOOMSLIDER ); 600 } 601 else StarBASIC::FatalError (SbERR_BAD_PROP_VALUE); 602 603 rReq.Ignore (); 604 break; 605 } 606 607 StarBASIC::FatalError (SbERR_WRONG_ARGS); 608 rReq.Ignore (); 609 break; 610 } 611 612 case SID_ATTR_ZOOM: 613 { 614 const SfxItemSet* pArgs = rReq.GetArgs(); 615 mbZoomOnPage = sal_False; 616 617 if ( pArgs ) 618 { 619 SvxZoomType eZT = ( ( const SvxZoomItem& ) pArgs-> 620 Get( SID_ATTR_ZOOM ) ).GetType(); 621 switch( eZT ) 622 { 623 case SVX_ZOOM_PERCENT: 624 SetZoom( (long) ( ( const SvxZoomItem& ) pArgs-> 625 Get( SID_ATTR_ZOOM ) ).GetValue() ); 626 break; 627 628 case SVX_ZOOM_OPTIMAL: 629 GetViewFrame()->GetDispatcher()->Execute( SID_SIZE_ALL, 630 SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD ); 631 break; 632 633 case SVX_ZOOM_PAGEWIDTH: 634 GetViewFrame()->GetDispatcher()->Execute( SID_SIZE_PAGE_WIDTH, 635 SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD ); 636 break; 637 638 case SVX_ZOOM_WHOLEPAGE: 639 GetViewFrame()->GetDispatcher()->Execute( SID_SIZE_PAGE, 640 SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD ); 641 break; 642 case SVX_ZOOM_PAGEWIDTH_NOBORDER: 643 DBG_ERROR("sd::DrawViewShell::FuTemporary(), SVX_ZOOM_PAGEWIDTH_NOBORDER not handled!" ); 644 break; 645 } 646 rReq.Ignore (); 647 } 648 else 649 { 650 // hier den Zoom-Dialog oeffnen 651 SetCurrentFunction( FuScale::Create( this, GetActiveWindow(), mpDrawView, GetDoc(), rReq ) ); 652 } 653 Cancel(); 654 } 655 break; 656 657 case SID_CHANGEBEZIER: 658 case SID_CHANGEPOLYGON: 659 if ( mpDrawView->IsTextEdit() ) 660 { 661 mpDrawView->SdrEndTextEdit(); 662 GetViewFrame()->GetDispatcher()->Execute(SID_OBJECT_SELECT, SFX_CALLMODE_ASYNCHRON); 663 } 664 665 if ( mpDrawView->IsPresObjSelected() ) 666 { 667 ::sd::Window* pWindow = GetActiveWindow(); 668 InfoBox(pWindow, String(SdResId(STR_ACTION_NOTPOSSIBLE) ) ).Execute(); 669 } 670 else 671 { 672 if( rReq.GetSlot() == SID_CHANGEBEZIER ) 673 { 674 WaitObject aWait( (Window*)GetActiveWindow() ); 675 mpDrawView->ConvertMarkedToPathObj(sal_False); 676 } 677 else 678 { 679 if( mpDrawView->IsVectorizeAllowed() ) 680 { 681 SetCurrentFunction( FuVectorize::Create( this, GetActiveWindow(), mpDrawView, GetDoc(), rReq ) ); 682 } 683 else 684 { 685 WaitObject aWait( (Window*)GetActiveWindow() ); 686 mpDrawView->ConvertMarkedToPolyObj(sal_False); 687 } 688 } 689 690 Invalidate(SID_CHANGEBEZIER); 691 Invalidate(SID_CHANGEPOLYGON); 692 } 693 Cancel(); 694 695 if( HasCurrentFunction(SID_BEZIER_EDIT) ) 696 { // ggf. die richtige Editfunktion aktivieren 697 GetViewFrame()->GetDispatcher()->Execute(SID_SWITCH_POINTEDIT, 698 SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD); 699 } 700 rReq.Ignore (); 701 break; 702 703 case SID_CONVERT_TO_CONTOUR: 704 if ( mpDrawView->IsTextEdit() ) 705 { 706 mpDrawView->SdrEndTextEdit(); 707 GetViewFrame()->GetDispatcher()->Execute(SID_OBJECT_SELECT, SFX_CALLMODE_ASYNCHRON); 708 } 709 710 if ( mpDrawView->IsPresObjSelected() ) 711 { 712 ::sd::Window* pWindow = GetActiveWindow(); 713 InfoBox(pWindow, String(SdResId(STR_ACTION_NOTPOSSIBLE) ) ).Execute(); 714 } 715 else 716 { 717 WaitObject aWait( (Window*)GetActiveWindow() ); 718 mpDrawView->ConvertMarkedToPathObj(sal_True); 719 720 Invalidate(SID_CONVERT_TO_CONTOUR); 721 } 722 Cancel(); 723 724 rReq.Ignore (); 725 break; 726 727 case SID_CONVERT_TO_METAFILE: 728 case SID_CONVERT_TO_BITMAP: 729 { 730 // End text edit mode when it is active because the metafile or 731 // bitmap that will be created does not support it. 732 if ( mpDrawView->IsTextEdit() ) 733 { 734 mpDrawView->SdrEndTextEdit(); 735 GetViewFrame()->GetDispatcher()->Execute(SID_OBJECT_SELECT, SFX_CALLMODE_ASYNCHRON); 736 } 737 738 if ( mpDrawView->IsPresObjSelected(true,true,true) ) 739 { 740 ::sd::Window* pWindow = GetActiveWindow(); 741 InfoBox(pWindow, String(SdResId(STR_ACTION_NOTPOSSIBLE) ) ).Execute(); 742 } 743 else 744 { 745 WaitObject aWait( (Window*)GetActiveWindow() ); 746 747 // switch on undo for the next operations 748 mpDrawView->BegUndo( 749 String( 750 SdResId (nSId==SID_CONVERT_TO_METAFILE ? STR_UNDO_CONVERT_TO_METAFILE : STR_UNDO_CONVERT_TO_BITMAP))); 751 752 // create SdrGrafObj from metafile/bitmap 753 Graphic aGraphic; 754 switch (nSId) 755 { 756 case SID_CONVERT_TO_METAFILE: 757 { 758 GDIMetaFile aMetaFile(mpDrawView->GetMarkedObjMetaFile()); 759 aGraphic = Graphic(aMetaFile); 760 } 761 break; 762 case SID_CONVERT_TO_BITMAP: 763 { 764 bool bDone(false); 765 766 // I have to get the image here directly since GetMarkedObjBitmapEx works 767 // based on Bitmaps, but not on BitmapEx, thus throwing away the alpha 768 // channel. Argh! GetMarkedObjBitmapEx itself is too widely used to safely 769 // change that, e.g. in the exchange formats. For now I can only add this 770 // exception to get good results for Svgs. This is how the code gets more 771 // and more crowded, at last I made a remark for myself to change this 772 // as one of the next tasks. 773 if(1 == mpDrawView->GetMarkedObjectCount()) 774 { 775 const SdrGrafObj* pSdrGrafObj = dynamic_cast< const SdrGrafObj* >(mpDrawView->GetMarkedObjectByIndex(0)); 776 777 if(pSdrGrafObj && pSdrGrafObj->isEmbeddedSvg()) 778 { 779 aGraphic = Graphic(pSdrGrafObj->GetGraphic().getSvgData()->getReplacement()); 780 bDone = true; 781 } 782 } 783 784 if(!bDone) 785 { 786 aGraphic = Graphic(mpDrawView->GetMarkedObjBitmapEx()); 787 } 788 } 789 break; 790 } 791 792 // create new object 793 SdrGrafObj* pGraphicObj = new SdrGrafObj (aGraphic); 794 795 // get some necessary info and ensure it 796 const SdrMarkList& rMarkList(mpDrawView->GetMarkedObjectList()); 797 const sal_uInt32 nMarkCount(rMarkList.GetMarkCount()); 798 SdrPageView* pPageView = mpDrawView->GetSdrPageView(); 799 OSL_ENSURE(nMarkCount, "DrawViewShell::FuTemporary: SID_CONVERT_TO_BITMAP with empty selection (!)"); 800 OSL_ENSURE(pPageView, "DrawViewShell::FuTemporary: SID_CONVERT_TO_BITMAP without SdrPageView (!)"); 801 802 // fit rectangle of new graphic object to selection's mark rect 803 Rectangle aAllMarkedRect; 804 rMarkList.TakeBoundRect(pPageView, aAllMarkedRect); 805 pGraphicObj->SetLogicRect(aAllMarkedRect); 806 807 // #i71540# to keep the order, it is necessary to replace the lowest object 808 // of the selection with the new object. This also means that with multi 809 // selection, all other objects need to be deleted first 810 SdrMark* pFirstMark = rMarkList.GetMark(0L); 811 SdrObject* pReplacementCandidate = pFirstMark->GetMarkedSdrObj(); 812 813 if(nMarkCount > 1L) 814 { 815 // take first object out of selection 816 mpDrawView->MarkObj(pReplacementCandidate, pPageView, true, true); 817 818 // clear remaining selection 819 mpDrawView->DeleteMarkedObj(); 820 } 821 822 // now replace lowest object with new one 823 mpDrawView->ReplaceObjectAtView(pReplacementCandidate, *pPageView, pGraphicObj); 824 825 // switch off undo 826 mpDrawView->EndUndo(); 827 } 828 } 829 830 Cancel(); 831 832 rReq.Done (); 833 break; 834 835 case SID_SET_DEFAULT: 836 { 837 SfxItemSet* pSet = NULL; 838 839 if (mpDrawView->IsTextEdit()) 840 { 841 ::Outliner* pOutl = mpDrawView->GetTextEditOutliner(); 842 if (pOutl) 843 { 844 pOutl->RemoveFields(sal_True, (TypeId) SvxURLField::StaticType()); 845 } 846 847 pSet = new SfxItemSet( GetPool(), EE_ITEMS_START, EE_ITEMS_END ); 848 mpDrawView->SetAttributes( *pSet, sal_True ); 849 } 850 else 851 { 852 const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList(); 853 sal_uLong nCount = rMarkList.GetMarkCount(); 854 855 // In diese Liste werden fuer jedes Praesentationsobjekt ein SfxItemSet 856 // der harten Attribute sowie der UserCall eingetragen, da diese beim nachfolgenden 857 // mpDrawView->SetAttributes( *pSet, sal_True ) verloren gehen und spaeter restauriert 858 // werden muessen 859 List* pAttrList = new List(); 860 SdPage* pPresPage = (SdPage*) mpDrawView->GetSdrPageView()->GetPage(); 861 sal_uLong i; 862 863 for ( i = 0; i < nCount; i++ ) 864 { 865 SdrObject* pObj = rMarkList.GetMark(i)->GetMarkedSdrObj(); 866 867 if( pPresPage->IsPresObj( pObj ) ) 868 { 869 SfxItemSet* pNewSet = new SfxItemSet( GetDoc()->GetPool(), SDRATTR_TEXT_MINFRAMEHEIGHT, SDRATTR_TEXT_AUTOGROWHEIGHT, 0 ); 870 pNewSet->Put(pObj->GetMergedItemSet()); 871 pAttrList->Insert( pNewSet, LIST_APPEND ); 872 pAttrList->Insert( pObj->GetUserCall(), LIST_APPEND ); 873 } 874 } 875 876 pSet = new SfxItemSet( GetPool() ); 877 mpDrawView->SetAttributes( *pSet, sal_True ); 878 879 sal_uLong j = 0; 880 881 for ( i = 0; i < nCount; i++ ) 882 { 883 SfxStyleSheet* pSheet = NULL; 884 SdrObject* pObj = rMarkList.GetMark(i)->GetMarkedSdrObj(); 885 886 if (pObj->GetObjIdentifier() == OBJ_TITLETEXT) 887 { 888 pSheet = mpActualPage->GetStyleSheetForPresObj(PRESOBJ_TITLE); 889 if (pSheet) 890 pObj->SetStyleSheet(pSheet, sal_False); 891 } 892 else if(pObj->GetObjIdentifier() == OBJ_OUTLINETEXT) 893 { 894 for (sal_uInt16 nLevel = 1; nLevel < 10; nLevel++) 895 { 896 pSheet = mpActualPage->GetStyleSheetForPresObj( PRESOBJ_OUTLINE ); 897 DBG_ASSERT(pSheet, "Vorlage fuer Gliederungsobjekt nicht gefunden"); 898 if (pSheet) 899 { 900 pObj->StartListening(*pSheet); 901 902 if( nLevel == 1 ) 903 // Textrahmen hoert auf StyleSheet der Ebene1 904 pObj->NbcSetStyleSheet(pSheet, sal_False); 905 906 } 907 } 908 } 909 910 if( pPresPage->IsPresObj( pObj ) ) 911 { 912 SfxItemSet* pNewSet = (SfxItemSet*) pAttrList->GetObject(j++); 913 SdrObjUserCall* pUserCall = (SdrObjUserCall*) pAttrList->GetObject(j++); 914 915 if ( pNewSet && pNewSet->GetItemState( SDRATTR_TEXT_MINFRAMEHEIGHT ) == SFX_ITEM_ON ) 916 { 917 pObj->SetMergedItem(pNewSet->Get(SDRATTR_TEXT_MINFRAMEHEIGHT)); 918 } 919 920 if ( pNewSet && pNewSet->GetItemState( SDRATTR_TEXT_AUTOGROWHEIGHT ) == SFX_ITEM_ON ) 921 { 922 pObj->SetMergedItem(pNewSet->Get(SDRATTR_TEXT_AUTOGROWHEIGHT)); 923 } 924 925 if( pUserCall ) 926 pObj->SetUserCall( pUserCall ); 927 928 delete pNewSet; 929 } 930 } 931 932 delete pAttrList; 933 } 934 935 delete pSet; 936 Cancel(); 937 } 938 break; 939 940 case SID_DELETE_SNAPITEM: 941 { 942 SdrPageView* pPV; 943 Point aMPos = GetActiveWindow()->PixelToLogic( maMousePos ); 944 sal_uInt16 nHitLog = (sal_uInt16) GetActiveWindow()->PixelToLogic( Size( 945 FuPoor::HITPIX, 0 ) ).Width(); 946 sal_uInt16 nHelpLine; 947 948 mbMousePosFreezed = sal_False; 949 950 if( mpDrawView->PickHelpLine( aMPos, nHitLog, *GetActiveWindow(), nHelpLine, pPV) ) 951 { 952 pPV->DeleteHelpLine( nHelpLine ); 953 } 954 Cancel(); 955 rReq.Ignore (); 956 } 957 break; 958 959 case SID_DELETE_PAGE: 960 case SID_DELETE_MASTER_PAGE: 961 DeleteActualPage(); 962 Cancel(); 963 rReq.Ignore (); 964 break; 965 966 case SID_DELETE_LAYER: 967 DeleteActualLayer(); 968 Cancel(); 969 rReq.Ignore (); 970 break; 971 972 case SID_ORIGINAL_SIZE: 973 mpDrawView->SetMarkedOriginalSize(); 974 Cancel(); 975 rReq.Done(); 976 break; 977 978 case SID_DRAW_FONTWORK: 979 case SID_DRAW_FONTWORK_VERTICAL: 980 { 981 svx::FontworkBar::execute( mpView, rReq, GetViewFrame()->GetBindings() ); // SJ: can be removed (I think) 982 Cancel(); 983 rReq.Done(); 984 } 985 break; 986 987 case SID_SAVEGRAPHIC: 988 { 989 const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList(); 990 if( rMarkList.GetMarkCount() == 1 ) 991 { 992 SdrGrafObj *pGrafObj = dynamic_cast< SdrGrafObj* >( rMarkList.GetMark( 0 )->GetMarkedSdrObj() ); 993 if(pGrafObj ) 994 { 995 ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape( pGrafObj->getUnoShape(), com::sun::star::uno::UNO_QUERY ); 996 SdGRFFilter::SaveGraphic( xShape ); 997 } 998 } 999 Cancel(); 1000 rReq.Ignore(); 1001 } 1002 break; 1003 1004 default: 1005 { 1006 // switch Anweisung wegen CLOOKS aufgeteilt. Alle case-Anweisungen die 1007 // eine Fu???? -Funktion aufrufen, sind in die Methode FuTemp01 (drviews8) 1008 // gewandert. 1009 FuTemp01(rReq); 1010 } 1011 break; 1012 } 1013 1014 if(HasCurrentFunction()) 1015 { 1016 GetCurrentFunction()->Activate(); 1017 } 1018 } 1019 1020 void DrawViewShell::ExecChar( SfxRequest &rReq ) 1021 { 1022 SdDrawDocument* pDoc = GetDoc(); 1023 if (!pDoc || !mpDrawView) 1024 return; 1025 1026 SfxItemSet aEditAttr( pDoc->GetPool() ); 1027 mpDrawView->GetAttributes( aEditAttr ); 1028 1029 //modified by wj for sym2_1580, if put old itemset into new set, 1030 //when mpDrawView->SetAttributes(aNewAttr) it will invalidate all the item 1031 // and use old attr to update all the attributes 1032 // SfxItemSet aNewAttr( GetPool(), 1033 // EE_ITEMS_START, EE_ITEMS_END ); 1034 // aNewAttr.Put( aEditAttr, sal_False ); 1035 SfxItemSet aNewAttr( pDoc->GetPool() ); 1036 //modified end 1037 1038 sal_uInt16 nSId = rReq.GetSlot(); 1039 1040 MapSlot( nSId ); 1041 1042 switch ( nSId ) 1043 { 1044 case SID_ATTR_CHAR_FONT: 1045 if( rReq.GetArgs() ) 1046 { 1047 SFX_REQUEST_ARG( rReq, pItem, SvxFontItem, SID_ATTR_CHAR_FONT , sal_False ); 1048 if (pItem) 1049 { 1050 aNewAttr.Put(*pItem); 1051 } 1052 } 1053 break; 1054 case SID_ATTR_CHAR_FONTHEIGHT: 1055 if( rReq.GetArgs() ) 1056 { 1057 SFX_REQUEST_ARG( rReq, pItem, SvxFontHeightItem, SID_ATTR_CHAR_FONTHEIGHT , sal_False ); 1058 if (pItem) 1059 { 1060 aNewAttr.Put(*pItem); 1061 } 1062 } 1063 break; 1064 case SID_ATTR_CHAR_WEIGHT: 1065 if( rReq.GetArgs() ) 1066 { 1067 //const SvxWeightItem *pItem = (const SvxWeightItem*) rReq.GetArg( SID_ATTR_CHAR_WEIGHT, sal_False, TYPE(SvxWeightItem) ); 1068 SFX_REQUEST_ARG( rReq, pItem, SvxWeightItem, SID_ATTR_CHAR_WEIGHT , sal_False ); 1069 if (pItem) 1070 { 1071 aNewAttr.Put(*pItem); 1072 } 1073 } 1074 break; 1075 case SID_ATTR_CHAR_POSTURE: 1076 if( rReq.GetArgs() ) 1077 { 1078 //const SvxPostureItem *pItem = (const SvxPostureItem*) rReq.GetArg( SID_ATTR_CHAR_POSTURE, sal_False, TYPE(SvxPostureItem) ); 1079 SFX_REQUEST_ARG( rReq, pItem, SvxPostureItem, SID_ATTR_CHAR_POSTURE , sal_False ); 1080 if (pItem) 1081 { 1082 aNewAttr.Put(*pItem); 1083 } 1084 } 1085 break; 1086 case SID_ATTR_CHAR_UNDERLINE: 1087 if( rReq.GetArgs() ) 1088 { 1089 //<<modify by wj for sym2_1873 1090 //SFX_REQUEST_ARG( rReq, pItem, SvxTextLineItem, SID_ATTR_CHAR_UNDERLINE , sal_False ); 1091 SFX_REQUEST_ARG( rReq, pItem, SvxUnderlineItem, SID_ATTR_CHAR_UNDERLINE , sal_False ); 1092 //end>> 1093 if (pItem) 1094 { 1095 aNewAttr.Put(*pItem); 1096 } 1097 else 1098 { 1099 FontUnderline eFU = ( (const SvxUnderlineItem&) aEditAttr.Get( EE_CHAR_UNDERLINE ) ).GetLineStyle(); 1100 aNewAttr.Put( SvxUnderlineItem( eFU != UNDERLINE_NONE ?UNDERLINE_NONE : UNDERLINE_SINGLE, EE_CHAR_UNDERLINE ) ); 1101 }//aNewAttr.Put( (const SvxUnderlineItem&)aEditAttr.Get( EE_CHAR_UNDERLINE ) ); 1102 } 1103 break; 1104 case SID_ATTR_CHAR_SHADOWED: 1105 if( rReq.GetArgs() ) 1106 { 1107 SFX_REQUEST_ARG( rReq, pItem, SvxShadowedItem, SID_ATTR_CHAR_SHADOWED , sal_False ); 1108 if (pItem) 1109 { 1110 aNewAttr.Put(*pItem); 1111 } 1112 } 1113 break; 1114 case SID_ATTR_CHAR_STRIKEOUT: 1115 if( rReq.GetArgs() ) 1116 { 1117 SFX_REQUEST_ARG( rReq, pItem, SvxCrossedOutItem, SID_ATTR_CHAR_STRIKEOUT , sal_False ); 1118 if (pItem) 1119 { 1120 aNewAttr.Put(*pItem); 1121 } 1122 } 1123 break; 1124 case SID_ATTR_CHAR_COLOR: 1125 if( rReq.GetArgs() ) 1126 { 1127 SFX_REQUEST_ARG( rReq, pItem, SvxColorItem, SID_ATTR_CHAR_COLOR , sal_False ); 1128 if (pItem) 1129 { 1130 aNewAttr.Put(*pItem); 1131 } 1132 } 1133 break; 1134 case SID_ATTR_CHAR_KERNING: 1135 if( rReq.GetArgs() ) 1136 { 1137 SFX_REQUEST_ARG( rReq, pItem, SvxKerningItem, SID_ATTR_CHAR_KERNING , sal_False ); 1138 if (pItem) 1139 { 1140 aNewAttr.Put(*pItem); 1141 } 1142 } 1143 break; 1144 case SID_SET_SUB_SCRIPT: 1145 if( rReq.GetArgs() ) 1146 { 1147 SvxEscapementItem aItem( EE_CHAR_ESCAPEMENT ); 1148 SvxEscapement eEsc = (SvxEscapement ) ( (const SvxEscapementItem&) 1149 aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue(); 1150 if( eEsc == SVX_ESCAPEMENT_SUBSCRIPT ) 1151 aItem.SetEscapement( SVX_ESCAPEMENT_OFF ); 1152 else 1153 aItem.SetEscapement( SVX_ESCAPEMENT_SUBSCRIPT ); 1154 aNewAttr.Put( aItem ); 1155 } 1156 break; 1157 case SID_SET_SUPER_SCRIPT: 1158 if( rReq.GetArgs() ) 1159 { 1160 SvxEscapementItem aItem( EE_CHAR_ESCAPEMENT ); 1161 SvxEscapement eEsc = (SvxEscapement ) ( (const SvxEscapementItem&) 1162 aEditAttr.Get( EE_CHAR_ESCAPEMENT ) ).GetEnumValue(); 1163 if( eEsc == SVX_ESCAPEMENT_SUPERSCRIPT ) 1164 aItem.SetEscapement( SVX_ESCAPEMENT_OFF ); 1165 else 1166 aItem.SetEscapement( SVX_ESCAPEMENT_SUPERSCRIPT ); 1167 aNewAttr.Put( aItem ); 1168 } 1169 break; 1170 default: 1171 ; 1172 } 1173 1174 mpDrawView->SetAttributes(aNewAttr); 1175 rReq.Done(); 1176 Cancel(); 1177 } 1178 1179 1180 /** This method consists basically of three parts: 1181 1. Process the arguments of the SFX request. 1182 2. Use the model to create a new page or duplicate an existing one. 1183 3. Update the tab control and switch to the new page. 1184 */ 1185 SdPage* DrawViewShell::CreateOrDuplicatePage ( 1186 SfxRequest& rRequest, 1187 PageKind ePageKind, 1188 SdPage* pPage, 1189 const sal_Int32 nInsertPosition) 1190 { 1191 SdPage* pNewPage = NULL; 1192 if (ePageKind == PK_STANDARD && meEditMode != EM_MASTERPAGE) 1193 { 1194 if ( mpDrawView->IsTextEdit() ) 1195 { 1196 mpDrawView->SdrEndTextEdit(); 1197 } 1198 pNewPage = ViewShell::CreateOrDuplicatePage (rRequest, ePageKind, pPage, nInsertPosition); 1199 } 1200 return pNewPage; 1201 } 1202 1203 void DrawViewShell::ExecutePropPanelAttr (SfxRequest& rReq) 1204 { 1205 if(SlideShow::IsRunning( GetViewShellBase() )) 1206 return; 1207 1208 SdDrawDocument* pDoc = GetDoc(); 1209 if (!pDoc || !mpDrawView) 1210 return; 1211 1212 sal_uInt16 nSId = rReq.GetSlot(); 1213 SfxItemSet aAttrs( pDoc->GetPool() ); 1214 1215 switch ( nSId ) 1216 { 1217 case SID_TABLE_VERT_NONE: 1218 case SID_TABLE_VERT_CENTER: 1219 case SID_TABLE_VERT_BOTTOM: 1220 SdrTextVertAdjust eTVA = SDRTEXTVERTADJUST_TOP; 1221 if (nSId == SID_TABLE_VERT_CENTER) 1222 eTVA = SDRTEXTVERTADJUST_CENTER; 1223 else if (nSId == SID_TABLE_VERT_BOTTOM) 1224 eTVA = SDRTEXTVERTADJUST_BOTTOM; 1225 1226 aAttrs.Put( SdrTextVertAdjustItem(eTVA) ); 1227 mpDrawView->SetAttributes(aAttrs); 1228 1229 break; 1230 } 1231 } 1232 1233 void DrawViewShell::GetStatePropPanelAttr(SfxItemSet& rSet) 1234 { 1235 SfxWhichIter aIter( rSet ); 1236 sal_uInt16 nWhich = aIter.FirstWhich(); 1237 1238 SdDrawDocument* pDoc = GetDoc(); 1239 if (!pDoc || !mpDrawView) 1240 return; 1241 1242 SfxItemSet aAttrs( pDoc->GetPool() ); 1243 mpDrawView->GetAttributes( aAttrs ); 1244 1245 while ( nWhich ) 1246 { 1247 sal_uInt16 nSlotId = SfxItemPool::IsWhich(nWhich) 1248 ? GetPool().GetSlotId(nWhich) 1249 : nWhich; 1250 switch ( nSlotId ) 1251 { 1252 case SID_TABLE_VERT_NONE: 1253 case SID_TABLE_VERT_CENTER: 1254 case SID_TABLE_VERT_BOTTOM: 1255 sal_Bool bContour = sal_False; 1256 SfxItemState eConState = aAttrs.GetItemState( SDRATTR_TEXT_CONTOURFRAME ); 1257 if( eConState != SFX_ITEM_DONTCARE ) 1258 { 1259 bContour = ( ( const SdrTextContourFrameItem& )aAttrs.Get( SDRATTR_TEXT_CONTOURFRAME ) ).GetValue(); 1260 } 1261 if (bContour) break; 1262 1263 SfxItemState eVState = aAttrs.GetItemState( SDRATTR_TEXT_VERTADJUST ); 1264 //SfxItemState eHState = aAttrs.GetItemState( SDRATTR_TEXT_HORZADJUST ); 1265 1266 //if(SFX_ITEM_DONTCARE != eVState && SFX_ITEM_DONTCARE != eHState) 1267 if(SFX_ITEM_DONTCARE != eVState) 1268 { 1269 SdrTextVertAdjust eTVA = (SdrTextVertAdjust)((const SdrTextVertAdjustItem&)aAttrs.Get(SDRATTR_TEXT_VERTADJUST)).GetValue(); 1270 sal_Bool bSet = nSlotId == SID_TABLE_VERT_NONE && eTVA == SDRTEXTVERTADJUST_TOP|| 1271 nSlotId == SID_TABLE_VERT_CENTER && eTVA == SDRTEXTVERTADJUST_CENTER || 1272 nSlotId == SID_TABLE_VERT_BOTTOM && eTVA == SDRTEXTVERTADJUST_BOTTOM; 1273 rSet.Put(SfxBoolItem(nSlotId, bSet)); 1274 } 1275 else 1276 { 1277 rSet.Put(SfxBoolItem(nSlotId, sal_False)); 1278 } 1279 break; 1280 } 1281 nWhich = aIter.NextWhich(); 1282 } 1283 } 1284 1285 } // end of namespace sd 1286