From ac1aefd5174258d9bcb41465ce566ed1a0819f3d Mon Sep 17 00:00:00 2001 From: Szymon Kłos Date: Wed, 10 Mar 2021 16:20:07 +0100 Subject: Extend ToolBarManager to build weld::Toolbar MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - used for SubToolBarController eg. framework shape toolbar popup present in the sidebar fontwork panel - add separate implementation for vcl and weld based ToolBarManager - provide basic functionality for weld based (just inserting standard items with icons and controllers) - not implemented: addons items merging etc. Change-Id: I8e460f34abd512d70e95a1d484d728b7d809ce9d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113387 Tested-by: Jenkins Reviewed-by: Szymon Kłos --- framework/inc/uielement/toolbarmanager.hxx | 76 ++++++++++++++++++++++++++++-- framework/inc/uielement/toolbarwrapper.hxx | 11 +++++ 2 files changed, 83 insertions(+), 4 deletions(-) (limited to 'framework/inc') diff --git a/framework/inc/uielement/toolbarmanager.hxx b/framework/inc/uielement/toolbarmanager.hxx index e9578bda6aad..8a87c2a6b78a 100644 --- a/framework/inc/uielement/toolbarmanager.hxx +++ b/framework/inc/uielement/toolbarmanager.hxx @@ -33,11 +33,14 @@ #include #include +#include + #include #include #include #include +#include #include #include #include @@ -51,6 +54,55 @@ class Menu; namespace framework { +class ToolBarManager; + +class ToolBarManagerImpl +{ +public: + virtual ~ToolBarManagerImpl() = default; + virtual void Init() = 0; + virtual void Destroy() = 0; + virtual css::uno::Reference GetInterface() = 0; + virtual css::uno::Reference CreateToolBoxController( + const css::uno::Reference& rFrame, + ToolBoxItemId nId, + const OUString& aCommandURL ) = 0; + virtual void InsertItem(ToolBoxItemId nId, + const OUString& rString, + const OUString& rCommandURL, + const OUString& rTooltip, + const OUString& rLabel, + ToolBoxItemBits nItemBits) = 0; + virtual void InsertSeparator() = 0; + virtual void InsertSpace() = 0; + virtual void InsertBreak() = 0; + virtual ToolBoxItemId GetItemId(sal_uInt16 nPos) = 0; + virtual ToolBoxItemId GetCurItemId() = 0; + virtual OUString GetItemCommand(ToolBoxItemId nId) = 0; + virtual sal_uInt16 GetItemCount() = 0; + virtual void SetItemCheckable(ToolBoxItemId nId) = 0; + virtual void HideItem(ToolBoxItemId nId, const OUString& rCommandURL) = 0; + virtual bool IsItemVisible(ToolBoxItemId nId, const OUString& rCommandURL) = 0; + virtual void Clear() = 0; + virtual void SetName(const OUString& rName) = 0; + virtual void SetHelpId(const OString& rHelpId) = 0; + virtual bool WillUsePopupMode() = 0; + virtual bool IsReallyVisible() = 0; + virtual void SetIconSize(ToolBoxButtonSize eSize) = 0; + virtual vcl::ImageType GetImageSize() = 0; + virtual void ConnectCallbacks(ToolBarManager* pManager) = 0; + virtual void SetMenuType(ToolBoxMenuType eType) = 0; + virtual void MergeToolbar(ToolBoxItemId nItemId, + const OUString& rModuleIdentifier, + CommandToInfoMap& rCommandMap, + MergeToolbarInstruction& rInstruction) = 0; + virtual void SetItemImage(ToolBoxItemId nId, + const OUString& rCommandURL, + const Image& rImage) = 0; + virtual void UpdateSize() = 0; + virtual void SetItemWindow(ToolBoxItemId nItemId, vcl::Window* pNewWindow) = 0; +}; + typedef ::cppu::WeakImplHelper< css::frame::XFrameActionListener, css::lang::XComponent, @@ -64,6 +116,11 @@ class ToolBarManager final : public ToolbarManager_Base const css::uno::Reference< css::frame::XFrame >& rFrame, const OUString& rResourceName, ToolBox* pToolBar ); + ToolBarManager( const css::uno::Reference< css::uno::XComponentContext >& rxContext, + const css::uno::Reference< css::frame::XFrame >& rFrame, + const OUString& rResourceName, + weld::Toolbar* pToolBar, + weld::Builder* pBuilder ); virtual ~ToolBarManager() override; ToolBox* GetToolBar() const; @@ -100,6 +157,13 @@ class ToolBarManager final : public ToolbarManager_Base EXEC_CMD_DOCKALLTOOLBARS }; + enum ClickAction + { + Click, + DblClick, + Execute + }; + struct ExecuteInfo { OUString aToolbarResName; @@ -108,8 +172,10 @@ class ToolBarManager final : public ToolbarManager_Base css::uno::Reference< css::awt::XWindow > xWindow; }; - private: - DECL_LINK(Click, ToolBox *, void); + public: + void OnClick(bool bUseExecute = false); + void OnDropdownClick(bool bCreatePopupWindow = true); + DECL_LINK(DropdownClick, ToolBox *, void); DECL_LINK(DoubleClick, ToolBox *, void); DECL_LINK(Select, ToolBox *, void); @@ -124,6 +190,8 @@ class ToolBarManager final : public ToolbarManager_Base DECL_LINK( OverflowEventListener, VclWindowEvent&, void ); DECL_STATIC_LINK( ToolBarManager, ExecuteHdl_Impl, void*, void ); + private: + void Init(); void AddCustomizeMenuItems(ToolBox const * pToolBar); void InitImageManager(); void RemoveControllers(); @@ -137,7 +205,7 @@ class ToolBarManager final : public ToolbarManager_Base ToolBoxItemBits ConvertStyleToToolboxItemBits( sal_Int32 nStyle ); css::uno::Reference< css::frame::XModel > GetModelFromFrame() const; bool IsPluginMode() const; - void HandleClick(void ( SAL_CALL css::frame::XToolbarController::*_pClick )( )); + void HandleClick(ClickAction eAction); void setToolBarImage(const Image& _aImage,const CommandToInfoMap::const_iterator& _pIter); void impl_elementChanged(bool _bRemove,const css::ui::ConfigurationEvent& Event ); @@ -146,12 +214,12 @@ class ToolBarManager final : public ToolbarManager_Base typedef std::unordered_map SubToolBarToSubToolBarControllerMap; bool m_bDisposed : 1, - m_bAddedToTaskPaneList : 1, m_bFrameActionRegistered : 1, m_bUpdateControllers : 1; sal_Int16 m_eSymbolSize; + std::unique_ptr m_pImpl; VclPtr m_pToolBar; OUString m_aModuleIdentifier; diff --git a/framework/inc/uielement/toolbarwrapper.hxx b/framework/inc/uielement/toolbarwrapper.hxx index c2c93728cb5f..904dfa6c7019 100644 --- a/framework/inc/uielement/toolbarwrapper.hxx +++ b/framework/inc/uielement/toolbarwrapper.hxx @@ -25,6 +25,13 @@ #include #include +namespace weld +{ + class Builder; + class Container; + class Toolbar; +} + namespace framework { @@ -69,6 +76,10 @@ class ToolBarWrapper final : public css::ui::XUIFunctionListener, css::uno::Reference< css::lang::XComponent > m_xToolBarManager; css::uno::Reference< css::uno::XComponentContext > m_xContext; + + std::unique_ptr m_xBuilder; + std::unique_ptr m_xTopLevel; + std::unique_ptr m_xWeldedToolbar; }; } -- cgit