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
29 #include <sfx2/viewfrm.hxx>
30 #include <editeng/eeitem.hxx>
31 #include <editeng/tstpitem.hxx>
32 #include <editeng/lrspitem.hxx>
33 #include <editeng/protitem.hxx>
34 #include <editeng/frmdiritem.hxx>
35 #include <editeng/adjitem.hxx>
36 #include <svx/ruler.hxx>
37 #ifndef _SVX_RULERITEM_HXX
38 #include <svx/rulritem.hxx>
39 #endif
40 #include <svx/zoomitem.hxx>
41 #ifndef _SVXIDS_HRC
42 #include <svx/svxids.hrc>
43 #endif
44 #include <svx/svdpagv.hxx>
45 #include <sfx2/request.hxx>
46 #include <sfx2/dispatch.hxx>
47 #include <tools/urlobj.hxx>
48 #include <svl/aeitem.hxx>
49 #include <svl/eitem.hxx>
50 #include <svl/rectitem.hxx>
51 #include <svl/stritem.hxx>
52 #include <svx/svdoole2.hxx>
53 #include <svl/itempool.hxx>
54 #include <svl/ptitem.hxx>
55 #include <basic/sbstar.hxx>
56 #include <basic/sberrors.hxx>
57 #include <svx/fmshell.hxx>
58 #include <svx/f3dchild.hxx>
59 #include <svx/float3d.hxx>
60 #include "optsitem.hxx"
61
62 #include "app.hrc"
63 #include "glob.hrc"
64 #include "strings.hrc"
65 #include "res_bmp.hrc"
66
67 #include "sdundogr.hxx"
68 #include "undopage.hxx"
69 #include "glob.hxx"
70 #include "app.hxx"
71 #include "fupoor.hxx"
72 #include "slideshow.hxx"
73 #ifndef SD_FRAME_VIEW
74 #include "FrameView.hxx"
75 #endif
76 #include "sdpage.hxx"
77 #include "Window.hxx"
78 #include "sdresid.hxx"
79 #include "drawview.hxx"
80 #include "drawdoc.hxx"
81 #include "DrawViewShell.hxx"
82 #include "Ruler.hxx"
83 #include "DrawDocShell.hxx"
84 #include "headerfooterdlg.hxx"
85 #include "masterlayoutdlg.hxx"
86 #include "Ruler.hxx"
87 #include "DrawDocShell.hxx"
88 #include "sdabstdlg.hxx"
89 #include <sfx2/ipclient.hxx>
90 #include <tools/diagnose_ex.h>
91 #include "ViewShellBase.hxx"
92 #include "FormShellManager.hxx"
93 #include "LayerTabBar.hxx"
94 #include "sdabstdlg.hxx"
95 #include "sdpage.hxx"
96 #include <com/sun/star/drawing/framework/XControllerManager.hpp>
97 #include <com/sun/star/drawing/framework/XConfigurationController.hpp>
98 #include <com/sun/star/drawing/framework/XConfiguration.hpp>
99 #include <com/sun/star/frame/XFrame.hpp>
100 #include <editeng/lspcitem.hxx>
101 #include <editeng/ulspitem.hxx>
102 using namespace ::com::sun::star::uno;
103 using namespace ::com::sun::star::drawing::framework;
104 using ::com::sun::star::frame::XFrame;
105 using ::com::sun::star::frame::XController;
106
107 namespace sd {
108
109 #ifndef SO2_DECL_SVINPLACEOBJECT_DEFINED
110 #define SO2_DECL_SVINPLACEOBJECT_DEFINED
SO2_DECL_REF(SvInPlaceObject)111 SO2_DECL_REF(SvInPlaceObject)
112 #endif
113
114
115
116 /*************************************************************************
117 |*
118 |* SfxRequests fuer Controller bearbeiten
119 |*
120 \************************************************************************/
121
122 void DrawViewShell::ExecCtrl(SfxRequest& rReq)
123 {
124 // waehrend einer Diashow wird nichts ausser dem Seitenwechsel und dem
125 // Sprung zur Bookmark ausgefuehrt!
126 if( HasCurrentFunction(SID_PRESENTATION) &&
127 rReq.GetSlot() != SID_SWITCHPAGE &&
128 rReq.GetSlot() != SID_JUMPTOMARK)
129 return;
130
131 CheckLineTo (rReq);
132
133 // End text edit mode for some requests.
134 sal_uInt16 nSlot = rReq.GetSlot();
135 switch (nSlot)
136 {
137 case SID_OUTPUT_QUALITY_COLOR:
138 case SID_OUTPUT_QUALITY_GRAYSCALE:
139 case SID_OUTPUT_QUALITY_BLACKWHITE:
140 case SID_OUTPUT_QUALITY_CONTRAST:
141 // Do nothing.
142 break;
143 default:
144 if ( mpDrawView->IsTextEdit() )
145 {
146 mpDrawView->SdrEndTextEdit();
147 }
148 }
149
150 // sal_uInt16 nSlot = rReq.GetSlot();
151 switch (nSlot)
152 {
153 case SID_SWITCHPAGE: // BASIC
154 {
155 sal_Bool bWasBasic = sal_False;
156
157 // switch page in running slide show
158 if(SlideShow::IsRunning(GetViewShellBase()) && rReq.GetArgs())
159 {
160 SFX_REQUEST_ARG(rReq, pWhatPage, SfxUInt32Item, ID_VAL_WHATPAGE, sal_False);
161 SlideShow::GetSlideShow(GetViewShellBase())->jumpToPageNumber((sal_Int32)((pWhatPage->GetValue()-1)>>1));
162 }
163 else
164 {
165 const SfxItemSet *pArgs = rReq.GetArgs ();
166 sal_uInt16 nSelectedPage = 0;
167
168 if (! pArgs)
169 {
170 nSelectedPage = maTabControl.GetCurPageId() - 1;
171 }
172 else if (pArgs->Count () == 2)
173 {
174 SFX_REQUEST_ARG (rReq, pWhatPage, SfxUInt32Item, ID_VAL_WHATPAGE, sal_False);
175 SFX_REQUEST_ARG (rReq, pWhatKind, SfxUInt32Item, ID_VAL_WHATKIND, sal_False);
176
177 sal_Int32 nWhatPage = (sal_Int32)pWhatPage->GetValue ();
178 sal_Int32 nWhatKind = (sal_Int32)pWhatKind->GetValue ();
179 if (! CHECK_RANGE (PK_STANDARD, nWhatKind, PK_HANDOUT))
180 {
181 StarBASIC::FatalError (SbERR_BAD_PROP_VALUE);
182 rReq.Ignore ();
183 break;
184 }
185 else if (meEditMode != EM_MASTERPAGE)
186 {
187 if (! CHECK_RANGE (0, nWhatPage, GetDoc()->GetSdPageCount((PageKind)nWhatKind)))
188 {
189 StarBASIC::FatalError (SbERR_BAD_PROP_VALUE);
190 rReq.Ignore ();
191 break;
192 }
193
194 nSelectedPage = (short) nWhatPage;
195 mePageKind = (PageKind) nWhatKind;
196 bWasBasic = sal_True;
197 }
198 }
199 else
200 {
201 StarBASIC::FatalError (SbERR_WRONG_ARGS);
202 rReq.Ignore ();
203 break;
204 }
205
206
207 if( GetDocSh() && (GetDocSh()->GetCreateMode() == SFX_CREATE_MODE_EMBEDDED))
208 GetDocSh()->SetModified();
209
210 SwitchPage(nSelectedPage);
211
212 if(HasCurrentFunction(SID_BEZIER_EDIT))
213 GetViewFrame()->GetDispatcher()->Execute(SID_OBJECT_SELECT, SFX_CALLMODE_ASYNCHRON);
214
215 Invalidate();
216 InvalidateWindows();
217 rReq.Done ();
218 }
219 break;
220 }
221
222 case SID_SWITCHLAYER: // BASIC
223 {
224 const SfxItemSet *pArgs = rReq.GetArgs ();
225
226 // #87182#
227 bool bCurPageValid(false);
228 sal_uInt16 nCurPage(0);
229
230 if(GetLayerTabControl())
231 {
232 nCurPage = GetLayerTabControl()->GetCurPageId();
233 bCurPageValid = true;
234 }
235
236 if(pArgs && 1 == pArgs->Count())
237 {
238 SFX_REQUEST_ARG (rReq, pWhatLayer, SfxUInt32Item, ID_VAL_WHATLAYER, sal_False);
239
240 if(pWhatLayer)
241 {
242 nCurPage = (short)pWhatLayer->GetValue();
243 bCurPageValid = true;
244 }
245 }
246
247 if(bCurPageValid)
248 {
249 mpDrawView->SetActiveLayer( GetLayerTabControl()->GetPageText(nCurPage) );
250 Invalidate();
251 }
252
253 rReq.Done ();
254
255 break;
256 }
257
258 case SID_PAGEMODE: // BASIC
259 {
260
261 const SfxItemSet *pArgs = rReq.GetArgs ();
262
263 if ( pArgs && pArgs->Count () == 2)
264 {
265 SFX_REQUEST_ARG (rReq, pIsActive, SfxBoolItem, ID_VAL_ISACTIVE, sal_False);
266 SFX_REQUEST_ARG (rReq, pWhatKind, SfxUInt32Item, ID_VAL_WHATKIND, sal_False);
267
268 sal_Int32 nWhatKind = (sal_Int32)pWhatKind->GetValue ();
269 if (CHECK_RANGE (PK_STANDARD, nWhatKind, PK_HANDOUT))
270 {
271 mbIsLayerModeActive = pIsActive->GetValue ();
272 mePageKind = (PageKind) nWhatKind;
273 }
274 }
275
276 // Default-Layer der Page einschalten
277 mpDrawView->SetActiveLayer( String( SdResId(STR_LAYER_LAYOUT) ) );
278
279 ChangeEditMode(EM_PAGE, mbIsLayerModeActive);
280
281 Invalidate();
282 rReq.Done ();
283
284 break;
285 }
286
287 case SID_LAYERMODE: // BASIC
288 {
289 const SfxItemSet *pArgs = rReq.GetArgs ();
290
291 if ( pArgs && pArgs->Count () == 2)
292 {
293 SFX_REQUEST_ARG (rReq, pWhatLayerMode, SfxBoolItem, ID_VAL_ISACTIVE, sal_False);
294 SFX_REQUEST_ARG (rReq, pWhatLayer, SfxUInt32Item, ID_VAL_WHATLAYER, sal_False);
295
296 sal_Int32 nWhatLayer = (sal_Int32)pWhatLayer->GetValue ();
297 if (CHECK_RANGE (EM_PAGE, nWhatLayer, EM_MASTERPAGE))
298 {
299 mbIsLayerModeActive = pWhatLayerMode->GetValue ();
300 meEditMode = (EditMode) nWhatLayer;
301 }
302 }
303
304 ChangeEditMode(meEditMode, !mbIsLayerModeActive);
305
306 Invalidate();
307 rReq.Done ();
308
309 break;
310 }
311
312 case SID_HEADER_AND_FOOTER:
313 case SID_INSERT_PAGE_NUMBER:
314 case SID_INSERT_DATE_TIME:
315 {
316 SdAbstractDialogFactory* pFact = SdAbstractDialogFactory::Create();
317 AbstractHeaderFooterDialog* pDlg = pFact ? pFact->CreateHeaderFooterDialog( (::ViewShell*)this, GetActiveWindow(), GetDoc(), mpActualPage ) : 0;
318 if( pDlg )
319 {
320 pDlg->Execute();
321 delete pDlg;
322
323 GetActiveWindow()->Invalidate();
324 UpdatePreview( mpActualPage );
325 }
326
327 Invalidate();
328 rReq.Done ();
329
330 break;
331 }
332
333 case SID_MASTER_LAYOUTS:
334 {
335 SdPage* pPage = GetActualPage();
336 if (meEditMode == EM_MASTERPAGE)
337 // Use the master page of the current page.
338 pPage = static_cast<SdPage*>(&pPage->TRG_GetMasterPage());
339
340 SdAbstractDialogFactory* pFact = SdAbstractDialogFactory::Create();
341 VclAbstractDialog* pDlg = pFact ? pFact->CreateMasterLayoutDialog( GetActiveWindow(), GetDoc(), pPage ) : 0;
342 if( pDlg )
343 {
344 pDlg->Execute();
345 delete pDlg;
346 Invalidate();
347 }
348 rReq.Done ();
349 break;
350 }
351 case SID_OBJECTRESIZE:
352 {
353 /******************************************************************
354 * Der Server moechte die Clientgrosse verandern
355 ******************************************************************/
356 OSL_ASSERT (GetViewShell()!=NULL);
357 SfxInPlaceClient* pIPClient = GetViewShell()->GetIPClient();
358
359 if ( pIPClient && pIPClient->IsObjectInPlaceActive() )
360 {
361 const SfxRectangleItem& rRect =
362 (SfxRectangleItem&)rReq.GetArgs()->Get(SID_OBJECTRESIZE);
363 Rectangle aRect( GetActiveWindow()->PixelToLogic( rRect.GetValue() ) );
364
365 if ( mpDrawView->AreObjectsMarked() )
366 {
367 const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList();
368
369 if (rMarkList.GetMarkCount() == 1)
370 {
371 SdrMark* pMark = rMarkList.GetMark(0);
372 SdrObject* pObj = pMark->GetMarkedSdrObj();
373
374 SdrOle2Obj* pOle2Obj = dynamic_cast< SdrOle2Obj* >( pObj );
375 if(pOle2Obj)
376 {
377 if( pOle2Obj->GetObjRef().is() )
378 {
379 pOle2Obj->SetLogicRect(aRect);
380 }
381 }
382 }
383 }
384 }
385 rReq.Ignore ();
386 break;
387 }
388
389 case SID_RELOAD:
390 {
391 // #83951#
392 sal_uInt16 nId = Svx3DChildWindow::GetChildWindowId();
393 SfxViewFrame* pFrame = GetViewFrame();
394
395 try
396 {
397 Reference< XFrame > xFrame( pFrame->GetFrame().GetFrameInterface(), UNO_SET_THROW );
398
399 // Save the current configuration of panes and views.
400 Reference<XControllerManager> xControllerManager (
401 GetViewShellBase().GetController(), UNO_QUERY_THROW);
402 Reference<XConfigurationController> xConfigurationController (
403 xControllerManager->getConfigurationController(), UNO_QUERY_THROW );
404 Reference<XConfiguration> xConfiguration (
405 xConfigurationController->getRequestedConfiguration(), UNO_SET_THROW );
406
407 SfxChildWindow* pWindow = pFrame->GetChildWindow(nId);
408 if(pWindow)
409 {
410 Svx3DWin* p3DWin = (Svx3DWin*)(pWindow->GetWindow());
411 if(p3DWin)
412 p3DWin->DocumentReload();
413 }
414
415 // Normale Weiterleitung an ViewFrame zur Ausfuehrung
416 GetViewFrame()->ExecuteSlot(rReq);
417
418 // From here on we must cope with this object and the frame already being
419 // deleted. Do not call any methods or use data members.
420 Reference<XController> xController( xFrame->getController(), UNO_SET_THROW );
421
422 // Restore the configuration.
423 xControllerManager = Reference<XControllerManager>( xController, UNO_QUERY_THROW);
424 xConfigurationController = Reference<XConfigurationController>(
425 xControllerManager->getConfigurationController());
426 if ( ! xConfigurationController.is())
427 throw RuntimeException();
428 xConfigurationController->restoreConfiguration(xConfiguration);
429 }
430 catch (RuntimeException&)
431 {
432 DBG_UNHANDLED_EXCEPTION();
433 }
434
435 // We have to return immediately to avoid accessing this object.
436 return;
437 }
438
439 case SID_JUMPTOMARK:
440 {
441 if( rReq.GetArgs() )
442 {
443 SFX_REQUEST_ARG(rReq, pBookmark, SfxStringItem, SID_JUMPTOMARK, sal_False);
444
445 if (pBookmark)
446 {
447 UniString sBookmark( INetURLObject::decode( pBookmark->GetValue(), '%', INetURLObject::DECODE_WITH_CHARSET ) );
448
449 rtl::Reference< sd::SlideShow > xSlideshow( SlideShow::GetSlideShow( GetViewShellBase() ) );
450 if(xSlideshow.is() && xSlideshow->isRunning())
451 {
452 xSlideshow->jumpToBookmark(sBookmark);
453 }
454 else
455 {
456 GotoBookmark( sBookmark );
457 }
458 }
459 }
460 rReq.Done();
461 break;
462 }
463
464 case SID_OUTPUT_QUALITY_COLOR:
465 case SID_OUTPUT_QUALITY_GRAYSCALE:
466 case SID_OUTPUT_QUALITY_BLACKWHITE:
467 case SID_OUTPUT_QUALITY_CONTRAST:
468 {
469 ExecReq( rReq );
470 break;
471 }
472
473 case SID_MAIL_SCROLLBODY_PAGEDOWN:
474 {
475 ExecReq( rReq );
476 break;
477 }
478
479 case SID_ATTR_YEAR2000:
480 {
481 FmFormShell* pFormShell = GetViewShellBase().GetFormShellManager()->GetFormShell();
482 if (pFormShell != NULL)
483 {
484 const SfxPoolItem* pItem;
485 if (rReq.GetArgs()->GetItemState(
486 SID_ATTR_YEAR2000, sal_True, &pItem) == SFX_ITEM_SET)
487 pFormShell->SetY2KState (
488 static_cast<const SfxUInt16Item*>(pItem)->GetValue());
489 }
490
491 rReq.Done();
492 }
493 break;
494
495 case SID_OPT_LOCALE_CHANGED:
496 {
497 GetActiveWindow()->Invalidate();
498 UpdatePreview( mpActualPage );
499 rReq.Done();
500 }
501
502 default:
503 break;
504 }
505 }
506
507 /*************************************************************************
508 |*
509 |* SfxRequests fuer Lineale bearbeiten
510 |*
511 \************************************************************************/
512
ExecRuler(SfxRequest & rReq)513 void DrawViewShell::ExecRuler(SfxRequest& rReq)
514 {
515 // waehrend einer Diashow wird nichts ausgefuehrt!
516 if(HasCurrentFunction(SID_PRESENTATION))
517 return;
518
519 CheckLineTo (rReq);
520
521 const SfxItemSet* pArgs = rReq.GetArgs();
522 const Point aPagePos( GetActiveWindow()->GetViewOrigin() );
523 Size aPageSize = mpActualPage->GetSize();
524 Size aViewSize = GetActiveWindow()->GetViewSize();
525 SdUndoGroup* pUndoGroup = NULL;
526
527 if ( rReq.GetSlot() == SID_ATTR_LONG_LRSPACE ||
528 rReq.GetSlot() == SID_ATTR_LONG_ULSPACE )
529 {
530 pUndoGroup = new SdUndoGroup(GetDoc());
531 String aString(SdResId(STR_UNDO_CHANGE_PAGEBORDER));
532 pUndoGroup->SetComment(aString);
533 }
534
535 switch ( rReq.GetSlot() )
536 {
537 case SID_ATTR_LONG_LRSPACE:
538 {
539 const SvxLongLRSpaceItem& rLRSpace = (const SvxLongLRSpaceItem&)
540 pArgs->Get(GetPool().GetWhich(SID_ATTR_LONG_LRSPACE));
541
542 if( mpDrawView->IsTextEdit() )
543 {
544 Rectangle aRect = maMarkRect;
545 aRect.SetPos(aRect.TopLeft() + aPagePos);
546 aRect.Left() = rLRSpace.GetLeft();
547 aRect.Right() = aViewSize.Width() - rLRSpace.GetRight();
548 aRect.SetPos(aRect.TopLeft() - aPagePos);
549 if ( aRect != maMarkRect)
550 {
551 mpDrawView->SetAllMarkedRect(aRect);
552 maMarkRect = mpDrawView->GetAllMarkedRect();
553 Invalidate( SID_RULER_OBJECT );
554 }
555 }
556 else
557 {
558 long nLeft = Max(0L, rLRSpace.GetLeft() - aPagePos.X());
559 long nRight = Max(0L, rLRSpace.GetRight() + aPagePos.X() +
560 aPageSize.Width() - aViewSize.Width());
561
562 sal_uInt16 nPageCnt = GetDoc()->GetSdPageCount(mePageKind);
563 sal_uInt16 i;
564 for ( i = 0; i < nPageCnt; i++)
565 {
566 SdPage* pPage = GetDoc()->GetSdPage(i, mePageKind);
567 SdUndoAction* pUndo = new SdPageLRUndoAction(GetDoc(),
568 pPage,
569 pPage->GetLftBorder(),
570 pPage->GetRgtBorder(),
571 nLeft, nRight);
572 pUndoGroup->AddAction(pUndo);
573 pPage->SetLftBorder(nLeft);
574 pPage->SetRgtBorder(nRight);
575 }
576 nPageCnt = GetDoc()->GetMasterSdPageCount(mePageKind);
577
578 for (i = 0; i < nPageCnt; i++)
579 {
580 SdPage* pPage = GetDoc()->GetMasterSdPage(i, mePageKind);
581 SdUndoAction* pUndo = new SdPageLRUndoAction(GetDoc(),
582 pPage,
583 pPage->GetLftBorder(),
584 pPage->GetRgtBorder(),
585 nLeft, nRight);
586 pUndoGroup->AddAction(pUndo);
587 pPage->SetLftBorder(nLeft);
588 pPage->SetRgtBorder(nRight);
589 }
590 InvalidateWindows();
591 }
592 break;
593 }
594 case SID_ATTR_LONG_ULSPACE:
595 {
596 const SvxLongULSpaceItem& rULSpace = (const SvxLongULSpaceItem&)
597 pArgs->Get(GetPool().GetWhich(SID_ATTR_LONG_ULSPACE));
598
599 if( mpDrawView->IsTextEdit() )
600 {
601 Rectangle aRect = maMarkRect;
602 aRect.SetPos(aRect.TopLeft() + aPagePos);
603 aRect.Top() = rULSpace.GetUpper();
604 aRect.Bottom() = aViewSize.Height() - rULSpace.GetLower();
605 aRect.SetPos(aRect.TopLeft() - aPagePos);
606
607 if ( aRect != maMarkRect)
608 {
609 mpDrawView->SetAllMarkedRect(aRect);
610 maMarkRect = mpDrawView->GetAllMarkedRect();
611 Invalidate( SID_RULER_OBJECT );
612 }
613 }
614 else
615 {
616 long nUpper = Max(0L, rULSpace.GetUpper() - aPagePos.Y());
617 long nLower = Max(0L, rULSpace.GetLower() + aPagePos.Y() +
618 aPageSize.Height() - aViewSize.Height());
619
620 sal_uInt16 nPageCnt = GetDoc()->GetSdPageCount(mePageKind);
621 sal_uInt16 i;
622 for ( i = 0; i < nPageCnt; i++)
623 {
624 SdPage* pPage = GetDoc()->GetSdPage(i, mePageKind);
625 SdUndoAction* pUndo = new SdPageULUndoAction(GetDoc(),
626 pPage,
627 pPage->GetUppBorder(),
628 pPage->GetLwrBorder(),
629 nUpper, nLower);
630 pUndoGroup->AddAction(pUndo);
631 pPage->SetUppBorder(nUpper);
632 pPage->SetLwrBorder(nLower);
633 }
634 nPageCnt = GetDoc()->GetMasterSdPageCount(mePageKind);
635
636 for (i = 0; i < nPageCnt; i++)
637 {
638 SdPage* pPage = GetDoc()->GetMasterSdPage(i, mePageKind);
639 SdUndoAction* pUndo = new SdPageULUndoAction(GetDoc(),
640 pPage,
641 pPage->GetUppBorder(),
642 pPage->GetLwrBorder(),
643 nUpper, nLower);
644 pUndoGroup->AddAction(pUndo);
645 pPage->SetUppBorder(nUpper);
646 pPage->SetLwrBorder(nLower);
647 }
648 InvalidateWindows();
649 }
650 break;
651 }
652
653 case SID_RULER_OBJECT:
654 {
655 Rectangle aRect = maMarkRect;
656 aRect.SetPos(aRect.TopLeft() + aPagePos);
657
658 const SvxObjectItem& rOI = (const SvxObjectItem&)
659 pArgs->Get(GetPool().GetWhich(SID_RULER_OBJECT));
660
661 if ( rOI.GetStartX() != rOI.GetEndX() )
662 {
663 aRect.Left() = rOI.GetStartX();
664 aRect.Right() = rOI.GetEndX();
665 }
666 if ( rOI.GetStartY() != rOI.GetEndY() )
667 {
668 aRect.Top() = rOI.GetStartY();
669 aRect.Bottom() = rOI.GetEndY();
670 }
671 aRect.SetPos(aRect.TopLeft() - aPagePos);
672 if ( aRect != maMarkRect)
673 {
674 mpDrawView->SetAllMarkedRect(aRect);
675 maMarkRect = mpDrawView->GetAllMarkedRect();
676 Invalidate( SID_RULER_OBJECT );
677 }
678 break;
679 }
680
681 case SID_ATTR_TABSTOP:
682 {
683 if( mpDrawView->IsTextEdit() )
684 {
685 const SvxTabStopItem& rItem = (const SvxTabStopItem&)
686 pArgs->Get( EE_PARA_TABS );
687
688 SfxItemSet aEditAttr( GetPool(), EE_PARA_TABS, EE_PARA_TABS );
689
690 aEditAttr.Put( rItem );
691 mpDrawView->SetAttributes( aEditAttr );
692
693 // #91081# Invalidate is missing here
694 Invalidate(SID_ATTR_TABSTOP);
695 }
696 break;
697 }
698
699 case SID_ATTR_PARA_LINESPACE:
700 {
701 sal_uInt16 nSlot = SID_ATTR_PARA_LINESPACE;
702 SvxLineSpacingItem aParaLineSP = (const SvxLineSpacingItem&)pArgs->Get(
703 GetPool().GetWhich(nSlot));
704
705 SfxItemSet aEditAttr( GetPool(), EE_PARA_SBL, EE_PARA_SBL );
706 aParaLineSP.SetWhich( EE_PARA_SBL );
707
708 aEditAttr.Put( aParaLineSP );
709 mpDrawView->SetAttributes( aEditAttr );
710
711 Invalidate(SID_ATTR_PARA_LINESPACE);
712 }
713 break;
714 case SID_ATTR_PARA_ADJUST_LEFT:
715 {
716 SvxAdjustItem aItem( SVX_ADJUST_LEFT, EE_PARA_JUST );
717 SfxItemSet aEditAttr( GetPool(), EE_PARA_JUST, EE_PARA_JUST );
718
719 aEditAttr.Put( aItem );
720 mpDrawView->SetAttributes( aEditAttr );
721
722 Invalidate(SID_ATTR_PARA_ADJUST_LEFT);
723 }
724 break;
725 case SID_ATTR_PARA_ADJUST_CENTER:
726 {
727 SvxAdjustItem aItem( SVX_ADJUST_CENTER, EE_PARA_JUST );
728 SfxItemSet aEditAttr( GetPool(), EE_PARA_JUST, EE_PARA_JUST );
729
730 aEditAttr.Put( aItem );
731 mpDrawView->SetAttributes( aEditAttr );
732
733 Invalidate(SID_ATTR_PARA_ADJUST_CENTER);
734 }
735 break;
736 case SID_ATTR_PARA_ADJUST_RIGHT:
737 {
738 SvxAdjustItem aItem( SVX_ADJUST_RIGHT, EE_PARA_JUST );
739 SfxItemSet aEditAttr( GetPool(), EE_PARA_JUST, EE_PARA_JUST );
740
741 aEditAttr.Put( aItem );
742 mpDrawView->SetAttributes( aEditAttr );
743
744 Invalidate(SID_ATTR_PARA_ADJUST_RIGHT);
745 }
746 break;
747 case SID_ATTR_PARA_ADJUST_BLOCK:
748 {
749 SvxAdjustItem aItem( SVX_ADJUST_BLOCK, EE_PARA_JUST );
750 SfxItemSet aEditAttr( GetPool(), EE_PARA_JUST, EE_PARA_JUST );
751
752 aEditAttr.Put( aItem );
753 mpDrawView->SetAttributes( aEditAttr );
754
755 Invalidate(SID_ATTR_PARA_ADJUST_BLOCK);
756 }
757 break;
758 case SID_ATTR_PARA_ULSPACE:
759 {
760 sal_uInt16 nSlot = SID_ATTR_PARA_ULSPACE;
761 SvxULSpaceItem aULSP = (const SvxULSpaceItem&)pArgs->Get(
762 GetPool().GetWhich(nSlot));
763 SfxItemSet aEditAttr( GetPool(), EE_PARA_ULSPACE, EE_PARA_ULSPACE );
764 aULSP.SetWhich( EE_PARA_ULSPACE );
765
766 aEditAttr.Put( aULSP );
767 mpDrawView->SetAttributes( aEditAttr );
768
769 Invalidate(SID_ATTR_PARA_ULSPACE);
770 }
771 break;
772
773 case SID_ATTR_PARA_LRSPACE:
774 {
775 sal_uInt16 nSlot = SID_ATTR_PARA_LRSPACE;
776 SvxLRSpaceItem aLRSpace = (const SvxLRSpaceItem&)pArgs->Get(
777 GetPool().GetWhich(nSlot));
778
779 SfxItemSet aEditAttr( GetPool(), EE_PARA_LRSPACE, EE_PARA_LRSPACE );
780 aLRSpace.SetWhich( EE_PARA_LRSPACE );
781
782 aEditAttr.Put( aLRSpace );
783 mpDrawView->SetAttributes( aEditAttr );
784
785 Invalidate(SID_ATTR_PARA_LRSPACE);
786 break;
787 }
788 case SID_ATTR_LRSPACE:
789 {
790 if( mpDrawView->IsTextEdit() )
791 {
792 sal_uInt16 nId = SID_ATTR_PARA_LRSPACE;
793 const SvxLRSpaceItem& rItem = (const SvxLRSpaceItem&)
794 pArgs->Get( nId );
795
796 SfxItemSet aEditAttr( GetPool(), EE_PARA_LRSPACE, EE_PARA_LRSPACE );
797
798 nId = EE_PARA_LRSPACE;
799 SvxLRSpaceItem aLRSpaceItem( rItem.GetLeft(),
800 rItem.GetRight(), rItem.GetTxtLeft(),
801 rItem.GetTxtFirstLineOfst(), nId );
802 aEditAttr.Put( aLRSpaceItem );
803 mpDrawView->SetAttributes( aEditAttr );
804
805 // #92557# Invalidate is missing here
806 Invalidate(SID_ATTR_PARA_LRSPACE);
807 }
808 break;
809 }
810 }
811 if ( pUndoGroup )
812 // Undo Gruppe dem Undo Manager uebergeben
813 GetViewFrame()->GetObjectShell()->GetUndoManager()->
814 AddUndoAction(pUndoGroup);
815 }
816
817 /*************************************************************************
818 |*
819 |* Statuswerte der Lineale bestimmen
820 |*
821 \************************************************************************/
GetRulerState(SfxItemSet & rSet)822 void DrawViewShell::GetRulerState(SfxItemSet& rSet)
823 {
824 Point aOrigin;
825
826 if (mpDrawView->GetSdrPageView())
827 {
828 aOrigin = mpDrawView->GetSdrPageView()->GetPageOrigin();
829 }
830
831 Size aViewSize = GetActiveWindow()->GetViewSize();
832
833 const Point aPagePos( GetActiveWindow()->GetViewOrigin() );
834 Size aPageSize = mpActualPage->GetSize();
835
836 Rectangle aRect(aPagePos, Point( aViewSize.Width() - (aPagePos.X() + aPageSize.Width()),
837 aViewSize.Height() - (aPagePos.Y() + aPageSize.Height())));
838
839 if( mpDrawView->IsTextEdit() )
840 {
841 Point aPnt1 = GetActiveWindow()->GetWinViewPos();
842 Point aPnt2 = GetActiveWindow()->GetViewOrigin();
843 Rectangle aMinMaxRect = Rectangle( aPnt1, Size(ULONG_MAX, ULONG_MAX) );
844 rSet.Put( SfxRectangleItem(SID_RULER_LR_MIN_MAX, aMinMaxRect) );
845 }
846 else
847 {
848 rSet.Put( SfxRectangleItem(SID_RULER_LR_MIN_MAX, aRect) );
849 }
850
851 SvxLongLRSpaceItem aLRSpace(aPagePos.X() + mpActualPage->GetLftBorder(),
852 aRect.Right() + mpActualPage->GetRgtBorder(),
853 GetPool().GetWhich(SID_ATTR_LONG_LRSPACE));
854 SvxLongULSpaceItem aULSpace(aPagePos.Y() + mpActualPage->GetUppBorder(),
855 aRect.Bottom() + mpActualPage->GetLwrBorder(),
856 GetPool().GetWhich(SID_ATTR_LONG_ULSPACE));
857 rSet.Put(SvxPagePosSizeItem(Point(0,0) - aPagePos, aViewSize.Width(),
858 aViewSize.Height()));
859 SfxPointItem aPointItem( SID_RULER_NULL_OFFSET, aPagePos + aOrigin );
860
861 SvxProtectItem aProtect( SID_RULER_PROTECT );
862
863 maMarkRect = mpDrawView->GetAllMarkedRect();
864
865 const sal_Bool bRTL = GetDoc() && GetDoc()->GetDefaultWritingMode() == ::com::sun::star::text::WritingMode_RL_TB;
866 rSet.Put(SfxBoolItem(SID_RULER_TEXT_RIGHT_TO_LEFT, bRTL));
867
868 if( mpDrawView->AreObjectsMarked() )
869 {
870 if( mpDrawView->IsTextEdit() )
871 {
872 SdrObject* pObj = mpDrawView->GetMarkedObjectList().GetMark( 0 )->GetMarkedSdrObj();
873 if( pObj->GetObjInventor() == SdrInventor)
874 {
875 SfxItemSet aEditAttr( GetDoc()->GetPool() );
876 mpDrawView->GetAttributes( aEditAttr );
877 if( aEditAttr.GetItemState( EE_PARA_TABS ) >= SFX_ITEM_AVAILABLE )
878 {
879 const SvxTabStopItem& rItem = (const SvxTabStopItem&) aEditAttr.Get( EE_PARA_TABS );
880 rSet.Put( rItem );
881
882 //Rectangle aRect = maMarkRect;
883
884 const SvxLRSpaceItem& rLRSpaceItem = (const SvxLRSpaceItem&) aEditAttr.Get( EE_PARA_LRSPACE );
885 sal_uInt16 nId = SID_ATTR_PARA_LRSPACE;
886 SvxLRSpaceItem aLRSpaceItem( rLRSpaceItem.GetLeft(),
887 rLRSpaceItem.GetRight(), rLRSpaceItem.GetTxtLeft(),
888 rLRSpaceItem.GetTxtFirstLineOfst(), nId );
889 rSet.Put( aLRSpaceItem );
890
891 Point aPos( aPagePos + maMarkRect.TopLeft() );
892
893 if ( aEditAttr.GetItemState( SDRATTR_TEXT_LEFTDIST ) == SFX_ITEM_ON )
894 {
895 const SdrTextLeftDistItem& rTLDItem = (const SdrTextLeftDistItem&)
896 aEditAttr.Get( SDRATTR_TEXT_LEFTDIST );
897 long nLD = rTLDItem.GetValue();
898 aPos.X() += nLD;
899 }
900
901 aPointItem.SetValue( aPos );
902
903 aLRSpace.SetLeft( aPagePos.X() + maMarkRect.Left() );
904
905 if ( aEditAttr.GetItemState( SDRATTR_TEXT_LEFTDIST ) == SFX_ITEM_ON )
906 {
907 const SdrTextLeftDistItem& rTLDItem = (const SdrTextLeftDistItem&)
908 aEditAttr.Get( SDRATTR_TEXT_LEFTDIST );
909 long nLD = rTLDItem.GetValue();
910 aLRSpace.SetLeft( aLRSpace.GetLeft() + nLD );
911 }
912
913 aLRSpace.SetRight( aRect.Right() + aPageSize.Width() - maMarkRect.Right() );
914 aULSpace.SetUpper( aPagePos.Y() + maMarkRect.Top() );
915 aULSpace.SetLower( aRect.Bottom() + aPageSize.Height() - maMarkRect.Bottom() );
916
917 rSet.DisableItem( SID_RULER_OBJECT );
918
919 // Seitenraender werden gelocked
920 aProtect.SetSizeProtect( sal_True );
921 aProtect.SetPosProtect( sal_True );
922 }
923
924 if( aEditAttr.GetItemState( EE_PARA_WRITINGDIR ) >= SFX_ITEM_AVAILABLE )
925 {
926 const SvxFrameDirectionItem& rItem = (const SvxFrameDirectionItem&) aEditAttr.Get( EE_PARA_WRITINGDIR );
927 rSet.Put(SfxBoolItem(SID_RULER_TEXT_RIGHT_TO_LEFT, rItem.GetValue() == ::com::sun::star::text::WritingMode_RL_TB));
928 }
929 }
930 }
931 else
932 {
933 rSet.DisableItem( EE_PARA_TABS );
934 rSet.DisableItem( SID_RULER_TEXT_RIGHT_TO_LEFT );
935
936 if( mpDrawView->IsResizeAllowed(sal_True) )
937 {
938 Rectangle aResizeRect( maMarkRect );
939
940 aResizeRect.SetPos(aResizeRect.TopLeft() + aPagePos);
941 SvxObjectItem aObjItem(aResizeRect.Left(), aResizeRect.Right(),
942 aResizeRect.Top(), aResizeRect.Bottom());
943 rSet.Put(aObjItem);
944 rSet.DisableItem( EE_PARA_TABS );
945 }
946 else
947 {
948 rSet.DisableItem( SID_RULER_OBJECT );
949 }
950 }
951 }
952 else
953 {
954 rSet.DisableItem( SID_RULER_OBJECT );
955 rSet.DisableItem( EE_PARA_TABS );
956 // rSet.DisableItem( SID_RULER_TEXT_RIGHT_TO_LEFT );
957 }
958
959 rSet.Put( aLRSpace );
960 rSet.Put( aULSpace );
961
962 rSet.Put( aPointItem );
963 rSet.Put( aProtect );
964 }
965
966 /*************************************************************************
967 |*
968 |* SfxRequests fuer StatusBar bearbeiten
969 |*
970 \************************************************************************/
971
ExecStatusBar(SfxRequest & rReq)972 void DrawViewShell::ExecStatusBar(SfxRequest& rReq)
973 {
974 // waehrend einer Diashow wird nichts ausgefuehrt!
975 if(HasCurrentFunction(SID_PRESENTATION))
976 return;
977
978 CheckLineTo (rReq);
979
980 switch ( rReq.GetSlot() )
981 {
982 case SID_ATTR_SIZE:
983 {
984 GetViewFrame()->GetDispatcher()->Execute( SID_ATTR_TRANSFORM, SFX_CALLMODE_ASYNCHRON );
985 }
986 break;
987
988 case SID_STATUS_LAYOUT:
989 {
990 GetViewFrame()->GetDispatcher()->Execute( SID_PRESENTATION_LAYOUT, SFX_CALLMODE_ASYNCHRON );
991 }
992 break;
993 }
994 }
995
996 /*************************************************************************
997 |*
998 |* Status der Snap-Objekt-Eintraege im Popup setzen
999 |*
1000 \************************************************************************/
1001
GetSnapItemState(SfxItemSet & rSet)1002 void DrawViewShell::GetSnapItemState( SfxItemSet &rSet )
1003 {
1004 SdrPageView* pPV;
1005 Point aMPos = GetActiveWindow()->PixelToLogic(maMousePos);
1006 sal_uInt16 nHitLog = (sal_uInt16) GetActiveWindow()->PixelToLogic(
1007 Size(FuPoor::HITPIX,0)).Width();
1008 sal_uInt16 nHelpLine;
1009
1010 if ( mpDrawView->PickHelpLine(aMPos, nHitLog, *GetActiveWindow(), nHelpLine, pPV) )
1011 {
1012 const SdrHelpLine& rHelpLine = (pPV->GetHelpLines())[nHelpLine];
1013
1014 if ( rHelpLine.GetKind() == SDRHELPLINE_POINT )
1015 {
1016 rSet.Put( SfxStringItem( SID_SET_SNAPITEM,
1017 String( SdResId( STR_POPUP_EDIT_SNAPPOINT))) );
1018 rSet.Put( SfxStringItem( SID_DELETE_SNAPITEM,
1019 String( SdResId( STR_POPUP_DELETE_SNAPPOINT))) );
1020 }
1021 else
1022 {
1023 rSet.Put( SfxStringItem( SID_SET_SNAPITEM,
1024 String( SdResId( STR_POPUP_EDIT_SNAPLINE))) );
1025 rSet.Put( SfxStringItem( SID_DELETE_SNAPITEM,
1026 String( SdResId( STR_POPUP_DELETE_SNAPLINE))) );
1027 }
1028 }
1029 }
1030
1031
1032 /*************************************************************************
1033 |*
1034 |*
1035 |*
1036 \************************************************************************/
1037
AddWindow(::sd::Window * pWin)1038 void DrawViewShell::AddWindow (::sd::Window* pWin)
1039 {
1040 mpDrawView->AddWindowToPaintView(pWin);
1041 }
1042
1043 /*************************************************************************
1044 |*
1045 |*
1046 |*
1047 \************************************************************************/
1048
RemoveWindow(::sd::Window * pWin)1049 void DrawViewShell::RemoveWindow(::sd::Window* pWin)
1050 {
1051 mpDrawView->DeleteWindowFromPaintView(pWin);
1052 }
1053
1054 } // end of namespace sd
1055