xref: /trunk/main/sd/source/ui/view/drviews3.cxx (revision 2d19362e)
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