xref: /AOO41X/main/sd/source/ui/view/drviews5.cxx (revision 4d7c9de063a797b8b4f3d45e3561e82ad1f8ef1f)
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     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 
WriteFrameViewData()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 
PrePaint()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 
Paint(const Rectangle & rRect,::sd::Window * pWin)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 
SetZoomFactor(const Fraction & rZoomX,const Fraction & rZoomY)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 
GetOptimalSizePixel() const512 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 
HidePage()548 void DrawViewShell::HidePage()
549 {
550     FmFormShell* pFormShell = GetViewShellBase().GetFormShellManager()->GetFormShell();
551     if (pFormShell != NULL)
552         pFormShell->PrepareClose (sal_False);
553 }
554 
555 
556 
WriteUserDataSequence(::com::sun::star::uno::Sequence<::com::sun::star::beans::PropertyValue> & rSequence,sal_Bool bBrowse)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 
ReadUserDataSequence(const::com::sun::star::uno::Sequence<::com::sun::star::beans::PropertyValue> & rSequence,sal_Bool bBrowse)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 
VisAreaChanged(const Rectangle & rRect)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>
CreateAccessibleDocumentView(::sd::Window * pWindow)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 
GetActiveTabLayerIndex(void) const684 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 
SetActiveTabLayerIndex(int nIndex)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         SdUnoDrawView* pUnoDrawView = new SdUnoDrawView (
709             GetViewShellBase().GetDrawController(),
710             *this,
711             *GetView());
712         ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XLayer> rLayer = pUnoDrawView->getActiveLayer();
713         GetViewShellBase().GetDrawController().fireChangeLayer( &rLayer );
714         delete pUnoDrawView;
715         }
716     }
717 }
718 
719 
720 
721 
GetPageTabControl(void)722 TabControl* DrawViewShell::GetPageTabControl (void)
723 {
724     return &maTabControl;
725 }
726 
727 
728 
729 
GetLayerTabControl(void)730 LayerTabBar* DrawViewShell::GetLayerTabControl (void)
731 {
732     return mpLayerTabBar.get();
733 }
734 
735 
736 
737 
GetTabLayerCount(void) const738 int DrawViewShell::GetTabLayerCount (void) const
739 {
740     const LayerTabBar* pBar
741         = const_cast<DrawViewShell*>(this)->GetLayerTabControl ();
742     if (pBar != NULL)
743         return pBar->GetPageCount();
744     else
745         return 0;
746 }
747 
748 
749 } // end of namespace sd
750