summaryrefslogtreecommitdiff
path: root/framework/inc
diff options
context:
space:
mode:
authorSzymon Kłos <szymon.klos@collabora.com>2021-03-10 16:20:07 +0100
committerSzymon Kłos <szymon.klos@collabora.com>2021-04-06 11:58:20 +0200
commitac1aefd5174258d9bcb41465ce566ed1a0819f3d (patch)
tree4032ae853c330f9360e58f7401294e37da517d43 /framework/inc
parent88cca903a88902e51c24853f1d10aeae39b39cdd (diff)
Extend ToolBarManager to build weld::Toolbar
- 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 <szymon.klos@collabora.com>
Diffstat (limited to 'framework/inc')
-rw-r--r--framework/inc/uielement/toolbarmanager.hxx76
-rw-r--r--framework/inc/uielement/toolbarwrapper.hxx11
2 files changed, 83 insertions, 4 deletions
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 <com/sun/star/uno/XComponentContext.hpp>
#include <com/sun/star/util/XURLTransformer.hpp>
+#include <framework/addonsoptions.hxx>
+
#include <rtl/ustring.hxx>
#include <cppuhelper/implbase.hxx>
#include <cppuhelper/interfacecontainer.hxx>
#include <tools/link.hxx>
+#include <vcl/weld.hxx>
#include <vcl/window.hxx>
#include <vcl/timer.hxx>
#include <vcl/toolbox.hxx>
@@ -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<css::awt::XWindow> GetInterface() = 0;
+ virtual css::uno::Reference<css::frame::XStatusListener> CreateToolBoxController(
+ const css::uno::Reference<css::frame::XFrame>& 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<OUString, SubToolBarControllerVector> SubToolBarToSubToolBarControllerMap;
bool m_bDisposed : 1,
- m_bAddedToTaskPaneList : 1,
m_bFrameActionRegistered : 1,
m_bUpdateControllers : 1;
sal_Int16 m_eSymbolSize;
+ std::unique_ptr<ToolBarManagerImpl> m_pImpl;
VclPtr<ToolBox> 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 <com/sun/star/ui/XUIFunctionListener.hpp>
#include <com/sun/star/uno/XComponentContext.hpp>
+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<weld::Builder> m_xBuilder;
+ std::unique_ptr<weld::Container> m_xTopLevel;
+ std::unique_ptr<weld::Toolbar> m_xWeldedToolbar;
};
}