xref: /trunk/main/sd/source/ui/view/drviews5.cxx (revision 57d1e499)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sd.hxx"
26 
27 #include "DrawViewShell.hxx"
28 #include "PresentationViewShell.hxx"
29 #include <editeng/outliner.hxx>
30 #ifndef _SVXIDS_HXX
31 #include <svx/svxids.hrc>
32 #endif
33 #include <sfx2/request.hxx>
34 #include <sfx2/dispatch.hxx>
35 #include <svx/svdpagv.hxx>
36 #include <vcl/scrbar.hxx>
37 #include <tools/poly.hxx>
38 #include <svx/fmshell.hxx>
39 #include <editeng/eeitem.hxx>
40 #include <svtools/colorcfg.hxx>
41 #include "AccessibleDrawDocumentView.hxx"
42 
43 #include <sfx2/viewfrm.hxx>
44 #include "LayerTabBar.hxx"
45 
46 #include "strings.hrc"
47 #include "res_bmp.hrc"
48 #include "glob.hrc"
49 #include "app.hrc"
50 #include "helpids.h"
51 #include "optsitem.hxx"
52 #include "app.hxx"
53 #include "FrameView.hxx"
54 #include "sdattr.hxx"
55 #include "futext.hxx"
56 #include "sdpage.hxx"
57 #include "stlpool.hxx"
58 #include "prntopts.hxx"
59 #include "sdresid.hxx"
60 #include "Window.hxx"
61 #include "drawview.hxx"
62 #include "drawdoc.hxx"
63 #include "DrawDocShell.hxx"
64 #include "Outliner.hxx"
65 #include "Client.hxx"
66 #include "slideshow.hxx"
67 #include "unokywds.hxx"
68 #include "SdUnoDrawView.hxx"
69 #include "ViewShellBase.hxx"
70 #include "FormShellManager.hxx"
71 #include "LayerDialogContent.hxx"
72 #include "DrawController.hxx"
73 
74 namespace sd {
75 
76 static const int TABCONTROL_INITIAL_SIZE = 350;
77 static const int PAPER_SHADOW_EXT_PIXEL = 2;
78 
79 
80 /*************************************************************************
81 |*
82 |* Wird gerufen, wenn sich das Model aendert
83 |*
84 \************************************************************************/
85 
ModelHasChanged()86 void DrawViewShell::ModelHasChanged()
87 {
88 	Invalidate();
89 	// Damit der Navigator auch einen aktuellen Status bekommt
90 	GetViewFrame()->GetBindings().Invalidate( SID_NAVIGATOR_STATE, sal_True, sal_False );
91 
92 	//Update3DWindow();
93 	SfxBoolItem aItem( SID_3D_STATE, sal_True );
94 	GetViewFrame()->GetDispatcher()->Execute(
95 		SID_3D_STATE, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD, &aItem, 0L );
96 
97 	// jetzt den von der Drawing Engine neu erzeugten TextEditOutliner
98 	// initialisieren
99 	::Outliner* pOutliner 	  = mpDrawView->GetTextEditOutliner();
100 	if (pOutliner)
101 	{
102 		SfxStyleSheetPool* pSPool = (SfxStyleSheetPool*) GetDocSh()->GetStyleSheetPool();
103 		pOutliner->SetStyleSheetPool(pSPool);
104 	}
105 }
106 
107 
108 
109 
Resize(void)110 void DrawViewShell::Resize (void)
111 {
112 	ViewShell::Resize();
113 
114 	if ( GetDocSh()->GetCreateMode() == SFX_CREATE_MODE_EMBEDDED )
115 	{
116 		SetZoomRect( GetDocSh()->GetVisArea(ASPECT_CONTENT) );
117 	}
118 
119     rtl::Reference< sd::SlideShow > xSlideshow( SlideShow::GetSlideShow( GetViewShellBase() ) );
120     if( xSlideshow.is() && xSlideshow->isRunning() && !xSlideshow->isFullScreen() )
121     {
122 		xSlideshow->resize(maViewSize);
123     }
124 }
125 
126 
127 
128 
ArrangeGUIElements(void)129 void DrawViewShell::ArrangeGUIElements (void)
130 {
131     // Retrieve the current size (thickness) of the scroll bars.  That is
132     // the width of the vertical and the height of the horizontal scroll
133     // bar.
134     int nScrollBarSize =
135         GetParentWindow()->GetSettings().GetStyleSettings().GetScrollBarSize();
136 	maScrBarWH = Size (nScrollBarSize, nScrollBarSize);
137 
138     Point aHPos = maViewPos;
139     aHPos.Y() += maViewSize.Height();
140 
141 
142     ViewShell::ArrangeGUIElements ();
143 
144     maTabControl.Hide();
145 
146     OSL_ASSERT (GetViewShell()!=NULL);
147     Client* pIPClient = static_cast<Client*>(GetViewShell()->GetIPClient());
148     sal_Bool bClientActive = sal_False;
149     if ( pIPClient && pIPClient->IsObjectInPlaceActive() )
150         bClientActive = sal_True;
151 
152     sal_Bool bInPlaceActive = GetViewFrame()->GetFrame().IsInPlace();
153 
154     if ( mbZoomOnPage && !bInPlaceActive && !bClientActive )
155     {
156         // bei Split immer erstes Fenster resizen
157         //af pWindow = mpContentWindow.get();
158         SfxRequest aReq(SID_SIZE_PAGE, 0, GetDoc()->GetItemPool());
159         ExecuteSlot( aReq );
160     }
161 }
162 
163 /*************************************************************************
164 |*
165 |* Daten der FrameView auf die aktuelle View uebertragen
166 |*
167 \************************************************************************/
168 
ReadFrameViewData(FrameView * pView)169 void DrawViewShell::ReadFrameViewData(FrameView* pView)
170 {
171 	ModifyGuard aGuard( GetDoc() );
172 
173 	// Diese Option wird am Model eingestellt
174 	GetDoc()->SetPickThroughTransparentTextFrames(
175 			 SD_MOD()->GetSdOptions(GetDoc()->GetDocumentType())->IsPickThrough());
176 
177 	// Initialisierungen der Zeichen-(Bildschirm-)Attribute
178 	if (HasRuler() != pView->HasRuler())
179 		SetRuler( pView->HasRuler() );
180 
181 	if (mpDrawView->GetGridCoarse() != pView->GetGridCoarse())
182 		mpDrawView->SetGridCoarse( pView->GetGridCoarse() );
183 
184 	if (mpDrawView->GetGridFine() != pView->GetGridFine())
185 		mpDrawView->SetGridFine( pView->GetGridFine() );
186 
187 	if (mpDrawView->GetSnapGridWidthX() != pView->GetSnapGridWidthX() || mpDrawView->GetSnapGridWidthY() != pView->GetSnapGridWidthY())
188 		mpDrawView->SetSnapGridWidth(pView->GetSnapGridWidthX(), pView->GetSnapGridWidthY());
189 
190 	if (mpDrawView->IsGridVisible() != pView->IsGridVisible())
191 		mpDrawView->SetGridVisible( pView->IsGridVisible() );
192 
193 	if (mpDrawView->IsGridFront() != pView->IsGridFront())
194 		mpDrawView->SetGridFront( pView->IsGridFront() );
195 
196 	if (mpDrawView->GetSnapAngle() != pView->GetSnapAngle())
197 		mpDrawView->SetSnapAngle( pView->GetSnapAngle() );
198 
199 	if (mpDrawView->IsGridSnap() !=  pView->IsGridSnap() )
200 		mpDrawView->SetGridSnap( pView->IsGridSnap() );
201 
202 	if (mpDrawView->IsBordSnap() !=  pView->IsBordSnap() )
203 		mpDrawView->SetBordSnap( pView->IsBordSnap() );
204 
205 	if (mpDrawView->IsHlplSnap() !=  pView->IsHlplSnap() )
206 		mpDrawView->SetHlplSnap( pView->IsHlplSnap() );
207 
208 	if (mpDrawView->IsOFrmSnap() !=  pView->IsOFrmSnap() )
209 		mpDrawView->SetOFrmSnap( pView->IsOFrmSnap() );
210 
211 	if (mpDrawView->IsOPntSnap() !=  pView->IsOPntSnap() )
212 		mpDrawView->SetOPntSnap( pView->IsOPntSnap() );
213 
214 	if (mpDrawView->IsOConSnap() !=  pView->IsOConSnap() )
215 		mpDrawView->SetOConSnap( pView->IsOConSnap() );
216 
217 	if (mpDrawView->IsHlplVisible() != pView->IsHlplVisible() )
218 		mpDrawView->SetHlplVisible( pView->IsHlplVisible() );
219 
220 	if (mpDrawView->IsDragStripes() != pView->IsDragStripes() )
221 		mpDrawView->SetDragStripes( pView->IsDragStripes() );
222 
223 	if (mpDrawView->IsPlusHandlesAlwaysVisible() != pView->IsPlusHandlesAlwaysVisible() )
224 		mpDrawView->SetPlusHandlesAlwaysVisible( pView->IsPlusHandlesAlwaysVisible() );
225 
226 	if (mpDrawView->GetSnapMagneticPixel() != pView->GetSnapMagneticPixel() )
227 		mpDrawView->SetSnapMagneticPixel( pView->GetSnapMagneticPixel() );
228 
229 	if (mpDrawView->IsMarkedHitMovesAlways() != pView->IsMarkedHitMovesAlways() )
230 		mpDrawView->SetMarkedHitMovesAlways( pView->IsMarkedHitMovesAlways() );
231 
232 	if (mpDrawView->IsMoveOnlyDragging() != pView->IsMoveOnlyDragging() )
233 		mpDrawView->SetMoveOnlyDragging( pView->IsMoveOnlyDragging() );
234 
235 //    mpDrawView->SetSlantButShear( pView->IsSlantButShear() );
236 
237 	if (mpDrawView->IsNoDragXorPolys() != pView->IsNoDragXorPolys() )
238 		mpDrawView->SetNoDragXorPolys( pView->IsNoDragXorPolys() );
239 
240 	if (mpDrawView->IsCrookNoContortion() != pView->IsCrookNoContortion() )
241 		mpDrawView->SetCrookNoContortion( pView->IsCrookNoContortion() );
242 
243 	if (mpDrawView->IsAngleSnapEnabled() != pView->IsAngleSnapEnabled() )
244 		mpDrawView->SetAngleSnapEnabled( pView->IsAngleSnapEnabled() );
245 
246 	if (mpDrawView->IsBigOrtho() != pView->IsBigOrtho() )
247 		mpDrawView->SetBigOrtho( pView->IsBigOrtho() );
248 
249 	if (mpDrawView->IsOrtho() != pView->IsOrtho() )
250 		mpDrawView->SetOrtho( pView->IsOrtho() );
251 
252 	if (mpDrawView->GetEliminatePolyPointLimitAngle() != pView->GetEliminatePolyPointLimitAngle() )
253 		mpDrawView->SetEliminatePolyPointLimitAngle( pView->GetEliminatePolyPointLimitAngle() );
254 
255 	if (mpDrawView->IsEliminatePolyPoints() != pView->IsEliminatePolyPoints() )
256 		mpDrawView->SetEliminatePolyPoints( pView->IsEliminatePolyPoints() );
257 
258 	if (mpDrawView->IsSolidMarkHdl() != pView->IsSolidMarkHdl() )
259 		mpDrawView->SetSolidMarkHdl( pView->IsSolidMarkHdl() );
260 
261 	if (mpDrawView->IsSolidDragging() != pView->IsSolidDragging() )
262 		mpDrawView->SetSolidDragging( pView->IsSolidDragging() );
263 
264 	if (mpDrawView->IsQuickTextEditMode() != pView->IsQuickEdit())
265 		mpDrawView->SetQuickTextEditMode( pView->IsQuickEdit() );
266 
267 	// #i26631#
268 	if (mpDrawView->IsMasterPagePaintCaching() != pView->IsMasterPagePaintCaching())
269 		mpDrawView->SetMasterPagePaintCaching( pView->IsMasterPagePaintCaching() );
270 
271 	// Definition:
272 	//	grosse Handles:	9
273 	//	kleine Handles:	7
274 	sal_uInt16 nTmp = mpDrawView->GetMarkHdlSizePixel();
275 	//DBG_ASSERT(nTmp != 7, "HandleSize != 7 oder 9");
276 	if( nTmp == 9 && !pView->IsBigHandles() )
277 		mpDrawView->SetMarkHdlSizePixel( 7 );
278 	else if( nTmp == 7 && pView->IsBigHandles() )
279 		mpDrawView->SetMarkHdlSizePixel( 9 );
280 
281 
282 	SdrPageView* pPageView = mpDrawView->GetSdrPageView();
283 	if (pPageView)
284 	{
285 		if ( pPageView->GetVisibleLayers() != pView->GetVisibleLayers() )
286 			pPageView->SetVisibleLayers( pView->GetVisibleLayers() );
287 
288 		if ( pPageView->GetPrintableLayers() != pView->GetPrintableLayers() )
289 			pPageView->SetPrintableLayers( pView->GetPrintableLayers() );
290 
291 		if ( pPageView->GetLockedLayers() != pView->GetLockedLayers() )
292 			pPageView->SetLockedLayers( pView->GetLockedLayers() );
293 
294 		if (mePageKind == PK_NOTES)
295 		{
296 			if (pPageView->GetHelpLines() != pView->GetNotesHelpLines())
297 				pPageView->SetHelpLines( pView->GetNotesHelpLines() );
298 		}
299 		else if (mePageKind == PK_HANDOUT)
300 		{
301 			if (pPageView->GetHelpLines() != pView->GetHandoutHelpLines())
302 				pPageView->SetHelpLines( pView->GetHandoutHelpLines() );
303 		}
304 		else
305 		{
306 			if (pPageView->GetHelpLines() != pView->GetStandardHelpLines())
307 				pPageView->SetHelpLines( pView->GetStandardHelpLines() );
308 		}
309 	}
310 
311 	if ( mpDrawView->GetActiveLayer() != pView->GetActiveLayer() )
312 		mpDrawView->SetActiveLayer( pView->GetActiveLayer() );
313 
314 	sal_uInt16 nSelectedPage = 0;
315 
316 	if (mePageKind != PK_HANDOUT)
317 	{
318 		nSelectedPage = pView->GetSelectedPage();
319 	}
320 
321 	EditMode eNewEditMode = pView->GetViewShEditMode(mePageKind);
322 	sal_Bool bNewLayerMode = pView->IsLayerMode();
323 
324     if(IsLayerModeActive() && bNewLayerMode)
325     {
326         // #57936# Force mbIsLayerModeActive to false so that ChangeEditMode
327         // below does something regarding LayerTabBar content refresh. That refresh
328         // is only done when IsLayerModeActive changes. It needs to be done
329         // since e.g. Layer vsisibility was changed above and this may need
330         // a refresh to show the correct graphical representation
331         mbIsLayerModeActive = false;
332     }
333 
334 	ChangeEditMode(eNewEditMode, bNewLayerMode);
335 	SwitchPage(nSelectedPage);
336 
337 	// DrawMode fuer 'Normales' Fenster wiederherstellen
338 	if(GetActiveWindow()->GetDrawMode() != pView->GetDrawMode())
339 	  GetActiveWindow()->SetDrawMode(pView->GetDrawMode());
340 
341 	if ( mpDrawView->IsDesignMode() != pView->IsDesignMode() )
342 	{
343 		SfxBoolItem aDesignModeItem( SID_FM_DESIGN_MODE, pView->IsDesignMode() );
344 		GetViewFrame()->GetDispatcher()->Execute( SID_FM_DESIGN_MODE, SFX_CALLMODE_SYNCHRON | SFX_CALLMODE_RECORD, &aDesignModeItem, 0L );
345 	}
346 
347 	// Muss am Ende gerufen werden, da ein WriteFrameViewData() ausgeloest wird
348 	if (mpDrawView->IsFrameDragSingles() != pView->IsFrameDragSingles() )
349 		mpDrawView->SetFrameDragSingles( pView->IsFrameDragSingles() );
350 }
351 
352 /*************************************************************************
353 |*
354 |* Daten der aktuellen View auf die FrameView uebertragen
355 |*
356 \************************************************************************/
357 
WriteFrameViewData()358 void DrawViewShell::WriteFrameViewData()
359 {
360 	// Zeichen-(Bildschirm-)Attribute an FrameView merken
361 	mpFrameView->SetRuler( HasRuler() );
362 	mpFrameView->SetGridCoarse( mpDrawView->GetGridCoarse() );
363 	mpFrameView->SetGridFine( mpDrawView->GetGridFine() );
364 	mpFrameView->SetSnapGridWidth(mpDrawView->GetSnapGridWidthX(), mpDrawView->GetSnapGridWidthY());
365 	mpFrameView->SetGridVisible( mpDrawView->IsGridVisible() );
366 	mpFrameView->SetGridFront( mpDrawView->IsGridFront() );
367 	mpFrameView->SetSnapAngle( mpDrawView->GetSnapAngle() );
368 	mpFrameView->SetGridSnap( mpDrawView->IsGridSnap() );
369 	mpFrameView->SetBordSnap( mpDrawView->IsBordSnap() );
370 	mpFrameView->SetHlplSnap( mpDrawView->IsHlplSnap() );
371 	mpFrameView->SetOFrmSnap( mpDrawView->IsOFrmSnap() );
372 	mpFrameView->SetOPntSnap( mpDrawView->IsOPntSnap() );
373 	mpFrameView->SetOConSnap( mpDrawView->IsOConSnap() );
374 	mpFrameView->SetHlplVisible( mpDrawView->IsHlplVisible() );
375 	mpFrameView->SetDragStripes( mpDrawView->IsDragStripes() );
376 	mpFrameView->SetPlusHandlesAlwaysVisible( mpDrawView->IsPlusHandlesAlwaysVisible() );
377 	mpFrameView->SetFrameDragSingles( mpDrawView->IsFrameDragSingles() );
378 	mpFrameView->SetMarkedHitMovesAlways( mpDrawView->IsMarkedHitMovesAlways() );
379 	mpFrameView->SetMoveOnlyDragging( mpDrawView->IsMoveOnlyDragging() );
380 	mpFrameView->SetNoDragXorPolys( mpDrawView->IsNoDragXorPolys() );
381 	mpFrameView->SetCrookNoContortion( mpDrawView->IsCrookNoContortion() );
382 	mpFrameView->SetBigOrtho( mpDrawView->IsBigOrtho() );
383 	mpFrameView->SetEliminatePolyPointLimitAngle( mpDrawView->GetEliminatePolyPointLimitAngle() );
384 	mpFrameView->SetEliminatePolyPoints( mpDrawView->IsEliminatePolyPoints() );
385 
386 	mpFrameView->SetSolidMarkHdl( mpDrawView->IsSolidMarkHdl() );
387 	mpFrameView->SetSolidDragging( mpDrawView->IsSolidDragging() );
388 	mpFrameView->SetQuickEdit( mpDrawView->IsQuickTextEditMode() );
389 
390 	mpFrameView->SetDesignMode( mpDrawView->IsDesignMode() );
391 
392 	Size aVisSizePixel = GetActiveWindow()->GetOutputSizePixel();
393 	Rectangle aVisArea = GetActiveWindow()->PixelToLogic( Rectangle( Point(0,0), aVisSizePixel) );
394 	mpFrameView->SetVisArea(aVisArea);
395 
396 	if( mePageKind == PK_HANDOUT )
397 		mpFrameView->SetSelectedPage(0);
398 	else
399 	{
400 		mpFrameView->SetSelectedPage( maTabControl.GetCurPageId() - 1 );
401 	}
402 
403 	mpFrameView->SetViewShEditMode(meEditMode, mePageKind);
404 	mpFrameView->SetLayerMode(IsLayerModeActive());
405 
406 	SdrPageView* pPageView = mpDrawView->GetSdrPageView();
407 
408 	if (pPageView)
409 	{
410 		if ( mpFrameView->GetVisibleLayers() != pPageView->GetVisibleLayers() )
411 			mpFrameView->SetVisibleLayers( pPageView->GetVisibleLayers() );
412 
413 		if ( mpFrameView->GetPrintableLayers() != pPageView->GetPrintableLayers() )
414 			mpFrameView->SetPrintableLayers( pPageView->GetPrintableLayers() );
415 
416 		if ( mpFrameView->GetLockedLayers() != pPageView->GetLockedLayers() )
417 			mpFrameView->SetLockedLayers( pPageView->GetLockedLayers() );
418 
419 		if (mePageKind == PK_NOTES)
420 		{
421 			mpFrameView->SetNotesHelpLines( pPageView->GetHelpLines() );
422 		}
423 		else if (mePageKind == PK_HANDOUT)
424 		{
425 			mpFrameView->SetHandoutHelpLines( pPageView->GetHelpLines() );
426 		}
427 		else
428 		{
429 			mpFrameView->SetStandardHelpLines( pPageView->GetHelpLines() );
430 		}
431 	}
432 
433 	if ( mpFrameView->GetActiveLayer() != mpDrawView->GetActiveLayer() )
434 		mpFrameView->SetActiveLayer( mpDrawView->GetActiveLayer() );
435 
436 	// DrawMode fuer 'Normales' Fenster merken
437 	if(mpFrameView->GetDrawMode() != GetActiveWindow()->GetDrawMode())
438 	  mpFrameView->SetDrawMode(GetActiveWindow()->GetDrawMode());
439 }
440 
441 
442 
443 /*************************************************************************
444 |*
445 |* PrePaint-Method
446 |*
447 \************************************************************************/
448 
PrePaint()449 void DrawViewShell::PrePaint()
450 {
451 	mpDrawView->PrePaint();
452 }
453 
454 /*************************************************************************
455 |*
456 |* Paint-Methode: das Ereignis wird vom Fenster pWin an
457 |* die Viewshell und die aktuelle Funktion weitergeleitet
458 |*
459 |* Anmerkung: pWin==NULL, wenn Paint() vom ShowWindow gerufen wird!
460 |*
461 \************************************************************************/
462 
Paint(const Rectangle & rRect,::sd::Window * pWin)463 void DrawViewShell::Paint(const Rectangle& rRect, ::sd::Window* pWin)
464 {
465 	// #103834# Fill var FillColor here to have it available on later call
466     svtools::ColorConfig aColorConfig;
467 	Color aFillColor;
468 
469     if(DOCUMENT_TYPE_IMPRESS == GetDoc()->GetDocumentType())
470 	{
471         aFillColor = Color( aColorConfig.GetColorValue( svtools::APPBACKGROUND ).nColor );
472 	}
473     else
474 	{
475         aFillColor = Color( aColorConfig.GetColorValue( svtools::DOCCOLOR ).nColor );
476 	}
477 
478 	/* #97517#	This is done before each text edit, so why not do it before every paint.
479 				The default language is only used if the outliner only contains one
480 				character in a symbol font */
481 	GetDoc()->GetDrawOutliner( NULL ).SetDefaultLanguage( GetDoc()->GetLanguage( EE_CHAR_LANGUAGE ) );
482 
483 	// #103834# Set Application Background color for usage in SdrPaintView(s)
484 	mpDrawView->SetApplicationBackgroundColor(aFillColor);
485 
486 	/* #97517#	This is done before each text edit, so why not do it before every paint.
487 				The default language is only used if the outliner only contains one
488 				character in a symbol font */
489 	GetDoc()->GetDrawOutliner( NULL ).SetDefaultLanguage( Application::GetSettings().GetLanguage() );
490 
491 	mpDrawView->CompleteRedraw( pWin, Region( rRect ) );
492 
493 	if( pWin )
494 	{
495 		if( GetDocSh()->GetDocShellFunction().is() )
496 			GetDocSh()->GetDocShellFunction()->Paint( rRect, pWin );
497 
498 		if( HasCurrentFunction() )
499 			GetCurrentFunction()->Paint( rRect, pWin );
500 	}
501 }
502 
503 /*************************************************************************
504 |*
505 |* Zoom-Faktor fuer InPlace einstellen
506 |*
507 \************************************************************************/
508 
SetZoomFactor(const Fraction & rZoomX,const Fraction & rZoomY)509 void DrawViewShell::SetZoomFactor(const Fraction& rZoomX, const Fraction& rZoomY)
510 {
511 	ViewShell::SetZoomFactor(rZoomX, rZoomY);
512 	mbZoomOnPage = sal_False;
513 	Point aOrigin = GetActiveWindow()->GetViewOrigin();
514 	GetActiveWindow()->SetWinViewPos(aOrigin);
515 }
516 
517 /*************************************************************************
518 |*
519 |* Optimale Groesse zurueckgeben
520 |*
521 \************************************************************************/
522 
GetOptimalSizePixel() const523 Size DrawViewShell::GetOptimalSizePixel() const
524 {
525 	Size aSize;
526 
527 	SdrPageView* pPV = mpDrawView->GetSdrPageView();
528 	if (pPV)
529 	{
530 		SdPage* pPage = (SdPage*) pPV->GetPage();
531 
532 		if (pPage)
533 		{
534 			if (!mbZoomOnPage)
535 			{
536 				// Gegenwaertigen MapMode beruecksichtigen
537 				aSize = GetActiveWindow()->LogicToPixel( pPage->GetSize() );
538 			}
539 			else
540 			{
541 				// 1:1 Darstellung
542 				MapMode aMapMode(MAP_100TH_MM);
543 				aSize = GetActiveWindow()->LogicToPixel( pPage->GetSize(), aMapMode );
544 				const_cast< DrawViewShell* >(this)->mbZoomOnPage = sal_True;
545 			}
546 		}
547 	}
548 
549 	return(aSize);
550 }
551 
552 
553 /*************************************************************************
554 |*
555 |* Seite wird gehided
556 |*
557 \************************************************************************/
558 
HidePage()559 void DrawViewShell::HidePage()
560 {
561     FmFormShell* pFormShell = GetViewShellBase().GetFormShellManager()->GetFormShell();
562     if (pFormShell != NULL)
563         pFormShell->PrepareClose (sal_False);
564 }
565 
566 
567 
WriteUserDataSequence(::com::sun::star::uno::Sequence<::com::sun::star::beans::PropertyValue> & rSequence,sal_Bool bBrowse)568 void DrawViewShell::WriteUserDataSequence ( ::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue >& rSequence, sal_Bool bBrowse )
569 {
570 	WriteFrameViewData();
571 
572 	ViewShell::WriteUserDataSequence( rSequence, bBrowse );
573 
574 	const sal_Int32 nIndex = rSequence.getLength();
575 	rSequence.realloc( nIndex + 1 );
576 	rSequence[nIndex].Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( sUNO_View_ZoomOnPage ) );
577 	rSequence[nIndex].Value <<= (sal_Bool)mbZoomOnPage;
578 }
579 
ReadUserDataSequence(const::com::sun::star::uno::Sequence<::com::sun::star::beans::PropertyValue> & rSequence,sal_Bool bBrowse)580 void DrawViewShell::ReadUserDataSequence ( const ::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue >& rSequence, sal_Bool bBrowse )
581 {
582 	WriteFrameViewData();
583 
584 	ViewShell::ReadUserDataSequence( rSequence, bBrowse );
585 
586 	const sal_Int32 nLength = rSequence.getLength();
587     const com::sun::star::beans::PropertyValue *pValue = rSequence.getConstArray();
588     for (sal_Int16 i = 0 ; i < nLength; i++, pValue++ )
589     {
590         if (pValue->Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( sUNO_View_ZoomOnPage ) ) )
591 		{
592 			sal_Bool bZoomPage = sal_False;
593 			if( pValue->Value >>= bZoomPage )
594 			{
595 				mbZoomOnPage = bZoomPage;
596 			}
597 		}
598 	}
599 
600 	if( mpFrameView->GetPageKind() != mePageKind )
601 	{
602 		mePageKind = mpFrameView->GetPageKind();
603 
604 		if (mePageKind == PK_NOTES)
605 		{
606 			SetHelpId( SID_NOTESMODE );
607 			GetActiveWindow()->SetHelpId( CMD_SID_NOTESMODE );
608 			GetActiveWindow()->SetUniqueId( CMD_SID_NOTESMODE );
609 		}
610 		else if (mePageKind == PK_HANDOUT)
611 		{
612 			SetHelpId( SID_HANDOUTMODE );
613 			GetActiveWindow()->SetHelpId( CMD_SID_HANDOUTMODE );
614 			GetActiveWindow()->SetUniqueId( CMD_SID_HANDOUTMODE );
615 		}
616 		else
617 		{
618 			SetHelpId( SD_IF_SDDRAWVIEWSHELL );
619 			GetActiveWindow()->SetHelpId( HID_SDDRAWVIEWSHELL );
620 			GetActiveWindow()->SetUniqueId( HID_SDDRAWVIEWSHELL );
621 		}
622 	}
623 
624 	ReadFrameViewData( mpFrameView );
625 
626 	if( !mbZoomOnPage )
627 	{
628 		const Rectangle aVisArea( mpFrameView->GetVisArea() );
629 
630 		if ( GetDocSh()->GetCreateMode() == SFX_CREATE_MODE_EMBEDDED )
631 		{
632 			GetDocSh()->SetVisArea(aVisArea);
633 		}
634 
635 		VisAreaChanged(aVisArea);
636 
637 		::sd::View* pView = GetView();
638 
639 		if (pView)
640 		{
641 			pView->VisAreaChanged(GetActiveWindow());
642 		}
643 
644 		SetZoomRect(aVisArea);
645 	}
646 
647 	ChangeEditMode (meEditMode, ! IsLayerModeActive());
648 	ChangeEditMode (meEditMode, ! IsLayerModeActive());
649 }
650 
VisAreaChanged(const Rectangle & rRect)651 void DrawViewShell::VisAreaChanged(const Rectangle& rRect)
652 {
653 	ViewShell::VisAreaChanged( rRect );
654 
655 	DrawController& rController = GetViewShellBase().GetDrawController();
656     rController.FireVisAreaChanged (rRect);
657 }
658 
659 
660 
661 
662 /** If there is a valid controller then create a new instance of
663     <type>AccessibleDrawDocumentView</type>.  Otherwise delegate this call
664     to the base class to return a default object (probably an empty
665     reference).
666 */
667 ::com::sun::star::uno::Reference<
668     ::com::sun::star::accessibility::XAccessible>
CreateAccessibleDocumentView(::sd::Window * pWindow)669     DrawViewShell::CreateAccessibleDocumentView (::sd::Window* pWindow)
670 {
671     if (GetViewShellBase().GetController() != NULL)
672     {
673         accessibility::AccessibleDrawDocumentView* pDocumentView =
674             new accessibility::AccessibleDrawDocumentView (
675                 pWindow,
676                 this,
677                 GetViewShellBase().GetController(),
678                 pWindow->GetAccessibleParentWindow()->GetAccessible());
679         pDocumentView->Init();
680         return ::com::sun::star::uno::Reference<
681             ::com::sun::star::accessibility::XAccessible>
682             (static_cast< ::com::sun::star::uno::XWeak*>(pDocumentView),
683                 ::com::sun::star::uno::UNO_QUERY);
684     }
685     else
686     {
687         OSL_TRACE ("DrawViewShell::CreateAccessibleDocumentView: no controller");
688         return ViewShell::CreateAccessibleDocumentView (pWindow);
689     }
690 }
691 
692 
693 
694 
GetActiveTabLayerIndex(void) const695 int DrawViewShell::GetActiveTabLayerIndex (void) const
696 {
697     const LayerTabBar* pBar
698         = const_cast<DrawViewShell*>(this)->GetLayerTabControl ();
699     if (pBar != NULL)
700         return pBar->GetPagePos (pBar->GetCurPageId());
701     else
702         return -1;
703 }
704 
705 
706 
707 
SetActiveTabLayerIndex(int nIndex)708 void DrawViewShell::SetActiveTabLayerIndex (int nIndex)
709 {
710     LayerTabBar* pBar = GetLayerTabControl ();
711     if (pBar != NULL)
712     {
713         // Ignore invalid indices silently.
714         if (nIndex>=0 && nIndex<pBar->GetPageCount())
715         {
716             // Tell the draw view and the tab control of the new active layer.
717             mpDrawView->SetActiveLayer (pBar->GetPageText (pBar->GetPageId ((sal_uInt16)nIndex)));
718             pBar->SetCurPageId (pBar->GetPageId ((sal_uInt16)nIndex));
719 		SdUnoDrawView* pUnoDrawView = new SdUnoDrawView (
720             GetViewShellBase().GetDrawController(),
721             *this,
722             *GetView());
723 		::com::sun::star::uno::Reference< ::com::sun::star::drawing::XLayer> rLayer = pUnoDrawView->getActiveLayer();
724 		GetViewShellBase().GetDrawController().fireChangeLayer( &rLayer );
725 		delete pUnoDrawView;
726         }
727     }
728 }
729 
730 
731 
732 
GetPageTabControl(void)733 TabControl* DrawViewShell::GetPageTabControl (void)
734 {
735     return &maTabControl;
736 }
737 
738 
739 
740 
GetLayerTabControl(void)741 LayerTabBar* DrawViewShell::GetLayerTabControl (void)
742 {
743     return mpLayerTabBar.get();
744 }
745 
746 
747 
748 
GetTabLayerCount(void) const749 int DrawViewShell::GetTabLayerCount (void) const
750 {
751     const LayerTabBar* pBar
752         = const_cast<DrawViewShell*>(this)->GetLayerTabControl ();
753     if (pBar != NULL)
754         return pBar->GetPageCount();
755     else
756         return 0;
757 }
758 
759 
760 } // end of namespace sd
761