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/tbxctrl.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/tbxctrl.hxx')
-rw-r--r-- | include/sfx2/tbxctrl.hxx | 412 |
1 files changed, 412 insertions, 0 deletions
diff --git a/include/sfx2/tbxctrl.hxx b/include/sfx2/tbxctrl.hxx new file mode 100644 index 000000000000..56047d1e32ad --- /dev/null +++ b/include/sfx2/tbxctrl.hxx @@ -0,0 +1,412 @@ +/* -*- 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 _SFXTBXCTRL_HXX +#define _SFXTBXCTRL_HXX + +#include "sal/config.h" +#include "sfx2/dllapi.h" +#include "sal/types.h" +#include <vcl/timer.hxx> +#include <vcl/menu.hxx> +#include <vcl/fixed.hxx> +#include <vcl/floatwin.hxx> +#include <comphelper/processfactory.hxx> +#include <sfx2/ctrlitem.hxx> +#include <sfx2/sfxstatuslistener.hxx> +#include <svtools/toolboxcontroller.hxx> +#include <svtools/framestatuslistener.hxx> +#include <com/sun/star/lang/XMultiServiceFactory.hpp> +#include <com/sun/star/frame/XDispatchProvider.hpp> +#include <com/sun/star/frame/XFrame.hpp> +#include <com/sun/star/awt/XDockableWindowListener.hpp> +#include <com/sun/star/awt/XDockableWindow.hpp> +#include <com/sun/star/frame/XSubToolbarController.hpp> + +//------------------------------------------------------------------ + +class SfxToolBoxControl; +class SfxBindings; +class SfxModule; +class SfxUnoControllerItem; + +svt::ToolboxController* SAL_CALL SfxToolBoxControllerFactory( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rFrame, ToolBox* pToolbox, unsigned short nID, const OUString& aCommandURL ); + +typedef SfxToolBoxControl* (*SfxToolBoxControlCtor)( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rBox ); + +struct SfxTbxCtrlFactory +{ + SfxToolBoxControlCtor pCtor; + TypeId nTypeId; + sal_uInt16 nSlotId; + + SfxTbxCtrlFactory( SfxToolBoxControlCtor pTheCtor, + TypeId nTheTypeId, sal_uInt16 nTheSlotId ): + pCtor(pTheCtor), + nTypeId(nTheTypeId), + nSlotId(nTheSlotId) + {} +}; + +//------------------------------------------------------------------ + +enum SfxPopupWindowType +{ + SFX_POPUPWINDOW_NONE, + SFX_POPUPWINDOW_ONCLICK, + SFX_POPUPWINDOW_ONTIMEOUT, + SFX_POPUPWINDOW_ONCLICKANDMOVE, + SFX_POPUPWINDOW_ONTIMEOUTANDMOVE, + SFX_POPUPWINDOW_CONTEXTMENU +}; + +//------------------------------------------------------------------ + +class SfxFrameStatusListener : public svt::FrameStatusListener +{ + public: + SfxFrameStatusListener( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext, + const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& xFrame, + SfxStatusListenerInterface* pCallee ); + virtual ~SfxFrameStatusListener(); + + // XStatusListener + virtual void SAL_CALL statusChanged( const ::com::sun::star::frame::FeatureStateEvent& Event ) + throw ( ::com::sun::star::uno::RuntimeException ); + + private: + SfxStatusListenerInterface* m_pCallee; +}; + +//------------------------------------------------------------------ + +/* Floating windows that can be torn from tool boxes should be derived from + this class. Since it is also derived from SfxControllerItem, its instances + will also receive the StateChanged calls. +*/ + +class SFX2_DLLPUBLIC SfxPopupWindow: public FloatingWindow, public SfxStatusListenerInterface +{ + sal_Bool m_bFloating; + sal_uIntPtr m_nEventId; + sal_Bool m_bCascading; + Link m_aDeleteLink; + sal_uInt16 m_nId; + ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame > m_xFrame; + SfxFrameStatusListener* m_pStatusListener; + ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent > m_xStatusListener; + +private: + SfxFrameStatusListener* GetOrCreateStatusListener(); + + SAL_DLLPRIVATE SfxPopupWindow(SfxPopupWindow &); // not defined + SAL_DLLPRIVATE void operator =(SfxPopupWindow &); // not defined + void Delete(); + +protected: + virtual void PopupModeEnd(); + virtual sal_Bool Close(); + virtual void DeleteFloatingWindow(); + + sal_uInt16 GetId() const { return m_nId; } + const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& GetFrame() const { return m_xFrame; } + + void BindListener(); + void UnbindListener(); + void AddStatusListener( const OUString& rCommandURL ); + + // SfxStatusListenerInterface + using FloatingWindow::StateChanged; + virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, + const SfxPoolItem* pState ); + +public: + SfxPopupWindow( sal_uInt16 nId, + const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rFrame, + WinBits nBits ); + SfxPopupWindow( sal_uInt16 nId, + const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rFrame, + const ResId &rId ); + SfxPopupWindow( sal_uInt16 nId, + const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rFrame, + Window* pParentWindow, + WinBits nBits ); + ~SfxPopupWindow(); + + virtual SfxPopupWindow* Clone() const; + virtual void MouseMove( const MouseEvent& rMEvt ); + + void StartCascading(); + SAL_DLLPRIVATE void SetDeleteLink_Impl( const Link& rLink ) + { + m_aDeleteLink = rLink; + } +}; + +//------------------------------------------------------------------ + +#define SFX_DECL_TOOLBOX_CONTROL() \ + static SfxToolBoxControl* CreateImpl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox &rTbx ); \ + static void RegisterControl(sal_uInt16 nSlotId = 0, SfxModule *pMod=NULL) + +/* For special ToolBox controls, such as a font selection box or toolbox + tear-off floating windows, an appropriate Item-Subclass of SfxTooBoxControl + has to be implemented. + + This class has to be registered in SfxApplication:Init() with the static + control method RegisterControl(). The SFx then automatically creates these + controls in the toolbox, if the associated slots are of the specific type. + */ + +struct SfxToolBoxControl_Impl; +class SFX2_DLLPUBLIC SfxToolBoxControl: + public ::com::sun::star::awt::XDockableWindowListener, + public ::com::sun::star::frame::XSubToolbarController, + public svt::ToolboxController + +{ +friend class SfxToolbox; +friend class SfxPopupWindow; +friend struct SfxTbxCtrlFactory; + + SfxToolBoxControl_Impl* pImpl; + +protected: + DECL_LINK( PopupModeEndHdl, void * ); + DECL_LINK( ClosePopupWindow, SfxPopupWindow * ); + + // old SfxToolBoxControl methods + virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState ); + virtual void Select( sal_Bool bMod1 = sal_False ); + virtual void Select( sal_uInt16 nModifier ); + + virtual void DoubleClick(); + virtual void Click(); + virtual SfxPopupWindowType GetPopupWindowType() const; + virtual SfxPopupWindow* CreatePopupWindow(); + virtual SfxPopupWindow* CreatePopupWindowCascading(); + virtual Window* CreateItemWindow( Window *pParent ); + + // Must be called by subclass to set a new popup window instance + void SetPopupWindow( SfxPopupWindow* pWindow ); + + // XInterface + virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL acquire() throw(); + virtual void SAL_CALL release() throw(); + + // XEventListener + using ::cppu::OPropertySetHelper::disposing; + virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& aEvent ) throw( ::com::sun::star::uno::RuntimeException ); + + // XComponent + virtual void SAL_CALL dispose() throw (::com::sun::star::uno::RuntimeException); + + // new controller API + // XStatusListener + virtual void SAL_CALL statusChanged( const ::com::sun::star::frame::FeatureStateEvent& Event ) + throw ( ::com::sun::star::uno::RuntimeException ); + + // XToolbarController + virtual void SAL_CALL execute( sal_Int16 KeyModifier ) + throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL click() + throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL doubleClick() + throw (::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > SAL_CALL createPopupWindow() + throw (::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > SAL_CALL createItemWindow( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow >& rParent ) + throw (::com::sun::star::uno::RuntimeException); + + // XSubToolbarController + virtual ::sal_Bool SAL_CALL opensSubToolbar( ) throw (::com::sun::star::uno::RuntimeException); + virtual OUString SAL_CALL getSubToolbarName( ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL functionSelected( const OUString& aCommand ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL updateImage( ) throw (::com::sun::star::uno::RuntimeException); + + // XDockableWindowListener + virtual void SAL_CALL startDocking( const ::com::sun::star::awt::DockingEvent& e ) throw (::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::awt::DockingData SAL_CALL docking( const ::com::sun::star::awt::DockingEvent& e ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL endDocking( const ::com::sun::star::awt::EndDockingEvent& e ) throw (::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL prepareToggleFloatingMode( const ::com::sun::star::lang::EventObject& e ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL toggleFloatingMode( const ::com::sun::star::lang::EventObject& e ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL closed( const ::com::sun::star::lang::EventObject& e ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL endPopupMode( const ::com::sun::star::awt::EndPopupModeEvent& e ) throw (::com::sun::star::uno::RuntimeException); + + // helper methods + void createAndPositionSubToolBar( const OUString& rSubToolBarResName ); + ::Size getPersistentFloatingSize( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& xFrame, const OUString& rSubToolBarResName ); + +public: + SFX_DECL_TOOLBOX_CONTROL(); + + SfxToolBoxControl( sal_uInt16 nSlotID, sal_uInt16 nId, ToolBox& rBox, sal_Bool bShowStrings = sal_False ); + virtual ~SfxToolBoxControl(); + + ToolBox& GetToolBox() const; + unsigned short GetId() const; + unsigned short GetSlotId() const; + + void Dispatch( const OUString& aCommand, + ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& aArgs ); + static void Dispatch( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider >& rDispatchProvider, + const OUString& rCommand, + ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& aArgs ); + + static SfxItemState GetItemState( const SfxPoolItem* pState ); + static SfxToolBoxControl* CreateControl( sal_uInt16 nSlotId, sal_uInt16 nTbxId, ToolBox *pBox, SfxModule *pMod ); + static void RegisterToolBoxControl( SfxModule*, SfxTbxCtrlFactory*); +}; + +#define SFX_IMPL_TOOLBOX_CONTROL(Class, nItemClass) \ + SfxToolBoxControl* Class::CreateImpl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox &rTbx ) \ + { return new Class( nSlotId, nId, rTbx ); } \ + void Class::RegisterControl(sal_uInt16 nSlotId, SfxModule *pMod) \ + { SfxToolBoxControl::RegisterToolBoxControl( pMod, new SfxTbxCtrlFactory( \ + Class::CreateImpl, TYPE(nItemClass), nSlotId ) ); } + +#define SFX_IMPL_TOOLBOX_CONTROL_ARG(Class, nItemClass, Arg) \ + SfxToolBoxControl* Class::CreateImpl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox &rTbx ) \ + { return new Class( nSlotId, nId, rTbx, Arg); } \ + void Class::RegisterControl(sal_uInt16 nSlotId, SfxModule *pMod) \ + { SfxToolBoxControl::RegisterToolBoxControl( pMod, new SfxTbxCtrlFactory( \ + Class::CreateImpl, TYPE(nItemClass), nSlotId ) ); } + +//========================================================================= + + +class SfxDragButton_Impl : public FixedImage +{ +public: + + SfxDragButton_Impl( Window *pParent ); + virtual void Command ( const CommandEvent& rCEvt ); + virtual void MouseMove( const MouseEvent& rMEvt ); + virtual void MouseButtonDown( const MouseEvent& rMEvt ); +}; + +class SfxDragToolBoxControl_Impl : public SfxToolBoxControl +{ +public: + SFX_DECL_TOOLBOX_CONTROL(); + SfxDragToolBoxControl_Impl( sal_uInt16 nId, ToolBox& rBox ); + virtual Window* CreateItemWindow( Window *pParent ); + using SfxToolBoxControl::Select; + virtual void Select( sal_Bool bMod1 = sal_False ); +}; + +//------------------------------------------------------------------------ + +class SfxAppToolBoxControl_Impl : public SfxToolBoxControl + +/* [Description] + + Internal helper class for the pop-up menu <AppMenu_Impl> under new + start in the SDT. +*/ + +{ +public: + SFX_DECL_TOOLBOX_CONTROL(); + SfxAppToolBoxControl_Impl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rBox ); + ~SfxAppToolBoxControl_Impl(); + void SetImage( const String& rFacName ); + + struct ExecuteInfo + { + ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > xDispatch; + ::com::sun::star::util::URL aTargetURL; + ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > aArgs; + }; + + DECL_STATIC_LINK( SfxAppToolBoxControl_Impl, ExecuteHdl_Impl, ExecuteInfo* ); + +protected: + virtual void Click(); + using SfxToolBoxControl::Select; + virtual void Select( sal_Bool ); + virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState ); + virtual SfxPopupWindow* CreatePopupWindow(); + DECL_LINK( Activate, Menu * ); +private: + String aLastURL; + PopupMenu* pMenu; + sal_uIntPtr m_nSymbolsStyle; + sal_Bool m_bShowMenuImages; +}; + +class SfxHistoryToolBoxControl_Impl : public SfxToolBoxControl +{ + Timer aTimer; + +private: + DECL_LINK( Timeout, Timer * ); + +protected: + virtual void Click( ); + using SfxToolBoxControl::Select; + virtual void Select( sal_Bool ); + +public: + SFX_DECL_TOOLBOX_CONTROL(); + SfxHistoryToolBoxControl_Impl( sal_uInt16 nId, ToolBox& rBox ); +}; + +class SfxReloadToolBoxControl_Impl : public SfxToolBoxControl +{ + protected: + using SfxToolBoxControl::Select; + virtual void Select( sal_uInt16 nSelectModifier ); + + public: + SFX_DECL_TOOLBOX_CONTROL(); + SfxReloadToolBoxControl_Impl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rBox ); +}; + +class SfxPopupMenuManager; +class SfxAddonsToolBoxControl_Impl : public SfxToolBoxControl + +/* [Description] + + Internal helper class to provide the addons popup menu through the addons + toolbox button. +*/ + +{ + sal_Bool bBigImages; + PopupMenu* pMenu; + sal_Bool m_bShowMenuImages; + +protected: + virtual void Click(); + using SfxToolBoxControl::Select; + virtual void Select( sal_Bool ); + virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState ); + DECL_LINK( Activate, Menu * ); +public: + SFX_DECL_TOOLBOX_CONTROL(); + SfxAddonsToolBoxControl_Impl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rBox ); + ~SfxAddonsToolBoxControl_Impl(); + + void RefreshMenuImages( Menu* pMenu ); +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |