diff options
Diffstat (limited to 'sd/source/ui/view/ViewShellBase.cxx')
-rw-r--r-- | sd/source/ui/view/ViewShellBase.cxx | 1719 |
1 files changed, 0 insertions, 1719 deletions
diff --git a/sd/source/ui/view/ViewShellBase.cxx b/sd/source/ui/view/ViewShellBase.cxx deleted file mode 100644 index 1731ff8e9..000000000 --- a/sd/source/ui/view/ViewShellBase.cxx +++ /dev/null @@ -1,1719 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * 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 <comphelper/processfactory.hxx> - -#include <com/sun/star/frame/UnknownModuleException.hpp> -#include <com/sun/star/frame/XModuleManager.hpp> -#include <com/sun/star/container/XNameAccess.hpp> -#include <com/sun/star/beans/PropertyValue.hpp> - -#include "ViewShellBase.hxx" -#include <algorithm> -#include "EventMultiplexer.hxx" -#include "cache/SlsPageCacheManager.hxx" -#include "sdresid.hxx" -#include "app.hrc" -#include "strings.hrc" -#include "glob.hrc" -#include "unokywds.hxx" -#include <svx/svxids.hrc> -#include "DrawDocShell.hxx" -#include <sfx2/app.hxx> -#include "PaneChildWindows.hxx" -#include "NotesChildWindow.hxx" -#include "ViewShellManager.hxx" -#include "DrawController.hxx" -#include "UpdateLockManager.hxx" -#include "FrameView.hxx" -#include "ViewTabBar.hxx" -#include <sfx2/event.hxx> -#include "drawdoc.hxx" -#include <sfx2/dispatch.hxx> -#include <sfx2/request.hxx> -#include <sfx2/printer.hxx> -#include "DrawViewShell.hxx" -#include "GraphicViewShell.hxx" -#include "OutlineViewShell.hxx" -#include "SlideSorterViewShell.hxx" -#include "PresentationViewShell.hxx" -#include "FormShellManager.hxx" -#include "ToolBarManager.hxx" -#include "taskpane/PanelId.hxx" -#include "Window.hxx" -#include "framework/ConfigurationController.hxx" -#include "DocumentRenderer.hxx" - -#include <com/sun/star/frame/XFrame.hpp> -#include <com/sun/star/awt/XWindow.hpp> -#include <com/sun/star/frame/XController.hpp> -#include <com/sun/star/frame/XModel.hpp> -#include <com/sun/star/document/XViewDataSupplier.hpp> -#include <com/sun/star/container/XIndexAccess.hpp> -#include <com/sun/star/drawing/XDrawPagesSupplier.hpp> -#include <com/sun/star/drawing/XMasterPagesSupplier.hpp> -#include <com/sun/star/drawing/framework/XControllerManager.hpp> -#include <com/sun/star/drawing/framework/XConfigurationController.hpp> -#include <com/sun/star/drawing/framework/ResourceId.hpp> -#include "framework/FrameworkHelper.hxx" - -#include <rtl/ref.hxx> -#include <sfx2/msg.hxx> -#include <sfx2/objface.hxx> -#include <sfx2/viewfrm.hxx> -#include <svl/whiter.hxx> -#include <comphelper/processfactory.hxx> -#include <vcl/msgbox.hxx> -#include <tools/diagnose_ex.h> - -#include "fubullet.hxx" - -using namespace sd; -#define ViewShellBase -#include "sdslots.hxx" - -using ::sd::framework::FrameworkHelper; -using ::rtl::OUString; -using namespace com::sun::star::uno; -using namespace com::sun::star::frame; -using namespace com::sun::star::container; -using namespace com::sun::star::lang; -using namespace com::sun::star::beans; - -namespace { - -class CurrentPageSetter -{ -public: - CurrentPageSetter (ViewShellBase& rBase); - void operator () (bool); -private: - ViewShellBase& mrBase; -}; - -} // end of anonymous namespace - - -using namespace ::com::sun::star; -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::drawing::framework; -using ::sd::framework::FrameworkHelper; - -namespace sd { - -class ViewShellBase::Implementation -{ -public: - /** Main controller of the view shell. During the switching from one - stacked shell to another this pointer may be NULL. - */ - ::rtl::Reference<DrawController> mpController; - - /** The view tab bar is the control for switching between different - views in one pane. - */ - ::rtl::Reference<ViewTabBar> mpViewTabBar; - - // contains the complete area of the current view relative to the frame window - Rectangle maClientArea; - - // This is set to true when PrepareClose() is called. - bool mbIsClosing; - - /** The view window is the parent of all UI elements that belong to the - view or ViewShell. This comprises the rulers, the scroll bars, and - the content window. - It does not include the ViewTabBar. - */ - ::boost::scoped_ptr< ::Window> mpViewWindow; - - ::boost::shared_ptr<ToolBarManager> mpToolBarManager; - - ::boost::shared_ptr<ViewShellManager> mpViewShellManager; - - ::boost::shared_ptr<tools::EventMultiplexer> mpEventMultiplexer; - - ::boost::shared_ptr<UpdateLockManager> mpUpdateLockManager; - - ::boost::shared_ptr<FormShellManager> mpFormShellManager; - - Implementation (ViewShellBase& rBase); - ~Implementation (void); - - void LateInit (void); - - /** Show or hide the ViewTabBar. - @param bShow - When <TRUE/> then the ViewTabBar is shown, otherwise it is hidden. - */ - void ShowViewTabBar (bool bShow); - - /** Common code of ViewShellBase::OuterResizePixel() and - ViewShellBase::InnerResizePixel(). - */ - void ResizePixel ( - const Point& rOrigin, - const Size& rSize, - bool bOuterResize); - - /** Show or hide the specified pane. The visibility state is taken - fromthe given request. - @param rRequest - The request determines the new visibility state. The state can - either be toggled or be set to a given value. - @param rsPaneURL - This URL specifies the pane whose visibility state to set. - @param rsViewURL - When the pane becomes visible then this view URL specifies which - type of view to show in it. - */ - void SetPaneVisibility ( - const SfxRequest& rRequest, - const ::rtl::OUString& rsPaneURL, - const ::rtl::OUString& rsViewURL); - - void GetSlotState (SfxItemSet& rSet); - - void ProcessRestoreEditingViewSlot (void); - void ProcessTaskPaneSlot (SfxRequest& rRequest); - -private: - ViewShellBase& mrBase; - - /** Hold a reference to the page cache manager of the slide sorter in - order to ensure that it stays alive while the ViewShellBase is - alive. - */ - ::boost::shared_ptr<slidesorter::cache::PageCacheManager> mpPageCacheManager; -}; - - -namespace { -/** The only task of this window is to forward key presses to the content - window of the main view shell. With the key press it forwards the focus - so that it is not called very often. -*/ -class FocusForwardingWindow : public ::Window -{ -public: - FocusForwardingWindow (::Window& rParentWindow, ViewShellBase& rBase); - virtual ~FocusForwardingWindow (void); - virtual void KeyInput (const KeyEvent& rEvent); - virtual void Command (const CommandEvent& rEvent); - -private: - ViewShellBase& mrBase; -}; -} // end of anonymous namespace - - -//===== ViewShellBase ========================================================= - -TYPEINIT1(ViewShellBase, SfxViewShell); - -// We have to expand the SFX_IMPL_VIEWFACTORY macro to call LateInit() after a -// new ViewShellBase object has been constructed. - -SfxViewFactory* ViewShellBase::pFactory; -SfxViewShell* ViewShellBase::CreateInstance ( - SfxViewFrame *pFrame, SfxViewShell *pOldView) -{ - ViewShellBase* pBase = new ViewShellBase(pFrame, pOldView); - pBase->LateInit(OUString()); - return pBase; -} -void ViewShellBase::RegisterFactory( sal_uInt16 nPrio ) -{ - pFactory = new SfxViewFactory( - &CreateInstance,&InitFactory,nPrio,"Default"); - InitFactory(); -} -void ViewShellBase::InitFactory() -{ - SFX_VIEW_REGISTRATION(DrawDocShell); -} - - - -SFX_IMPL_INTERFACE(ViewShellBase, SfxViewShell, SdResId(STR_VIEWSHELLBASE)) -{ -} - - - - -ViewShellBase::ViewShellBase ( - SfxViewFrame* _pFrame, - SfxViewShell*) - : SfxViewShell (_pFrame, - SFX_VIEW_CAN_PRINT - | SFX_VIEW_HAS_PRINTOPTIONS), - maMutex(), - mpImpl(), - mpDocShell (NULL), - mpDocument (NULL) -{ - mpImpl.reset(new Implementation(*this)); - mpImpl->mpViewWindow.reset(new FocusForwardingWindow(_pFrame->GetWindow(),*this)); - mpImpl->mpViewWindow->SetBackground(Wallpaper()); - mpImpl->mpUpdateLockManager.reset(new UpdateLockManager(*this)); - - _pFrame->GetWindow().SetBackground(Wallpaper()); - - // Set up the members in the correct order. - if (GetViewFrame()->GetObjectShell()->ISA(DrawDocShell)) - mpDocShell = static_cast<DrawDocShell*>( - GetViewFrame()->GetObjectShell()); - if (mpDocShell != NULL) - mpDocument = mpDocShell->GetDoc(); - mpImpl->mpViewShellManager.reset(new ViewShellManager(*this)); - - SetWindow(mpImpl->mpViewWindow.get()); - - // Hide the window to avoid complaints from Sfx...SwitchViewShell... - _pFrame->GetWindow().Hide(); -} - - - - -/** In this destructor the order in which some of the members are destroyed - (and/or being prepared to being destroyed) is important. Change it only - when you know what you are doing. -*/ -ViewShellBase::~ViewShellBase (void) -{ - // Tell the controller that the ViewShellBase is not available anymore. - if (mpImpl->mpController.get() != NULL) - mpImpl->mpController->ReleaseViewShellBase(); - - // We have to hide the main window to prevent SFX complaining after a - // reload about it being already visible. - ViewShell* pShell = GetMainViewShell().get(); - if (pShell!=NULL - && pShell->GetActiveWindow()!=NULL - && pShell->GetActiveWindow()->GetParent()!=NULL) - { - pShell->GetActiveWindow()->GetParent()->Hide(); - } - - mpImpl->mpUpdateLockManager->Disable(); - mpImpl->mpToolBarManager->Shutdown(); - mpImpl->mpViewShellManager->Shutdown(); - - EndListening(*GetViewFrame()); - EndListening(*GetDocShell()); - - SetWindow(NULL); -} - - - - -void ViewShellBase::LateInit (const ::rtl::OUString& rsDefaultView) -{ - StartListening(*GetViewFrame(),sal_True); - StartListening(*GetDocShell(),sal_True); - mpImpl->LateInit(); - InitializeFramework(); - - mpImpl->mpEventMultiplexer.reset(new tools::EventMultiplexer (*this)); - - mpImpl->mpFormShellManager.reset(new FormShellManager(*this)); - - mpImpl->mpToolBarManager = ToolBarManager::Create( - *this, - mpImpl->mpEventMultiplexer, - mpImpl->mpViewShellManager); - - try - { - Reference<XControllerManager> xControllerManager (GetDrawController(), UNO_QUERY_THROW); - Reference<XConfigurationController> xConfigurationController ( - xControllerManager->getConfigurationController()); - if (xConfigurationController.is()) - { - OUString sView (rsDefaultView); - if (sView.getLength() == 0) - sView = GetInitialViewShellType(); - - ::boost::shared_ptr<FrameworkHelper> pHelper (FrameworkHelper::Instance(*this)); - - // Create the resource ids for the center pane and view. - const Reference<drawing::framework::XResourceId> xCenterPaneId ( - pHelper->CreateResourceId(FrameworkHelper::msCenterPaneURL)); - const Reference<drawing::framework::XResourceId> xCenterViewId ( - pHelper->CreateResourceId(sView, xCenterPaneId)); - - // Request center pane and view. - xConfigurationController->requestResourceActivation(xCenterPaneId, ResourceActivationMode_ADD); - xConfigurationController->requestResourceActivation(xCenterViewId, ResourceActivationMode_REPLACE); - - // Process configuration events synchronously until the center view - // has been created. - sd::framework::ConfigurationController* pConfigurationController - = dynamic_cast<sd::framework::ConfigurationController*>(xConfigurationController.get()); - if (pConfigurationController != NULL) - { - while ( - ! pConfigurationController->getResource(xCenterViewId).is() - && pConfigurationController->hasPendingRequests()) - { - pConfigurationController->ProcessEvent(); - } - } - } - } - catch (const RuntimeException&) - { - } - - // AutoLayouts have to be ready. - GetDocument()->StopWorkStartupDelay(); - - UpdateBorder(); - - // Remember the type of the current main view shell in the frame view. - ViewShell* pViewShell = GetMainViewShell().get(); - if (pViewShell != NULL) - { - FrameView* pFrameView = pViewShell->GetFrameView(); - if (pFrameView != NULL) - pFrameView->SetViewShellTypeOnLoad(pViewShell->GetShellType()); - } -} - - - - -::boost::shared_ptr<ViewShellManager> ViewShellBase::GetViewShellManager (void) const -{ - return mpImpl->mpViewShellManager; -} - - - - -::boost::shared_ptr<ViewShell> ViewShellBase::GetMainViewShell (void) const -{ - ::boost::shared_ptr<ViewShell> pMainViewShell ( - framework::FrameworkHelper::Instance(*const_cast<ViewShellBase*>(this)) - ->GetViewShell(framework::FrameworkHelper::msCenterPaneURL)); - if (pMainViewShell.get() == NULL) - pMainViewShell = framework::FrameworkHelper::Instance(*const_cast<ViewShellBase*>(this)) - ->GetViewShell(framework::FrameworkHelper::msFullScreenPaneURL); - return pMainViewShell; -} - - - - -ViewShellBase* ViewShellBase::GetViewShellBase (SfxViewFrame* pViewFrame) -{ - ViewShellBase* pBase = NULL; - - if (pViewFrame != NULL) - { - // Get the view shell for the frame and cast it to - // sd::ViewShellBase. - SfxViewShell* pSfxViewShell = pViewFrame->GetViewShell(); - if (pSfxViewShell!=NULL && pSfxViewShell->ISA(::sd::ViewShellBase)) - pBase = static_cast<ViewShellBase*>(pSfxViewShell); - } - - return pBase; -} - - - - -DrawDocShell* ViewShellBase::GetDocShell (void) const -{ - return mpDocShell; -} - - - -SdDrawDocument* ViewShellBase::GetDocument (void) const -{ - return mpDocument; -} - - - - -void ViewShellBase::Notify(SfxBroadcaster& rBC, const SfxHint& rHint) -{ - SfxViewShell::Notify(rBC, rHint); - - if (rHint.IsA(TYPE(SfxEventHint))) - { - switch (static_cast<const SfxEventHint&>(rHint).GetEventId()) - { - case SFX_EVENT_OPENDOC: - if( GetDocument() && GetDocument()->IsStartWithPresentation() ) - { - if( GetViewFrame() ) - { - GetViewFrame()->GetDispatcher()->Execute( - SID_PRESENTATION, SFX_CALLMODE_ASYNCHRON ); - } - } - break; - - default: - break; - } - } -} - - - - -void ViewShellBase::InitializeFramework (void) -{ -} - - - - -void ViewShellBase::InnerResizePixel (const Point& rOrigin, const Size &rSize) -{ - Size aObjSize = GetObjectShell()->GetVisArea().GetSize(); - if ( aObjSize.Width() > 0 && aObjSize.Height() > 0 ) - { - SvBorder aBorder( GetBorderPixel() ); - Size aSize( rSize ); - aSize.Width() -= (aBorder.Left() + aBorder.Right()); - aSize.Height() -= (aBorder.Top() + aBorder.Bottom()); - Size aObjSizePixel = mpImpl->mpViewWindow->LogicToPixel( aObjSize, MAP_100TH_MM ); - SfxViewShell::SetZoomFactor( - Fraction( aSize.Width(), std::max( aObjSizePixel.Width(), (long int)1 ) ), - Fraction( aSize.Height(), std::max( aObjSizePixel.Height(), (long int)1) ) ); - } - - mpImpl->ResizePixel(rOrigin, rSize, false); -} - - - - -void ViewShellBase::OuterResizePixel (const Point& rOrigin, const Size &rSize) -{ - mpImpl->ResizePixel (rOrigin, rSize, true); -} - - - - -void ViewShellBase::Rearrange (void) -{ - OSL_ASSERT(GetViewFrame()!=NULL); - - // There is a bug in the communication between embedded objects and the - // framework::LayoutManager that leads to missing resize updates. The - // following workaround enforces such an update by cycling the border to - // zero and back to the current value. - if (GetWindow() != NULL) - { - SetBorderPixel(SvBorder()); - UpdateBorder(true); - } - else - { - OSL_TRACE("Rearrange: window missing"); - } - - GetViewFrame()->Resize(sal_True); -} - - - - -ErrCode ViewShellBase::DoVerb (long nVerb) -{ - ErrCode aResult = ERRCODE_NONE; - - ::sd::ViewShell* pShell = GetMainViewShell().get(); - if (pShell != NULL) - aResult = pShell->DoVerb (nVerb); - - return aResult; -} - - - - -Reference<view::XRenderable> ViewShellBase::GetRenderable (void) -{ - // Create a new DocumentRenderer on every call. It observes the life - // time of this ViewShellBase object. - return Reference<view::XRenderable>(new DocumentRenderer(*this)); -} - - - - -SfxPrinter* ViewShellBase::GetPrinter (sal_Bool bCreate) -{ - OSL_ASSERT(mpImpl.get()!=NULL); - - return GetDocShell()->GetPrinter (bCreate); -} - - - - -sal_uInt16 ViewShellBase::SetPrinter ( - SfxPrinter* pNewPrinter, - sal_uInt16 nDiffFlags, - bool bIsAPI) -{ - OSL_ASSERT(mpImpl.get()!=NULL); - - GetDocShell()->SetPrinter(pNewPrinter); - - if ( (nDiffFlags & SFX_PRINTER_CHG_ORIENTATION || - nDiffFlags & SFX_PRINTER_CHG_SIZE) && pNewPrinter ) - { - MapMode aMap = pNewPrinter->GetMapMode(); - aMap.SetMapUnit(MAP_100TH_MM); - MapMode aOldMap = pNewPrinter->GetMapMode(); - pNewPrinter->SetMapMode(aMap); - Size aNewSize = pNewPrinter->GetOutputSize(); - - sal_Bool bScaleAll = sal_False; - if ( bIsAPI ) - { - WarningBox aWarnBox ( - GetWindow(), - (WinBits)(WB_YES_NO | WB_DEF_YES), - String(SdResId(STR_SCALE_OBJS_TO_PAGE))); - bScaleAll = (aWarnBox.Execute() == RET_YES); - } - - ::boost::shared_ptr<DrawViewShell> pDrawViewShell ( - ::boost::dynamic_pointer_cast<DrawViewShell>(GetMainViewShell())); - if (pDrawViewShell) - { - SdPage* pPage = GetDocument()->GetSdPage( - 0, PK_STANDARD ); - pDrawViewShell->SetPageSizeAndBorder ( - pDrawViewShell->GetPageKind(), - aNewSize, - -1,-1,-1,-1, - bScaleAll, - pNewPrinter->GetOrientation(), - pPage->GetPaperBin(), - pPage->IsBackgroundFullSize()); - } - - pNewPrinter->SetMapMode(aOldMap); - } - - return 0; -} - - - - -SfxTabPage* ViewShellBase::CreatePrintOptionsPage( - ::Window *pParent, - const SfxItemSet &rOptions) -{ - (void)pParent; - (void)rOptions; - return NULL; -} - - - - -void ViewShellBase::UIActivating( SfxInPlaceClient* pClient ) -{ - mpImpl->ShowViewTabBar(false); - - ViewShell* pViewShell = GetMainViewShell().get(); - if ( pViewShell ) - pViewShell->UIActivating( pClient ); - - SfxViewShell::UIActivating( pClient ); -} - - - - -void ViewShellBase::UIDeactivated( SfxInPlaceClient* pClient ) -{ - SfxViewShell::UIDeactivated( pClient ); - - mpImpl->ShowViewTabBar(true); - - ViewShell* pViewShell = GetMainViewShell().get(); - if ( pViewShell ) - pViewShell->UIDeactivated( pClient ); -} - - - - -SvBorder ViewShellBase::GetBorder (bool ) -{ - int nTop = 0; - if (mpImpl->mpViewTabBar.is() && mpImpl->mpViewTabBar->GetTabControl()->IsVisible()) - nTop = mpImpl->mpViewTabBar->GetHeight(); - return SvBorder(0,nTop,0,0); -} - - - - -void ViewShellBase::Execute (SfxRequest& rRequest) -{ - sal_uInt16 nSlotId = rRequest.GetSlot(); - - switch (nSlotId) - { - case SID_SWITCH_SHELL: - { - Reference<XControllerManager> xControllerManager (GetController(), UNO_QUERY); - if (xControllerManager.is()) - { - Reference<XConfigurationController> xConfigurationController ( - xControllerManager->getConfigurationController()); - if (xConfigurationController.is()) - xConfigurationController->update(); - } - } - break; - - case SID_LEFT_PANE_DRAW: - mpImpl->SetPaneVisibility( - rRequest, - framework::FrameworkHelper::msLeftDrawPaneURL, - framework::FrameworkHelper::msSlideSorterURL); - break; - - case SID_LEFT_PANE_IMPRESS: - mpImpl->SetPaneVisibility( - rRequest, - framework::FrameworkHelper::msLeftImpressPaneURL, - framework::FrameworkHelper::msSlideSorterURL); - break; - - case SID_TASKPANE: - mpImpl->SetPaneVisibility( - rRequest, - framework::FrameworkHelper::msRightPaneURL, - framework::FrameworkHelper::msTaskPaneURL); - break; - - case SID_NORMAL_MULTI_PANE_GUI: - case SID_SLIDE_SORTER_MULTI_PANE_GUI: - case SID_DRAWINGMODE: - case SID_DIAMODE: - case SID_OUTLINEMODE: - case SID_NOTESMODE: - case SID_HANDOUTMODE: - framework::FrameworkHelper::Instance(*this)->HandleModeChangeSlot(nSlotId, rRequest); - break; - - case SID_WIN_FULLSCREEN: - // The full screen mode is not supported. Ignore the request. - break; - - case SID_SHOW_TOOL_PANEL: - mpImpl->ProcessTaskPaneSlot(rRequest); - break; - - case SID_RESTORE_EDITING_VIEW: - mpImpl->ProcessRestoreEditingViewSlot(); - break; - - default: - // Ignore any other slot. - rRequest.Ignore (); - break; - } -} - - - - -void ViewShellBase::GetState (SfxItemSet& rSet) -{ - mpImpl->GetSlotState(rSet); - - FuBullet::GetSlotState( rSet, 0, GetViewFrame() ); -} - - - - -void ViewShellBase::WriteUserDataSequence ( - ::com::sun::star::uno::Sequence < - ::com::sun::star::beans::PropertyValue >& rSequence, - sal_Bool bBrowse) -{ - // Forward call to main sub shell. - ViewShell* pShell = GetMainViewShell().get(); - if (pShell != NULL) - pShell->WriteUserDataSequence (rSequence, bBrowse); -} - - - - -void ViewShellBase::ReadUserDataSequence ( - const ::com::sun::star::uno::Sequence < - ::com::sun::star::beans::PropertyValue >& rSequence, - sal_Bool bBrowse) -{ - // Forward call to main sub shell. - ViewShell* pShell = GetMainViewShell().get(); - if (pShell != NULL) - { - pShell->ReadUserDataSequence (rSequence, bBrowse); - - // For certain shell types ReadUserDataSequence may have changed the - // type to another one. Make sure that the center pane shows the - // right view shell. - switch (pShell->GetShellType()) - { - case ViewShell::ST_IMPRESS: - case ViewShell::ST_NOTES: - case ViewShell::ST_HANDOUT: - { - ::rtl::OUString sViewURL; - switch (PTR_CAST(DrawViewShell, pShell)->GetPageKind()) - { - default: - case PK_STANDARD: - sViewURL = framework::FrameworkHelper::msImpressViewURL; - break; - case PK_NOTES: - sViewURL = framework::FrameworkHelper::msNotesViewURL; - break; - case PK_HANDOUT: - sViewURL = framework::FrameworkHelper::msHandoutViewURL; - break; - } - if (sViewURL.getLength() > 0) - framework::FrameworkHelper::Instance(*this)->RequestView( - sViewURL, - framework::FrameworkHelper::msCenterPaneURL); - } - break; - - default: - break; - } - } -} - - - - -void ViewShellBase::Activate (sal_Bool bIsMDIActivate) -{ - SfxViewShell::Activate(bIsMDIActivate); - - Reference<XControllerManager> xControllerManager (GetController(), UNO_QUERY); - if (xControllerManager.is()) - { - Reference<XConfigurationController> xConfigurationController ( - xControllerManager->getConfigurationController()); - if (xConfigurationController.is()) - xConfigurationController->update(); - } - GetToolBarManager()->RequestUpdate(); -} - - - - -void ViewShellBase::Deactivate (sal_Bool bIsMDIActivate) -{ - SfxViewShell::Deactivate(bIsMDIActivate); -} - - - - -void ViewShellBase::SetZoomFactor ( - const Fraction &rZoomX, - const Fraction &rZoomY) -{ - SfxViewShell::SetZoomFactor (rZoomX, rZoomY); - // Forward call to main sub shell. - ViewShell* pShell = GetMainViewShell().get(); - if (pShell != NULL) - pShell->SetZoomFactor (rZoomX, rZoomY); -} - - - - -sal_uInt16 ViewShellBase::PrepareClose (sal_Bool bUI, sal_Bool bForBrowsing) -{ - sal_uInt16 nResult = SfxViewShell::PrepareClose (bUI, bForBrowsing); - - if (nResult == sal_True) - { - mpImpl->mbIsClosing = true; - - // Forward call to main sub shell. - ViewShell* pShell = GetMainViewShell().get(); - if (pShell != NULL) - nResult = pShell->PrepareClose (bUI, bForBrowsing); - } - - return nResult; -} - - - - -void ViewShellBase::WriteUserData (String& rString, sal_Bool bBrowse) -{ - SfxViewShell::WriteUserData (rString, bBrowse); - - // Forward call to main sub shell. - ViewShell* pShell = GetMainViewShell().get(); - if (pShell != NULL) - pShell->WriteUserData (rString); -} - - - - -void ViewShellBase::ReadUserData (const String& rString, sal_Bool bBrowse) -{ - SfxViewShell::ReadUserData (rString, bBrowse); - - // Forward call to main sub shell. - ViewShell* pShell = GetMainViewShell().get(); - if (pShell != NULL) - pShell->ReadUserData (rString); -} - - - - -SdrView* ViewShellBase::GetDrawView (void) const -{ - // Forward call to main sub shell. - ViewShell* pShell = GetMainViewShell().get(); - if (pShell != NULL) - return pShell->GetDrawView (); - else - return SfxViewShell::GetDrawView(); -} - - - - -void ViewShellBase::AdjustPosSizePixel (const Point &rOfs, const Size &rSize) -{ - SfxViewShell::AdjustPosSizePixel (rOfs, rSize); -} - - - - -void ViewShellBase::SetBusyState (bool bBusy) -{ - if (GetDocShell() != NULL) - GetDocShell()->SetWaitCursor (bBusy); -} - - - - -void ViewShellBase::UpdateBorder ( bool bForce /* = false */ ) -{ - // The following calls to SetBorderPixel() and InvalidateBorder() are - // made only for the main view shell. This not only avoids unnecessary - // calls for the views in side panes but prevents calling an already - // dying SfxViewShell base class. - // We have to check the existence of the window, too. - // The SfxViewFrame accesses the window without checking it. - ViewShell* pMainViewShell = GetMainViewShell().get(); - if (pMainViewShell != NULL && GetWindow()!=NULL) - { - SvBorder aCurrentBorder (GetBorderPixel()); - bool bOuterResize ( ! GetDocShell()->IsInPlaceActive()); - SvBorder aBorder (GetBorder(bOuterResize)); - aBorder += pMainViewShell->GetBorder(bOuterResize); - - if (bForce || (aBorder != aCurrentBorder)) - { - SetBorderPixel (aBorder); - InvalidateBorder(); - } - } -} - - - - -void ViewShellBase::ShowUIControls (bool bVisible) -{ - if (mpImpl->mpViewTabBar.is()) - mpImpl->mpViewTabBar->GetTabControl()->Show(bVisible); - - ViewShell* pMainViewShell = GetMainViewShell().get(); - if (pMainViewShell != NULL) - pMainViewShell->ShowUIControls (bVisible); - - UpdateBorder(); - if (bVisible) - Rearrange(); -} - - - - -OUString ViewShellBase::GetInitialViewShellType (void) -{ - OUString sRequestedView (FrameworkHelper::msImpressViewURL); - - do - { - Reference<document::XViewDataSupplier> xViewDataSupplier ( - GetDocShell()->GetModel(), UNO_QUERY); - if ( ! xViewDataSupplier.is()) - break; - - Reference<container::XIndexAccess> xViewData (xViewDataSupplier->getViewData()); - if ( ! xViewData.is()) - break; - if (xViewData->getCount() == 0) - break; - - sal_Int32 nView = 0; - ::com::sun::star::uno::Any aAny = xViewData->getByIndex(nView); - Sequence<beans::PropertyValue> aProperties; - if ( ! (aAny >>= aProperties)) - break; - - // Search the properties for the one that tells us what page kind to - // use. - for (sal_Int32 n=0; n<aProperties.getLength(); n++) - { - const beans::PropertyValue& rProperty (aProperties[n]); - if (rProperty.Name.compareToAscii(sUNO_View_PageKind) == COMPARE_EQUAL) - { - sal_Int16 nPageKind = 0; - rProperty.Value >>= nPageKind; - switch ((PageKind)nPageKind) - { - case PK_STANDARD: - sRequestedView = FrameworkHelper::msImpressViewURL; - break; - - case PK_HANDOUT: - sRequestedView = FrameworkHelper::msHandoutViewURL; - break; - - case PK_NOTES: - sRequestedView = FrameworkHelper::msNotesViewURL; - break; - - default: - // The page kind is invalid. This is propably an - // error by the caller. We use the standard type to - // keep things going. - DBG_ASSERT(sal_False, "ViewShellBase::GetInitialViewShellType: invalid page kind"); - sRequestedView = FrameworkHelper::msImpressViewURL; - break; - } - break; - } - } - } - while (false); - - return sRequestedView; -} - - - - -/** this method starts the presentation by - executing the slot SID_PRESENTATION asynchronous */ -void ViewShellBase::StartPresentation() -{ - if( GetViewFrame() && GetViewFrame()->GetDispatcher() ) - GetViewFrame()->GetDispatcher()->Execute(SID_PRESENTATION, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD ); -} - - - - - -::boost::shared_ptr<tools::EventMultiplexer> ViewShellBase::GetEventMultiplexer (void) -{ - OSL_ASSERT(mpImpl.get()!=NULL); - OSL_ASSERT(mpImpl->mpEventMultiplexer.get()!=NULL); - - return mpImpl->mpEventMultiplexer; -} - - - - -const Rectangle& ViewShellBase::getClientRectangle (void) const -{ - return mpImpl->maClientArea; -} - - - - -::boost::shared_ptr<UpdateLockManager> ViewShellBase::GetUpdateLockManager (void) const -{ - OSL_ASSERT(mpImpl.get()!=NULL); - OSL_ASSERT(mpImpl->mpUpdateLockManager.get()!=NULL); - - return mpImpl->mpUpdateLockManager; -} - - - - -::boost::shared_ptr<ToolBarManager> ViewShellBase::GetToolBarManager (void) const -{ - OSL_ASSERT(mpImpl.get()!=NULL); - OSL_ASSERT(mpImpl->mpToolBarManager.get()!=NULL); - - return mpImpl->mpToolBarManager; -} - - - - -::boost::shared_ptr<FormShellManager> ViewShellBase::GetFormShellManager (void) const -{ - OSL_ASSERT(mpImpl.get()!=NULL); - OSL_ASSERT(mpImpl->mpFormShellManager.get()!=NULL); - - return mpImpl->mpFormShellManager; -} - - - - -DrawController& ViewShellBase::GetDrawController (void) const -{ - OSL_ASSERT(mpImpl.get()!=NULL); - - return *mpImpl->mpController; -} - - - - -void ViewShellBase::SetViewTabBar (const ::rtl::Reference<ViewTabBar>& rViewTabBar) -{ - OSL_ASSERT(mpImpl.get()!=NULL); - - mpImpl->mpViewTabBar = rViewTabBar; -} - - - - -::Window* ViewShellBase::GetViewWindow (void) -{ - OSL_ASSERT(mpImpl.get()!=NULL); - - return mpImpl->mpViewWindow.get(); -} - - -::rtl::OUString ImplRetrieveLabelFromCommand( const Reference< XFrame >& xFrame, const ::rtl::OUString& aCmdURL ) -{ - ::rtl::OUString aLabel; - - if ( aCmdURL.getLength() > 0 ) try - { - Reference< XMultiServiceFactory > xServiceManager( ::comphelper::getProcessServiceFactory(), UNO_QUERY_THROW ); - - Reference< XModuleManager > xModuleManager( xServiceManager->createInstance( OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.frame.ModuleManager") ) ), UNO_QUERY_THROW ); - Reference< XInterface > xIfac( xFrame, UNO_QUERY_THROW ); - - ::rtl::OUString aModuleIdentifier( xModuleManager->identify( xIfac ) ); - - if( aModuleIdentifier.getLength() > 0 ) - { - Reference< XNameAccess > xNameAccess( xServiceManager->createInstance( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.frame.UICommandDescription" ) ) ), UNO_QUERY ); - if( xNameAccess.is() ) - { - Reference< ::com::sun::star::container::XNameAccess > m_xUICommandLabels( xNameAccess->getByName( aModuleIdentifier ), UNO_QUERY_THROW ); - Sequence< PropertyValue > aPropSeq; - if( m_xUICommandLabels->getByName( aCmdURL ) >>= aPropSeq ) - { - for( sal_Int32 i = 0; i < aPropSeq.getLength(); i++ ) - { - if( aPropSeq[i].Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "Name" ) )) - { - aPropSeq[i].Value >>= aLabel; - break; - } - } - } - } - } - } - catch (const Exception&) - { - } - - return aLabel; -} - -::rtl::OUString ViewShellBase::RetrieveLabelFromCommand( const ::rtl::OUString& aCmdURL ) const -{ - Reference< XFrame > xFrame( GetMainViewShell()->GetViewFrame()->GetFrame().GetFrameInterface(), UNO_QUERY ); - return ImplRetrieveLabelFromCommand( xFrame, aCmdURL ); -} - - - -//===== ViewShellBase::Implementation ========================================= - -ViewShellBase::Implementation::Implementation (ViewShellBase& rBase) - : mpController(), - mpViewTabBar(), - maClientArea(), - mbIsClosing(false), - mpViewWindow(), - mpToolBarManager(), - mpViewShellManager(), - mpEventMultiplexer(), - mpUpdateLockManager(), - mpFormShellManager(), - mrBase(rBase), - mpPageCacheManager(slidesorter::cache::PageCacheManager::Instance()) -{ -} - - - - -ViewShellBase::Implementation::~Implementation (void) -{ - mpController = NULL; - mpViewTabBar = NULL; - mpViewWindow.reset(); - mpToolBarManager.reset(); -} - - - - -void ViewShellBase::Implementation::LateInit (void) -{ - mpController = new DrawController(mrBase); -} - - - - -void ViewShellBase::Implementation::ProcessRestoreEditingViewSlot (void) -{ - ViewShell* pViewShell = mrBase.GetMainViewShell().get(); - if (pViewShell != NULL) - { - FrameView* pFrameView = pViewShell->GetFrameView(); - if (pFrameView != NULL) - { - // Set view shell, edit mode, and page kind. - pFrameView->SetViewShEditMode( - pFrameView->GetViewShEditModeOnLoad(), - pFrameView->GetPageKindOnLoad()); - pFrameView->SetPageKind( - pFrameView->GetPageKindOnLoad()); - ::boost::shared_ptr<FrameworkHelper> pHelper (FrameworkHelper::Instance(mrBase)); - pHelper->RequestView( - pHelper->GetViewURL(pFrameView->GetViewShellTypeOnLoad()), - FrameworkHelper::msCenterPaneURL); - pHelper->RunOnConfigurationEvent( - ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ConfigurationUpdateEnd")), - CurrentPageSetter(mrBase)); - } - } -} - - - - -void ViewShellBase::Implementation::ShowViewTabBar (bool bShow) -{ - if (mpViewTabBar.is() - && (mpViewTabBar->GetTabControl()->IsVisible()==sal_True) != bShow) - { - mpViewTabBar->GetTabControl()->Show(bShow ? sal_True : sal_False); - mrBase.Rearrange(); - } -} - - - - -void ViewShellBase::Implementation::ResizePixel ( - const Point& rOrigin, - const Size &rSize, - bool bOuterResize) -{ - if (mbIsClosing) - return; - - // Forward the call to both the base class and the main stacked sub - // shell only when main sub shell exists. - ViewShell* pMainViewShell = mrBase.GetMainViewShell().get(); - - // Set the ViewTabBar temporarily to full size so that, when asked - // later, it can return its true height. - mrBase.SetWindow (mpViewWindow.get()); - if (mpViewTabBar.is() && mpViewTabBar->GetTabControl()->IsVisible()) - mpViewTabBar->GetTabControl()->SetPosSizePixel (rOrigin, rSize); - - // Calculate and set the border before the controls are placed. - SvBorder aBorder; - if (pMainViewShell != NULL) - aBorder = pMainViewShell->GetBorder(bOuterResize); - aBorder += mrBase.GetBorder(bOuterResize); - if (mrBase.GetBorderPixel() != aBorder) - mrBase.SetBorderPixel(aBorder); - - // Place the ViewTabBar at the top. It is part of the border. - SvBorder aBaseBorder; - if (mpViewTabBar.is() && mpViewTabBar->GetTabControl()->IsVisible()) - { - aBaseBorder.Top() = mpViewTabBar->GetHeight(); - mpViewTabBar->GetTabControl()->SetPosSizePixel( - rOrigin, Size(rSize.Width(),aBaseBorder.Top())); - } - - // The view window gets the remaining space. - Point aViewWindowPosition ( - rOrigin.X()+aBaseBorder.Left(), - rOrigin.Y()+aBaseBorder.Top()); - Size aViewWindowSize ( - rSize.Width() - aBaseBorder.Left() - aBaseBorder.Right(), - rSize.Height() - aBaseBorder.Top() - aBaseBorder.Bottom()); - mpViewWindow->SetPosSizePixel(aViewWindowPosition, aViewWindowSize); - - maClientArea = Rectangle(Point(0,0), aViewWindowSize); -} - - - - -void ViewShellBase::Implementation::SetPaneVisibility ( - const SfxRequest& rRequest, - const ::rtl::OUString& rsPaneURL, - const ::rtl::OUString& rsViewURL) -{ - try - { - Reference<XControllerManager> xControllerManager (mrBase.GetController(), UNO_QUERY_THROW); - - const Reference< XComponentContext > xContext( - ::comphelper::getProcessComponentContext() ); - Reference<XResourceId> xPaneId (ResourceId::create( - xContext, rsPaneURL)); - Reference<XResourceId> xViewId (ResourceId::createWithAnchorURL( - xContext, rsViewURL, rsPaneURL)); - - // Determine the new visibility state. - const SfxItemSet* pArguments = rRequest.GetArgs(); - sal_Bool bShowChildWindow; - sal_uInt16 nSlotId = rRequest.GetSlot(); - if (pArguments != NULL) - bShowChildWindow = static_cast<const SfxBoolItem&>( - pArguments->Get(nSlotId)).GetValue(); - else - { - Reference<XConfigurationController> xConfigurationController ( - xControllerManager->getConfigurationController()); - if ( ! xConfigurationController.is()) - throw RuntimeException(); - Reference<XConfiguration> xConfiguration ( - xConfigurationController->getRequestedConfiguration()); - if ( ! xConfiguration.is()) - throw RuntimeException(); - - bShowChildWindow = ! xConfiguration->hasResource(xPaneId); - } - - // Set the desired visibility state at the current configuration - // and update it accordingly. - Reference<XConfigurationController> xConfigurationController ( - xControllerManager->getConfigurationController()); - if ( ! xConfigurationController.is()) - throw RuntimeException(); - if (bShowChildWindow) - { - xConfigurationController->requestResourceActivation( - xPaneId, - ResourceActivationMode_ADD); - xConfigurationController->requestResourceActivation( - xViewId, - ResourceActivationMode_REPLACE); - } - else - xConfigurationController->requestResourceDeactivation( - xPaneId); - } - catch (const Exception&) - { - DBG_UNHANDLED_EXCEPTION(); - } -} - - - - - -void ViewShellBase::Implementation::GetSlotState (SfxItemSet& rSet) -{ - try - { - // Get some frequently used values. - Reference<XControllerManager> xControllerManager (mrBase.GetController(), UNO_QUERY_THROW); - Reference<XConfigurationController> xConfigurationController ( - xControllerManager->getConfigurationController()); - if ( ! xConfigurationController.is()) - throw RuntimeException(); - Reference<XConfiguration> xConfiguration ( - xConfigurationController->getRequestedConfiguration()); - if ( ! xConfiguration.is()) - throw RuntimeException(); - - const Reference< XComponentContext > xContext( - ::comphelper::getProcessComponentContext() ); - SfxWhichIter aSetIterator (rSet); - sal_uInt16 nItemId (aSetIterator.FirstWhich()); - while (nItemId > 0) - { - bool bState (false); - Reference<XResourceId> xResourceId; - try - { - switch (nItemId) - { - case SID_LEFT_PANE_IMPRESS: - xResourceId = ResourceId::create( - xContext, FrameworkHelper::msLeftImpressPaneURL); - break; - - case SID_LEFT_PANE_DRAW: - xResourceId = ResourceId::create( - xContext, FrameworkHelper::msLeftDrawPaneURL); - break; - - case SID_TASKPANE: - xResourceId = ResourceId::create( - xContext, FrameworkHelper::msRightPaneURL); - break; - - case SID_NORMAL_MULTI_PANE_GUI: - xResourceId = ResourceId::createWithAnchorURL( - xContext, - FrameworkHelper::msImpressViewURL, - FrameworkHelper::msCenterPaneURL); - break; - - case SID_SLIDE_SORTER_MULTI_PANE_GUI: - case SID_DIAMODE: - xResourceId = ResourceId::createWithAnchorURL( - xContext, - FrameworkHelper::msSlideSorterURL, - FrameworkHelper::msCenterPaneURL); - break; - - case SID_OUTLINEMODE: - xResourceId = ResourceId::createWithAnchorURL( - xContext, - FrameworkHelper::msOutlineViewURL, - FrameworkHelper::msCenterPaneURL); - break; - - case SID_HANDOUTMODE: - // There is only the master page mode for the handout - // view so ignore the master page flag. - xResourceId = ResourceId::createWithAnchorURL( - xContext, - FrameworkHelper::msHandoutViewURL, - FrameworkHelper::msCenterPaneURL); - break; - - case SID_NOTESMODE: - xResourceId = ResourceId::createWithAnchorURL( - xContext, - FrameworkHelper::msNotesViewURL, - FrameworkHelper::msCenterPaneURL); - break; - - default: - // Ignore all other items. They are not meant to be - // handled by us. - break; - } - } - catch (const DeploymentException&) - { - } - - // Determine the state for the resource. - bState = xConfiguration->hasResource(xResourceId); - - // Take the master page mode into account. - switch (nItemId) - { - case SID_NORMAL_MULTI_PANE_GUI: - case SID_NOTESMODE: - { - // Determine the master page mode. - ViewShell* pCenterViewShell = FrameworkHelper::Instance(mrBase)->GetViewShell( - FrameworkHelper::msCenterPaneURL).get(); - bool bMasterPageMode (false); - if (pCenterViewShell!=NULL && pCenterViewShell->ISA(DrawViewShell)) - if (PTR_CAST(DrawViewShell,pCenterViewShell)->GetEditMode() - == EM_MASTERPAGE) - { - bMasterPageMode = true; - } - - bState &= !bMasterPageMode; - break; - } - - case SID_HANDOUTMODE: - // There is only the master page mode for the handout - // view so ignore the master page flag. - break; - } - - // And finally set the state. - rSet.Put(SfxBoolItem(nItemId, bState)); - - nItemId = aSetIterator.NextWhich(); - } - } - catch (const RuntimeException&) - { - DBG_UNHANDLED_EXCEPTION(); - } - -} - - - - -void ViewShellBase::Implementation::ProcessTaskPaneSlot (SfxRequest& rRequest) -{ - // Set the visibility state of the toolpanel and one of its top - // level panels. - toolpanel::PanelId nPanelId ( - toolpanel::PID_UNKNOWN); - bool bPanelIdGiven = false; - - // Extract the given arguments. - const SfxItemSet* pArgs = rRequest.GetArgs(); - if (pArgs) - { - if (pArgs->Count() == 2) - { - SFX_REQUEST_ARG (rRequest, pPanelId, SfxUInt32Item, - ID_VAL_PANEL_INDEX, sal_False); - if (pPanelId != NULL) - { - nPanelId = static_cast< - toolpanel::PanelId>( - pPanelId->GetValue()); - bPanelIdGiven = true; - } - } - } - - // Ignore the request for some combinations of panels and view - // shell types. - if (bPanelIdGiven - && ! (nPanelId==toolpanel::PID_LAYOUT - && mrBase.GetMainViewShell()!=NULL - && mrBase.GetMainViewShell()->GetShellType()==ViewShell::ST_OUTLINE)) - { - framework::FrameworkHelper::Instance(mrBase)->RequestTaskPanel( - framework::FrameworkHelper::msLayoutTaskPanelURL); - } -} - - -} // end of namespace sd - - - - -//===== CurrentPageSetter =========================================== - -namespace { - -CurrentPageSetter::CurrentPageSetter (ViewShellBase& rBase) - : mrBase(rBase) -{ -} - - - - - -void CurrentPageSetter::operator() (bool) -{ - FrameView* pFrameView = NULL; - - if (mrBase.GetMainViewShell() != NULL) - { - pFrameView = mrBase.GetMainViewShell()->GetFrameView(); - } - - if (pFrameView!=NULL) - { - try - { - // Get the current page either from the DrawPagesSupplier or the - // MasterPagesSupplier. - Any aPage; - if (pFrameView->GetViewShEditModeOnLoad() == EM_PAGE) - { - Reference<drawing::XDrawPagesSupplier> xPagesSupplier ( - mrBase.GetController()->getModel(), UNO_QUERY_THROW); - Reference<container::XIndexAccess> xPages ( - xPagesSupplier->getDrawPages(), UNO_QUERY_THROW); - aPage = xPages->getByIndex(pFrameView->GetSelectedPageOnLoad()); - } - else - { - Reference<drawing::XMasterPagesSupplier> xPagesSupplier ( - mrBase.GetController()->getModel(), UNO_QUERY_THROW); - Reference<container::XIndexAccess> xPages ( - xPagesSupplier->getMasterPages(), UNO_QUERY_THROW); - aPage = xPages->getByIndex(pFrameView->GetSelectedPageOnLoad()); - } - // Switch to the page last edited by setting the CurrentPage - // property. - Reference<beans::XPropertySet> xSet (mrBase.GetController(), UNO_QUERY_THROW); - xSet->setPropertyValue (String::CreateFromAscii("CurrentPage"), aPage); - } - catch (const RuntimeException&) - { - // We have not been able to set the current page at the main view. - // This is sad but still leaves us in a valid state. Therefore, - // this exception is silently ignored. - } - catch (const beans::UnknownPropertyException&) - { - DBG_ASSERT(false,"CurrentPage property unknown"); - } - } -} - -} // end of anonymouse namespace - - - - -//===== FocusForwardingWindow ================================================= - -namespace sd { namespace { - -FocusForwardingWindow::FocusForwardingWindow ( - ::Window& rParentWindow, - ViewShellBase& rBase) - : ::Window(&rParentWindow, WinBits(WB_CLIPCHILDREN | WB_DIALOGCONTROL)), - mrBase(rBase) -{ - OSL_TRACE("created FocusForwardingWindow at %x", this); -} - - - - -FocusForwardingWindow::~FocusForwardingWindow (void) -{ - OSL_TRACE("destroyed FocusForwardingWindow at %x", this); -} - - - - -void FocusForwardingWindow::KeyInput (const KeyEvent& rKEvt) -{ - ::boost::shared_ptr<ViewShell> pViewShell = mrBase.GetMainViewShell(); - if (pViewShell.get() != NULL) - { - ::Window* pWindow = pViewShell->GetActiveWindow(); - if (pWindow != NULL) - { - // Forward the focus so that the window is called directly the - // next time. - pWindow->GrabFocus(); - // Forward the key press as well. - pWindow->KeyInput(rKEvt); - } - } -} - - - - -void FocusForwardingWindow::Command (const CommandEvent& rEvent) -{ - ::boost::shared_ptr<ViewShell> pViewShell = mrBase.GetMainViewShell(); - if (pViewShell.get() != NULL) - { - ::Window* pWindow = pViewShell->GetActiveWindow(); - if (pWindow != NULL) - { - pWindow->Command(rEvent); - } - } -} - - -} // end of anonymouse namespace - -} // end of namespace sd - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |