diff options
author | Bjoern Michaelsen <bjoern.michaelsen@canonical.com> | 2013-04-18 18:26:28 +0200 |
---|---|---|
committer | Bjoern Michaelsen <bjoern.michaelsen@canonical.com> | 2013-04-23 22:20:31 +0200 |
commit | b9337e22ce1dbf2eba0e8c8db294ae99f4111f91 (patch) | |
tree | 53ee1bd3dfd213815a21579151983cb997922b05 /include/sfx2/dispatch.hxx | |
parent | f4e1642a1761d5eab6ccdd89928869c2b2f1528a (diff) |
execute move of global headers
see https://gerrit.libreoffice.org/#/c/3367/
and Change-Id: I00c96fa77d04b33a6f8c8cd3490dfcd9bdc9e84a for details
Change-Id: I199a75bc4042af20817265d5ef85b1134a96ff5a
Diffstat (limited to 'include/sfx2/dispatch.hxx')
-rw-r--r-- | include/sfx2/dispatch.hxx | 308 |
1 files changed, 308 insertions, 0 deletions
diff --git a/include/sfx2/dispatch.hxx b/include/sfx2/dispatch.hxx new file mode 100644 index 000000000000..2b02a5e620c6 --- /dev/null +++ b/include/sfx2/dispatch.hxx @@ -0,0 +1,308 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +#ifndef _SFXDISPATCH_HXX +#define _SFXDISPATCH_HXX + +#include "sal/config.h" +#include "sfx2/dllapi.h" +#include "sal/types.h" + +#include <stdarg.h> + +#include <sfx2/bindings.hxx> +#include <sfx2/viewfrm.hxx> +#include <map> +#include <vector> + +class SfxSlotServer; +class SfxShell; +class SfxRequest; +class SfxHintPoster; +class SfxViewFrame; +class SfxBindings; +class SfxItemSet; +class SfxPopupMenuManager; +class SfxModule; +struct SfxDispatcher_Impl; + +typedef std::vector<SfxShell*> SfxShellStack_Impl; + +namespace com +{ + namespace sun + { + namespace star + { + namespace frame + { + class XDispatch; + } + } + } +} + +//========================================================================= + +#define SFX_SHELL_POP_UNTIL 4 +#define SFX_SHELL_POP_DELETE 2 +#define SFX_SHELL_PUSH 1 + +//========================================================================= + +// Maps the Which() field to a pointer to a SfxPoolItem +class SfxItemPtrMap : public std::map<sal_uInt16, SfxPoolItem*> +{ +public: + ~SfxItemPtrMap() + { + for(iterator it = begin(); it != end(); ++it) + delete it->second; + } +}; + +class SFX2_DLLPUBLIC SfxDispatcher +{ + SfxDispatcher_Impl* pImp; + sal_Bool bFlushed; + +private: + // Search for temporary evaluated Todos + SAL_DLLPRIVATE sal_Bool CheckVirtualStack( const SfxShell& rShell, sal_Bool bDeep ); + +#ifndef _SFX_HXX + +friend class SfxApplication; +friend class SfxViewFrame; + + DECL_DLLPRIVATE_LINK( EventHdl_Impl, void * ); + DECL_DLLPRIVATE_LINK( PostMsgHandler, SfxRequest * ); + + SAL_DLLPRIVATE int Call_Impl( SfxShell& rShell, const SfxSlot &rSlot, SfxRequest &rReq, sal_Bool bRecord ); + SAL_DLLPRIVATE void _Update_Impl( sal_Bool,sal_Bool,sal_Bool,SfxWorkWindow*); + SAL_DLLPRIVATE void CollectTools_Impl(SfxWorkWindow*); + +protected: +friend class SfxBindings; +friend class SfxStateCache; +friend class SfxPopupMenuManager; +friend class SfxHelp; + // For bindings: Finding the Message; + // level for re-access + SAL_DLLPRIVATE sal_Bool _TryIntercept_Impl( sal_uInt16 nId, SfxSlotServer &rServer, sal_Bool bModal ); + sal_Bool _FindServer( sal_uInt16 nId, SfxSlotServer &rServer, sal_Bool bModal ); + sal_Bool _FillState( const SfxSlotServer &rServer, + SfxItemSet &rState, const SfxSlot *pRealSlot ); + void _Execute( SfxShell &rShell, const SfxSlot &rSlot, + SfxRequest &rReq, + SfxCallMode eCall = SFX_CALLMODE_STANDARD); +#endif +protected: + void FlushImpl(); + +public: + SfxDispatcher( SfxDispatcher* pParent ); + SfxDispatcher( SfxViewFrame *pFrame = 0 ); + + SAL_DLLPRIVATE void Construct_Impl( SfxDispatcher* pParent ); + + virtual ~SfxDispatcher(); + + const SfxPoolItem* Execute( sal_uInt16 nSlot, + SfxCallMode nCall = SFX_CALLMODE_SLOT, + const SfxPoolItem **pArgs = 0, + sal_uInt16 nModi = 0, + const SfxPoolItem **pInternalArgs = 0); + + const SfxPoolItem* Execute( sal_uInt16 nSlot, + SfxCallMode nCall, + SfxItemSet* pArgs, + SfxItemSet* pInternalArgs, + sal_uInt16 nModi = 0); + + const SfxPoolItem* Execute( sal_uInt16 nSlot, + SfxCallMode nCall, + const SfxPoolItem *pArg1, ... ); + + const SfxPoolItem* Execute( sal_uInt16 nSlot, + SfxCallMode nCall, + const SfxItemSet &rArgs ); + + const SfxPoolItem* Execute( sal_uInt16 nSlot, + SfxCallMode nCall, + sal_uInt16 nModi, + const SfxItemSet &rArgs ); + + const SfxSlot* GetSlot( const String& rCommand ); + + sal_Bool IsActive( const SfxShell& rShell ); + sal_Bool IsOnTop( const SfxShell& rShell ); + sal_uInt16 GetShellLevel( const SfxShell &rShell ); + SfxBindings* GetBindings() const; + + void Push( SfxShell& rShell ); + void Pop( SfxShell& rShell, sal_uInt16 nMode = 0 ); + + SfxShell* GetShell(sal_uInt16 nIdx) const; + SfxViewFrame* GetFrame() const; + SfxModule* GetModule() const; + // caller has to clean up the Manager on his own + static SfxPopupMenuManager* Popup( sal_uInt16 nConfigId,Window *pWin, const Point *pPos ); + + void ExecutePopup( const ResId &rId, + Window *pWin = 0, const Point *pPosPixel = 0 ); + static void ExecutePopup( sal_uInt16 nConfigId = 0, + Window *pWin = 0, const Point *pPosPixel = 0 ); + + sal_Bool IsAppDispatcher() const; + sal_Bool IsFlushed() const; + void Flush(); + void Lock( sal_Bool bLock ); + sal_Bool IsLocked( sal_uInt16 nSID = 0 ) const; + void SetSlotFilter( sal_Bool bEnable = sal_False, + sal_uInt16 nCount = 0, const sal_uInt16 *pSIDs = 0 ); + + void HideUI( sal_Bool bHide = sal_True ); + void ShowObjectBar(sal_uInt16 nId, SfxShell *pShell=0) const; + sal_uInt32 GetObjectBarId( sal_uInt16 nPos ) const; + + SfxItemState QueryState( sal_uInt16 nSID, const SfxPoolItem* &rpState ); + SfxItemState QueryState( sal_uInt16 nSID, ::com::sun::star::uno::Any& rAny ); + + ::com::sun::star::frame::XDispatch* GetDispatchInterface( const String& ); + void SetDisableFlags( sal_uInt32 nFlags ); + sal_uInt32 GetDisableFlags() const; + + SAL_DLLPRIVATE void SetMenu_Impl(); + SAL_DLLPRIVATE void Update_Impl( sal_Bool bForce = sal_False ); // ObjectBars etc. + SAL_DLLPRIVATE sal_Bool IsUpdated_Impl() const; + SAL_DLLPRIVATE int GetShellAndSlot_Impl( sal_uInt16 nSlot, SfxShell **ppShell, const SfxSlot **ppSlot, + sal_Bool bOwnShellsOnly, sal_Bool bModal, sal_Bool bRealSlot=sal_True ); + SAL_DLLPRIVATE void SetReadOnly_Impl( sal_Bool bOn ); + SAL_DLLPRIVATE sal_Bool GetReadOnly_Impl() const; + SAL_DLLPRIVATE sal_Bool IsSlotEnabledByFilter_Impl( sal_uInt16 nSID ) const; + SAL_DLLPRIVATE void SetQuietMode_Impl( sal_Bool bOn ); + SAL_DLLPRIVATE sal_Bool IsReadOnlyShell_Impl( sal_uInt16 nShell ) const; + SAL_DLLPRIVATE void RemoveShell_Impl( SfxShell& rShell ); + SAL_DLLPRIVATE void DoParentActivate_Impl(); + SAL_DLLPRIVATE void DoParentDeactivate_Impl(); + SAL_DLLPRIVATE void DoActivate_Impl( sal_Bool bMDI, SfxViewFrame* pOld ); + SAL_DLLPRIVATE void DoDeactivate_Impl( sal_Bool bMDI, SfxViewFrame* pNew ); + SAL_DLLPRIVATE void InvalidateBindings_Impl(sal_Bool); + SAL_DLLPRIVATE sal_uInt16 GetNextToolBox_Impl( sal_uInt16 nPos, sal_uInt16 nType, String *pStr ); +}; + +//-------------------------------------------------------------------- + +inline sal_Bool SfxDispatcher::IsFlushed() const + +/* [Description] + + This method checks if the stack of the SfxDispatchers is flushed, or if + push- or pop- commands are pending. +*/ + +{ + return bFlushed; +} + +//-------------------------------------------------------------------- + +inline void SfxDispatcher::Flush() + +/* [Description] + + This method performs outstanding push- and pop- commands. For <SfxShell>s, + which are new on the stack, the <SfxShell::Activate(sal_Bool)> is invoked with + bMDI == sal_True, for SfxShells that are removed from the stack, the + <SfxShell::Deactivate(sal_Bool)> is invoked with bMDI == sal_True +*/ + +{ + if ( !bFlushed ) FlushImpl(); +} + +//-------------------------------------------------------------------- + +inline void SfxDispatcher::Push( SfxShell& rShell ) + +/* [Description] + + With this method, a <SfxShell> pushed on to the SfxDispatcher. + The SfxShell is first marked for push and a timer is set up. + First when the timer has couted down to zero the push + ( <SfxDispatcher::Flush()> ) is actually performed and the + <SfxBindings> is invalidated. While the timer is counting down + the opposing push and pop commands on the same SfxShell are + leveled out. +*/ + +{ + Pop( rShell, SFX_SHELL_PUSH ); +} + +//-------------------------------------------------------------------- + +inline sal_Bool SfxDispatcher::IsActive( const SfxShell& rShell ) + +/* [Description] + + This method checks whether a particular <SfxShell> instance is + on the SfxDispatcher. + + [Return value] + + sal_Bool sal_True + The SfxShell instance is on the SfxDispatcher. + + sal_False + The SfxShell instance is not on the SfxDispatcher. +*/ + +{ + return CheckVirtualStack( rShell, sal_True ); +} +//-------------------------------------------------------------------- + +inline sal_Bool SfxDispatcher::IsOnTop( const SfxShell& rShell ) + +/* [Description] + + This method checks whether a particular <SfxShell> instance is on + top of the SfxDispatcher. + + [Return value] + + sal_Bool sal_True + The SfxShell instance is on the top of + the SfxDispatcher. + + sal_False + The SfxShell instance is not on the top of + the SfxDispatcher. +*/ + +{ + return CheckVirtualStack( rShell, sal_False ); +} + +//-------------------------------------------------------------------- + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |