|  | /************************************************************** | 
|  | * | 
|  | * Licensed to the Apache Software Foundation (ASF) under one | 
|  | * or more contributor license agreements.  See the NOTICE file | 
|  | * distributed with this work for additional information | 
|  | * regarding copyright ownership.  The ASF licenses this file | 
|  | * to you under the Apache License, Version 2.0 (the | 
|  | * "License"); you may not use this file except in compliance | 
|  | * with the License.  You may obtain a copy of the License at | 
|  | * | 
|  | *   http://www.apache.org/licenses/LICENSE-2.0 | 
|  | * | 
|  | * Unless required by applicable law or agreed to in writing, | 
|  | * software distributed under the License is distributed on an | 
|  | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | 
|  | * KIND, either express or implied.  See the License for the | 
|  | * specific language governing permissions and limitations | 
|  | * under the License. | 
|  | * | 
|  | *************************************************************/ | 
|  |  | 
|  |  | 
|  |  | 
|  | // MARKER(update_precomp.py): autogen include statement, do not remove | 
|  | #include "precompiled_sd.hxx" | 
|  |  | 
|  | #include "DrawViewShell.hxx" | 
|  | #include "PresentationViewShell.hxx" | 
|  | #include <editeng/outliner.hxx> | 
|  | #ifndef _SVXIDS_HXX | 
|  | #include <svx/svxids.hrc> | 
|  | #endif | 
|  | #include <sfx2/request.hxx> | 
|  | #include <sfx2/dispatch.hxx> | 
|  | #include <svx/svdpagv.hxx> | 
|  | #include <vcl/scrbar.hxx> | 
|  | #include <tools/poly.hxx> | 
|  | #include <svx/fmshell.hxx> | 
|  | #include <editeng/eeitem.hxx> | 
|  | #include <svtools/colorcfg.hxx> | 
|  | #include "AccessibleDrawDocumentView.hxx" | 
|  |  | 
|  | #include <sfx2/viewfrm.hxx> | 
|  | #include "LayerTabBar.hxx" | 
|  |  | 
|  | #include "strings.hrc" | 
|  | #include "res_bmp.hrc" | 
|  | #include "glob.hrc" | 
|  | #include "app.hrc" | 
|  | #include "helpids.h" | 
|  | #include "optsitem.hxx" | 
|  | #include "app.hxx" | 
|  | #include "FrameView.hxx" | 
|  | #include "sdattr.hxx" | 
|  | #include "futext.hxx" | 
|  | #include "sdpage.hxx" | 
|  | #include "stlpool.hxx" | 
|  | #include "prntopts.hxx" | 
|  | #include "sdresid.hxx" | 
|  | #include "Window.hxx" | 
|  | #include "drawview.hxx" | 
|  | #include "drawdoc.hxx" | 
|  | #include "DrawDocShell.hxx" | 
|  | #include "Outliner.hxx" | 
|  | #include "Client.hxx" | 
|  | #include "slideshow.hxx" | 
|  | #include "unokywds.hxx" | 
|  | #include "SdUnoDrawView.hxx" | 
|  | #include "ViewShellBase.hxx" | 
|  | #include "FormShellManager.hxx" | 
|  | #include "LayerDialogContent.hxx" | 
|  | #include "DrawController.hxx" | 
|  |  | 
|  | namespace sd { | 
|  |  | 
|  | static const int TABCONTROL_INITIAL_SIZE = 350; | 
|  | static const int PAPER_SHADOW_EXT_PIXEL = 2; | 
|  |  | 
|  |  | 
|  | /************************************************************************* | 
|  | |* | 
|  | |* Wird gerufen, wenn sich das Model aendert | 
|  | |* | 
|  | \************************************************************************/ | 
|  |  | 
|  | void DrawViewShell::LazyReactOnObjectChanges() | 
|  | { | 
|  | Invalidate(); | 
|  | // Damit der Navigator auch einen aktuellen Status bekommt | 
|  | GetViewFrame()->GetBindings().Invalidate( SID_NAVIGATOR_STATE, true, false ); | 
|  |  | 
|  | //Update3DWindow(); | 
|  | SfxBoolItem aItem( SID_3D_STATE, true ); | 
|  | GetViewFrame()->GetDispatcher()->Execute( | 
|  | SID_3D_STATE, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD, &aItem, 0L ); | 
|  |  | 
|  | // jetzt den von der Drawing Engine neu erzeugten TextEditOutliner | 
|  | // initialisieren | 
|  | ::Outliner* pOutliner 	  = mpDrawView->GetTextEditOutliner(); | 
|  | if (pOutliner) | 
|  | { | 
|  | SfxStyleSheetPool* pSPool = (SfxStyleSheetPool*) GetDocSh()->GetStyleSheetPool(); | 
|  | pOutliner->SetStyleSheetPool(pSPool); | 
|  | } | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | void DrawViewShell::Resize (void) | 
|  | { | 
|  | ViewShell::Resize(); | 
|  |  | 
|  | if ( GetDocSh()->GetCreateMode() == SFX_CREATE_MODE_EMBEDDED ) | 
|  | { | 
|  | const Rectangle aVisArea(GetDocSh()->GetVisArea(ASPECT_CONTENT)); | 
|  | const basegfx::B2DRange aVisRange(aVisArea.Left(), aVisArea.Top(), aVisArea.Right(), aVisArea.Bottom()); | 
|  |  | 
|  | SetZoomRange(aVisRange); | 
|  | } | 
|  |  | 
|  | rtl::Reference< sd::SlideShow > xSlideshow( SlideShow::GetSlideShow( GetViewShellBase() ) ); | 
|  | if( xSlideshow.is() && xSlideshow->isRunning() && !xSlideshow->isFullScreen() ) | 
|  | { | 
|  | xSlideshow->resize(maViewSize); | 
|  | } | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | void DrawViewShell::ArrangeGUIElements (void) | 
|  | { | 
|  | // Retrieve the current size (thickness) of the scroll bars.  That is | 
|  | // the width of the vertical and the height of the horizontal scroll | 
|  | // bar. | 
|  | int nScrollBarSize = | 
|  | GetParentWindow()->GetSettings().GetStyleSettings().GetScrollBarSize(); | 
|  | maScrBarWH = Size (nScrollBarSize, nScrollBarSize); | 
|  |  | 
|  | ViewShell::ArrangeGUIElements (); | 
|  | maTabControl.Hide(); | 
|  |  | 
|  | OSL_ASSERT (GetViewShell()!=NULL); | 
|  | Client* pIPClient = static_cast<Client*>(GetViewShell()->GetIPClient()); | 
|  | bool bClientActive = false; | 
|  | if ( pIPClient && pIPClient->IsObjectInPlaceActive() ) | 
|  | bClientActive = true; | 
|  |  | 
|  | bool bInPlaceActive = GetViewFrame()->GetFrame().IsInPlace(); | 
|  |  | 
|  | if ( mbZoomOnPage && !bInPlaceActive && !bClientActive ) | 
|  | { | 
|  | // bei Split immer erstes Fenster resizen | 
|  | //af pWindow = mpContentWindow.get(); | 
|  | SfxRequest aReq(SID_SIZE_PAGE, 0, GetDoc()->GetItemPool()); | 
|  | ExecuteSlot( aReq ); | 
|  | } | 
|  | } | 
|  |  | 
|  | /************************************************************************* | 
|  | |* | 
|  | |* Daten der FrameView auf die aktuelle View uebertragen | 
|  | |* | 
|  | \************************************************************************/ | 
|  |  | 
|  | void DrawViewShell::ReadFrameViewData(FrameView* pView) | 
|  | { | 
|  | ModifyGuard aGuard( GetDoc() ); | 
|  |  | 
|  | // Diese Option wird am Model eingestellt | 
|  | GetDoc()->SetPickThroughTransparentTextFrames( | 
|  | SD_MOD()->GetSdOptions(GetDoc()->GetDocumentType())->IsPickThrough()); | 
|  |  | 
|  | // Initialisierungen der Zeichen-(Bildschirm-)Attribute | 
|  | if (HasRuler() != pView->HasRuler()) | 
|  | SetRuler( pView->HasRuler() ); | 
|  |  | 
|  | if (mpDrawView->GetGridCoarse() != pView->GetGridCoarse()) | 
|  | mpDrawView->SetGridCoarse( pView->GetGridCoarse() ); | 
|  |  | 
|  | if (mpDrawView->GetGridFine() != pView->GetGridFine()) | 
|  | mpDrawView->SetGridFine( pView->GetGridFine() ); | 
|  |  | 
|  | if (!basegfx::fTools::equal(mpDrawView->GetSnapGridWidthX(), pView->GetSnapGridWidthX()) || !basegfx::fTools::equal(mpDrawView->GetSnapGridWidthY(), pView->GetSnapGridWidthY())) | 
|  | mpDrawView->SetSnapGridWidth(pView->GetSnapGridWidthX(), pView->GetSnapGridWidthY()); | 
|  |  | 
|  | if (mpDrawView->IsGridVisible() != pView->IsGridVisible()) | 
|  | mpDrawView->SetGridVisible( pView->IsGridVisible() ); | 
|  |  | 
|  | if (mpDrawView->IsGridFront() != pView->IsGridFront()) | 
|  | mpDrawView->SetGridFront( pView->IsGridFront() ); | 
|  |  | 
|  | if (mpDrawView->GetSnapAngle() != pView->GetSnapAngle()) | 
|  | mpDrawView->SetSnapAngle( pView->GetSnapAngle() ); | 
|  |  | 
|  | if (mpDrawView->IsGridSnap() !=  pView->IsGridSnap() ) | 
|  | mpDrawView->SetGridSnap( pView->IsGridSnap() ); | 
|  |  | 
|  | if (mpDrawView->IsBorderSnap() !=  pView->IsBorderSnap() ) | 
|  | mpDrawView->SetBorderSnap( pView->IsBorderSnap() ); | 
|  |  | 
|  | if (mpDrawView->IsHelplineSnap() !=  pView->IsHelplineSnap() ) | 
|  | mpDrawView->SetHelplineSnap( pView->IsHelplineSnap() ); | 
|  |  | 
|  | if (mpDrawView->IsOFrameSnap() !=  pView->IsOFrameSnap() ) | 
|  | mpDrawView->SetOFrameSnap( pView->IsOFrameSnap() ); | 
|  |  | 
|  | if (mpDrawView->IsOPointSnap() !=  pView->IsOPointSnap() ) | 
|  | mpDrawView->SetOPointSnap( pView->IsOPointSnap() ); | 
|  |  | 
|  | if (mpDrawView->IsOConnectorSnap() !=  pView->IsOConnectorSnap() ) | 
|  | mpDrawView->SetOConnectorSnap( pView->IsOConnectorSnap() ); | 
|  |  | 
|  | if (mpDrawView->IsHlplVisible() != pView->IsHlplVisible() ) | 
|  | mpDrawView->SetHlplVisible( pView->IsHlplVisible() ); | 
|  |  | 
|  | if (mpDrawView->IsDragStripes() != pView->IsDragStripes() ) | 
|  | mpDrawView->SetDragStripes( pView->IsDragStripes() ); | 
|  |  | 
|  | if (mpDrawView->IsPlusHandlesAlwaysVisible() != pView->IsPlusHandlesAlwaysVisible() ) | 
|  | mpDrawView->SetPlusHandlesAlwaysVisible( pView->IsPlusHandlesAlwaysVisible() ); | 
|  |  | 
|  | if (mpDrawView->GetDiscreteMagneticSnap() != pView->GetDiscreteMagneticSnap() ) | 
|  | mpDrawView->SetDiscreteMagneticSnap( pView->GetDiscreteMagneticSnap() ); | 
|  |  | 
|  | if (mpDrawView->IsMarkedHitMovesAlways() != pView->IsMarkedHitMovesAlways() ) | 
|  | mpDrawView->SetMarkedHitMovesAlways( pView->IsMarkedHitMovesAlways() ); | 
|  |  | 
|  | if (mpDrawView->IsMoveOnlyDragging() != pView->IsMoveOnlyDragging() ) | 
|  | mpDrawView->SetMoveOnlyDragging( pView->IsMoveOnlyDragging() ); | 
|  |  | 
|  | //    mpDrawView->SetSlantButShear( pView->IsSlantButShear() ); | 
|  |  | 
|  | if (mpDrawView->IsNoDragXorPolys() != pView->IsNoDragXorPolys() ) | 
|  | mpDrawView->SetNoDragXorPolys( pView->IsNoDragXorPolys() ); | 
|  |  | 
|  | if (mpDrawView->IsCrookNoContortion() != pView->IsCrookNoContortion() ) | 
|  | mpDrawView->SetCrookNoContortion( pView->IsCrookNoContortion() ); | 
|  |  | 
|  | if (mpDrawView->IsAngleSnapEnabled() != pView->IsAngleSnapEnabled() ) | 
|  | mpDrawView->SetAngleSnapEnabled( pView->IsAngleSnapEnabled() ); | 
|  |  | 
|  | if (mpDrawView->IsBigOrthogonal() != pView->IsBigOrthogonal() ) | 
|  | mpDrawView->SetBigOrthogonal( pView->IsBigOrthogonal() ); | 
|  |  | 
|  | if (mpDrawView->IsOrthogonal() != pView->IsOrthogonal() ) | 
|  | mpDrawView->SetOrthogonal( pView->IsOrthogonal() ); | 
|  |  | 
|  | if (mpDrawView->GetEliminatePolyPointLimitAngle() != pView->GetEliminatePolyPointLimitAngle() ) | 
|  | mpDrawView->SetEliminatePolyPointLimitAngle( pView->GetEliminatePolyPointLimitAngle() ); | 
|  |  | 
|  | if (mpDrawView->IsEliminatePolyPoints() != pView->IsEliminatePolyPoints() ) | 
|  | mpDrawView->SetEliminatePolyPoints( pView->IsEliminatePolyPoints() ); | 
|  |  | 
|  | if (mpDrawView->IsSolidMarkHdl() != pView->IsSolidMarkHdl() ) | 
|  | mpDrawView->SetSolidMarkHdl( pView->IsSolidMarkHdl() ); | 
|  |  | 
|  | if (mpDrawView->IsSolidDragging() != pView->IsSolidDragging() ) | 
|  | mpDrawView->SetSolidDragging( pView->IsSolidDragging() ); | 
|  |  | 
|  | if (mpDrawView->IsQuickTextEditMode() != pView->IsQuickEdit()) | 
|  | mpDrawView->SetQuickTextEditMode( pView->IsQuickEdit() ); | 
|  |  | 
|  | // #i26631# | 
|  | if (mpDrawView->IsMasterPagePaintCaching() != pView->IsMasterPagePaintCaching()) | 
|  | mpDrawView->SetMasterPagePaintCaching( pView->IsMasterPagePaintCaching() ); | 
|  |  | 
|  | // Definition: | 
|  | //	grosse Handles:	9 | 
|  | //	kleine Handles:	7 | 
|  | sal_uInt16 nTmp = mpDrawView->GetMarkHdlSizePixel(); | 
|  | //DBG_ASSERT(nTmp != 7, "HandleSize != 7 oder 9"); | 
|  | if( nTmp == 9 && !pView->IsBigHandles() ) | 
|  | mpDrawView->SetMarkHdlSizePixel( 7 ); | 
|  | else if( nTmp == 7 && pView->IsBigHandles() ) | 
|  | mpDrawView->SetMarkHdlSizePixel( 9 ); | 
|  |  | 
|  |  | 
|  | SdrPageView* pPageView = mpDrawView->GetSdrPageView(); | 
|  | if (pPageView) | 
|  | { | 
|  | if ( pPageView->GetVisibleLayers() != pView->GetVisibleLayers() ) | 
|  | pPageView->SetVisibleLayers( pView->GetVisibleLayers() ); | 
|  |  | 
|  | if ( pPageView->GetPrintableLayers() != pView->GetPrintableLayers() ) | 
|  | pPageView->SetPrintableLayers( pView->GetPrintableLayers() ); | 
|  |  | 
|  | if ( pPageView->GetLockedLayers() != pView->GetLockedLayers() ) | 
|  | pPageView->SetLockedLayers( pView->GetLockedLayers() ); | 
|  |  | 
|  | if (mePageKind == PK_NOTES) | 
|  | { | 
|  | if (pPageView->GetHelpLines() != pView->GetNotesHelpLines()) | 
|  | pPageView->SetHelpLines( pView->GetNotesHelpLines() ); | 
|  | } | 
|  | else if (mePageKind == PK_HANDOUT) | 
|  | { | 
|  | if (pPageView->GetHelpLines() != pView->GetHandoutHelpLines()) | 
|  | pPageView->SetHelpLines( pView->GetHandoutHelpLines() ); | 
|  | } | 
|  | else | 
|  | { | 
|  | if (pPageView->GetHelpLines() != pView->GetStandardHelpLines()) | 
|  | pPageView->SetHelpLines( pView->GetStandardHelpLines() ); | 
|  | } | 
|  | } | 
|  |  | 
|  | if ( mpDrawView->GetActiveLayer() != pView->GetActiveLayer() ) | 
|  | mpDrawView->SetActiveLayer( pView->GetActiveLayer() ); | 
|  |  | 
|  | sal_uInt32 nSelectedPage = 0; | 
|  |  | 
|  | if (mePageKind != PK_HANDOUT) | 
|  | { | 
|  | nSelectedPage = pView->GetSelectedPage(); | 
|  | } | 
|  |  | 
|  | EditMode eNewEditMode = pView->GetViewShEditMode(mePageKind); | 
|  | bool bNewLayerMode = pView->IsLayerMode(); | 
|  |  | 
|  | if(IsLayerModeActive() && bNewLayerMode) | 
|  | { | 
|  | // #57936# Force mbIsLayerModeActive to false so that ChangeEditMode | 
|  | // below does something regarding LayerTabBar content refresh. That refresh | 
|  | // is only done when IsLayerModeActive changes. It needs to be done | 
|  | // since e.g. Layer vsisibility was changed above and this may need | 
|  | // a refresh to show the correct graphical representation | 
|  | mbIsLayerModeActive = false; | 
|  | } | 
|  |  | 
|  | ChangeEditMode(eNewEditMode, bNewLayerMode); | 
|  | SwitchPage(nSelectedPage); | 
|  |  | 
|  | // DrawMode fuer 'Normales' Fenster wiederherstellen | 
|  | if(GetActiveWindow()->GetDrawMode() != pView->GetDrawMode()) | 
|  | GetActiveWindow()->SetDrawMode(pView->GetDrawMode()); | 
|  |  | 
|  | if ( mpDrawView->IsDesignMode() != pView->IsDesignMode() ) | 
|  | { | 
|  | SfxBoolItem aDesignModeItem( SID_FM_DESIGN_MODE, pView->IsDesignMode() ); | 
|  | GetViewFrame()->GetDispatcher()->Execute( SID_FM_DESIGN_MODE, SFX_CALLMODE_SYNCHRON | SFX_CALLMODE_RECORD, &aDesignModeItem, 0L ); | 
|  | } | 
|  |  | 
|  | // Muss am Ende gerufen werden, da ein WriteFrameViewData() ausgeloest wird | 
|  | if (mpDrawView->IsFrameHandles() != pView->IsFrameHandles() ) | 
|  | mpDrawView->SetFrameHandles( pView->IsFrameHandles() ); | 
|  | } | 
|  |  | 
|  | /************************************************************************* | 
|  | |* | 
|  | |* Daten der aktuellen View auf die FrameView uebertragen | 
|  | |* | 
|  | \************************************************************************/ | 
|  |  | 
|  | void DrawViewShell::WriteFrameViewData() | 
|  | { | 
|  | // Zeichen-(Bildschirm-)Attribute an FrameView merken | 
|  | mpFrameView->SetRuler( HasRuler() ); | 
|  | mpFrameView->SetGridCoarse( mpDrawView->GetGridCoarse() ); | 
|  | mpFrameView->SetGridFine( mpDrawView->GetGridFine() ); | 
|  | mpFrameView->SetSnapGridWidth(mpDrawView->GetSnapGridWidthX(), mpDrawView->GetSnapGridWidthY()); | 
|  | mpFrameView->SetGridVisible( mpDrawView->IsGridVisible() ); | 
|  | mpFrameView->SetGridFront( mpDrawView->IsGridFront() ); | 
|  | mpFrameView->SetSnapAngle( mpDrawView->GetSnapAngle() ); | 
|  | mpFrameView->SetGridSnap( mpDrawView->IsGridSnap() ); | 
|  | mpFrameView->SetBorderSnap( mpDrawView->IsBorderSnap() ); | 
|  | mpFrameView->SetHelplineSnap( mpDrawView->IsHelplineSnap() ); | 
|  | mpFrameView->SetOFrameSnap( mpDrawView->IsOFrameSnap() ); | 
|  | mpFrameView->SetOPointSnap( mpDrawView->IsOPointSnap() ); | 
|  | mpFrameView->SetOConnectorSnap( mpDrawView->IsOConnectorSnap() ); | 
|  | mpFrameView->SetHlplVisible( mpDrawView->IsHlplVisible() ); | 
|  | mpFrameView->SetDragStripes( mpDrawView->IsDragStripes() ); | 
|  | mpFrameView->SetPlusHandlesAlwaysVisible( mpDrawView->IsPlusHandlesAlwaysVisible() ); | 
|  | mpFrameView->SetFrameHandles( mpDrawView->IsFrameHandles() ); | 
|  | mpFrameView->SetMarkedHitMovesAlways( mpDrawView->IsMarkedHitMovesAlways() ); | 
|  | mpFrameView->SetMoveOnlyDragging( mpDrawView->IsMoveOnlyDragging() ); | 
|  | mpFrameView->SetNoDragXorPolys( mpDrawView->IsNoDragXorPolys() ); | 
|  | mpFrameView->SetCrookNoContortion( mpDrawView->IsCrookNoContortion() ); | 
|  | mpFrameView->SetBigOrthogonal( mpDrawView->IsBigOrthogonal() ); | 
|  | mpFrameView->SetEliminatePolyPointLimitAngle( mpDrawView->GetEliminatePolyPointLimitAngle() ); | 
|  | mpFrameView->SetEliminatePolyPoints( mpDrawView->IsEliminatePolyPoints() ); | 
|  |  | 
|  | mpFrameView->SetSolidMarkHdl( mpDrawView->IsSolidMarkHdl() ); | 
|  | mpFrameView->SetSolidDragging( mpDrawView->IsSolidDragging() ); | 
|  | mpFrameView->SetQuickEdit( mpDrawView->IsQuickTextEditMode() ); | 
|  |  | 
|  | mpFrameView->SetDesignMode( mpDrawView->IsDesignMode() ); | 
|  |  | 
|  | Size aVisSizePixel = GetActiveWindow()->GetOutputSizePixel(); | 
|  | Rectangle aVisArea = GetActiveWindow()->PixelToLogic( Rectangle( Point(0,0), aVisSizePixel) ); | 
|  | mpFrameView->SetVisArea(aVisArea); | 
|  |  | 
|  | if( mePageKind == PK_HANDOUT ) | 
|  | mpFrameView->SetSelectedPage(0); | 
|  | else | 
|  | { | 
|  | mpFrameView->SetSelectedPage( maTabControl.GetCurPageId() - 1 ); | 
|  | } | 
|  |  | 
|  | mpFrameView->SetViewShEditMode(meEditMode, mePageKind); | 
|  | mpFrameView->SetLayerMode(IsLayerModeActive()); | 
|  |  | 
|  | SdrPageView* pPageView = mpDrawView->GetSdrPageView(); | 
|  |  | 
|  | if (pPageView) | 
|  | { | 
|  | if ( mpFrameView->GetVisibleLayers() != pPageView->GetVisibleLayers() ) | 
|  | mpFrameView->SetVisibleLayers( pPageView->GetVisibleLayers() ); | 
|  |  | 
|  | if ( mpFrameView->GetPrintableLayers() != pPageView->GetPrintableLayers() ) | 
|  | mpFrameView->SetPrintableLayers( pPageView->GetPrintableLayers() ); | 
|  |  | 
|  | if ( mpFrameView->GetLockedLayers() != pPageView->GetLockedLayers() ) | 
|  | mpFrameView->SetLockedLayers( pPageView->GetLockedLayers() ); | 
|  |  | 
|  | if (mePageKind == PK_NOTES) | 
|  | { | 
|  | mpFrameView->SetNotesHelpLines( pPageView->GetHelpLines() ); | 
|  | } | 
|  | else if (mePageKind == PK_HANDOUT) | 
|  | { | 
|  | mpFrameView->SetHandoutHelpLines( pPageView->GetHelpLines() ); | 
|  | } | 
|  | else | 
|  | { | 
|  | mpFrameView->SetStandardHelpLines( pPageView->GetHelpLines() ); | 
|  | } | 
|  | } | 
|  |  | 
|  | if ( mpFrameView->GetActiveLayer() != mpDrawView->GetActiveLayer() ) | 
|  | mpFrameView->SetActiveLayer( mpDrawView->GetActiveLayer() ); | 
|  |  | 
|  | // DrawMode fuer 'Normales' Fenster merken | 
|  | if(mpFrameView->GetDrawMode() != GetActiveWindow()->GetDrawMode()) | 
|  | mpFrameView->SetDrawMode(GetActiveWindow()->GetDrawMode()); | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | /************************************************************************* | 
|  | |* | 
|  | |* PrePaint-Method | 
|  | |* | 
|  | \************************************************************************/ | 
|  |  | 
|  | void DrawViewShell::PrePaint() | 
|  | { | 
|  | mpDrawView->PrePaint(); | 
|  | } | 
|  |  | 
|  | /************************************************************************* | 
|  | |* | 
|  | |* Paint-Methode: das Ereignis wird vom Fenster pWin an | 
|  | |* die Viewshell und die aktuelle Funktion weitergeleitet | 
|  | |* | 
|  | |* Anmerkung: pWin==NULL, wenn Paint() vom ShowWindow gerufen wird! | 
|  | |* | 
|  | \************************************************************************/ | 
|  |  | 
|  | void DrawViewShell::Paint(const Rectangle& rRect, ::sd::Window* pWin) | 
|  | { | 
|  | // #103834# Fill var FillColor here to have it available on later call | 
|  | svtools::ColorConfig aColorConfig; | 
|  | Color aFillColor; | 
|  |  | 
|  | if(DOCUMENT_TYPE_IMPRESS == GetDoc()->GetDocumentType()) | 
|  | { | 
|  | aFillColor = Color( aColorConfig.GetColorValue( svtools::APPBACKGROUND ).nColor ); | 
|  | } | 
|  | else | 
|  | { | 
|  | aFillColor = Color( aColorConfig.GetColorValue( svtools::DOCCOLOR ).nColor ); | 
|  | } | 
|  |  | 
|  | /* #97517#	This is done before each text edit, so why not do it before every paint. | 
|  | The default language is only used if the outliner only contains one | 
|  | character in a symbol font */ | 
|  | GetDoc()->GetDrawOutliner( NULL ).SetDefaultLanguage( GetDoc()->GetLanguage( EE_CHAR_LANGUAGE ) ); | 
|  |  | 
|  | // #103834# Set Application Background color for usage in SdrPaintView(s) | 
|  | mpDrawView->SetApplicationBackgroundColor(aFillColor); | 
|  |  | 
|  | /* #97517#	This is done before each text edit, so why not do it before every paint. | 
|  | The default language is only used if the outliner only contains one | 
|  | character in a symbol font */ | 
|  | GetDoc()->GetDrawOutliner( NULL ).SetDefaultLanguage( Application::GetSettings().GetLanguage() ); | 
|  |  | 
|  | mpDrawView->CompleteRedraw( pWin, Region( rRect ) ); | 
|  |  | 
|  | if( pWin ) | 
|  | { | 
|  | if( GetDocSh()->GetDocShellFunction().is() ) | 
|  | GetDocSh()->GetDocShellFunction()->Paint( rRect, pWin ); | 
|  |  | 
|  | if( HasCurrentFunction() ) | 
|  | GetCurrentFunction()->Paint( rRect, pWin ); | 
|  | } | 
|  | } | 
|  |  | 
|  | /************************************************************************* | 
|  | |* | 
|  | |* Zoom-Faktor fuer InPlace einstellen | 
|  | |* | 
|  | \************************************************************************/ | 
|  |  | 
|  | void DrawViewShell::SetZoomFactor(const Fraction& rZoomX, const Fraction& rZoomY) | 
|  | { | 
|  | ViewShell::SetZoomFactor(rZoomX, rZoomY); | 
|  | mbZoomOnPage = false; | 
|  | const basegfx::B2DPoint aOrigin(GetActiveWindow()->GetViewOrigin()); | 
|  | GetActiveWindow()->SetWinViewPos(aOrigin); | 
|  | } | 
|  |  | 
|  | /************************************************************************* | 
|  | |* | 
|  | |* Optimale Groesse zurueckgeben | 
|  | |* | 
|  | \************************************************************************/ | 
|  |  | 
|  | Size DrawViewShell::GetOptimalSizePixel() const | 
|  | { | 
|  | Size aSize; | 
|  |  | 
|  | SdrPageView* pPV = mpDrawView->GetSdrPageView(); | 
|  | if (pPV) | 
|  | { | 
|  | SdPage& rPage = (SdPage&) pPV->getSdrPageFromSdrPageView(); | 
|  |  | 
|  | if (!mbZoomOnPage) | 
|  | { | 
|  | // Gegenwaertigen MapMode beruecksichtigen | 
|  | const basegfx::B2DVector aDiscreteScale(GetActiveWindow()->GetInverseViewTransformation() * rPage.GetPageScale()); | 
|  |  | 
|  | aSize = Size(basegfx::fround(aDiscreteScale.getX()), basegfx::fround(aDiscreteScale.getY())); | 
|  | } | 
|  | else | 
|  | { | 
|  | // 1:1 Darstellung | 
|  | const MapMode aMapMode(MAP_100TH_MM); | 
|  | const basegfx::B2DVector aDiscreteScale(GetActiveWindow()->GetInverseViewTransformation(aMapMode) * rPage.GetPageScale()); | 
|  |  | 
|  | aSize = Size(basegfx::fround(aDiscreteScale.getX()), basegfx::fround(aDiscreteScale.getY())); | 
|  | const_cast< DrawViewShell* >(this)->mbZoomOnPage = true; | 
|  | } | 
|  | } | 
|  |  | 
|  | return(aSize); | 
|  | } | 
|  |  | 
|  |  | 
|  | /************************************************************************* | 
|  | |* | 
|  | |* Seite wird gehided | 
|  | |* | 
|  | \************************************************************************/ | 
|  |  | 
|  | void DrawViewShell::HidePage() | 
|  | { | 
|  | FmFormShell* pFormShell = GetViewShellBase().GetFormShellManager()->GetFormShell(); | 
|  | if (pFormShell != NULL) | 
|  | pFormShell->PrepareClose (false); | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  | void DrawViewShell::WriteUserDataSequence ( ::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue >& rSequence, sal_Bool bBrowse ) | 
|  | { | 
|  | WriteFrameViewData(); | 
|  |  | 
|  | ViewShell::WriteUserDataSequence( rSequence, bBrowse ); | 
|  |  | 
|  | const sal_Int32 nIndex = rSequence.getLength(); | 
|  | rSequence.realloc( nIndex + 1 ); | 
|  | rSequence[nIndex].Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( sUNO_View_ZoomOnPage ) ); | 
|  | rSequence[nIndex].Value <<= (sal_Bool)mbZoomOnPage; | 
|  | } | 
|  |  | 
|  | void DrawViewShell::ReadUserDataSequence ( const ::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue >& rSequence, sal_Bool bBrowse ) | 
|  | { | 
|  | WriteFrameViewData(); | 
|  |  | 
|  | ViewShell::ReadUserDataSequence( rSequence, bBrowse ); | 
|  |  | 
|  | const sal_Int32 nLength = rSequence.getLength(); | 
|  | const com::sun::star::beans::PropertyValue *pValue = rSequence.getConstArray(); | 
|  | for (sal_Int16 i = 0 ; i < nLength; i++, pValue++ ) | 
|  | { | 
|  | if (pValue->Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( sUNO_View_ZoomOnPage ) ) ) | 
|  | { | 
|  | sal_Bool bZoomPage = sal_False; | 
|  | if( pValue->Value >>= bZoomPage ) | 
|  | { | 
|  | mbZoomOnPage = bZoomPage; | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | if( mpFrameView->GetPageKind() != mePageKind ) | 
|  | { | 
|  | mePageKind = mpFrameView->GetPageKind(); | 
|  |  | 
|  | if (mePageKind == PK_NOTES) | 
|  | { | 
|  | SetHelpId( SID_NOTESMODE ); | 
|  | GetActiveWindow()->SetHelpId( CMD_SID_NOTESMODE ); | 
|  | GetActiveWindow()->SetUniqueId( CMD_SID_NOTESMODE ); | 
|  | } | 
|  | else if (mePageKind == PK_HANDOUT) | 
|  | { | 
|  | SetHelpId( SID_HANDOUTMODE ); | 
|  | GetActiveWindow()->SetHelpId( CMD_SID_HANDOUTMODE ); | 
|  | GetActiveWindow()->SetUniqueId( CMD_SID_HANDOUTMODE ); | 
|  | } | 
|  | else | 
|  | { | 
|  | SetHelpId( SD_IF_SDDRAWVIEWSHELL ); | 
|  | GetActiveWindow()->SetHelpId( HID_SDDRAWVIEWSHELL ); | 
|  | GetActiveWindow()->SetUniqueId( HID_SDDRAWVIEWSHELL ); | 
|  | } | 
|  | } | 
|  |  | 
|  | ReadFrameViewData( mpFrameView ); | 
|  |  | 
|  | if( !mbZoomOnPage ) | 
|  | { | 
|  | const Rectangle aVisArea( mpFrameView->GetVisArea() ); | 
|  |  | 
|  | if ( GetDocSh()->GetCreateMode() == SFX_CREATE_MODE_EMBEDDED ) | 
|  | { | 
|  | GetDocSh()->SetVisArea(aVisArea); | 
|  | } | 
|  |  | 
|  | VisAreaChanged(aVisArea); | 
|  |  | 
|  | ::sd::View* pView = GetView(); | 
|  |  | 
|  | if (pView) | 
|  | { | 
|  | pView->VisAreaChanged(GetActiveWindow()); | 
|  | } | 
|  |  | 
|  | const basegfx::B2DRange aVisRange(aVisArea.Left(), aVisArea.Top(), aVisArea.Right(), aVisArea.Bottom()); | 
|  | SetZoomRange(aVisRange); | 
|  | } | 
|  |  | 
|  | ChangeEditMode (meEditMode, ! IsLayerModeActive()); | 
|  | ChangeEditMode (meEditMode, ! IsLayerModeActive()); | 
|  | } | 
|  |  | 
|  | void DrawViewShell::VisAreaChanged(const Rectangle& rRect) | 
|  | { | 
|  | ViewShell::VisAreaChanged( rRect ); | 
|  |  | 
|  | DrawController& rController = GetViewShellBase().GetDrawController(); | 
|  | rController.FireVisAreaChanged (rRect); | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | /** If there is a valid controller then create a new instance of | 
|  | <type>AccessibleDrawDocumentView</type>.  Otherwise delegate this call | 
|  | to the base class to return a default object (probably an empty | 
|  | reference). | 
|  | */ | 
|  | ::com::sun::star::uno::Reference< | 
|  | ::com::sun::star::accessibility::XAccessible> | 
|  | DrawViewShell::CreateAccessibleDocumentView (::sd::Window* pWindow) | 
|  | { | 
|  | if (GetViewShellBase().GetController() != NULL) | 
|  | { | 
|  | accessibility::AccessibleDrawDocumentView* pDocumentView = | 
|  | new accessibility::AccessibleDrawDocumentView ( | 
|  | pWindow, | 
|  | this, | 
|  | GetViewShellBase().GetController(), | 
|  | pWindow->GetAccessibleParentWindow()->GetAccessible()); | 
|  | pDocumentView->Init(); | 
|  | return ::com::sun::star::uno::Reference< | 
|  | ::com::sun::star::accessibility::XAccessible> | 
|  | (static_cast< ::com::sun::star::uno::XWeak*>(pDocumentView), | 
|  | ::com::sun::star::uno::UNO_QUERY); | 
|  | } | 
|  | else | 
|  | { | 
|  | OSL_TRACE ("DrawViewShell::CreateAccessibleDocumentView: no controller"); | 
|  | return ViewShell::CreateAccessibleDocumentView (pWindow); | 
|  | } | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | int DrawViewShell::GetActiveTabLayerIndex (void) const | 
|  | { | 
|  | const LayerTabBar* pBar | 
|  | = const_cast<DrawViewShell*>(this)->GetLayerTabControl (); | 
|  | if (pBar != NULL) | 
|  | return pBar->GetPagePos (pBar->GetCurPageId()); | 
|  | else | 
|  | return -1; | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | void DrawViewShell::SetActiveTabLayerIndex (int nIndex) | 
|  | { | 
|  | LayerTabBar* pBar = GetLayerTabControl (); | 
|  | if (pBar != NULL) | 
|  | { | 
|  | // Ignore invalid indices silently. | 
|  | if (nIndex>=0 && nIndex<pBar->GetPageCount()) | 
|  | { | 
|  | // Tell the draw view and the tab control of the new active layer. | 
|  | mpDrawView->SetActiveLayer (pBar->GetPageText (pBar->GetPageId ((sal_uInt16)nIndex))); | 
|  | pBar->SetCurPageId(static_cast< sal_uInt16 >(pBar->GetPageId(nIndex))); | 
|  | SdUnoDrawView* pUnoDrawView = new SdUnoDrawView ( | 
|  | GetViewShellBase().GetDrawController(), | 
|  | *this, | 
|  | *GetView()); | 
|  | ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XLayer> rLayer = pUnoDrawView->getActiveLayer(); | 
|  | GetViewShellBase().GetDrawController().fireChangeLayer( &rLayer ); | 
|  | delete pUnoDrawView; | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | TabControl* DrawViewShell::GetPageTabControl (void) | 
|  | { | 
|  | return &maTabControl; | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | LayerTabBar* DrawViewShell::GetLayerTabControl (void) | 
|  | { | 
|  | return mpLayerTabBar.get(); | 
|  | } | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | int DrawViewShell::GetTabLayerCount (void) const | 
|  | { | 
|  | const LayerTabBar* pBar | 
|  | = const_cast<DrawViewShell*>(this)->GetLayerTabControl (); | 
|  | if (pBar != NULL) | 
|  | return pBar->GetPageCount(); | 
|  | else | 
|  | return 0; | 
|  | } | 
|  |  | 
|  |  | 
|  | } // end of namespace sd |