summaryrefslogtreecommitdiff
path: root/sfx2/source/inc/workwin.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'sfx2/source/inc/workwin.hxx')
-rw-r--r--sfx2/source/inc/workwin.hxx391
1 files changed, 391 insertions, 0 deletions
diff --git a/sfx2/source/inc/workwin.hxx b/sfx2/source/inc/workwin.hxx
new file mode 100644
index 000000000000..8c06e1233297
--- /dev/null
+++ b/sfx2/source/inc/workwin.hxx
@@ -0,0 +1,391 @@
+/*************************************************************************
+ *
+ * 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 _SFXWORKWIN_HXX
+#define _SFXWORKWIN_HXX
+
+#include <vector>
+#include <deque>
+#include <com/sun/star/frame/XDispatch.hpp>
+#include <com/sun/star/frame/XFrame.hpp>
+#ifndef _COM_SUN_STAR_UI_XUILEMENT_HPP_
+#include <com/sun/star/ui/XUIElement.hpp>
+#endif
+#include <com/sun/star/task/XStatusIndicator.hpp>
+#include <com/sun/star/frame/XLayoutManagerListener.hpp>
+#include <cppuhelper/weak.hxx>
+#include <cppuhelper/propshlp.hxx>
+
+#define _SVSTDARR_USHORTS
+#include <svl/svstdarr.hxx> // SvUShorts
+#include <rtl/ustring.hxx>
+#include <vos/mutex.hxx>
+
+#include <sfx2/sfx.hrc>
+#include <sfx2/childwin.hxx>
+#include <sfx2/shell.hxx>
+#include <sfx2/minarray.hxx>
+#include <sfx2/ctrlitem.hxx>
+#include <sfx2/viewfrm.hxx>
+
+class SfxInPlaceEnv_Impl;
+class SfxPlugInEnv_Impl;
+class SfxSplitWindow;
+class SfxWorkWindow;
+
+//====================================================================
+// Dieser struct h"alt alle relevanten Informationen "uber Toolboxen bereit.
+
+struct SfxObjectBar_Impl
+{
+ sal_uInt16 nId; // Resource - und ConfigId der Toolbox
+ sal_uInt16 nMode; // spezielle Sichtbarkeitsflags
+ sal_uInt16 nPos;
+ sal_uInt16 nIndex;
+ sal_Bool bDestroy;
+ String aName;
+ SfxInterface* pIFace;
+
+ SfxObjectBar_Impl() :
+ nId(0),
+ nMode(0),
+ bDestroy(sal_False),
+ pIFace(0)
+ {}
+};
+
+//------------------------------------------------------------------------------
+// Dieser struct h"alt alle relevanten Informationen "uber die Statuszeile bereit.
+struct SfxStatBar_Impl
+{
+ sal_uInt16 nId;
+ sal_Bool bOn;
+ sal_Bool bTemp;
+
+ SfxStatBar_Impl() :
+ nId(0),
+ bOn(sal_True),
+ bTemp(sal_False)
+ {}
+};
+
+//------------------------------------------------------------------------------
+
+#define CHILD_NOT_VISIBLE 0
+#define CHILD_ACTIVE 1 // nicht durch HidePopups ausgeschaltet
+#define CHILD_NOT_HIDDEN 2 // nicht durch HideChildWindow ausgeschaltet
+#define CHILD_FITS_IN 4 // nicht zu gro\s f"ur OutputSize des parent
+#define CHILD_VISIBLE (CHILD_NOT_HIDDEN | CHILD_ACTIVE | CHILD_FITS_IN)
+#define CHILD_ISVISIBLE (CHILD_NOT_HIDDEN | CHILD_ACTIVE)
+
+struct SfxChild_Impl
+{
+ Window* pWin;
+ Size aSize;
+ SfxChildAlignment eAlign;
+ sal_uInt16 nVisible;
+ sal_Bool bResize;
+ sal_Bool bCanGetFocus;
+ sal_Bool bSetFocus;
+
+ SfxChild_Impl( Window& rChild, const Size& rSize,
+ SfxChildAlignment eAlignment, sal_Bool bIsVisible ):
+ pWin(&rChild), aSize(rSize), eAlign(eAlignment), bResize(sal_False),
+ bCanGetFocus( sal_False ), bSetFocus( sal_False )
+ {
+ nVisible = bIsVisible ? CHILD_VISIBLE : CHILD_NOT_VISIBLE;
+ }
+};
+
+//--------------------------------------------------------------------
+class SfxChildWinController_Impl : public SfxControllerItem
+{
+ SfxWorkWindow* pWorkwin;
+
+ public:
+ SfxChildWinController_Impl( sal_uInt16 nId, SfxWorkWindow *pWin );
+ virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState,
+ const SfxPoolItem* pState );
+};
+
+struct SfxChildWin_Impl
+{
+ sal_uInt16 nSaveId; // die ChildWindow-Id
+ sal_uInt16 nInterfaceId; // der aktuelle Context
+ sal_uInt16 nId; // aktuelle Id
+ SfxChildWindow* pWin;
+ sal_Bool bCreate;
+ SfxChildWinInfo aInfo;
+ SfxChild_Impl* pCli; // != 0 bei direkten Children
+ sal_uInt16 nVisibility;
+ sal_Bool bEnable;
+ sal_Bool bDisabled;
+
+ SfxChildWin_Impl( sal_uInt32 nID ) :
+ nSaveId((sal_uInt16) (nID & 0xFFFF) ),
+ nInterfaceId((sal_uInt16) (nID >> 16)),
+ nId(nSaveId),
+ pWin(0),
+ bCreate(sal_False),
+ pCli(0),
+ nVisibility( sal_False ),
+ bEnable( sal_True ),
+ bDisabled( sal_False )
+ {}
+};
+
+enum SfxChildIdentifier
+{
+ SFX_CHILDWIN_STATBAR,
+ SFX_CHILDWIN_OBJECTBAR,
+ SFX_CHILDWIN_DOCKINGWINDOW,
+ SFX_CHILDWIN_SPLITWINDOW
+};
+
+enum SfxDockingConfig
+{
+ SFX_SETDOCKINGRECTS,
+ SFX_ALIGNDOCKINGWINDOW,
+ SFX_TOGGLEFLOATMODE,
+ SFX_MOVEDOCKINGWINDOW
+};
+
+DECL_PTRARRAY( SfxChildList_Impl, SfxChild_Impl*, 2, 2 )
+DECL_PTRARRAY( SfxChildWindows_Impl, SfxChildWin_Impl*, 2, 2 )
+
+
+struct SfxObjectBarList_Impl
+{
+ std::deque<SfxObjectBar_Impl> aArr;
+ sal_uInt16 nAct;
+
+ SfxObjectBar_Impl operator[] ( sal_uInt16 n )
+ { return aArr[n]; }
+ SfxObjectBar_Impl Actual()
+ { return aArr[nAct]; }
+};
+
+struct SfxSplitWin_Impl
+{
+ SfxSplitWindow* pSplitWin;
+ SfxChildWindows_Impl* pChildWins;
+};
+
+#define SFX_SPLITWINDOWS_LEFT 0
+#define SFX_SPLITWINDOWS_TOP 2
+#define SFX_SPLITWINDOWS_RIGHT 1
+#define SFX_SPLITWINDOWS_BOTTOM 3
+#define SFX_SPLITWINDOWS_MAX 4
+
+//--------------------------------------------------------------------
+
+class LayoutManagerListener : public ::com::sun::star::frame::XLayoutManagerListener,
+ public ::com::sun::star::lang::XTypeProvider,
+ public ::com::sun::star::lang::XComponent,
+ public ::cppu::OWeakObject
+{
+ public:
+ LayoutManagerListener( SfxWorkWindow* pWrkWin );
+ virtual ~LayoutManagerListener();
+
+ SFX_DECL_XINTERFACE_XTYPEPROVIDER
+
+ void setFrame( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rFrame );
+
+ //---------------------------------------------------------------------------------------------------------
+ // XComponent
+ //---------------------------------------------------------------------------------------------------------
+ virtual void SAL_CALL addEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL removeEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& aListener ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL dispose() throw( ::com::sun::star::uno::RuntimeException );
+
+ //---------------------------------------------------------------------------------------------------------
+ // XEventListener
+ //---------------------------------------------------------------------------------------------------------
+ virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& aEvent ) throw( ::com::sun::star::uno::RuntimeException );
+
+ //---------------------------------------------------------------------------------------------------------
+ // XLayoutManagerEventListener
+ //---------------------------------------------------------------------------------------------------------
+ virtual void SAL_CALL layoutEvent( const ::com::sun::star::lang::EventObject& aSource, ::sal_Int16 eLayoutEvent, const ::com::sun::star::uno::Any& aInfo ) throw (::com::sun::star::uno::RuntimeException);
+
+ private:
+ sal_Bool m_bHasFrame;
+ SfxWorkWindow* m_pWrkWin;
+ ::com::sun::star::uno::WeakReference< ::com::sun::star::frame::XFrame > m_xFrame;
+ rtl::OUString m_aLayoutManagerPropName;
+};
+
+class SfxWorkWindow
+{
+ friend class UIElementWrapper;
+ friend class LayoutManagerListener;
+
+protected:
+ SvUShorts aSortedList;
+ SfxStatBar_Impl aStatBar;
+ std::vector< SfxObjectBar_Impl > aObjBarList;
+ Rectangle aClientArea;
+ Rectangle aUpperClientArea;
+ SfxWorkWindow* pParent;
+ SfxSplitWindow* pSplit[SFX_SPLITWINDOWS_MAX];
+ SfxChildList_Impl* pChilds;
+ SfxChildWindows_Impl* pChildWins;
+ SfxBindings* pBindings;
+ Window* pWorkWin;
+ SfxShell* pConfigShell;
+ Window* pActiveChild;
+ sal_uInt16 nUpdateMode;
+ sal_uInt16 nChilds;
+ sal_uInt16 nOrigMode;
+ sal_Bool bSorted : 1;
+ sal_Bool bDockingAllowed : 1;
+ sal_Bool bInternalDockingAllowed : 1;
+ sal_Bool bAllChildsVisible : 1;
+ sal_Bool bIsFullScreen : 1;
+ sal_Bool bShowStatusBar : 1;
+ sal_Int32 m_nLock;
+ rtl::OUString m_aStatusBarResName;
+ rtl::OUString m_aLayoutManagerPropName;
+ rtl::OUString m_aTbxTypeName;
+ rtl::OUString m_aProgressBarResName;
+ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent > m_xLayoutManagerListener;
+
+protected:
+ void CreateChildWin_Impl(SfxChildWin_Impl*,sal_Bool);
+ void RemoveChildWin_Impl(SfxChildWin_Impl*);
+ void Sort_Impl();
+ void AlignChild_Impl( Window& rWindow, const Size& rNewSize,
+ SfxChildAlignment eAlign );
+ SfxChild_Impl* FindChild_Impl( const Window& rWindow ) const;
+ virtual sal_Bool RequestTopToolSpacePixel_Impl( SvBorder aBorder );
+ virtual Rectangle GetTopRect_Impl();
+ SvBorder Arrange_Impl();
+ virtual void SaveStatus_Impl(SfxChildWindow*, const SfxChildWinInfo&);
+ static sal_Bool IsPluginMode( SfxObjectShell* pObjShell );
+
+public:
+ SfxWorkWindow( Window *pWin, SfxBindings& rBindings, SfxWorkWindow* pParent = NULL);
+ virtual ~SfxWorkWindow();
+ SystemWindow* GetTopWindow() const;
+ SfxBindings& GetBindings()
+ { return *pBindings; }
+ Window* GetWindow() const
+ { return pWorkWin; }
+ Rectangle GetFreeArea( sal_Bool bAutoHide ) const;
+ void SetDockingAllowed(sal_Bool bSet)
+ { bDockingAllowed = bSet; }
+ void SetInternalDockingAllowed(sal_Bool bSet)
+ { bInternalDockingAllowed = bSet; }
+ sal_Bool IsDockingAllowed() const
+ { return bDockingAllowed; }
+ sal_Bool IsInternalDockingAllowed() const
+ { return bInternalDockingAllowed; }
+ SfxWorkWindow* GetParent_Impl() const
+ { return pParent; }
+ ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > CreateDispatch( const String& );
+
+ // Methoden f"ur alle Child-Fenster
+ void DataChanged_Impl( const DataChangedEvent& rDCEvt );
+ void ReleaseChild_Impl( Window& rWindow );
+ SfxChild_Impl* RegisterChild_Impl( Window& rWindow, SfxChildAlignment eAlign, sal_Bool bCanGetFocus=sal_False );
+ void ShowChilds_Impl();
+ void HideChilds_Impl();
+ void Close_Impl();
+ sal_Bool PrepareClose_Impl();
+ virtual void ArrangeChilds_Impl( sal_Bool bForce = sal_True );
+ void DeleteControllers_Impl();
+ void SaveStatus_Impl();
+ void HidePopups_Impl(sal_Bool bHide, sal_Bool bParent=sal_False, sal_uInt16 nId=0);
+ void ConfigChild_Impl(SfxChildIdentifier,
+ SfxDockingConfig, sal_uInt16);
+ void MakeChildsVisible_Impl( sal_Bool bVis );
+ void ArrangeAutoHideWindows( SfxSplitWindow *pSplit );
+ sal_Bool IsAutoHideMode( const SfxSplitWindow *pSplit );
+ void EndAutoShow_Impl( Point aPos );
+ void SetFullScreen_Impl( sal_Bool bSet ) { bIsFullScreen = bSet; }
+ sal_Bool IsFullScreen_Impl() const { return bIsFullScreen; }
+
+ // Methoden f"ur Objectbars
+ virtual void UpdateObjectBars_Impl();
+ void ResetObjectBars_Impl();
+ void SetObjectBar_Impl( sal_uInt16 nPos, sal_uInt32 nResId,
+ SfxInterface *pIFace, const String* pName=0 );
+ Window* GetObjectBar_Impl( sal_uInt16 nPos, sal_uInt32 nResId );
+ bool KnowsObjectBar_Impl( sal_uInt16 nPos ) const;
+ sal_Bool IsVisible_Impl();
+ void MakeVisible_Impl( sal_Bool );
+ void SetObjectBarVisibility_Impl( sal_uInt16 nVis );
+ sal_Bool IsContainer_Impl() const;
+ void Lock_Impl( sal_Bool );
+ void NextObjectBar_Impl( sal_uInt16 nPos );
+ sal_uInt16 HasNextObjectBar_Impl( sal_uInt16 nPos, String* pStr=0 );
+ void SetObjectBarCustomizeMode_Impl( sal_Bool );
+
+ // Methoden f"ur ChildWindows
+ void UpdateChildWindows_Impl();
+ void ResetChildWindows_Impl();
+ void SetChildWindowVisible_Impl( sal_uInt32, sal_Bool, sal_uInt16 );
+ void ToggleChildWindow_Impl(sal_uInt16,sal_Bool);
+ sal_Bool HasChildWindow_Impl(sal_uInt16);
+ sal_Bool KnowsChildWindow_Impl(sal_uInt16);
+ void ShowChildWindow_Impl(sal_uInt16, sal_Bool bVisible, sal_Bool bSetFocus);
+ void SetChildWindow_Impl(sal_uInt16, sal_Bool bOn, sal_Bool bSetFocus);
+ SfxChildWindow* GetChildWindow_Impl(sal_uInt16);
+ virtual void InitializeChild_Impl(SfxChildWin_Impl*);
+ SfxSplitWindow* GetSplitWindow_Impl(SfxChildAlignment);
+
+ sal_Bool IsVisible_Impl( sal_uInt16 nMode ) const;
+ void DisableChildWindow_Impl( sal_uInt16 nId, sal_Bool bDisable );
+ sal_Bool IsFloating( sal_uInt16 nId );
+ void ChangeWindow_Impl( Window *pNew );
+ void SetActiveChild_Impl( Window *pChild );
+ Window* GetActiveChild_Impl();
+ virtual sal_Bool ActivateNextChild_Impl( sal_Bool bForward = sal_True );
+ bool AllowChildWindowCreation_Impl( const SfxChildWin_Impl& i_rCW ) const;
+
+ // Methoden f"ur StatusBar
+ void SetTempStatusBar_Impl( sal_Bool bSet );
+ void ResetStatusBar_Impl();
+ void SetStatusBar_Impl(sal_uInt32 nResId, SfxShell *pShell, SfxBindings& );
+ void UpdateStatusBar_Impl();
+ ::com::sun::star::uno::Reference< ::com::sun::star::task::XStatusIndicator > GetStatusIndicator();
+ ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame > GetFrameInterface();
+};
+
+class SfxFrameWorkWin_Impl : public SfxWorkWindow
+{
+ SfxFrame* pMasterFrame;
+ SfxFrame* pFrame;
+public:
+ SfxFrameWorkWin_Impl( Window* pWin, SfxFrame* pFrm, SfxFrame* pMaster );
+ virtual void ArrangeChilds_Impl( sal_Bool bForce = sal_True );
+ virtual void UpdateObjectBars_Impl();
+ virtual Rectangle GetTopRect_Impl();
+};
+
+
+#endif