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