summaryrefslogtreecommitdiff
path: root/sfx2/inc/sfx2/shell.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'sfx2/inc/sfx2/shell.hxx')
-rw-r--r--sfx2/inc/sfx2/shell.hxx393
1 files changed, 393 insertions, 0 deletions
diff --git a/sfx2/inc/sfx2/shell.hxx b/sfx2/inc/sfx2/shell.hxx
new file mode 100644
index 000000000000..314c16fdbf1f
--- /dev/null
+++ b/sfx2/inc/sfx2/shell.hxx
@@ -0,0 +1,393 @@
+/*************************************************************************
+ *
+ * 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 _SFX_SHELL_HXX
+#define _SFX_SHELL_HXX
+
+#include "sal/config.h"
+#include "sfx2/dllapi.h"
+#include "sal/types.h"
+#include <com/sun/star/embed/VerbDescriptor.hpp>
+#include <tools/debug.hxx>
+#include <tools/rtti.hxx>
+#include <svl/brdcst.hxx>
+
+#include <tools/ownlist.hxx>
+#include <tools/unqid.hxx>
+#include <tools/string.hxx>
+
+#include <sfx2/sfxuno.hxx>
+
+class ResMgr;
+class Window;
+class ToolBox;
+class SfxItemPool;
+class SfxPoolItem;
+class SfxRequest;
+class SfxItemSet;
+struct SfxFormalArgument;
+class StatusBar;
+class SfxInterface;
+class SfxViewShell;
+class SfxObjectShell;
+class SfxSlotPool;
+class SvGlobalName;
+
+class SfxShellObject;
+class SfxShell;
+struct SfxShell_Impl;
+struct SfxTypeLibImpl;
+class SfxShellObject;
+class SfxShellSubObject;
+class SfxDispatcher;
+class SfxViewFrame;
+class SfxSlot;
+class SfxUndoManager;
+class SfxRepeatTarget;
+class SbxVariable;
+class SbxBase;
+class SfxBindings;
+
+//====================================================================
+
+enum SfxInterfaceId
+
+/* [Beschreibung]
+
+ Id f"ur die <SfxInterface>s, damit wird "uber ein Array an der
+ <SfxApplication> ein quasi-statischer Zugriff auf die Interfaces
+ erlaubt.
+*/
+
+{
+ SFX_INTERFACE_NONE,
+ SFX_INTERFACE_SFXAPP,
+ SFX_INTERFACE_SFXDOCSH,
+ SFX_INTERFACE_SFXIPFRM,
+ SFX_INTERFACE_SFXVIEWSH,
+ SFX_INTERFACE_SFXVIEWFRM,
+ SFX_INTERFACE_SFXPLUGINFRM,
+ SFX_INTERFACE_SFXPLUGINOBJ,
+ SFX_INTERFACE_SFXPLUGINVIEWSH,
+ SFX_INTERFACE_SFXFRAMESETOBJ,
+ SFX_INTERFACE_SFXFRAMESETVIEWSH,
+ SFX_INTERFACE_SFXINTERNALFRM,
+ SFX_INTERFACE_SFXCOMPONENTDOCSH,
+ SFX_INTERFACE_SFXGENERICOBJ,
+ SFX_INTERFACE_SFXGENERICVIEWSH,
+ SFX_INTERFACE_SFXEXPLOBJ,
+ SFX_INTERFACE_SFXEXPLVIEWSH,
+ SFX_INTERFACE_SFXPLUGINVIEWSHDYNAMIC,
+ SFX_INTERFACE_SFXEXTERNALVIEWFRM,
+ SFX_INTERFACE_SFXMODULE,
+ SFX_INTERFACE_SFXFRAMESETVIEW,
+ SFX_INTERFACE_SFXFRAMESETSOURCEVIEW,
+ SFX_INTERFACE_SFXHELP_DOCSH,
+ SFX_INTERFACE_SFXHELP_VIEWSH,
+ SFX_INTERFACE_SFXTASK,
+ SFX_INTERFACE_OFA_START = 100,
+ SFX_INTERFACE_OFA_END = 100,
+ SFX_INTERFACE_SC_START = 150,
+ SFX_INTERFACE_SC_END = 199,
+ SFX_INTERFACE_SD_START = 200,
+ SFX_INTERFACE_SD_END = 249,
+ SFX_INTERFACE_SW_START = 250,
+ SFX_INTERFACE_SW_END = 299,
+ SFX_INTERFACE_SIM_START = 300,
+ SFX_INTERFACE_SIM_END = 319,
+ SFX_INTERFACE_SCH_START = 320,
+ SFX_INTERFACE_SCH_END = 339,
+ SFX_INTERFACE_SMA_START = 340,
+ SFX_INTERFACE_SMA_END = 359,
+ SFX_INTERFACE_SBA_START = 360,
+ SFX_INTERFACE_SBA_END = 399,
+ SFX_INTERFACE_IDE_START = 400,
+ SFX_INTERFACE_IDE_END = 409,
+ //-falls die noch einer braucht
+ SFX_INTERFACE_APP = SFX_INTERFACE_SW_START,
+ SFX_INTERFACE_LIB = 450
+};
+
+//TODO/CLEANUP: replace by UNO constant
+#define SVVERB_SHOW -1
+
+//====================================================================
+
+typedef void (*SfxExecFunc)(SfxShell *, SfxRequest &rReq);
+typedef void (*SfxStateFunc)(SfxShell *, SfxItemSet &rSet);
+
+class SFX2_DLLPUBLIC SfxShell: public SfxBroadcaster
+
+/* [Beschreibung]
+
+ Die Klasse SfxShell ist Basisklasse f"ur alle Schichten, die
+ Funktionalit"at Form von <Slot>s bereitstellen wollen.
+
+ Jede Instanz hat einen Verweis auf eine Interface-Beschreibung, der
+ mit <SfxShell::GetInterface()const> erh"altlich ist. Dieses Interface
+ stellt die Verbindung zu konkreten Methoden her und enth"alt einige
+ weitere beschreibende Daten f"ur Controller wie Menus und Toolboxen, aber
+ auch f"ur die diversen APIs. Der Hautpteil der Interface-Beschreibung
+ liegt in Form einer <Type-Library> vor, die mit dem <SVIDL-Compiler>
+ aus einem IDL-File generiert wird. F"ur jede SfxShell-Subclass ist ein
+ solches IDL-File zu schreiben.
+
+*/
+
+{
+ friend class SfxObjectItem;
+
+ SfxShell_Impl* pImp;
+ SfxItemPool* pPool;
+ SfxUndoManager* pUndoMgr;
+
+private:
+ SfxShell( const SfxShell & ); // n.i.
+ SfxShell& operator = ( const SfxShell & ); // n.i.
+
+protected:
+ SfxShell();
+ SfxShell( SfxViewShell *pViewSh );
+
+#ifndef _SFXSH_HXX
+ SAL_DLLPRIVATE void SetViewShell_Impl( SfxViewShell* pView );
+ SAL_DLLPRIVATE void Invalidate_Impl( SfxBindings& rBindings, USHORT nId );
+ SAL_DLLPRIVATE SfxShellObject* GetShellObj_Impl() const;
+ SAL_DLLPRIVATE void SetShellObj_Impl( SfxShellObject* pObj );
+#endif
+
+public:
+ TYPEINFO();
+ virtual ~SfxShell();
+
+ SfxBroadcaster* GetBroadcaster();
+
+ // TODO/CLEANUP: still needed?!
+ virtual SvGlobalName GetGlobalName() const;
+
+ virtual SfxInterface* GetInterface() const;
+ static SfxInterface* GetStaticInterface() { return 0; }
+
+ void SetName( const String &rName );
+ const String& GetName() const;
+
+ SfxViewShell* GetViewShell() const;
+
+ void CallExec( SfxExecFunc pFunc, SfxRequest &rReq )
+ { (*pFunc)(this, rReq); }
+ void CallState( SfxStateFunc pFunc, SfxItemSet &rSet )
+ { (*pFunc)(this, rSet); }
+
+ static void EmptyExecStub(SfxShell *pShell, SfxRequest &);
+ static void EmptyStateStub(SfxShell *pShell, SfxItemSet &);
+
+ const SfxPoolItem* GetSlotState( USHORT nSlotId, const SfxInterface *pIF = 0, SfxItemSet *pStateSet = 0 );
+ const SfxPoolItem* ExecuteSlot( SfxRequest &rReq, const SfxInterface *pIF = 0 );
+ const SfxPoolItem* ExecuteSlot( SfxRequest &rReq, BOOL bAsync );
+ ULONG ExecuteSlot( USHORT nSlot, USHORT nMemberId, SbxVariable& rRet, SbxBase* pArgs = 0 );
+
+ inline SfxItemPool& GetPool() const;
+ inline void SetPool( SfxItemPool *pNewPool ) ;
+
+ virtual SfxUndoManager* GetUndoManager();
+ void SetUndoManager( SfxUndoManager *pNewUndoMgr );
+
+ SfxRepeatTarget* GetRepeatTarget() const;
+ void SetRepeatTarget( SfxRepeatTarget *pTarget );
+
+ virtual void Invalidate(USHORT nId = 0);
+
+ BOOL IsActive() const;
+ virtual void Activate(BOOL bMDI);
+ virtual void Deactivate(BOOL bMDI);
+ virtual void ParentActivate();
+ virtual void ParentDeactivate();
+
+ SfxDispatcher* GetDispatcher() const;
+ SfxViewFrame* GetFrame() const;
+ ResMgr* GetResMgr() const;
+ virtual sal_Bool HasUIFeature( sal_uInt32 nFeature );
+ void UIFeatureChanged();
+
+ // Items
+ const SfxPoolItem* GetItem( USHORT nSlotId ) const;
+ void PutItem( const SfxPoolItem& rItem );
+ void RemoveItem( USHORT nSlotId );
+
+ // TODO/CLEANUP: still needed?!
+ void SetVerbs(const com::sun::star::uno::Sequence < com::sun::star::embed::VerbDescriptor >& aVerbs);
+ const com::sun::star::uno::Sequence < com::sun::star::embed::VerbDescriptor >& GetVerbs() const;
+ void VerbExec (SfxRequest&);
+ void VerbState (SfxItemSet&);
+ SAL_DLLPRIVATE const SfxSlot* GetVerbSlot_Impl(USHORT nId) const;
+
+ void SetHelpId(ULONG nId);
+ ULONG GetHelpId() const;
+ virtual SfxObjectShell* GetObjectShell();
+ void SetDisableFlags( ULONG nFlags );
+ ULONG GetDisableFlags() const;
+
+ virtual SfxItemSet* CreateItemSet( USHORT nId );
+ virtual void ApplyItemSet( USHORT nId, const SfxItemSet& rSet );
+
+#ifndef _SFXSH_HXX
+ SAL_DLLPRIVATE FASTBOOL CanExecuteSlot_Impl( const SfxSlot &rSlot );
+ SAL_DLLPRIVATE void DoActivate_Impl( SfxViewFrame *pFrame, BOOL bMDI);
+ SAL_DLLPRIVATE void DoDeactivate_Impl( SfxViewFrame *pFrame, BOOL bMDI);
+#endif
+};
+
+//--------------------------------------------------------------------
+SfxItemPool& SfxShell::GetPool() const
+/*
+ [Beschreibung]
+
+ Jede Subclass von SfxShell mu"s einen Pool referenzieren. Dieser
+ wird teilweise von SFx-eigenen Subklassen gesetzt (z.B. <SfxViewShell>),
+ mu"s aber insbesondere bei direkt von SfxShell abgeleiteten Klassen
+ und bei Ableitungen von SfxObjectShell selbst gesetzt werden.
+
+ Die Klasse SfxShell selbst hat noch keinen SfxItemPool, es wird
+ daher ein 0-Pointer zur"uckgeliefert.
+*/
+
+{
+ DBG_ASSERT( pPool, "no pool" );
+ return *pPool;
+}
+//-------------------------------------------------------------------
+inline void SfxShell::SetPool
+(
+ SfxItemPool* pNewPool // Pointer auf den neuen Pool oder 0
+)
+
+/* [Beschreibung]
+
+ Mit dieser Methode melden die Subklassen ihren speziellen <SfxItemPool>
+ an der SfxShell an. Jede SfxShell Instanz mu\s Zugriff auf einen
+ SfxItemPool haben. In der Regel ist dies der SfxItemPool der
+ SfxDocumentShell. Die SfxShell Subklasse "ubernimmt nicht die
+ Eigent"umerschaft "uber den "ubergebenen Pool. Bevor er gel"oscht
+ wirde, mu\s er mit SetPool(0) abgemeldet werden.
+*/
+
+{
+ pPool = pNewPool;
+}
+
+//=====================================================================
+
+#define SFX_ARGUMENTMAP(ShellClass) static SfxFormalArgument __FAR_DATA a##ShellClass##Args_Impl[] =
+
+#define SFX_SLOTMAP(ShellClass) static SfxFormalArgument __FAR_DATA a##ShellClass##Args_Impl[1]; \
+ static SfxSlot __FAR_DATA a##ShellClass##Slots_Impl[] =
+
+#define SFX_SLOTMAP_ARG(ShellClass) static SfxSlot __FAR_DATA a##ShellClass##Slots_Impl[] =
+
+#define SFX_DECL_INTERFACE(nId) \
+ static SfxInterface* pInterface; \
+ private: \
+ static void InitInterface_Impl(); \
+ public: \
+ static const SfxFormalArgument* pSfxFormalArgs_Impl; \
+ static SfxInterface* GetStaticInterface(); \
+ static SfxInterfaceId GetInterfaceId() {return SfxInterfaceId(nId);} \
+ static void RegisterInterface(SfxModule* pMod=NULL); \
+ virtual SfxInterface* GetInterface() const;
+
+#define SFX_IMPL_INTERFACE(Class,SuperClass,NameResId) \
+ \
+ SfxInterface* Class::pInterface = 0; \
+ const SfxFormalArgument* Class::pSfxFormalArgs_Impl = a##Class##Args_Impl;\
+ SfxInterface* __EXPORT Class::GetStaticInterface() \
+ { \
+ if ( !pInterface ) \
+ { \
+ pInterface = \
+ new SfxInterface( \
+ #Class, NameResId, GetInterfaceId(), \
+ SuperClass::GetStaticInterface(), \
+ a##Class##Slots_Impl[0], \
+ (USHORT) (sizeof(a##Class##Slots_Impl) / sizeof(SfxSlot) ) ); \
+ InitInterface_Impl(); \
+ } \
+ return pInterface; \
+ } \
+ \
+ SfxInterface* Class::GetInterface() const \
+ { \
+ return GetStaticInterface(); \
+ } \
+ \
+ void Class::RegisterInterface(SfxModule* pMod) \
+ { \
+ GetStaticInterface()->Register(pMod); \
+ } \
+ \
+ void Class::InitInterface_Impl()
+
+#define SFX_POSITION_MASK 0x000F
+#define SFX_VISIBILITY_MASK 0xFFF0
+#define SFX_VISIBILITY_UNVISIBLE 0x0000 // nie sichtbar
+#define SFX_VISIBILITY_PLUGSERVER 0x0010
+#define SFX_VISIBILITY_PLUGCLIENT 0x0020
+#define SFX_VISIBILITY_VIEWER 0x0040
+ // noch 1 sind frei!
+#define SFX_VISIBILITY_RECORDING 0x0200
+#define SFX_VISIBILITY_READONLYDOC 0x0400
+#define SFX_VISIBILITY_DESKTOP 0x0800
+#define SFX_VISIBILITY_STANDARD 0x1000
+#define SFX_VISIBILITY_FULLSCREEN 0x2000
+#define SFX_VISIBILITY_CLIENT 0x4000
+#define SFX_VISIBILITY_SERVER 0x8000
+#define SFX_VISIBILITY_NOCONTEXT 0xFFFF // immer sichtbar
+
+#define SFX_OBJECTBAR_REGISTRATION(nPos,rResId) \
+ GetStaticInterface()->RegisterObjectBar( nPos, rResId )
+
+#define SFX_FEATURED_OBJECTBAR_REGISTRATION(nPos,rResId,nFeature) \
+ GetStaticInterface()->RegisterObjectBar( nPos, rResId, nFeature )
+
+#define SFX_CHILDWINDOW_REGISTRATION(nId) \
+ GetStaticInterface()->RegisterChildWindow( nId, (BOOL) FALSE )
+
+#define SFX_FEATURED_CHILDWINDOW_REGISTRATION(nId,nFeature) \
+ GetStaticInterface()->RegisterChildWindow( nId, (BOOL) FALSE, nFeature )
+
+#define SFX_CHILDWINDOW_CONTEXT_REGISTRATION(nId) \
+ GetStaticInterface()->RegisterChildWindow( nId, (BOOL) TRUE )
+
+#define SFX_POPUPMENU_REGISTRATION(rResId) \
+ GetStaticInterface()->RegisterPopupMenu( rResId )
+
+#define SFX_OBJECTMENU_REGISTRATION(nPos,rResId) \
+ GetStaticInterface()->RegisterObjectMenu( nPos, rResId )
+
+#define SFX_STATUSBAR_REGISTRATION(rResId) \
+ GetStaticInterface()->RegisterStatusBar( rResId )
+
+#endif
+