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_sc.hxx" 26 27 28 29 //------------------------------------------------------------------ 30 31 #include <editeng/eeitem.hxx> 32 33 #include <sfx2/viewfrm.hxx> 34 #include <sfx2/request.hxx> 35 #include <sfx2/bindings.hxx> 36 #include <tools/urlobj.hxx> 37 //CHINA001 #include <svx/dlgname.hxx> 38 #include <svx/svxdlg.hxx> //CHINA001 39 #include <svx/dialogs.hrc> //CHINA001 40 #include <svx/fmglob.hxx> 41 #include <svx/hlnkitem.hxx> 42 #include <svx/fontwork.hxx> 43 #include <svx/svdocapt.hxx> 44 #include <svx/svdoole2.hxx> 45 #include <svx/svdouno.hxx> 46 #include <svx/svdpage.hxx> 47 #include <svx/svdundo.hxx> 48 #include <svx/xdef.hxx> 49 #include <vcl/msgbox.hxx> 50 #include <svx/extrusionbar.hxx> 51 #include <svx/fontworkbar.hxx> 52 #include <sfx2/docfile.hxx> 53 54 #include <com/sun/star/form/FormButtonType.hpp> 55 #include <com/sun/star/beans/XPropertySet.hpp> 56 #include <com/sun/star/beans/XPropertySetInfo.hpp> 57 #include <com/sun/star/awt/XControlModel.hpp> 58 59 #include "drawsh.hxx" 60 #include "drawview.hxx" 61 #include "viewdata.hxx" 62 #include "tabvwsh.hxx" 63 #include "docsh.hxx" 64 //CHINA001 #include "strindlg.hxx" 65 #include "scresid.hxx" 66 #include "undotab.hxx" 67 #include "drwlayer.hxx" 68 #include "userdat.hxx" 69 #include "postit.hxx" 70 71 #include "sc.hrc" 72 73 using namespace com::sun::star; 74 75 //------------------------------------------------------------------ 76 77 void ScDrawShell::GetHLinkState( SfxItemSet& rSet ) // Hyperlink 78 { 79 ScDrawView* pView = pViewData->GetScDrawView(); 80 const SdrMarkList& rMarkList = pView->GetMarkedObjectList(); 81 sal_uLong nMarkCount = rMarkList.GetMarkCount(); 82 83 // Hyperlink 84 85 SvxHyperlinkItem aHLinkItem; 86 87 if ( nMarkCount == 1 ) // URL-Button markiert ? 88 { 89 SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj(); 90 #ifdef ISSUE66550_HLINK_FOR_SHAPES 91 ScMacroInfo* pInfo = ScDrawLayer::GetMacroInfo( pObj ); 92 if ( pInfo && (pInfo->GetHlink().getLength() > 0) ) 93 { 94 aHLinkItem.SetURL( pInfo->GetHlink() ); 95 aHLinkItem.SetInsertMode(HLINK_FIELD); 96 } 97 #endif 98 SdrUnoObj* pUnoCtrl = PTR_CAST(SdrUnoObj, pObj); 99 if (pUnoCtrl && FmFormInventor == pUnoCtrl->GetObjInventor()) 100 { 101 uno::Reference<awt::XControlModel> xControlModel = pUnoCtrl->GetUnoControlModel(); 102 DBG_ASSERT( xControlModel.is(), "UNO-Control ohne Model" ); 103 if( !xControlModel.is() ) 104 return; 105 106 uno::Reference< beans::XPropertySet > xPropSet( xControlModel, uno::UNO_QUERY ); 107 uno::Reference< beans::XPropertySetInfo > xInfo = xPropSet->getPropertySetInfo(); 108 109 rtl::OUString sPropButtonType = rtl::OUString::createFromAscii( "ButtonType" ); 110 rtl::OUString sPropTargetURL = rtl::OUString::createFromAscii( "TargetURL" ); 111 rtl::OUString sPropTargetFrame = rtl::OUString::createFromAscii( "TargetFrame" ); 112 rtl::OUString sPropLabel = rtl::OUString::createFromAscii( "Label" ); 113 114 if(xInfo->hasPropertyByName( sPropButtonType )) 115 { 116 uno::Any aAny = xPropSet->getPropertyValue( sPropButtonType ); 117 form::FormButtonType eTmp; 118 if ( (aAny >>= eTmp) && eTmp == form::FormButtonType_URL ) 119 { 120 rtl::OUString sTmp; 121 // Label 122 if(xInfo->hasPropertyByName( sPropLabel )) 123 { 124 aAny = xPropSet->getPropertyValue( sPropLabel ); 125 if ( (aAny >>= sTmp) && sTmp.getLength() ) 126 { 127 aHLinkItem.SetName(sTmp); 128 } 129 } 130 // URL 131 if(xInfo->hasPropertyByName( sPropTargetURL )) 132 { 133 aAny = xPropSet->getPropertyValue( sPropTargetURL ); 134 if ( (aAny >>= sTmp) && sTmp.getLength() ) 135 { 136 aHLinkItem.SetURL(sTmp); 137 } 138 } 139 // Target 140 if(xInfo->hasPropertyByName( sPropTargetFrame )) 141 { 142 aAny = xPropSet->getPropertyValue( sPropTargetFrame ); 143 if ( (aAny >>= sTmp) && sTmp.getLength() ) 144 { 145 aHLinkItem.SetTargetFrame(sTmp); 146 } 147 } 148 aHLinkItem.SetInsertMode(HLINK_BUTTON); 149 } 150 } 151 } 152 } 153 154 rSet.Put(aHLinkItem); 155 } 156 157 void ScDrawShell::ExecuteHLink( SfxRequest& rReq ) 158 { 159 const SfxItemSet* pReqArgs = rReq.GetArgs(); 160 161 sal_uInt16 nSlot = rReq.GetSlot(); 162 switch ( nSlot ) 163 { 164 case SID_HYPERLINK_SETLINK: 165 if( pReqArgs ) 166 { 167 const SfxPoolItem* pItem; 168 if ( pReqArgs->GetItemState( SID_HYPERLINK_SETLINK, sal_True, &pItem ) == SFX_ITEM_SET ) 169 { 170 const SvxHyperlinkItem* pHyper = (const SvxHyperlinkItem*) pItem; 171 const String& rName = pHyper->GetName(); 172 const String& rURL = pHyper->GetURL(); 173 const String& rTarget = pHyper->GetTargetFrame(); 174 SvxLinkInsertMode eMode = pHyper->GetInsertMode(); 175 176 sal_Bool bDone = sal_False; 177 if ( eMode == HLINK_FIELD || eMode == HLINK_BUTTON ) 178 { 179 ScDrawView* pView = pViewData->GetScDrawView(); 180 const SdrMarkList& rMarkList = pView->GetMarkedObjectList(); 181 if ( rMarkList.GetMarkCount() == 1 ) 182 { 183 SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj(); 184 SdrUnoObj* pUnoCtrl = PTR_CAST(SdrUnoObj, pObj ); 185 if (pUnoCtrl && FmFormInventor == pUnoCtrl->GetObjInventor()) 186 { 187 uno::Reference<awt::XControlModel> xControlModel = 188 pUnoCtrl->GetUnoControlModel(); 189 DBG_ASSERT( xControlModel.is(), "UNO-Control ohne Model" ); 190 if( !xControlModel.is() ) 191 return; 192 193 uno::Reference< beans::XPropertySet > xPropSet( xControlModel, uno::UNO_QUERY ); 194 uno::Reference< beans::XPropertySetInfo > xInfo = xPropSet->getPropertySetInfo(); 195 196 rtl::OUString sPropTargetURL = 197 rtl::OUString::createFromAscii( "TargetURL" ); 198 199 // Darf man eine URL an dem Objekt setzen? 200 if (xInfo->hasPropertyByName( sPropTargetURL )) 201 { 202 // Ja! 203 204 rtl::OUString sPropButtonType = 205 rtl::OUString::createFromAscii( "ButtonType" ); 206 rtl::OUString sPropTargetFrame = 207 rtl::OUString::createFromAscii( "TargetFrame" ); 208 rtl::OUString sPropLabel = 209 rtl::OUString::createFromAscii( "Label" ); 210 211 uno::Any aAny; 212 if ( xInfo->hasPropertyByName( sPropLabel ) ) 213 { 214 aAny <<= rtl::OUString(rName); 215 xPropSet->setPropertyValue( sPropLabel, aAny ); 216 } 217 218 ::rtl::OUString aTmp = INetURLObject::GetAbsURL( pViewData->GetDocShell()->GetMedium()->GetBaseURL(), rURL ); 219 aAny <<= aTmp; 220 xPropSet->setPropertyValue( sPropTargetURL, aAny ); 221 222 if( rTarget.Len() && xInfo->hasPropertyByName( sPropTargetFrame ) ) 223 { 224 aAny <<= rtl::OUString(rTarget); 225 xPropSet->setPropertyValue( sPropTargetFrame, aAny ); 226 } 227 228 if ( xInfo->hasPropertyByName( sPropButtonType ) ) 229 { 230 form::FormButtonType eButtonType = form::FormButtonType_URL; 231 aAny <<= eButtonType; 232 xPropSet->setPropertyValue( sPropButtonType, aAny ); 233 } 234 235 //! Undo ??? 236 pViewData->GetDocShell()->SetDocumentModified(); 237 bDone = sal_True; 238 } 239 } 240 #ifdef ISSUE66550_HLINK_FOR_SHAPES 241 else 242 { 243 SetHlinkForObject( pObj, rURL ); 244 bDone = sal_True; 245 } 246 #endif 247 } 248 } 249 250 if (!bDone) 251 pViewData->GetViewShell()-> 252 InsertURL( rName, rURL, rTarget, (sal_uInt16) eMode ); 253 254 // InsertURL an der ViewShell schaltet bei "Text" die DrawShell ab !!! 255 } 256 } 257 break; 258 default: 259 DBG_ERROR("falscher Slot"); 260 } 261 } 262 263 sal_uInt16 ScGetFontWorkId(); // wegen CLOOKs - in drtxtob2 264 265 //------------------------------------------------------------------ 266 267 // 268 // Funktionen auf Drawing-Objekten 269 // 270 271 void ScDrawShell::ExecDrawFunc( SfxRequest& rReq ) 272 { 273 SfxBindings& rBindings = pViewData->GetBindings(); 274 ScTabView* pTabView = pViewData->GetView(); 275 ScDrawView* pView = pTabView->GetScDrawView(); 276 const SfxItemSet *pArgs = rReq.GetArgs(); 277 sal_uInt16 nSlotId = rReq.GetSlot(); 278 279 //!!! 280 // wer weiss, wie lange das funktioniert? (->vom Abreisscontrol funktioniert es) 281 // 282 if (nSlotId == SID_OBJECT_ALIGN && pArgs) 283 nSlotId = SID_OBJECT_ALIGN + ((SfxEnumItem&)pArgs->Get(SID_OBJECT_ALIGN)).GetValue() + 1; 284 285 switch (nSlotId) 286 { 287 case SID_OBJECT_HEAVEN: 288 pView->SetMarkedToLayer( SC_LAYER_FRONT ); 289 rBindings.Invalidate(SID_OBJECT_HEAVEN); 290 rBindings.Invalidate(SID_OBJECT_HELL); 291 break; 292 case SID_OBJECT_HELL: 293 pView->SetMarkedToLayer( SC_LAYER_BACK ); 294 rBindings.Invalidate(SID_OBJECT_HEAVEN); 295 rBindings.Invalidate(SID_OBJECT_HELL); 296 // leave draw shell if nothing selected (layer may be locked) 297 pViewData->GetViewShell()->UpdateDrawShell(); 298 break; 299 300 case SID_FRAME_TO_TOP: 301 pView->PutMarkedToTop(); 302 break; 303 case SID_FRAME_TO_BOTTOM: 304 pView->PutMarkedToBtm(); 305 break; 306 case SID_FRAME_UP: 307 pView->MovMarkedToTop(); 308 break; 309 case SID_FRAME_DOWN: 310 pView->MovMarkedToBtm(); 311 break; 312 313 case SID_GROUP: 314 pView->GroupMarked(); 315 break; 316 case SID_UNGROUP: 317 pView->UnGroupMarked(); 318 break; 319 case SID_ENTER_GROUP: 320 pView->EnterMarkedGroup(); 321 break; 322 case SID_LEAVE_GROUP: 323 pView->LeaveOneGroup(); 324 break; 325 326 case SID_MIRROR_HORIZONTAL: 327 case SID_FLIP_HORIZONTAL: 328 pView->MirrorAllMarkedHorizontal(); 329 rBindings.Invalidate( SID_ATTR_TRANSFORM_ANGLE ); 330 break; 331 case SID_MIRROR_VERTICAL: 332 case SID_FLIP_VERTICAL: 333 pView->MirrorAllMarkedVertical(); 334 rBindings.Invalidate( SID_ATTR_TRANSFORM_ANGLE ); 335 break; 336 337 case SID_OBJECT_ALIGN_LEFT: 338 case SID_ALIGN_ANY_LEFT: 339 if (pView->IsAlignPossible()) 340 pView->AlignMarkedObjects(SDRHALIGN_LEFT, SDRVALIGN_NONE); 341 break; 342 case SID_OBJECT_ALIGN_CENTER: 343 case SID_ALIGN_ANY_HCENTER: 344 if (pView->IsAlignPossible()) 345 pView->AlignMarkedObjects(SDRHALIGN_CENTER, SDRVALIGN_NONE); 346 break; 347 case SID_OBJECT_ALIGN_RIGHT: 348 case SID_ALIGN_ANY_RIGHT: 349 if (pView->IsAlignPossible()) 350 pView->AlignMarkedObjects(SDRHALIGN_RIGHT, SDRVALIGN_NONE); 351 break; 352 case SID_OBJECT_ALIGN_UP: 353 case SID_ALIGN_ANY_TOP: 354 if (pView->IsAlignPossible()) 355 pView->AlignMarkedObjects(SDRHALIGN_NONE, SDRVALIGN_TOP); 356 break; 357 case SID_OBJECT_ALIGN_MIDDLE: 358 case SID_ALIGN_ANY_VCENTER: 359 if (pView->IsAlignPossible()) 360 pView->AlignMarkedObjects(SDRHALIGN_NONE, SDRVALIGN_CENTER); 361 break; 362 case SID_OBJECT_ALIGN_DOWN: 363 case SID_ALIGN_ANY_BOTTOM: 364 if (pView->IsAlignPossible()) 365 pView->AlignMarkedObjects(SDRHALIGN_NONE, SDRVALIGN_BOTTOM); 366 break; 367 368 case SID_DELETE: 369 case SID_DELETE_CONTENTS: 370 pView->DeleteMarked(); 371 pViewData->GetViewShell()->UpdateDrawShell(); 372 break; 373 374 case SID_CUT: 375 pView->DoCut(); 376 pViewData->GetViewShell()->UpdateDrawShell(); 377 break; 378 379 case SID_COPY: 380 pView->DoCopy(); 381 break; 382 383 case SID_PASTE: 384 DBG_ERROR( "SdrView::PasteClipboard not supported anymore" ); 385 // pView->PasteClipboard( pWin ); 386 break; 387 388 case SID_SELECTALL: 389 pView->MarkAll(); 390 break; 391 392 case SID_ANCHOR_PAGE: 393 pView->SetAnchor( SCA_PAGE ); 394 rBindings.Invalidate( SID_ANCHOR_PAGE ); 395 rBindings.Invalidate( SID_ANCHOR_CELL ); 396 break; 397 398 case SID_ANCHOR_CELL: 399 pView->SetAnchor( SCA_CELL ); 400 rBindings.Invalidate( SID_ANCHOR_PAGE ); 401 rBindings.Invalidate( SID_ANCHOR_CELL ); 402 break; 403 404 case SID_ANCHOR_TOGGLE: 405 { 406 switch( pView->GetAnchor() ) 407 { 408 case SCA_CELL: 409 pView->SetAnchor( SCA_PAGE ); 410 break; 411 default: 412 pView->SetAnchor( SCA_CELL ); 413 break; 414 } 415 } 416 rBindings.Invalidate( SID_ANCHOR_PAGE ); 417 rBindings.Invalidate( SID_ANCHOR_CELL ); 418 break; 419 420 case SID_OBJECT_ROTATE: 421 { 422 SdrDragMode eMode; 423 if (pView->GetDragMode() == SDRDRAG_ROTATE) 424 eMode = SDRDRAG_MOVE; 425 else 426 eMode = SDRDRAG_ROTATE; 427 pView->SetDragMode( eMode ); 428 rBindings.Invalidate( SID_OBJECT_ROTATE ); 429 rBindings.Invalidate( SID_OBJECT_MIRROR ); 430 if (eMode == SDRDRAG_ROTATE && !pView->IsFrameDragSingles()) 431 { 432 pView->SetFrameDragSingles( sal_True ); 433 rBindings.Invalidate( SID_BEZIER_EDIT ); 434 } 435 } 436 break; 437 case SID_OBJECT_MIRROR: 438 { 439 SdrDragMode eMode; 440 if (pView->GetDragMode() == SDRDRAG_MIRROR) 441 eMode = SDRDRAG_MOVE; 442 else 443 eMode = SDRDRAG_MIRROR; 444 pView->SetDragMode( eMode ); 445 rBindings.Invalidate( SID_OBJECT_ROTATE ); 446 rBindings.Invalidate( SID_OBJECT_MIRROR ); 447 if (eMode == SDRDRAG_MIRROR && !pView->IsFrameDragSingles()) 448 { 449 pView->SetFrameDragSingles( sal_True ); 450 rBindings.Invalidate( SID_BEZIER_EDIT ); 451 } 452 } 453 break; 454 case SID_BEZIER_EDIT: 455 { 456 sal_Bool bOld = pView->IsFrameDragSingles(); 457 pView->SetFrameDragSingles( !bOld ); 458 rBindings.Invalidate( SID_BEZIER_EDIT ); 459 if (bOld && pView->GetDragMode() != SDRDRAG_MOVE) 460 { 461 pView->SetDragMode( SDRDRAG_MOVE ); 462 rBindings.Invalidate( SID_OBJECT_ROTATE ); 463 rBindings.Invalidate( SID_OBJECT_MIRROR ); 464 } 465 } 466 break; 467 468 case SID_FONTWORK: 469 { 470 sal_uInt16 nId = ScGetFontWorkId(); 471 SfxViewFrame* pViewFrm = pViewData->GetViewShell()->GetViewFrame(); 472 473 if ( rReq.GetArgs() ) 474 pViewFrm->SetChildWindow( nId, 475 ((const SfxBoolItem&) 476 (rReq.GetArgs()->Get(SID_FONTWORK))). 477 GetValue() ); 478 else 479 pViewFrm->ToggleChildWindow( nId ); 480 481 rBindings.Invalidate( SID_FONTWORK ); 482 rReq.Done(); 483 } 484 break; 485 486 case SID_ORIGINALSIZE: 487 pView->SetMarkedOriginalSize(); 488 break; 489 490 case SID_ENABLE_HYPHENATION: 491 { 492 SFX_REQUEST_ARG( rReq, pItem, SfxBoolItem, SID_ENABLE_HYPHENATION, sal_False); 493 if( pItem ) 494 { 495 SfxItemSet aSet( GetPool(), EE_PARA_HYPHENATE, EE_PARA_HYPHENATE ); 496 sal_Bool bValue = ( (const SfxBoolItem*) pItem)->GetValue(); 497 aSet.Put( SfxBoolItem( EE_PARA_HYPHENATE, bValue ) ); 498 pView->SetAttributes( aSet ); 499 } 500 rReq.Done(); 501 } 502 break; 503 504 case SID_RENAME_OBJECT: 505 { 506 if(1L == pView->GetMarkedObjectCount()) 507 { 508 // #i68101# 509 SdrObject* pSelected = pView->GetMarkedObjectByIndex(0L); 510 OSL_ENSURE(pSelected, "ScDrawShell::ExecDrawFunc: nMarkCount, but no object (!)"); 511 512 if(SC_LAYER_INTERN != pSelected->GetLayer()) 513 { 514 String aName(pSelected->GetName()); 515 516 SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); 517 OSL_ENSURE(pFact, "Dialogdiet fail!"); 518 AbstractSvxObjectNameDialog* pDlg = pFact->CreateSvxObjectNameDialog(NULL, aName); 519 OSL_ENSURE(pDlg, "Dialogdiet fail!"); 520 521 pDlg->SetCheckNameHdl(LINK(this, ScDrawShell, NameObjectHdl)); 522 523 if(RET_OK == pDlg->Execute()) 524 { 525 ScDocShell* pDocSh = pViewData->GetDocShell(); 526 pDlg->GetName(aName); 527 528 if(aName != pSelected->GetName()) 529 { 530 // handle name change 531 const sal_uInt16 nObjType(pSelected->GetObjIdentifier()); 532 533 if(OBJ_GRAF == nObjType && 0L == aName.Len()) 534 { 535 // graphics objects must have names 536 // (all graphics are supposed to be in the navigator) 537 ScDrawLayer* pModel = pViewData->GetDocument()->GetDrawLayer(); 538 539 if(pModel) 540 { 541 aName = pModel->GetNewGraphicName(); 542 } 543 } 544 545 // An undo action for renaming is missing in svdraw (99363). 546 // For OLE objects (which can be identified using the persist name), 547 // ScUndoRenameObject can be used until there is a common action for all objects. 548 if(OBJ_OLE2 == nObjType) 549 { 550 const String aPersistName = static_cast<SdrOle2Obj*>(pSelected)->GetPersistName(); 551 552 if(aPersistName.Len()) 553 { 554 pDocSh->GetUndoManager()->AddUndoAction( 555 new ScUndoRenameObject(pDocSh, aPersistName, pSelected->GetName(), aName)); 556 } 557 } 558 559 // set new name 560 pSelected->SetName(aName); 561 } 562 563 // ChartListenerCollectionNeedsUpdate is needed for Navigator update 564 pDocSh->GetDocument()->SetChartListenerCollectionNeedsUpdate( sal_True ); 565 pDocSh->SetDrawModified(); 566 } 567 568 delete pDlg; 569 } 570 } 571 break; 572 } 573 574 // #i68101# 575 case SID_TITLE_DESCRIPTION_OBJECT: 576 { 577 if(1L == pView->GetMarkedObjectCount()) 578 { 579 SdrObject* pSelected = pView->GetMarkedObjectByIndex(0L); 580 OSL_ENSURE(pSelected, "ScDrawShell::ExecDrawFunc: nMarkCount, but no object (!)"); 581 582 if(SC_LAYER_INTERN != pSelected->GetLayer()) 583 { 584 String aTitle(pSelected->GetTitle()); 585 String aDescription(pSelected->GetDescription()); 586 587 SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); 588 OSL_ENSURE(pFact, "Dialogdiet fail!"); 589 AbstractSvxObjectTitleDescDialog* pDlg = pFact->CreateSvxObjectTitleDescDialog(NULL, aTitle, aDescription); 590 OSL_ENSURE(pDlg, "Dialogdiet fail!"); 591 592 if(RET_OK == pDlg->Execute()) 593 { 594 ScDocShell* pDocSh = pViewData->GetDocShell(); 595 596 // handle Title and Description 597 pDlg->GetTitle(aTitle); 598 pDlg->GetDescription(aDescription); 599 pSelected->SetTitle(aTitle); 600 pSelected->SetDescription(aDescription); 601 602 // ChartListenerCollectionNeedsUpdate is needed for Navigator update 603 pDocSh->GetDocument()->SetChartListenerCollectionNeedsUpdate( sal_True ); 604 pDocSh->SetDrawModified(); 605 } 606 607 delete pDlg; 608 } 609 } 610 break; 611 } 612 613 case SID_EXTRUSION_TOOGLE: 614 case SID_EXTRUSION_TILT_DOWN: 615 case SID_EXTRUSION_TILT_UP: 616 case SID_EXTRUSION_TILT_LEFT: 617 case SID_EXTRUSION_TILT_RIGHT: 618 case SID_EXTRUSION_3D_COLOR: 619 case SID_EXTRUSION_DEPTH: 620 case SID_EXTRUSION_DIRECTION: 621 case SID_EXTRUSION_PROJECTION: 622 case SID_EXTRUSION_LIGHTING_DIRECTION: 623 case SID_EXTRUSION_LIGHTING_INTENSITY: 624 case SID_EXTRUSION_SURFACE: 625 case SID_EXTRUSION_DEPTH_FLOATER: 626 case SID_EXTRUSION_DIRECTION_FLOATER: 627 case SID_EXTRUSION_LIGHTING_FLOATER: 628 case SID_EXTRUSION_SURFACE_FLOATER: 629 case SID_EXTRUSION_DEPTH_DIALOG: 630 svx::ExtrusionBar::execute( pView, rReq, rBindings ); 631 rReq.Ignore (); 632 break; 633 634 case SID_FONTWORK_SHAPE: 635 case SID_FONTWORK_SHAPE_TYPE: 636 case SID_FONTWORK_ALIGNMENT: 637 case SID_FONTWORK_SAME_LETTER_HEIGHTS: 638 case SID_FONTWORK_CHARACTER_SPACING: 639 case SID_FONTWORK_KERN_CHARACTER_PAIRS: 640 case SID_FONTWORK_CHARACTER_SPACING_FLOATER: 641 case SID_FONTWORK_ALIGNMENT_FLOATER: 642 case SID_FONTWORK_CHARACTER_SPACING_DIALOG: 643 svx::FontworkBar::execute( pView, rReq, rBindings ); 644 rReq.Ignore (); 645 break; 646 647 default: 648 break; 649 } 650 } 651 652 IMPL_LINK( ScDrawShell, NameObjectHdl, AbstractSvxNameDialog*, pDialog ) 653 { 654 String aName; 655 656 if( pDialog ) 657 pDialog->GetName( aName ); 658 659 ScDrawLayer* pModel = pViewData->GetDocument()->GetDrawLayer(); 660 if ( aName.Len() && pModel ) 661 { 662 SCTAB nDummyTab; 663 if ( pModel->GetNamedObject( aName, 0, nDummyTab ) ) 664 { 665 // existing object found -> name invalid 666 return 0; 667 } 668 } 669 670 return 1; // name is valid 671 } 672 673 //------------------------------------------------------------------ 674 675 void ScDrawShell::ExecFormText(SfxRequest& rReq) 676 { 677 ScDrawView* pDrView = pViewData->GetScDrawView(); 678 const SdrMarkList& rMarkList = pDrView->GetMarkedObjectList(); 679 680 if ( rMarkList.GetMarkCount() == 1 && rReq.GetArgs() ) 681 { 682 const SfxItemSet& rSet = *rReq.GetArgs(); 683 684 if ( pDrView->IsTextEdit() ) 685 pDrView->ScEndTextEdit(); 686 687 pDrView->SetAttributes(rSet); 688 } 689 } 690 691 //------------------------------------------------------------------ 692 693 void ScDrawShell::ExecFormatPaintbrush( SfxRequest& rReq ) 694 { 695 ScViewFunc* pView = pViewData->GetView(); 696 if ( pView->HasPaintBrush() ) 697 { 698 // cancel paintbrush mode 699 pView->ResetBrushDocument(); 700 } 701 else 702 { 703 sal_Bool bLock = sal_False; 704 const SfxItemSet *pArgs = rReq.GetArgs(); 705 if( pArgs && pArgs->Count() >= 1 ) 706 bLock = static_cast<const SfxBoolItem&>(pArgs->Get(SID_FORMATPAINTBRUSH)).GetValue(); 707 708 ScDrawView* pDrawView = pViewData->GetScDrawView(); 709 if ( pDrawView && pDrawView->AreObjectsMarked() ) 710 { 711 sal_Bool bOnlyHardAttr = sal_True; 712 SfxItemSet* pItemSet = new SfxItemSet( pDrawView->GetAttrFromMarked(bOnlyHardAttr) ); 713 pView->SetDrawBrushSet( pItemSet, bLock ); 714 } 715 } 716 } 717 718 void ScDrawShell::StateFormatPaintbrush( SfxItemSet& rSet ) 719 { 720 ScDrawView* pDrawView = pViewData->GetScDrawView(); 721 sal_Bool bSelection = pDrawView && pDrawView->AreObjectsMarked(); 722 sal_Bool bHasPaintBrush = pViewData->GetView()->HasPaintBrush(); 723 724 if ( !bHasPaintBrush && !bSelection ) 725 rSet.DisableItem( SID_FORMATPAINTBRUSH ); 726 else 727 rSet.Put( SfxBoolItem( SID_FORMATPAINTBRUSH, bHasPaintBrush ) ); 728 } 729 730 ScDrawView* ScDrawShell::GetDrawView() 731 { 732 return pViewData->GetView()->GetScDrawView(); 733 } 734 735 736 737 738