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 31 #ifndef _SVXIDS_HRC 32 #include <svx/svxids.hrc> 33 #endif 34 #include <svx/dialogs.hrc> 35 #ifndef _IMAPDLG_HXX 36 #include <svx/imapdlg.hxx> 37 #endif 38 #include <vcl/msgbox.hxx> 39 #include <sfx2/request.hxx> 40 #include <svx/svdogrp.hxx> 41 #include <svx/svdoole2.hxx> 42 #include <svx/svdograf.hxx> 43 #include <svx/svxdlg.hxx> 44 #ifndef _BINDING_HXX //autogen 45 #include <sfx2/bindings.hxx> 46 #endif 47 #include <sfx2/dispatch.hxx> 48 #include <svx/svdoole2.hxx> 49 #include <svl/style.hxx> 50 #include <svx/svdpagv.hxx> 51 #include <svx/grafctrl.hxx> 52 #include "stlsheet.hxx" 53 54 #include <sfx2/viewfrm.hxx> 55 56 #include "app.hrc" 57 #include "strings.hrc" 58 #include "helpids.h" 59 #include "misc.hxx" 60 #include "Window.hxx" 61 #include "imapinfo.hxx" 62 #include "futempl.hxx" 63 #include "fusel.hxx" 64 #include "sdresid.hxx" 65 #include "drawdoc.hxx" 66 #include "DrawDocShell.hxx" 67 #include "drawview.hxx" 68 #include "sdabstdlg.hxx" 69 #include "brkdlg.hrc" 70 namespace sd { 71 72 #define MIN_ACTIONS_FOR_DIALOG 5000 // bei mehr als 1600 Metaobjekten 73 // wird beim Aufbrechen ein Dialog 74 // angezeigt. 75 /************************************************************************* 76 |* 77 |* SfxRequests fuer temporaere Funktionen 78 |* 79 \************************************************************************/ 80 81 void DrawViewShell::FuTemp03(SfxRequest& rReq) 82 { 83 sal_uInt16 nSId = rReq.GetSlot(); 84 switch( nSId ) 85 { 86 case SID_GROUP: // BASIC 87 { 88 if ( mpDrawView->IsPresObjSelected( sal_True, sal_True, sal_True ) ) 89 { 90 ::sd::Window* pWindow = GetActiveWindow(); 91 InfoBox(pWindow, String(SdResId(STR_ACTION_NOTPOSSIBLE) ) ).Execute(); 92 } 93 else 94 { 95 mpDrawView->GroupMarked(); 96 } 97 Cancel(); 98 rReq.Done (); 99 } 100 break; 101 102 case SID_UNGROUP: // BASIC 103 { 104 mpDrawView->UnGroupMarked(); 105 Cancel(); 106 rReq.Done (); 107 } 108 break; 109 110 case SID_NAME_GROUP: 111 { 112 // only allow for single object selection since the name of an object needs 113 // to be unique 114 if(1L == mpDrawView->GetMarkedObjectCount()) 115 { 116 // #i68101# 117 SdrObject* pSelected = mpDrawView->GetMarkedObjectByIndex(0L); 118 OSL_ENSURE(pSelected, "DrawViewShell::FuTemp03: nMarkCount, but no object (!)"); 119 String aName(pSelected->GetName()); 120 121 SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); 122 OSL_ENSURE(pFact, "Dialogdiet fail!"); 123 AbstractSvxObjectNameDialog* pDlg = pFact->CreateSvxObjectNameDialog(NULL, aName); 124 OSL_ENSURE(pDlg, "Dialogdiet fail!"); 125 126 pDlg->SetCheckNameHdl(LINK(this, DrawViewShell, NameObjectHdl)); 127 128 if(RET_OK == pDlg->Execute()) 129 { 130 pDlg->GetName(aName); 131 pSelected->SetName(aName); 132 } 133 134 delete pDlg; 135 } 136 137 SfxBindings& rBindings = GetViewFrame()->GetBindings(); 138 rBindings.Invalidate( SID_NAVIGATOR_STATE, sal_True, sal_False ); 139 rBindings.Invalidate( SID_CONTEXT ); 140 141 Cancel(); 142 rReq.Ignore(); 143 break; 144 } 145 146 // #i68101# 147 case SID_OBJECT_TITLE_DESCRIPTION: 148 { 149 if(1L == mpDrawView->GetMarkedObjectCount()) 150 { 151 SdrObject* pSelected = mpDrawView->GetMarkedObjectByIndex(0L); 152 OSL_ENSURE(pSelected, "DrawViewShell::FuTemp03: nMarkCount, but no object (!)"); 153 String aTitle(pSelected->GetTitle()); 154 String aDescription(pSelected->GetDescription()); 155 156 SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); 157 OSL_ENSURE(pFact, "Dialogdiet fail!"); 158 AbstractSvxObjectTitleDescDialog* pDlg = pFact->CreateSvxObjectTitleDescDialog(NULL, aTitle, aDescription); 159 OSL_ENSURE(pDlg, "Dialogdiet fail!"); 160 161 if(RET_OK == pDlg->Execute()) 162 { 163 pDlg->GetTitle(aTitle); 164 pDlg->GetDescription(aDescription); 165 pSelected->SetTitle(aTitle); 166 pSelected->SetDescription(aDescription); 167 } 168 169 delete pDlg; 170 } 171 172 SfxBindings& rBindings = GetViewFrame()->GetBindings(); 173 rBindings.Invalidate( SID_NAVIGATOR_STATE, sal_True, sal_False ); 174 rBindings.Invalidate( SID_CONTEXT ); 175 176 Cancel(); 177 rReq.Ignore(); 178 break; 179 } 180 181 case SID_ENTER_GROUP: // BASIC 182 { 183 mpDrawView->EnterMarkedGroup(); 184 Cancel(); 185 rReq.Done (); 186 } 187 break; 188 189 case SID_LEAVE_GROUP: // BASIC 190 { 191 mpDrawView->LeaveOneGroup(); 192 Cancel(); 193 rReq.Done (); 194 } 195 break; 196 197 case SID_LEAVE_ALL_GROUPS: // BASIC 198 { 199 mpDrawView->LeaveAllGroup(); 200 Cancel(); 201 rReq.Done (); 202 } 203 break; 204 205 case SID_COMBINE: // BASIC 206 { 207 // #88224# End text edit to avoid conflicts 208 if(mpDrawView->IsTextEdit()) 209 mpDrawView->SdrEndTextEdit(); 210 211 if ( mpDrawView->IsPresObjSelected() ) 212 { 213 ::sd::Window* pWindow = GetActiveWindow(); 214 InfoBox(pWindow, String(SdResId(STR_ACTION_NOTPOSSIBLE) ) ).Execute(); 215 } 216 else 217 { 218 WaitObject aWait( (Window*)GetActiveWindow() ); 219 mpDrawView->CombineMarkedObjects(sal_False); 220 } 221 Cancel(); 222 rReq.Done (); 223 } 224 break; 225 226 case SID_DISTRIBUTE_DLG: 227 { 228 if ( mpDrawView->IsPresObjSelected() ) 229 { 230 ::sd::Window* pWindow = GetActiveWindow(); 231 InfoBox(pWindow, String(SdResId(STR_ACTION_NOTPOSSIBLE) ) ).Execute(); 232 } 233 else 234 { 235 mpDrawView->DistributeMarkedObjects(); 236 } 237 Cancel(); 238 rReq.Done (); 239 } 240 break; 241 242 case SID_POLY_MERGE: 243 { 244 // #88224# End text edit to avoid conflicts 245 if(mpDrawView->IsTextEdit()) 246 mpDrawView->SdrEndTextEdit(); 247 248 if ( mpDrawView->IsPresObjSelected() ) 249 { 250 ::sd::Window* pWindow = GetActiveWindow(); 251 InfoBox(pWindow, String(SdResId(STR_ACTION_NOTPOSSIBLE) ) ).Execute(); 252 } 253 else 254 { 255 WaitObject aWait( (Window*)GetActiveWindow() ); 256 mpDrawView->MergeMarkedObjects(SDR_MERGE_MERGE); 257 } 258 Cancel(); 259 rReq.Done (); 260 } 261 break; 262 263 case SID_POLY_SUBSTRACT: 264 { 265 // #88224# End text edit to avoid conflicts 266 if(mpDrawView->IsTextEdit()) 267 mpDrawView->SdrEndTextEdit(); 268 269 if ( mpDrawView->IsPresObjSelected() ) 270 { 271 ::sd::Window* pWindow = GetActiveWindow(); 272 InfoBox(pWindow, String(SdResId(STR_ACTION_NOTPOSSIBLE) ) ).Execute(); 273 } 274 else 275 { 276 WaitObject aWait( (Window*)GetActiveWindow() ); 277 mpDrawView->MergeMarkedObjects(SDR_MERGE_SUBSTRACT); 278 } 279 Cancel(); 280 rReq.Done (); 281 } 282 break; 283 284 case SID_POLY_INTERSECT: 285 { 286 // #88224# End text edit to avoid conflicts 287 if(mpDrawView->IsTextEdit()) 288 mpDrawView->SdrEndTextEdit(); 289 290 if ( mpDrawView->IsPresObjSelected() ) 291 { 292 ::sd::Window* pWindow = GetActiveWindow(); 293 InfoBox(pWindow, String(SdResId(STR_ACTION_NOTPOSSIBLE) ) ).Execute(); 294 } 295 else 296 { 297 WaitObject aWait( (Window*)GetActiveWindow() ); 298 mpDrawView->MergeMarkedObjects(SDR_MERGE_INTERSECT); 299 } 300 Cancel(); 301 rReq.Done (); 302 } 303 break; 304 305 case SID_DISMANTLE: // BASIC 306 { 307 if ( mpDrawView->IsDismantlePossible(sal_False) ) 308 { 309 WaitObject aWait( (Window*)GetActiveWindow() ); 310 mpDrawView->DismantleMarkedObjects(sal_False); 311 } 312 Cancel(); 313 rReq.Done (); 314 } 315 break; 316 317 case SID_CONNECT: // BASIC 318 { 319 if ( mpDrawView->IsPresObjSelected() ) 320 { 321 ::sd::Window* pWindow = GetActiveWindow(); 322 InfoBox(pWindow, String(SdResId(STR_ACTION_NOTPOSSIBLE) ) ).Execute(); 323 } 324 else 325 { 326 WaitObject aWait( (Window*)GetActiveWindow() ); 327 mpDrawView->CombineMarkedObjects(sal_True); 328 } 329 Cancel(); 330 rReq.Done (); 331 } 332 break; 333 334 case SID_BREAK: // BASIC 335 { 336 if ( mpDrawView->IsTextEdit() ) 337 { 338 mpDrawView->SdrEndTextEdit(); 339 } 340 341 if ( mpDrawView->IsBreak3DObjPossible() ) 342 { 343 WaitObject aWait( (Window*)GetActiveWindow() ); 344 mpDrawView->Break3DObj(); 345 } 346 else if ( mpDrawView->IsDismantlePossible(sal_True) ) 347 { 348 WaitObject aWait( (Window*)GetActiveWindow() ); 349 mpDrawView->DismantleMarkedObjects(sal_True); 350 } 351 else if ( mpDrawView->IsImportMtfPossible() ) 352 { 353 354 WaitObject aWait( (Window*)GetActiveWindow() ); 355 const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList(); 356 sal_uLong nAnz=rMarkList.GetMarkCount(); 357 358 // Summe der Metaobjekte aller sel. Metafiles erm. 359 sal_uLong nCount = 0; 360 for(sal_uLong nm=0; nm<nAnz; nm++) 361 { 362 SdrMark* pM=rMarkList.GetMark(nm); 363 SdrObject* pObj=pM->GetMarkedSdrObj(); 364 SdrGrafObj* pGraf=PTR_CAST(SdrGrafObj,pObj); 365 SdrOle2Obj* pOle2=PTR_CAST(SdrOle2Obj,pObj); 366 367 if(pGraf) 368 { 369 if(pGraf->HasGDIMetaFile()) 370 { 371 nCount += pGraf->GetGraphic().GetGDIMetaFile().GetActionCount(); 372 } 373 else if(pGraf->isEmbeddedSvg()) 374 { 375 nCount += pGraf->getMetafileFromEmbeddedSvg().GetActionCount(); 376 } 377 } 378 379 if(pOle2 && pOle2->GetGraphic()) 380 { 381 nCount += pOle2->GetGraphic()->GetGDIMetaFile().GetActionCount(); 382 } 383 } 384 385 // anhand der erm. Summe entscheiden ob mit 386 // oder ohne Dialog aufgebrochen wird. 387 if(nCount < MIN_ACTIONS_FOR_DIALOG) 388 { 389 // ohne Dialog aufbrechen 390 mpDrawView->DoImportMarkedMtf(); 391 } 392 else 393 { 394 SdAbstractDialogFactory* pFact = SdAbstractDialogFactory::Create(); 395 if( pFact ) 396 { 397 VclAbstractDialog* pDlg = pFact->CreateBreakDlg(GetActiveWindow(), mpDrawView, GetDocSh(), nCount, nAnz ); 398 if( pDlg ) 399 { 400 pDlg->Execute(); 401 delete pDlg; 402 } 403 } 404 } 405 } 406 407 Cancel(); 408 rReq.Done (); 409 } 410 break; 411 412 case SID_CONVERT_TO_3D: 413 { 414 if ( mpDrawView->IsPresObjSelected() ) 415 { 416 ::sd::Window* pWindow = GetActiveWindow(); 417 InfoBox(pWindow, String(SdResId(STR_ACTION_NOTPOSSIBLE) ) ).Execute(); 418 } 419 else 420 { 421 if (mpDrawView->IsConvertTo3DObjPossible()) 422 { 423 if (mpDrawView->IsTextEdit()) 424 { 425 mpDrawView->SdrEndTextEdit(); 426 } 427 428 WaitObject aWait( (Window*)GetActiveWindow() ); 429 mpDrawView->ConvertMarkedObjTo3D(sal_True); 430 } 431 } 432 433 Cancel(); 434 rReq.Done(); 435 } 436 break; 437 438 case SID_FRAME_TO_TOP: // BASIC 439 { 440 mpDrawView->PutMarkedToTop(); 441 Cancel(); 442 Invalidate( SID_POSITION ); 443 rReq.Done (); 444 } 445 break; 446 447 case SID_MOREFRONT: // BASIC 448 { 449 mpDrawView->MovMarkedToTop(); 450 Cancel(); 451 Invalidate( SID_POSITION ); 452 rReq.Done (); 453 } 454 break; 455 456 case SID_MOREBACK: // BASIC 457 { 458 mpDrawView->MovMarkedToBtm(); 459 Cancel(); 460 Invalidate( SID_POSITION ); 461 rReq.Done (); 462 } 463 break; 464 465 case SID_FRAME_TO_BOTTOM: // BASIC 466 { 467 mpDrawView->PutMarkedToBtm(); 468 Cancel(); 469 Invalidate( SID_POSITION ); 470 rReq.Done (); 471 } 472 break; 473 474 case SID_HORIZONTAL: // BASIC 475 case SID_FLIP_HORIZONTAL: 476 { 477 mpDrawView->MirrorAllMarkedHorizontal(); 478 Cancel(); 479 rReq.Done (); 480 } 481 break; 482 483 case SID_VERTICAL: // BASIC 484 case SID_FLIP_VERTICAL: 485 { 486 mpDrawView->MirrorAllMarkedVertical(); 487 Cancel(); 488 rReq.Done (); 489 } 490 break; 491 492 case SID_OBJECT_ALIGN_LEFT: // BASIC 493 { 494 mpDrawView->AlignMarkedObjects(SDRHALIGN_LEFT, SDRVALIGN_NONE); 495 Cancel(); 496 rReq.Done (); 497 } 498 break; 499 500 case SID_OBJECT_ALIGN_CENTER: // BASIC 501 { 502 mpDrawView->AlignMarkedObjects(SDRHALIGN_CENTER, SDRVALIGN_NONE); 503 Cancel(); 504 rReq.Done (); 505 } 506 break; 507 508 case SID_OBJECT_ALIGN_RIGHT: // BASIC 509 { 510 mpDrawView->AlignMarkedObjects(SDRHALIGN_RIGHT, SDRVALIGN_NONE); 511 Cancel(); 512 rReq.Done (); 513 } 514 break; 515 516 case SID_OBJECT_ALIGN_UP: // BASIC 517 { 518 mpDrawView->AlignMarkedObjects(SDRHALIGN_NONE, SDRVALIGN_TOP); 519 Cancel(); 520 rReq.Done (); 521 } 522 break; 523 524 case SID_OBJECT_ALIGN_MIDDLE: // BASIC 525 { 526 mpDrawView->AlignMarkedObjects(SDRHALIGN_NONE, SDRVALIGN_CENTER); 527 Cancel(); 528 rReq.Done (); 529 } 530 break; 531 532 case SID_OBJECT_ALIGN_DOWN: // BASIC 533 { 534 mpDrawView->AlignMarkedObjects(SDRHALIGN_NONE, SDRVALIGN_BOTTOM); 535 Cancel(); 536 rReq.Done (); 537 } 538 break; 539 540 case SID_SELECTALL: // BASIC 541 { 542 if( (dynamic_cast<FuSelection*>( GetOldFunction().get() ) != 0) && 543 !GetView()->IsFrameDragSingles() && GetView()->HasMarkablePoints()) 544 { 545 if ( !mpDrawView->IsAction() ) 546 mpDrawView->MarkAllPoints(); 547 } 548 else 549 mpDrawView->SelectAll(); 550 551 Cancel(); 552 rReq.Done (); 553 } 554 break; 555 556 case SID_STYLE_NEW: // BASIC ??? 557 case SID_STYLE_APPLY: 558 case SID_STYLE_EDIT: 559 case SID_STYLE_DELETE: 560 case SID_STYLE_FAMILY: 561 case SID_STYLE_WATERCAN: 562 case SID_STYLE_UPDATE_BY_EXAMPLE: 563 case SID_STYLE_NEW_BY_EXAMPLE: 564 { 565 if( rReq.GetSlot() == SID_STYLE_EDIT && !rReq.GetArgs() ) 566 { 567 SfxStyleSheet* pStyleSheet = mpDrawView->GetStyleSheet(); 568 if( pStyleSheet && pStyleSheet->GetFamily() == SD_STYLE_FAMILY_MASTERPAGE) 569 pStyleSheet = ((SdStyleSheet*)pStyleSheet)->GetPseudoStyleSheet(); 570 571 if( (pStyleSheet == NULL) && GetView()->IsTextEdit() ) 572 { 573 GetView()->SdrEndTextEdit(); 574 575 pStyleSheet = mpDrawView->GetStyleSheet(); 576 if(pStyleSheet && pStyleSheet->GetFamily() == SD_STYLE_FAMILY_MASTERPAGE) 577 pStyleSheet = ((SdStyleSheet*)pStyleSheet)->GetPseudoStyleSheet(); 578 } 579 580 if( pStyleSheet == NULL ) 581 { 582 rReq.Ignore(); 583 break; 584 } 585 586 SfxAllItemSet aSet(GetDoc()->GetPool()); 587 588 SfxStringItem aStyleNameItem( SID_STYLE_EDIT, pStyleSheet->GetName() ); 589 aSet.Put(aStyleNameItem); 590 591 SfxUInt16Item aStyleFamilyItem( SID_STYLE_FAMILY, (sal_uInt16)pStyleSheet->GetFamily() ); 592 aSet.Put(aStyleFamilyItem); 593 594 rReq.SetArgs(aSet); 595 } 596 597 if( rReq.GetArgs() ) 598 { 599 SetCurrentFunction( FuTemplate::Create( this, GetActiveWindow(), mpDrawView, GetDoc(), rReq ) ); 600 if( rReq.GetSlot() == SID_STYLE_APPLY ) 601 GetViewFrame()->GetBindings().Invalidate( SID_STYLE_APPLY ); 602 Cancel(); 603 } 604 else if( rReq.GetSlot() == SID_STYLE_APPLY ) 605 GetViewFrame()->GetDispatcher()->Execute( SID_STYLE_DESIGNER, SFX_CALLMODE_ASYNCHRON ); 606 rReq.Ignore (); 607 } 608 break; 609 610 case SID_IMAP: 611 { 612 SvxIMapDlg* pDlg; 613 sal_uInt16 nId = SvxIMapDlgChildWindow::GetChildWindowId(); 614 615 GetViewFrame()->ToggleChildWindow( nId ); 616 GetViewFrame()->GetBindings().Invalidate( SID_IMAP ); 617 618 if ( GetViewFrame()->HasChildWindow( nId ) 619 && ( ( pDlg = ViewShell::Implementation::GetImageMapDialog() ) != NULL ) ) 620 { 621 const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList(); 622 623 if ( rMarkList.GetMarkCount() == 1 ) 624 UpdateIMapDlg( rMarkList.GetMark( 0 )->GetMarkedSdrObj() ); 625 } 626 627 Cancel(); 628 rReq.Ignore (); 629 } 630 break; 631 632 case SID_GRID_FRONT: 633 { 634 mpDrawView->SetGridFront( !mpDrawView->IsGridFront() ); 635 Cancel(); 636 rReq.Done (); 637 } 638 break; 639 640 case SID_HELPLINES_FRONT: 641 { 642 mpDrawView->SetHlplFront( !mpDrawView->IsHlplFront() ); 643 Cancel(); 644 rReq.Done (); 645 } 646 break; 647 648 default: 649 FuTemp04(rReq); 650 break; 651 }; 652 }; 653 654 /************************************************************************* 655 |* 656 |* Liefert die globale/Haupt-ID zurueck, also die ID, ueber die die 657 |* Toolbox ausgeloest wird 658 |* 659 \************************************************************************/ 660 661 sal_uInt16 DrawViewShell::GetIdBySubId( sal_uInt16 nSId ) 662 { 663 sal_uInt16 nMappedSId = 0; 664 switch( nSId ) 665 { 666 case SID_OBJECT_ROTATE: 667 case SID_OBJECT_MIRROR: 668 case SID_OBJECT_TRANSPARENCE: 669 case SID_OBJECT_GRADIENT: 670 case SID_OBJECT_SHEAR: 671 case SID_OBJECT_CROOK_ROTATE: 672 case SID_OBJECT_CROOK_SLANT: 673 case SID_OBJECT_CROOK_STRETCH: 674 case SID_CONVERT_TO_3D_LATHE: 675 { 676 nMappedSId = SID_OBJECT_CHOOSE_MODE; 677 } 678 break; 679 680 case SID_OBJECT_ALIGN_LEFT: 681 case SID_OBJECT_ALIGN_CENTER: 682 case SID_OBJECT_ALIGN_RIGHT: 683 case SID_OBJECT_ALIGN_UP: 684 case SID_OBJECT_ALIGN_MIDDLE: 685 case SID_OBJECT_ALIGN_DOWN: 686 { 687 nMappedSId = SID_OBJECT_ALIGN; 688 } 689 break; 690 691 case SID_FRAME_TO_TOP: 692 case SID_MOREFRONT: 693 case SID_MOREBACK: 694 case SID_FRAME_TO_BOTTOM: 695 case SID_BEFORE_OBJ: 696 case SID_BEHIND_OBJ: 697 case SID_REVERSE_ORDER: 698 { 699 nMappedSId = SID_POSITION; 700 } 701 break; 702 703 case SID_ZOOM_OUT: 704 case SID_ZOOM_IN: 705 case SID_SIZE_REAL: 706 case SID_ZOOM_PANNING: 707 case SID_SIZE_PAGE: 708 case SID_SIZE_PAGE_WIDTH: 709 case SID_SIZE_ALL: 710 case SID_SIZE_OPTIMAL: 711 case SID_ZOOM_NEXT: 712 case SID_ZOOM_PREV: 713 { 714 nMappedSId = SID_ZOOM_TOOLBOX; 715 } 716 break; 717 718 case SID_ATTR_CHAR: 719 case SID_TEXT_FITTOSIZE: 720 case SID_DRAW_CAPTION: 721 case SID_DRAW_FONTWORK: 722 case SID_DRAW_FONTWORK_VERTICAL: 723 { 724 nMappedSId = SID_DRAWTBX_TEXT; 725 } 726 break; 727 728 case SID_DRAW_RECT: 729 case SID_DRAW_SQUARE: 730 case SID_DRAW_RECT_ROUND: 731 case SID_DRAW_SQUARE_ROUND: 732 case SID_DRAW_RECT_NOFILL: 733 case SID_DRAW_SQUARE_NOFILL: 734 case SID_DRAW_RECT_ROUND_NOFILL: 735 case SID_DRAW_SQUARE_ROUND_NOFILL: 736 { 737 nMappedSId = SID_DRAWTBX_RECTANGLES; 738 } 739 break; 740 741 case SID_DRAW_ELLIPSE: 742 case SID_DRAW_CIRCLE: 743 case SID_DRAW_PIE: 744 case SID_DRAW_CIRCLEPIE: 745 case SID_DRAW_ELLIPSECUT: 746 case SID_DRAW_CIRCLECUT: 747 case SID_DRAW_ARC: 748 case SID_DRAW_CIRCLEARC: 749 case SID_DRAW_ELLIPSE_NOFILL: 750 case SID_DRAW_CIRCLE_NOFILL: 751 case SID_DRAW_PIE_NOFILL: 752 case SID_DRAW_CIRCLEPIE_NOFILL: 753 case SID_DRAW_ELLIPSECUT_NOFILL: 754 case SID_DRAW_CIRCLECUT_NOFILL: 755 { 756 nMappedSId = SID_DRAWTBX_ELLIPSES; 757 } 758 break; 759 760 case SID_DRAW_BEZIER_NOFILL: 761 case SID_DRAW_POLYGON_NOFILL: 762 case SID_DRAW_XPOLYGON_NOFILL: 763 case SID_DRAW_FREELINE_NOFILL: 764 case SID_DRAW_BEZIER_FILL: 765 case SID_DRAW_POLYGON: 766 case SID_DRAW_XPOLYGON: 767 case SID_DRAW_FREELINE: 768 { 769 nMappedSId = SID_DRAWTBX_LINES; 770 } 771 break; 772 773 case SID_DRAW_LINE: 774 case SID_DRAW_XLINE: 775 case SID_DRAW_MEASURELINE: 776 case SID_LINE_ARROW_START: 777 case SID_LINE_ARROW_END: 778 case SID_LINE_ARROWS: 779 case SID_LINE_ARROW_CIRCLE: 780 case SID_LINE_CIRCLE_ARROW: 781 case SID_LINE_ARROW_SQUARE: 782 case SID_LINE_SQUARE_ARROW: 783 { 784 nMappedSId = SID_DRAWTBX_ARROWS; 785 } 786 break; 787 788 case SID_3D_CUBE: 789 case SID_3D_TORUS: 790 case SID_3D_SPHERE: 791 case SID_3D_SHELL: 792 case SID_3D_HALF_SPHERE: 793 case SID_3D_CYLINDER: 794 case SID_3D_CONE: 795 case SID_3D_PYRAMID: 796 { 797 nMappedSId = SID_DRAWTBX_3D_OBJECTS; 798 } 799 break; 800 801 case SID_INSERT_DIAGRAM: 802 case SID_ATTR_TABLE: 803 case SID_INSERTFILE: 804 case SID_INSERT_GRAPHIC: 805 case SID_INSERT_AVMEDIA: 806 case SID_INSERTPAGE: 807 case SID_INSERT_MATH: 808 case SID_INSERT_FLOATINGFRAME: 809 case SID_INSERT_OBJECT: 810 case SID_INSERT_PLUGIN: 811 case SID_INSERT_SOUND: 812 case SID_INSERT_VIDEO: 813 case SID_INSERT_TABLE: 814 { 815 nMappedSId = SID_DRAWTBX_INSERT; 816 } 817 break; 818 819 case SID_TOOL_CONNECTOR: 820 case SID_CONNECTOR_ARROW_START: 821 case SID_CONNECTOR_ARROW_END: 822 case SID_CONNECTOR_ARROWS: 823 case SID_CONNECTOR_CIRCLE_START: 824 case SID_CONNECTOR_CIRCLE_END: 825 case SID_CONNECTOR_CIRCLES: 826 case SID_CONNECTOR_LINE: 827 case SID_CONNECTOR_LINE_ARROW_START: 828 case SID_CONNECTOR_LINE_ARROW_END: 829 case SID_CONNECTOR_LINE_ARROWS: 830 case SID_CONNECTOR_LINE_CIRCLE_START: 831 case SID_CONNECTOR_LINE_CIRCLE_END: 832 case SID_CONNECTOR_LINE_CIRCLES: 833 case SID_CONNECTOR_CURVE: 834 case SID_CONNECTOR_CURVE_ARROW_START: 835 case SID_CONNECTOR_CURVE_ARROW_END: 836 case SID_CONNECTOR_CURVE_ARROWS: 837 case SID_CONNECTOR_CURVE_CIRCLE_START: 838 case SID_CONNECTOR_CURVE_CIRCLE_END: 839 case SID_CONNECTOR_CURVE_CIRCLES: 840 case SID_CONNECTOR_LINES: 841 case SID_CONNECTOR_LINES_ARROW_START: 842 case SID_CONNECTOR_LINES_ARROW_END: 843 case SID_CONNECTOR_LINES_ARROWS: 844 case SID_CONNECTOR_LINES_CIRCLE_START: 845 case SID_CONNECTOR_LINES_CIRCLE_END: 846 case SID_CONNECTOR_LINES_CIRCLES: 847 { 848 nMappedSId = SID_DRAWTBX_CONNECTORS; 849 } 850 } 851 return( nMappedSId ); 852 } 853 854 /************************************************************************* 855 |* 856 |* Fuellt das SlotArray, um das aktuelle Mapping des ToolboxSlots zu 857 |* bekommen 858 |* 859 \************************************************************************/ 860 861 void DrawViewShell::MapSlot( sal_uInt16 nSId ) 862 { 863 sal_uInt16 nMappedSId = GetIdBySubId( nSId ); 864 865 if( nMappedSId > 0 ) 866 { 867 sal_uInt16 nID = GetArrayId( nMappedSId ) + 1; 868 mpSlotArray[ nID ] = nSId; 869 } 870 } 871 872 /************************************************************************* 873 |* 874 |* Ermoeglicht ueber das SlotArray ein ImageMapping 875 |* 876 \************************************************************************/ 877 878 void DrawViewShell::UpdateToolboxImages( SfxItemSet &rSet, sal_Bool bPermanent ) 879 { 880 if( !bPermanent ) 881 { 882 sal_uInt16 nId = GetArrayId( SID_ZOOM_TOOLBOX ) + 1; 883 rSet.Put( TbxImageItem( SID_ZOOM_TOOLBOX, mpSlotArray[nId] ) ); 884 885 nId = GetArrayId( SID_DRAWTBX_INSERT ) + 1; 886 rSet.Put( TbxImageItem( SID_DRAWTBX_INSERT, mpSlotArray[nId] ) ); 887 888 nId = GetArrayId( SID_POSITION ) + 1; 889 rSet.Put( TbxImageItem( SID_POSITION, mpSlotArray[nId] ) ); 890 891 nId = GetArrayId( SID_OBJECT_ALIGN ) + 1; 892 rSet.Put( TbxImageItem( SID_OBJECT_ALIGN, mpSlotArray[nId] ) ); 893 } 894 else 895 { 896 for( sal_uInt16 nId = 0; nId < SLOTARRAY_COUNT; nId += 2 ) 897 { 898 rSet.Put( TbxImageItem( mpSlotArray[nId], mpSlotArray[nId+1] ) ); 899 } 900 } 901 } 902 903 /************************************************************************* 904 |* 905 |* Gibt den gemappten Slot zurueck 906 |* 907 \************************************************************************/ 908 909 sal_uInt16 DrawViewShell::GetMappedSlot( sal_uInt16 nSId ) 910 { 911 sal_uInt16 nSlot = 0; 912 sal_uInt16 nId = GetArrayId( nSId ); 913 if( nId != USHRT_MAX ) 914 nSlot = mpSlotArray[ nId+1 ]; 915 916 // Wenn der Slot noch auf sich selbst gemapped ist, muss 0 zurueck- 917 // gegeben werden, da sonst der Slot immer wieder selbst executet 918 // wird. Im Array ist der Slot selbst initial vorhanden, damit das 919 // Image richtig angezeigt wird. 920 if( nSId == nSlot ) 921 return( 0 ); 922 923 return( nSlot ); 924 } 925 926 /************************************************************************* 927 |* 928 |* Gibt die Nummer des HauptSlots im SlotArray zurueck 929 |* 930 \************************************************************************/ 931 932 sal_uInt16 DrawViewShell::GetArrayId( sal_uInt16 nSId ) 933 { 934 for( sal_uInt16 i = 0; i < SLOTARRAY_COUNT; i += 2 ) 935 { 936 if( mpSlotArray[ i ] == nSId ) 937 return( i ); 938 } 939 DBG_ERROR( "Slot im Array nicht gefunden!" ); 940 return( USHRT_MAX ); 941 } 942 943 944 /************************************************************************* 945 |* 946 |* IMap-Dlg updaten 947 |* 948 \************************************************************************/ 949 950 void DrawViewShell::UpdateIMapDlg( SdrObject* pObj ) 951 { 952 if( ( pObj->ISA( SdrGrafObj ) || pObj->ISA( SdrOle2Obj ) ) && !mpDrawView->IsTextEdit() && 953 GetViewFrame()->HasChildWindow( SvxIMapDlgChildWindow::GetChildWindowId() ) ) 954 { 955 Graphic aGraphic; 956 ImageMap* pIMap = NULL; 957 TargetList* pTargetList = NULL; 958 SdIMapInfo* pIMapInfo = GetDoc()->GetIMapInfo( pObj ); 959 960 // get graphic from shape 961 SdrGrafObj* pGrafObj = dynamic_cast< SdrGrafObj* >( pObj ); 962 if( pGrafObj ) 963 aGraphic = pGrafObj->GetGraphic(); 964 965 if ( pIMapInfo ) 966 { 967 pIMap = (ImageMap*) &pIMapInfo->GetImageMap(); 968 pTargetList = new TargetList; 969 GetViewFrame()->GetTargetList( *pTargetList ); 970 } 971 972 SvxIMapDlgChildWindow::UpdateIMapDlg( aGraphic, pIMap, pTargetList, pObj ); 973 974 // TargetListe kann von uns wieder geloescht werden 975 if ( pTargetList ) 976 { 977 String* pEntry = pTargetList->First(); 978 while( pEntry ) 979 { 980 delete pEntry; 981 pEntry = pTargetList->Next(); 982 } 983 984 delete pTargetList; 985 } 986 } 987 } 988 989 // ----------------------------------------------------------------------------- 990 991 IMPL_LINK( DrawViewShell, NameObjectHdl, AbstractSvxNameDialog*, pDialog ) 992 { 993 String aName; 994 995 if( pDialog ) 996 pDialog->GetName( aName ); 997 998 return( ( !aName.Len() || ( GetDoc() && !GetDoc()->GetObj( aName ) ) ) ? 1 : 0 ); 999 } 1000 1001 } // end of namespace sd 1002