xref: /trunk/main/sd/source/ui/view/drviews5.cxx (revision 79aad27f)
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 
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 
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 
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 
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 	ChangeEditMode(eNewEditMode, bNewLayerMode);
324 	SwitchPage(nSelectedPage);
325 
326 	// DrawMode fuer 'Normales' Fenster wiederherstellen
327 	if(GetActiveWindow()->GetDrawMode() != pView->GetDrawMode())
328 	  GetActiveWindow()->SetDrawMode(pView->GetDrawMode());
329 
330 	if ( mpDrawView->IsDesignMode() != pView->IsDesignMode() )
331 	{
332 		SfxBoolItem aDesignModeItem( SID_FM_DESIGN_MODE, pView->IsDesignMode() );
333 		GetViewFrame()->GetDispatcher()->Execute( SID_FM_DESIGN_MODE, SFX_CALLMODE_SYNCHRON | SFX_CALLMODE_RECORD, &aDesignModeItem, 0L );
334 	}
335 
336 	// Muss am Ende gerufen werden, da ein WriteFrameViewData() ausgeloest wird
337 	if (mpDrawView->IsFrameDragSingles() != pView->IsFrameDragSingles() )
338 		mpDrawView->SetFrameDragSingles( pView->IsFrameDragSingles() );
339 }
340 
341 /*************************************************************************
342 |*
343 |* Daten der aktuellen View auf die FrameView uebertragen
344 |*
345 \************************************************************************/
346 
347 void DrawViewShell::WriteFrameViewData()
348 {
349 	// Zeichen-(Bildschirm-)Attribute an FrameView merken
350 	mpFrameView->SetRuler( HasRuler() );
351 	mpFrameView->SetGridCoarse( mpDrawView->GetGridCoarse() );
352 	mpFrameView->SetGridFine( mpDrawView->GetGridFine() );
353 	mpFrameView->SetSnapGridWidth(mpDrawView->GetSnapGridWidthX(), mpDrawView->GetSnapGridWidthY());
354 	mpFrameView->SetGridVisible( mpDrawView->IsGridVisible() );
355 	mpFrameView->SetGridFront( mpDrawView->IsGridFront() );
356 	mpFrameView->SetSnapAngle( mpDrawView->GetSnapAngle() );
357 	mpFrameView->SetGridSnap( mpDrawView->IsGridSnap() );
358 	mpFrameView->SetBordSnap( mpDrawView->IsBordSnap() );
359 	mpFrameView->SetHlplSnap( mpDrawView->IsHlplSnap() );
360 	mpFrameView->SetOFrmSnap( mpDrawView->IsOFrmSnap() );
361 	mpFrameView->SetOPntSnap( mpDrawView->IsOPntSnap() );
362 	mpFrameView->SetOConSnap( mpDrawView->IsOConSnap() );
363 	mpFrameView->SetHlplVisible( mpDrawView->IsHlplVisible() );
364 	mpFrameView->SetDragStripes( mpDrawView->IsDragStripes() );
365 	mpFrameView->SetPlusHandlesAlwaysVisible( mpDrawView->IsPlusHandlesAlwaysVisible() );
366 	mpFrameView->SetFrameDragSingles( mpDrawView->IsFrameDragSingles() );
367 	mpFrameView->SetMarkedHitMovesAlways( mpDrawView->IsMarkedHitMovesAlways() );
368 	mpFrameView->SetMoveOnlyDragging( mpDrawView->IsMoveOnlyDragging() );
369 	mpFrameView->SetNoDragXorPolys( mpDrawView->IsNoDragXorPolys() );
370 	mpFrameView->SetCrookNoContortion( mpDrawView->IsCrookNoContortion() );
371 	mpFrameView->SetBigOrtho( mpDrawView->IsBigOrtho() );
372 	mpFrameView->SetEliminatePolyPointLimitAngle( mpDrawView->GetEliminatePolyPointLimitAngle() );
373 	mpFrameView->SetEliminatePolyPoints( mpDrawView->IsEliminatePolyPoints() );
374 
375 	mpFrameView->SetSolidMarkHdl( mpDrawView->IsSolidMarkHdl() );
376 	mpFrameView->SetSolidDragging( mpDrawView->IsSolidDragging() );
377 	mpFrameView->SetQuickEdit( mpDrawView->IsQuickTextEditMode() );
378 
379 	mpFrameView->SetDesignMode( mpDrawView->IsDesignMode() );
380 
381 	Size aVisSizePixel = GetActiveWindow()->GetOutputSizePixel();
382 	Rectangle aVisArea = GetActiveWindow()->PixelToLogic( Rectangle( Point(0,0), aVisSizePixel) );
383 	mpFrameView->SetVisArea(aVisArea);
384 
385 	if( mePageKind == PK_HANDOUT )
386 		mpFrameView->SetSelectedPage(0);
387 	else
388 	{
389 		mpFrameView->SetSelectedPage( maTabControl.GetCurPageId() - 1 );
390 	}
391 
392 	mpFrameView->SetViewShEditMode(meEditMode, mePageKind);
393 	mpFrameView->SetLayerMode(IsLayerModeActive());
394 
395 	SdrPageView* pPageView = mpDrawView->GetSdrPageView();
396 
397 	if (pPageView)
398 	{
399 		if ( mpFrameView->GetVisibleLayers() != pPageView->GetVisibleLayers() )
400 			mpFrameView->SetVisibleLayers( pPageView->GetVisibleLayers() );
401 
402 		if ( mpFrameView->GetPrintableLayers() != pPageView->GetPrintableLayers() )
403 			mpFrameView->SetPrintableLayers( pPageView->GetPrintableLayers() );
404 
405 		if ( mpFrameView->GetLockedLayers() != pPageView->GetLockedLayers() )
406 			mpFrameView->SetLockedLayers( pPageView->GetLockedLayers() );
407 
408 		if (mePageKind == PK_NOTES)
409 		{
410 			mpFrameView->SetNotesHelpLines( pPageView->GetHelpLines() );
411 		}
412 		else if (mePageKind == PK_HANDOUT)
413 		{
414 			mpFrameView->SetHandoutHelpLines( pPageView->GetHelpLines() );
415 		}
416 		else
417 		{
418 			mpFrameView->SetStandardHelpLines( pPageView->GetHelpLines() );
419 		}
420 	}
421 
422 	if ( mpFrameView->GetActiveLayer() != mpDrawView->GetActiveLayer() )
423 		mpFrameView->SetActiveLayer( mpDrawView->GetActiveLayer() );
424 
425 	// DrawMode fuer 'Normales' Fenster merken
426 	if(mpFrameView->GetDrawMode() != GetActiveWindow()->GetDrawMode())
427 	  mpFrameView->SetDrawMode(GetActiveWindow()->GetDrawMode());
428 }
429 
430 
431 
432 /*************************************************************************
433 |*
434 |* PrePaint-Method
435 |*
436 \************************************************************************/
437 
438 void DrawViewShell::PrePaint()
439 {
440 	mpDrawView->PrePaint();
441 }
442 
443 /*************************************************************************
444 |*
445 |* Paint-Methode: das Ereignis wird vom Fenster pWin an
446 |* die Viewshell und die aktuelle Funktion weitergeleitet
447 |*
448 |* Anmerkung: pWin==NULL, wenn Paint() vom ShowWindow gerufen wird!
449 |*
450 \************************************************************************/
451 
452 void DrawViewShell::Paint(const Rectangle& rRect, ::sd::Window* pWin)
453 {
454 	// #103834# Fill var FillColor here to have it available on later call
455     svtools::ColorConfig aColorConfig;
456 	Color aFillColor;
457 
458     if(DOCUMENT_TYPE_IMPRESS == GetDoc()->GetDocumentType())
459 	{
460         aFillColor = Color( aColorConfig.GetColorValue( svtools::APPBACKGROUND ).nColor );
461 	}
462     else
463 	{
464         aFillColor = Color( aColorConfig.GetColorValue( svtools::DOCCOLOR ).nColor );
465 	}
466 
467 	/* #97517#	This is done before each text edit, so why not do it before every paint.
468 				The default language is only used if the outliner only contains one
469 				character in a symbol font */
470 	GetDoc()->GetDrawOutliner( NULL ).SetDefaultLanguage( GetDoc()->GetLanguage( EE_CHAR_LANGUAGE ) );
471 
472 	// #103834# Set Application Background color for usage in SdrPaintView(s)
473 	mpDrawView->SetApplicationBackgroundColor(aFillColor);
474 
475 	/* #97517#	This is done before each text edit, so why not do it before every paint.
476 				The default language is only used if the outliner only contains one
477 				character in a symbol font */
478 	GetDoc()->GetDrawOutliner( NULL ).SetDefaultLanguage( Application::GetSettings().GetLanguage() );
479 
480 	mpDrawView->CompleteRedraw( pWin, Region( rRect ) );
481 
482 	if( pWin )
483 	{
484 		if( GetDocSh()->GetDocShellFunction().is() )
485 			GetDocSh()->GetDocShellFunction()->Paint( rRect, pWin );
486 
487 		if( HasCurrentFunction() )
488 			GetCurrentFunction()->Paint( rRect, pWin );
489 	}
490 }
491 
492 /*************************************************************************
493 |*
494 |* Zoom-Faktor fuer InPlace einstellen
495 |*
496 \************************************************************************/
497 
498 void DrawViewShell::SetZoomFactor(const Fraction& rZoomX, const Fraction& rZoomY)
499 {
500 	ViewShell::SetZoomFactor(rZoomX, rZoomY);
501 	mbZoomOnPage = sal_False;
502 	Point aOrigin = GetActiveWindow()->GetViewOrigin();
503 	GetActiveWindow()->SetWinViewPos(aOrigin);
504 }
505 
506 /*************************************************************************
507 |*
508 |* Optimale Groesse zurueckgeben
509 |*
510 \************************************************************************/
511 
512 Size DrawViewShell::GetOptimalSizePixel() const
513 {
514 	Size aSize;
515 
516 	SdrPageView* pPV = mpDrawView->GetSdrPageView();
517 	if (pPV)
518 	{
519 		SdPage* pPage = (SdPage*) pPV->GetPage();
520 
521 		if (pPage)
522 		{
523 			if (!mbZoomOnPage)
524 			{
525 				// Gegenwaertigen MapMode beruecksichtigen
526 				aSize = GetActiveWindow()->LogicToPixel( pPage->GetSize() );
527 			}
528 			else
529 			{
530 				// 1:1 Darstellung
531 				MapMode aMapMode(MAP_100TH_MM);
532 				aSize = GetActiveWindow()->LogicToPixel( pPage->GetSize(), aMapMode );
533 				const_cast< DrawViewShell* >(this)->mbZoomOnPage = sal_True;
534 			}
535 		}
536 	}
537 
538 	return(aSize);
539 }
540 
541 
542 /*************************************************************************
543 |*
544 |* Seite wird gehided
545 |*
546 \************************************************************************/
547 
548 void DrawViewShell::HidePage()
549 {
550     FmFormShell* pFormShell = GetViewShellBase().GetFormShellManager()->GetFormShell();
551     if (pFormShell != NULL)
552         pFormShell->PrepareClose (sal_False);
553 }
554 
555 
556 
557 void DrawViewShell::WriteUserDataSequence ( ::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue >& rSequence, sal_Bool bBrowse )
558 {
559 	WriteFrameViewData();
560 
561 	ViewShell::WriteUserDataSequence( rSequence, bBrowse );
562 
563 	const sal_Int32 nIndex = rSequence.getLength();
564 	rSequence.realloc( nIndex + 1 );
565 	rSequence[nIndex].Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( sUNO_View_ZoomOnPage ) );
566 	rSequence[nIndex].Value <<= (sal_Bool)mbZoomOnPage;
567 }
568 
569 void DrawViewShell::ReadUserDataSequence ( const ::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue >& rSequence, sal_Bool bBrowse )
570 {
571 	WriteFrameViewData();
572 
573 	ViewShell::ReadUserDataSequence( rSequence, bBrowse );
574 
575 	const sal_Int32 nLength = rSequence.getLength();
576     const com::sun::star::beans::PropertyValue *pValue = rSequence.getConstArray();
577     for (sal_Int16 i = 0 ; i < nLength; i++, pValue++ )
578     {
579         if (pValue->Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( sUNO_View_ZoomOnPage ) ) )
580 		{
581 			sal_Bool bZoomPage = sal_False;
582 			if( pValue->Value >>= bZoomPage )
583 			{
584 				mbZoomOnPage = bZoomPage;
585 			}
586 		}
587 	}
588 
589 	if( mpFrameView->GetPageKind() != mePageKind )
590 	{
591 		mePageKind = mpFrameView->GetPageKind();
592 
593 		if (mePageKind == PK_NOTES)
594 		{
595 			SetHelpId( SID_NOTESMODE );
596 			GetActiveWindow()->SetHelpId( CMD_SID_NOTESMODE );
597 			GetActiveWindow()->SetUniqueId( CMD_SID_NOTESMODE );
598 		}
599 		else if (mePageKind == PK_HANDOUT)
600 		{
601 			SetHelpId( SID_HANDOUTMODE );
602 			GetActiveWindow()->SetHelpId( CMD_SID_HANDOUTMODE );
603 			GetActiveWindow()->SetUniqueId( CMD_SID_HANDOUTMODE );
604 		}
605 		else
606 		{
607 			SetHelpId( SD_IF_SDDRAWVIEWSHELL );
608 			GetActiveWindow()->SetHelpId( HID_SDDRAWVIEWSHELL );
609 			GetActiveWindow()->SetUniqueId( HID_SDDRAWVIEWSHELL );
610 		}
611 	}
612 
613 	ReadFrameViewData( mpFrameView );
614 
615 	if( !mbZoomOnPage )
616 	{
617 		const Rectangle aVisArea( mpFrameView->GetVisArea() );
618 
619 		if ( GetDocSh()->GetCreateMode() == SFX_CREATE_MODE_EMBEDDED )
620 		{
621 			GetDocSh()->SetVisArea(aVisArea);
622 		}
623 
624 		VisAreaChanged(aVisArea);
625 
626 		::sd::View* pView = GetView();
627 
628 		if (pView)
629 		{
630 			pView->VisAreaChanged(GetActiveWindow());
631 		}
632 
633 		SetZoomRect(aVisArea);
634 	}
635 
636 	ChangeEditMode (meEditMode, ! IsLayerModeActive());
637 	ChangeEditMode (meEditMode, ! IsLayerModeActive());
638 }
639 
640 void DrawViewShell::VisAreaChanged(const Rectangle& rRect)
641 {
642 	ViewShell::VisAreaChanged( rRect );
643 
644 	DrawController& rController = GetViewShellBase().GetDrawController();
645     rController.FireVisAreaChanged (rRect);
646 }
647 
648 
649 
650 
651 /** If there is a valid controller then create a new instance of
652     <type>AccessibleDrawDocumentView</type>.  Otherwise delegate this call
653     to the base class to return a default object (probably an empty
654     reference).
655 */
656 ::com::sun::star::uno::Reference<
657     ::com::sun::star::accessibility::XAccessible>
658     DrawViewShell::CreateAccessibleDocumentView (::sd::Window* pWindow)
659 {
660     if (GetViewShellBase().GetController() != NULL)
661     {
662         accessibility::AccessibleDrawDocumentView* pDocumentView =
663             new accessibility::AccessibleDrawDocumentView (
664                 pWindow,
665                 this,
666                 GetViewShellBase().GetController(),
667                 pWindow->GetAccessibleParentWindow()->GetAccessible());
668         pDocumentView->Init();
669         return ::com::sun::star::uno::Reference<
670             ::com::sun::star::accessibility::XAccessible>
671             (static_cast< ::com::sun::star::uno::XWeak*>(pDocumentView),
672                 ::com::sun::star::uno::UNO_QUERY);
673     }
674     else
675     {
676         OSL_TRACE ("DrawViewShell::CreateAccessibleDocumentView: no controller");
677         return ViewShell::CreateAccessibleDocumentView (pWindow);
678     }
679 }
680 
681 
682 
683 
684 int DrawViewShell::GetActiveTabLayerIndex (void) const
685 {
686     const LayerTabBar* pBar
687         = const_cast<DrawViewShell*>(this)->GetLayerTabControl ();
688     if (pBar != NULL)
689         return pBar->GetPagePos (pBar->GetCurPageId());
690     else
691         return -1;
692 }
693 
694 
695 
696 
697 void DrawViewShell::SetActiveTabLayerIndex (int nIndex)
698 {
699     LayerTabBar* pBar = GetLayerTabControl ();
700     if (pBar != NULL)
701     {
702         // Ignore invalid indices silently.
703         if (nIndex>=0 && nIndex<pBar->GetPageCount())
704         {
705             // Tell the draw view and the tab control of the new active layer.
706             mpDrawView->SetActiveLayer (pBar->GetPageText (pBar->GetPageId ((sal_uInt16)nIndex)));
707             pBar->SetCurPageId (pBar->GetPageId ((sal_uInt16)nIndex));
708         }
709     }
710 }
711 
712 
713 
714 
715 TabControl* DrawViewShell::GetPageTabControl (void)
716 {
717     return &maTabControl;
718 }
719 
720 
721 
722 
723 LayerTabBar* DrawViewShell::GetLayerTabControl (void)
724 {
725     return mpLayerTabBar.get();
726 }
727 
728 
729 
730 
731 int DrawViewShell::GetTabLayerCount (void) const
732 {
733     const LayerTabBar* pBar
734         = const_cast<DrawViewShell*>(this)->GetLayerTabControl ();
735     if (pBar != NULL)
736         return pBar->GetPageCount();
737     else
738         return 0;
739 }
740 
741 
742 } // end of namespace sd
743