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