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
FuTemp03(SfxRequest & rReq)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
GetIdBySubId(sal_uInt16 nSId)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
MapSlot(sal_uInt16 nSId)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
UpdateToolboxImages(SfxItemSet & rSet,sal_Bool bPermanent)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
GetMappedSlot(sal_uInt16 nSId)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
GetArrayId(sal_uInt16 nSId)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
UpdateIMapDlg(SdrObject * pObj)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
IMPL_LINK(DrawViewShell,NameObjectHdl,AbstractSvxNameDialog *,pDialog)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