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