diff options
Diffstat (limited to 'sd/source/ui/view/drviews5.cxx')
-rwxr-xr-x | sd/source/ui/view/drviews5.cxx | 746 |
1 files changed, 746 insertions, 0 deletions
diff --git a/sd/source/ui/view/drviews5.cxx b/sd/source/ui/view/drviews5.cxx new file mode 100755 index 000000000000..433a4e4fa6c1 --- /dev/null +++ b/sd/source/ui/view/drviews5.cxx @@ -0,0 +1,746 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 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::ModelHasChanged() +{ + 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 ) + { + SetZoomRect( GetDocSh()->GetVisArea(ASPECT_CONTENT) ); + } + + 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); + + Point aHPos = maViewPos; + aHPos.Y() += maViewSize.Height(); + + + 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 (mpDrawView->GetSnapGridWidthX() != pView->GetSnapGridWidthX() || 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->IsBordSnap() != pView->IsBordSnap() ) + mpDrawView->SetBordSnap( pView->IsBordSnap() ); + + if (mpDrawView->IsHlplSnap() != pView->IsHlplSnap() ) + mpDrawView->SetHlplSnap( pView->IsHlplSnap() ); + + if (mpDrawView->IsOFrmSnap() != pView->IsOFrmSnap() ) + mpDrawView->SetOFrmSnap( pView->IsOFrmSnap() ); + + if (mpDrawView->IsOPntSnap() != pView->IsOPntSnap() ) + mpDrawView->SetOPntSnap( pView->IsOPntSnap() ); + + if (mpDrawView->IsOConSnap() != pView->IsOConSnap() ) + mpDrawView->SetOConSnap( pView->IsOConSnap() ); + + 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->GetSnapMagneticPixel() != pView->GetSnapMagneticPixel() ) + mpDrawView->SetSnapMagneticPixel( pView->GetSnapMagneticPixel() ); + + 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->IsBigOrtho() != pView->IsBigOrtho() ) + mpDrawView->SetBigOrtho( pView->IsBigOrtho() ); + + if (mpDrawView->IsOrtho() != pView->IsOrtho() ) + mpDrawView->SetOrtho( pView->IsOrtho() ); + + 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 + USHORT 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() ); + + USHORT nSelectedPage = 0; + + if (mePageKind != PK_HANDOUT) + { + nSelectedPage = pView->GetSelectedPage(); + } + + EditMode eNewEditMode = pView->GetViewShEditMode(mePageKind); + BOOL bNewLayerMode = pView->IsLayerMode(); + 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->IsFrameDragSingles() != pView->IsFrameDragSingles() ) + mpDrawView->SetFrameDragSingles( pView->IsFrameDragSingles() ); +} + +/************************************************************************* +|* +|* 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->SetBordSnap( mpDrawView->IsBordSnap() ); + mpFrameView->SetHlplSnap( mpDrawView->IsHlplSnap() ); + mpFrameView->SetOFrmSnap( mpDrawView->IsOFrmSnap() ); + mpFrameView->SetOPntSnap( mpDrawView->IsOPntSnap() ); + mpFrameView->SetOConSnap( mpDrawView->IsOConSnap() ); + mpFrameView->SetHlplVisible( mpDrawView->IsHlplVisible() ); + mpFrameView->SetDragStripes( mpDrawView->IsDragStripes() ); + mpFrameView->SetPlusHandlesAlwaysVisible( mpDrawView->IsPlusHandlesAlwaysVisible() ); + mpFrameView->SetFrameDragSingles( mpDrawView->IsFrameDragSingles() ); + mpFrameView->SetMarkedHitMovesAlways( mpDrawView->IsMarkedHitMovesAlways() ); + mpFrameView->SetMoveOnlyDragging( mpDrawView->IsMoveOnlyDragging() ); + mpFrameView->SetNoDragXorPolys( mpDrawView->IsNoDragXorPolys() ); + mpFrameView->SetCrookNoContortion( mpDrawView->IsCrookNoContortion() ); + mpFrameView->SetBigOrtho( mpDrawView->IsBigOrtho() ); + 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; + Point aOrigin = GetActiveWindow()->GetViewOrigin(); + GetActiveWindow()->SetWinViewPos(aOrigin); +} + +/************************************************************************* +|* +|* Optimale Groesse zurueckgeben +|* +\************************************************************************/ + +Size DrawViewShell::GetOptimalSizePixel() const +{ + Size aSize; + + SdrPageView* pPV = mpDrawView->GetSdrPageView(); + if (pPV) + { + SdPage* pPage = (SdPage*) pPV->GetPage(); + + if (pPage) + { + if (!mbZoomOnPage) + { + // Gegenwaertigen MapMode beruecksichtigen + aSize = GetActiveWindow()->LogicToPixel( pPage->GetSize() ); + } + else + { + // 1:1 Darstellung + MapMode aMapMode(MAP_100TH_MM); + aSize = GetActiveWindow()->LogicToPixel( pPage->GetSize(), aMapMode ); + 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()); + } + + SetZoomRect(aVisArea); + } + + 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 ((USHORT)nIndex))); + pBar->SetCurPageId (pBar->GetPageId ((USHORT)nIndex)); + } + } +} + + + + +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 |