diff options
Diffstat (limited to 'sd/source/ui/inc/ViewShellBase.hxx')
-rwxr-xr-x | sd/source/ui/inc/ViewShellBase.hxx | 287 |
1 files changed, 287 insertions, 0 deletions
diff --git a/sd/source/ui/inc/ViewShellBase.hxx b/sd/source/ui/inc/ViewShellBase.hxx new file mode 100755 index 000000000000..38f7223f1d83 --- /dev/null +++ b/sd/source/ui/inc/ViewShellBase.hxx @@ -0,0 +1,287 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ + +#ifndef SD_VIEW_SHELL_BASE_HXX +#define SD_VIEW_SHELL_BASE_HXX + +#include <com/sun/star/frame/XFrame.hpp> + +#include "ViewShell.hxx" + +#include "glob.hxx" +#include <sfx2/viewsh.hxx> +#include <sfx2/viewfac.hxx> +#include <memory> +#include <boost/shared_ptr.hpp> +#include <boost/scoped_ptr.hpp> + +#include <set> + +class SdDrawDocument; +class SfxRequest; + +namespace sd { namespace tools { +class EventMultiplexer; +} } + +namespace sd { + +class DrawController; +class DrawDocShell; +class FormShellManager; +class ToolBarManager; +class UpdateLockManager; +class ViewShell; +class ViewShellManager; + +/** SfxViewShell descendant that the stacked Draw/Impress shells are + based on. + + <p>The "base" part of the name does not mean that this is a base + class of some class hierarchy. It rather is the base of the + stacked shells.</p> + + <p>This class starts as a new and relatively small class. Over + time as much code as possible should be moved from the stacked + shells to this class.</p> +*/ +class ViewShellBase + : public SfxViewShell +{ +public: + TYPEINFO(); + SFX_DECL_VIEWFACTORY(ViewShellBase); + SFX_DECL_INTERFACE(SD_IF_SDVIEWSHELLBASE) + + /** This constructor is used by the view factory of the SFX macros. + Note that LateInit() has to be called after the constructor + terminates and before doing anything else. + */ + ViewShellBase ( + SfxViewFrame *pFrame, + SfxViewShell* pOldShell); + + virtual ~ViewShellBase (void); + + /** This method is part of the object construction. It HAS to be called + after the constructor has created a new object. + */ + virtual void LateInit (const ::rtl::OUString& rsDefaultView); + + ::boost::shared_ptr<ViewShellManager> GetViewShellManager (void) const; + + /** Return the main view shell stacked on the called ViewShellBase + object. This is usually the view shell displayed in the center + pane. + */ + ::boost::shared_ptr<ViewShell> GetMainViewShell (void) const; + + /** When given a view frame this static method returns the + corresponding sd::ViewShellBase object. + @return + When the SfxViewShell of the given frame is not a + ViewShellBase object then NULL is returned. + */ + static ViewShellBase* GetViewShellBase (SfxViewFrame* pFrame); + + DrawDocShell* GetDocShell (void) const; + SdDrawDocument* GetDocument (void) const; + + /** Callback function for general slot calls. At the moment these are + slots for switching the pane docking windows on and off. + */ + virtual void Execute (SfxRequest& rRequest); + + /** Callback function for retrieving item values related to certain + slots. This is the companion of Execute() and handles the slots + concerned with showing the pane docking windows. + */ + virtual void GetState (SfxItemSet& rSet); + + SvBorder GetBorder (bool bOuterResize); + virtual void InnerResizePixel (const Point& rOrigin, const Size& rSize); + virtual void OuterResizePixel (const Point& rOrigin, const Size& rSize); + + /** This call is forwarded to the main sub-shell. + */ + virtual ErrCode DoVerb (long nVerb); + + /** Return a new renderer that can be used for example for printing the + document. + */ + virtual com::sun::star::uno::Reference<com::sun::star::view::XRenderable> GetRenderable (void); + + /// Forwarded to the print manager. + virtual SfxPrinter* GetPrinter (BOOL bCreate = FALSE); + + /// Forwarded to the print manager. + virtual USHORT SetPrinter ( + SfxPrinter* pNewPrinter, + USHORT nDiffFlags = SFX_PRINTER_ALL, bool bIsApi=false); + + /// Forwarded to the print manager. + virtual PrintDialog* CreatePrintDialog (::Window *pParent); + + /// Forwarded to the print manager. + virtual SfxTabPage* CreatePrintOptionsPage ( + ::Window *pParent, + const SfxItemSet &rOptions); + + /// Forwarded to the print manager. + virtual USHORT Print (SfxProgress& rProgress, BOOL bIsAPI, PrintDialog* pDialog); + + /// Forwarded to the print manager. + virtual ErrCode DoPrint ( + SfxPrinter *pPrinter, + PrintDialog *pPrintDialog, + BOOL bSilent, BOOL bIsAPI ); + + virtual void PreparePrint (PrintDialog* pPrintDialog); + + /// Forward methods to main sub shell. + virtual void WriteUserDataSequence ( + ::com::sun::star::uno::Sequence < + ::com::sun::star::beans::PropertyValue >&, + sal_Bool bBrowse = sal_False); + + /** Pass the given properties to the main view shell. After that we + ensure that the right view shell type is displayed in the center + pane. + */ + virtual void ReadUserDataSequence ( + const ::com::sun::star::uno::Sequence < + ::com::sun::star::beans::PropertyValue >&, + sal_Bool bBrowse = sal_False); + + virtual void UIActivating( SfxInPlaceClient* ); + virtual void UIDeactivated( SfxInPlaceClient* ); + virtual void Activate (BOOL IsMDIActivate); + virtual void Deactivate (BOOL IsMDIActivate); + virtual void SetZoomFactor ( + const Fraction &rZoomX, + const Fraction &rZoomY); + virtual USHORT PrepareClose (BOOL bUI = TRUE, BOOL bForBrowsing = FALSE); + virtual void WriteUserData (String&, BOOL bBrowse = FALSE); + virtual void ReadUserData (const String&, BOOL bBrowse = FALSE); + virtual SdrView* GetDrawView (void) const; + virtual void AdjustPosSizePixel (const Point &rOfs, const Size &rSize); + + /** When <TRUE/> is given, then the mouse shape is set to hour glass (or + whatever the busy shape looks like on the system.) + */ + void SetBusyState (bool bBusy); + + /** Call this method when the controls of this view shell or the + embedded sub shell need to be rearranged. This is necessary + e.g. when the border has been modified (UpdateBorder() calls this + method). + + This method is like ResizePixel() with no arguments. + */ + void Rearrange (void); + + /** Update the border that is set with SfxViewShell::SetBorderPixel(). + This is done by adding the border used by the ViewShellBase itself + with the border used by the main view shell. + + @param bForce if true the borders are also updated if old border + and new border are same. + */ + void UpdateBorder ( bool bForce = false ); + + /** With this method the UI controls can be turned on or off. It is + used by the FuSlideShow to hide the UI controls while showing a + non-full-screen or in-window presentation in the center pane. + */ + void ShowUIControls (bool bVisible); + + /** this method starts the presentation by + executing the slot SID_PRESENTATION asynchronous */ + void StartPresentation(); + + /** Return an event multiplexer. It is a single class that forwards + events from various sources. This method must not be called before + LateInit() has terminated. + */ + ::boost::shared_ptr<tools::EventMultiplexer> GetEventMultiplexer (void); + + /** returns the complete area of the current view relative to the frame + window + */ + const Rectangle& getClientRectangle() const; + + ::boost::shared_ptr<UpdateLockManager> GetUpdateLockManager (void) const; + + ::boost::shared_ptr<ToolBarManager> GetToolBarManager (void) const; + + ::boost::shared_ptr<FormShellManager> GetFormShellManager (void) const; + + DrawController& GetDrawController (void) const; + + void SetViewTabBar (const ::rtl::Reference<ViewTabBar>& rViewTabBar); + + /** Return the window that is used by the main view shell to display its + view and other UI elements, like scroll bars and rulers. Ownership + of that window remains with the called ViewShellBase object. + */ + ::Window* GetViewWindow (void); + + /** returns the ui descriptive name for the given uno slot. The result is taken from the configuration + and not cached, so do not use it excessive (f.e. in status updates) */ + ::rtl::OUString RetrieveLabelFromCommand( const ::rtl::OUString& aCmdURL ) const; + +protected: + osl::Mutex maMutex; + + virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint); + + virtual void InitializeFramework (void); + +private: + class Implementation; + ::boost::scoped_ptr<Implementation> mpImpl; + DrawDocShell* mpDocShell; + SdDrawDocument* mpDocument; + + /** Determine from the properties of the document shell the initial type + of the view shell in the center pane. We use this method to avoid + starting with the wrong type. When ReadUserDataSequence() is called + we check that the right type is active and change again if that is + not the case because something went wrong. + */ + ::rtl::OUString GetInitialViewShellType (void); +}; + +class ICustomhandleSupplier +{ +public: + virtual void addCustomHandler( SdrView& rSourceView, ViewShell::ShellType eShellType, SdrHdlList& rHandlerList ) = 0; +}; + +} // end of namespace sd + +#endif |