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