[Libreoffice-commits] core.git: include/sfx2 include/svtools include/vcl sfx2/Library_sfx.mk sfx2/source svtools/source vcl/source vcl/unx
Caolán McNamara (via logerrit)
logerrit at kemper.freedesktop.org
Mon Dec 23 16:01:56 UTC 2019
include/sfx2/sidebar/ControllerFactory.hxx | 7 +
include/sfx2/weldutils.hxx | 54 +++++++++
include/svtools/generictoolboxcontroller.hxx | 47 +++++---
include/vcl/weld.hxx | 6 +
include/vcl/weldutils.hxx | 14 --
sfx2/Library_sfx.mk | 1
sfx2/source/dialog/recfloat.cxx | 3
sfx2/source/inc/recfloat.hxx | 6 -
sfx2/source/sidebar/ControllerFactory.cxx | 49 ++++++++
sfx2/source/toolbox/weldutils.cxx | 135 ++++++++++++++++++++++++
svtools/source/uno/generictoolboxcontroller.cxx | 104 ++++++++++++------
vcl/source/app/salvtables.cxx | 30 +++++
vcl/source/app/weldutils.cxx | 32 -----
vcl/unx/gtk3/gtk3gtkinst.cxx | 36 ++++++
14 files changed, 426 insertions(+), 98 deletions(-)
New commits:
commit b7570a5f9d026f7cd6f064594bd7599fe36e9a14
Author: Caolán McNamara <caolanm at redhat.com>
AuthorDate: Mon Dec 23 11:16:28 2019 +0000
Commit: Caolán McNamara <caolanm at redhat.com>
CommitDate: Mon Dec 23 17:00:58 2019 +0100
reorganize ToolbarUnoDispatcher to be useful for sidebar
Change-Id: If129d4832f04758705e121bff88ea7d2e45bf96b
Reviewed-on: https://gerrit.libreoffice.org/85755
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm at redhat.com>
Tested-by: Caolán McNamara <caolanm at redhat.com>
diff --git a/include/sfx2/sidebar/ControllerFactory.hxx b/include/sfx2/sidebar/ControllerFactory.hxx
index 056271701110..c54de67b5545 100644
--- a/include/sfx2/sidebar/ControllerFactory.hxx
+++ b/include/sfx2/sidebar/ControllerFactory.hxx
@@ -29,6 +29,8 @@ namespace com::sun::star::frame { class XToolbarController; }
class ToolBox;
+namespace weld { class Toolbar; }
+
namespace sfx2 { namespace sidebar {
/** Convenience class for the easy creation of toolbox controllers.
@@ -45,6 +47,11 @@ public:
const css::uno::Reference<css::awt::XWindow>& rxParentWindow,
const sal_Int32 nItemWidth);
+ static css::uno::Reference<css::frame::XToolbarController> CreateToolBoxController(
+ weld::Toolbar& rToolbar,
+ const OUString& rsCommandName,
+ const css::uno::Reference<css::frame::XFrame>& rxFrame);
+
private:
static css::uno::Reference<css::frame::XToolbarController> CreateToolBarController(
ToolBox* pToolBox,
diff --git a/include/sfx2/weldutils.hxx b/include/sfx2/weldutils.hxx
new file mode 100644
index 000000000000..ccca8b393042
--- /dev/null
+++ b/include/sfx2/weldutils.hxx
@@ -0,0 +1,54 @@
+/* -*- 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/.
+ */
+
+#ifndef INCLUDED_SFX2_WELDUTILS_HXX
+#define INCLUDED_SFX2_WELDUTILS_HXX
+
+#include <com/sun/star/frame/XFrame.hpp>
+#include <com/sun/star/frame/XToolbarController.hpp>
+
+#include <com/sun/star/uno/Reference.hxx>
+#include <tools/link.hxx>
+#include <sfx2/dllapi.h>
+
+#include <map>
+
+namespace weld
+{
+class Toolbar;
+}
+
+class SFX2_DLLPUBLIC ToolbarUnoDispatcher
+{
+private:
+ css::uno::Reference<css::frame::XFrame> m_xFrame;
+ weld::Toolbar* m_pToolbar;
+
+ DECL_LINK(SelectHdl, const OString&, void);
+
+ void CreateController(const OUString& rCommand);
+
+ typedef std::map<OUString, css::uno::Reference<css::frame::XToolbarController>>
+ ControllerContainer;
+ ControllerContainer maControllers;
+
+ css::uno::Reference<css::frame::XToolbarController>
+ GetControllerForCommand(const OUString& rCommand) const;
+
+public:
+ // fill in the label and icons for actions and dispatch the action on item click
+ ToolbarUnoDispatcher(weld::Toolbar& rToolbar,
+ const css::uno::Reference<css::frame::XFrame>& rFrame);
+ void dispose();
+ ~ToolbarUnoDispatcher();
+};
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/svtools/generictoolboxcontroller.hxx b/include/svtools/generictoolboxcontroller.hxx
index 6b9c11cc3924..ddf8dc06cee8 100644
--- a/include/svtools/generictoolboxcontroller.hxx
+++ b/include/svtools/generictoolboxcontroller.hxx
@@ -24,33 +24,46 @@
#include <svtools/toolboxcontroller.hxx>
#include <vcl/toolbox.hxx>
+namespace weld
+{
+ class Toolbar;
+}
+
namespace svt
{
class SVT_DLLPUBLIC GenericToolboxController final : public svt::ToolboxController
{
- public:
- GenericToolboxController( const css::uno::Reference< css::uno::XComponentContext >& rxContext,
- const css::uno::Reference< css::frame::XFrame >& rFrame,
- ToolBox* pToolBox,
- sal_uInt16 nID,
- const OUString& aCommand );
- virtual ~GenericToolboxController() override;
+public:
+ GenericToolboxController( const css::uno::Reference< css::uno::XComponentContext >& rxContext,
+ const css::uno::Reference< css::frame::XFrame >& rFrame,
+ ToolBox* pToolBox,
+ sal_uInt16 nID,
+ const OUString& aCommand );
+
+ GenericToolboxController(const css::uno::Reference< css::uno::XComponentContext >& rxContext,
+ const css::uno::Reference< css::frame::XFrame >& rFrame,
+ weld::Toolbar& rToolbar,
+ const OUString& rCommand);
+
+ virtual ~GenericToolboxController() override;
+
+ // XComponent
+ virtual void SAL_CALL dispose() override;
- // XComponent
- virtual void SAL_CALL dispose() override;
+ // XToolbarController
+ virtual void SAL_CALL execute( sal_Int16 KeyModifier ) override;
- // XToolbarController
- virtual void SAL_CALL execute( sal_Int16 KeyModifier ) override;
+ // XStatusListener
+ virtual void SAL_CALL statusChanged( const css::frame::FeatureStateEvent& Event ) override;
- // XStatusListener
- virtual void SAL_CALL statusChanged( const css::frame::FeatureStateEvent& Event ) override;
+ DECL_STATIC_LINK( GenericToolboxController, ExecuteHdl_Impl, void*, void );
- DECL_STATIC_LINK( GenericToolboxController, ExecuteHdl_Impl, void*, void );
+private:
+ VclPtr<ToolBox> m_xToolbox;
+ sal_uInt16 m_nID;
- private:
- VclPtr<ToolBox> m_pToolbox;
- sal_uInt16 m_nID;
+ weld::Toolbar* m_pToolbox;
};
}
diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index b7d86c9c7df9..e298a85f90c6 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -1966,12 +1966,18 @@ public:
virtual bool get_item_active(const OString& rIdent) const = 0;
virtual void set_item_menu(const OString& rIdent, weld::Menu* pMenu) = 0;
virtual void set_item_popover(const OString& rIdent, weld::Widget* pPopover) = 0;
+ virtual void set_item_visible(const OString& rIdent, bool bVisible) = 0;
+ virtual bool get_item_visible(const OString& rIdent) const = 0;
+ virtual void set_item_label(const OString& rIdent, const OUString& rLabel) = 0;
+ virtual OUString get_item_label(const OString& rIdent) const = 0;
+ virtual void set_item_tooltip_text(const OString& rIdent, const OUString& rTip) = 0;
virtual void insert_separator(int pos, const OUString& rId) = 0;
void append_separator(const OUString& rId) { insert_separator(-1, rId); }
virtual int get_n_items() const = 0;
virtual OString get_item_ident(int nIndex) const = 0;
+ virtual void set_item_ident(int nIndex, const OString& rIdent) = 0;
virtual void set_item_label(int nIndex, const OUString& rLabel) = 0;
virtual void set_item_icon(int nIndex, const css::uno::Reference<css::graphic::XGraphic>& rIcon)
= 0;
diff --git a/include/vcl/weldutils.hxx b/include/vcl/weldutils.hxx
index 764d343902df..66e37637e5f7 100644
--- a/include/vcl/weldutils.hxx
+++ b/include/vcl/weldutils.hxx
@@ -11,7 +11,6 @@
#define INCLUDED_VCL_WELDUTILS_HXX
#include <com/sun/star/awt/XWindow.hpp>
-#include <com/sun/star/frame/XFrame.hpp>
#include <com/sun/star/uno/Reference.hxx>
#include <comphelper/interfacecontainer2.hxx>
#include <cppuhelper/compbase.hxx>
@@ -20,19 +19,6 @@
namespace weld
{
-class Toolbar;
-
-class VCL_DLLPUBLIC ToolbarUnoDispatcher
-{
-private:
- css::uno::Reference<css::frame::XFrame> m_xFrame;
- DECL_LINK(SelectHdl, const OString&, void);
-
-public:
- // fill in the label and icons for actions and dispatch the action on item click
- ToolbarUnoDispatcher(Toolbar& rToolbar, const css::uno::Reference<css::frame::XFrame>& rFrame);
-};
-
typedef cppu::WeakComponentImplHelper<css::awt::XWindow> TransportAsXWindow_Base;
class VCL_DLLPUBLIC TransportAsXWindow : public TransportAsXWindow_Base
diff --git a/sfx2/Library_sfx.mk b/sfx2/Library_sfx.mk
index 5bd8cfca2720..db9b8566b91d 100644
--- a/sfx2/Library_sfx.mk
+++ b/sfx2/Library_sfx.mk
@@ -290,6 +290,7 @@ $(eval $(call gb_Library_add_exception_objects,sfx,\
sfx2/source/statbar/stbitem \
sfx2/source/styles/StyleManager \
sfx2/source/toolbox/tbxitem \
+ sfx2/source/toolbox/weldutils \
sfx2/source/view/classificationcontroller \
sfx2/source/view/classificationhelper \
sfx2/source/view/frame \
diff --git a/sfx2/source/dialog/recfloat.cxx b/sfx2/source/dialog/recfloat.cxx
index 1ff4ba7e0873..ddefb1f6d572 100644
--- a/sfx2/source/dialog/recfloat.cxx
+++ b/sfx2/source/dialog/recfloat.cxx
@@ -102,7 +102,7 @@ SfxRecordingFloat_Impl::SfxRecordingFloat_Impl(SfxBindings* pBind, SfxChildWindo
: SfxModelessDialogController(pBind, pChildWin, pParent, "sfx/ui/floatingrecord.ui",
"FloatingRecord")
, m_xToolbar(m_xBuilder->weld_toolbar("toolbar"))
- , m_aDispatcher(*m_xToolbar, pBind->GetActiveFrame())
+ , m_xDispatcher(new ToolbarUnoDispatcher(*m_xToolbar, pBind->GetActiveFrame()))
{
// start recording
SfxBoolItem aItem( SID_RECORDMACRO, true );
@@ -112,6 +112,7 @@ SfxRecordingFloat_Impl::SfxRecordingFloat_Impl(SfxBindings* pBind, SfxChildWindo
SfxRecordingFloat_Impl::~SfxRecordingFloat_Impl()
{
+ m_xDispatcher->dispose();
}
void SfxRecordingFloat_Impl::FillInfo( SfxChildWinInfo& rInfo ) const
diff --git a/sfx2/source/inc/recfloat.hxx b/sfx2/source/inc/recfloat.hxx
index e9d2dd7eb97e..b7aa71668491 100644
--- a/sfx2/source/inc/recfloat.hxx
+++ b/sfx2/source/inc/recfloat.hxx
@@ -20,9 +20,9 @@
#ifndef INCLUDED_SFX2_SOURCE_INC_RECFLOAT_HXX
#define INCLUDED_SFX2_SOURCE_INC_RECFLOAT_HXX
-#include <sfx2/childwin.hxx>
#include <sfx2/basedlgs.hxx>
-#include <vcl/weldutils.hxx>
+#include <sfx2/childwin.hxx>
+#include <sfx2/weldutils.hxx>
class SfxRecordingFloatWrapper_Impl : public SfxChildWindow
{
@@ -41,7 +41,7 @@ public:
class SfxRecordingFloat_Impl : public SfxModelessDialogController
{
std::unique_ptr<weld::Toolbar> m_xToolbar;
- weld::ToolbarUnoDispatcher m_aDispatcher;
+ std::unique_ptr<ToolbarUnoDispatcher> m_xDispatcher;
public:
SfxRecordingFloat_Impl(SfxBindings* pBindings,
SfxChildWindow* pChildWin,
diff --git a/sfx2/source/sidebar/ControllerFactory.cxx b/sfx2/source/sidebar/ControllerFactory.cxx
index 643d364bb266..edb29abd5280 100644
--- a/sfx2/source/sidebar/ControllerFactory.cxx
+++ b/sfx2/source/sidebar/ControllerFactory.cxx
@@ -137,6 +137,55 @@ Reference<frame::XToolbarController> ControllerFactory::CreateToolBoxController(
return xController;
}
+Reference<frame::XToolbarController> ControllerFactory::CreateToolBoxController(
+ weld::Toolbar& rToolbar,
+ const OUString& rsCommandName,
+ const Reference<frame::XFrame>& rxFrame)
+{
+ Reference<frame::XToolbarController> xController;
+
+ xController.set(
+ static_cast<XWeak*>(new svt::GenericToolboxController(
+ ::comphelper::getProcessComponentContext(),
+ rxFrame,
+ rToolbar,
+ rsCommandName)),
+ UNO_QUERY);
+
+ // Initialize the controller with eg a service factory.
+ Reference<lang::XInitialization> xInitialization (xController, UNO_QUERY);
+ if (/*!bFactoryHasController &&*/ xInitialization.is())
+ {
+ beans::PropertyValue aPropValue;
+ std::vector<Any> aPropertyVector;
+
+ aPropValue.Name = "Frame";
+ aPropValue.Value <<= rxFrame;
+ aPropertyVector.push_back(makeAny(aPropValue));
+
+ aPropValue.Name = "ServiceManager";
+ aPropValue.Value <<= ::comphelper::getProcessServiceFactory();
+ aPropertyVector.push_back(makeAny(aPropValue));
+
+ aPropValue.Name = "CommandURL";
+ aPropValue.Value <<= rsCommandName;
+ aPropertyVector.push_back(makeAny(aPropValue));
+
+ Sequence<Any> aArgs (comphelper::containerToSequence(aPropertyVector));
+ xInitialization->initialize(aArgs);
+ }
+
+ if (xController.is())
+ {
+ Reference<util::XUpdatable> xUpdatable(xController, UNO_QUERY);
+ if (xUpdatable.is())
+ xUpdatable->update();
+ }
+
+ return xController;
+}
+
+
Reference<frame::XToolbarController> ControllerFactory::CreateToolBarController(
ToolBox* pToolBox,
const OUString& rsCommandName,
diff --git a/sfx2/source/toolbox/weldutils.cxx b/sfx2/source/toolbox/weldutils.cxx
new file mode 100644
index 000000000000..3f2d0970cc6e
--- /dev/null
+++ b/sfx2/source/toolbox/weldutils.cxx
@@ -0,0 +1,135 @@
+/* -*- 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/.
+ */
+
+#include <comphelper/dispatchcommand.hxx>
+#include <sfx2/sidebar/ControllerFactory.hxx>
+#include <sfx2/weldutils.hxx>
+#include <vcl/commandinfoprovider.hxx>
+#include <vcl/settings.hxx>
+#include <vcl/weld.hxx>
+
+namespace
+{
+bool lcl_RTLizeCommandURL(OUString& rCommandURL)
+{
+ if (rCommandURL == ".uno:ParaLeftToRight")
+ {
+ rCommandURL = ".uno:ParaRightToLeft";
+ return true;
+ }
+ if (rCommandURL == ".uno:ParaRightToLeft")
+ {
+ rCommandURL = ".uno:ParaLeftToRight";
+ return true;
+ }
+ if (rCommandURL == ".uno:LeftPara")
+ {
+ rCommandURL = ".uno:RightPara";
+ return true;
+ }
+ if (rCommandURL == ".uno:RightPara")
+ {
+ rCommandURL = ".uno:LeftPara";
+ return true;
+ }
+ if (rCommandURL == ".uno:AlignLeft")
+ {
+ rCommandURL = ".uno:AlignRight";
+ return true;
+ }
+ if (rCommandURL == ".uno:AlignRight")
+ {
+ rCommandURL = ".uno:AlignLeft";
+ return true;
+ }
+ return false;
+}
+}
+
+ToolbarUnoDispatcher::ToolbarUnoDispatcher(weld::Toolbar& rToolbar,
+ const css::uno::Reference<css::frame::XFrame>& rFrame)
+ : m_xFrame(rFrame)
+ , m_pToolbar(&rToolbar)
+{
+ OUString aModuleName(vcl::CommandInfoProvider::GetModuleIdentifier(rFrame));
+ vcl::ImageType eSize = rToolbar.get_icon_size();
+
+ bool bRTL = AllSettings::GetLayoutRTL();
+
+ for (int i = 0, nItems = rToolbar.get_n_items(); i < nItems; ++i)
+ {
+ OUString sCommand = OUString::fromUtf8(rToolbar.get_item_ident(i));
+ if (bRTL && lcl_RTLizeCommandURL(sCommand))
+ rToolbar.set_item_ident(i, sCommand.toUtf8());
+
+ auto aProperties = vcl::CommandInfoProvider::GetCommandProperties(sCommand, aModuleName);
+ OUString aLabel(vcl::CommandInfoProvider::GetLabelForCommand(aProperties));
+ rToolbar.set_item_label(i, aLabel);
+ OUString aTooltip(
+ vcl::CommandInfoProvider::GetTooltipForCommand(sCommand, aProperties, rFrame));
+ rToolbar.set_item_tooltip_text(i, aTooltip);
+ auto xImage(vcl::CommandInfoProvider::GetXGraphicForCommand(sCommand, rFrame, eSize));
+ rToolbar.set_item_icon(i, xImage);
+
+ CreateController(sCommand);
+ }
+
+ rToolbar.connect_clicked(LINK(this, ToolbarUnoDispatcher, SelectHdl));
+}
+
+void ToolbarUnoDispatcher::CreateController(const OUString& rCommand)
+{
+ css::uno::Reference<css::frame::XToolbarController> xController(
+ sfx2::sidebar::ControllerFactory::CreateToolBoxController(*m_pToolbar, rCommand, m_xFrame));
+
+ if (xController.is())
+ maControllers.insert(std::make_pair(rCommand, xController));
+}
+
+css::uno::Reference<css::frame::XToolbarController>
+ToolbarUnoDispatcher::GetControllerForCommand(const OUString& rCommand) const
+{
+ ControllerContainer::const_iterator iController(maControllers.find(rCommand));
+ if (iController != maControllers.end())
+ return iController->second;
+
+ return css::uno::Reference<css::frame::XToolbarController>();
+}
+
+IMPL_LINK(ToolbarUnoDispatcher, SelectHdl, const OString&, rCommand, void)
+{
+ css::uno::Reference<css::frame::XToolbarController> xController(
+ GetControllerForCommand(OUString::fromUtf8(rCommand)));
+
+ if (xController.is())
+ xController->execute(0);
+}
+
+void ToolbarUnoDispatcher::dispose()
+{
+ if (!m_pToolbar)
+ return;
+
+ ControllerContainer aControllers;
+ aControllers.swap(maControllers);
+ for (auto const& controller : aControllers)
+ {
+ css::uno::Reference<css::lang::XComponent> xComponent(controller.second,
+ css::uno::UNO_QUERY);
+ if (xComponent.is())
+ xComponent->dispose();
+ }
+
+ m_pToolbar->connect_clicked(Link<const OString&, void>());
+ m_pToolbar = nullptr;
+}
+
+ToolbarUnoDispatcher::~ToolbarUnoDispatcher() { dispose(); }
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svtools/source/uno/generictoolboxcontroller.cxx b/svtools/source/uno/generictoolboxcontroller.cxx
index c4e409546018..e126ec8b68a1 100644
--- a/svtools/source/uno/generictoolboxcontroller.cxx
+++ b/svtools/source/uno/generictoolboxcontroller.cxx
@@ -26,6 +26,7 @@
#include <com/sun/star/frame/XDispatch.hpp>
#include <vcl/svapp.hxx>
+#include <vcl/weld.hxx>
using namespace css::awt;
using namespace css::uno;
@@ -53,10 +54,28 @@ GenericToolboxController::GenericToolboxController( const Reference< XComponentC
const Reference< XFrame >& rFrame,
ToolBox* pToolbox,
sal_uInt16 nID,
- const OUString& aCommand ) :
- svt::ToolboxController( rxContext, rFrame, aCommand )
- , m_pToolbox( pToolbox )
- , m_nID( nID )
+ const OUString& aCommand )
+ : svt::ToolboxController( rxContext, rFrame, aCommand )
+ , m_xToolbox( pToolbox )
+ , m_nID( nID )
+ , m_pToolbox(nullptr)
+{
+ // Initialization is done through ctor
+ m_bInitialized = true;
+
+ // insert main command to our listener map
+ if ( !m_aCommandURL.isEmpty() )
+ m_aListenerMap.emplace( aCommand, Reference< XDispatch >() );
+}
+
+GenericToolboxController::GenericToolboxController( const Reference< XComponentContext >& rxContext,
+ const Reference< XFrame >& rFrame,
+ weld::Toolbar& rToolbar,
+ const OUString& aCommand )
+ : svt::ToolboxController( rxContext, rFrame, aCommand )
+ , m_xToolbox( nullptr )
+ , m_nID( 0 )
+ , m_pToolbox(&rToolbar)
{
// Initialization is done through ctor
m_bInitialized = true;
@@ -73,8 +92,9 @@ GenericToolboxController::~GenericToolboxController()
void SAL_CALL GenericToolboxController::dispose()
{
SolarMutexGuard aSolarMutexGuard;
- m_pToolbox.clear();
+ m_xToolbox.clear();
m_nID = 0;
+ m_pToolbox = nullptr;
svt::ToolboxController::dispose();
}
@@ -125,40 +145,60 @@ void GenericToolboxController::statusChanged( const FeatureStateEvent& Event )
if ( m_bDisposed )
return;
- if ( !m_pToolbox )
- return;
+ if (m_xToolbox)
+ {
+ m_xToolbox->EnableItem( m_nID, Event.IsEnabled );
- m_pToolbox->EnableItem( m_nID, Event.IsEnabled );
+ ToolBoxItemBits nItemBits = m_xToolbox->GetItemBits( m_nID );
+ nItemBits &= ~ToolBoxItemBits::CHECKABLE;
+ TriState eTri = TRISTATE_FALSE;
- ToolBoxItemBits nItemBits = m_pToolbox->GetItemBits( m_nID );
- nItemBits &= ~ToolBoxItemBits::CHECKABLE;
- TriState eTri = TRISTATE_FALSE;
+ bool bValue;
+ OUString aStrValue;
+ ItemStatus aItemState;
- bool bValue;
- OUString aStrValue;
- ItemStatus aItemState;
+ if ( Event.State >>= bValue )
+ {
+ // Boolean, treat it as checked/unchecked
+ m_xToolbox->SetItemBits( m_nID, nItemBits );
+ m_xToolbox->CheckItem( m_nID, bValue );
+ if ( bValue )
+ eTri = TRISTATE_TRUE;
+ nItemBits |= ToolBoxItemBits::CHECKABLE;
+ }
+ else if ( Event.State >>= aStrValue )
+ {
+ m_xToolbox->SetItemText( m_nID, aStrValue );
+ }
+ else if ( Event.State >>= aItemState )
+ {
+ eTri = TRISTATE_INDET;
+ nItemBits |= ToolBoxItemBits::CHECKABLE;
+ }
- if ( Event.State >>= bValue )
- {
- // Boolean, treat it as checked/unchecked
- m_pToolbox->SetItemBits( m_nID, nItemBits );
- m_pToolbox->CheckItem( m_nID, bValue );
- if ( bValue )
- eTri = TRISTATE_TRUE;
- nItemBits |= ToolBoxItemBits::CHECKABLE;
+ m_xToolbox->SetItemState( m_nID, eTri );
+ m_xToolbox->SetItemBits( m_nID, nItemBits );
}
- else if ( Event.State >>= aStrValue )
- {
- m_pToolbox->SetItemText( m_nID, aStrValue );
- }
- else if ( Event.State >>= aItemState )
+
+ if (m_pToolbox)
{
- eTri = TRISTATE_INDET;
- nItemBits |= ToolBoxItemBits::CHECKABLE;
- }
+ OString sId = m_aCommandURL.toUtf8();
- m_pToolbox->SetItemState( m_nID, eTri );
- m_pToolbox->SetItemBits( m_nID, nItemBits );
+ m_pToolbox->set_item_sensitive(sId, Event.IsEnabled);
+
+ bool bValue;
+ OUString aStrValue;
+
+ if ( Event.State >>= bValue )
+ {
+ // Boolean, treat it as checked/unchecked
+ m_pToolbox->set_item_active( sId, bValue );
+ }
+ else if ( Event.State >>= aStrValue )
+ {
+ m_pToolbox->set_item_label( sId, aStrValue );
+ }
+ }
}
IMPL_STATIC_LINK( GenericToolboxController, ExecuteHdl_Impl, void*, p, void )
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 7e56847ae509..33870d28111d 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -971,6 +971,16 @@ public:
return m_xToolBox->IsItemEnabled(m_xToolBox->GetItemId(OUString::fromUtf8(rIdent)));
}
+ virtual void set_item_visible(const OString& rIdent, bool bVisible) override
+ {
+ m_xToolBox->ShowItem(m_xToolBox->GetItemId(OUString::fromUtf8(rIdent)), bVisible);
+ }
+
+ virtual bool get_item_visible(const OString& rIdent) const override
+ {
+ return m_xToolBox->IsItemVisible(m_xToolBox->GetItemId(OUString::fromUtf8(rIdent)));
+ }
+
virtual void set_item_active(const OString& rIdent, bool bActive) override
{
sal_uInt16 nItemId = m_xToolBox->GetItemId(OUString::fromUtf8(rIdent));
@@ -1045,11 +1055,26 @@ public:
return m_xToolBox->GetItemCommand(m_xToolBox->GetItemId(nIndex)).toUtf8();
}
+ virtual void set_item_ident(int nIndex, const OString& rIdent) override
+ {
+ return m_xToolBox->SetItemCommand(m_xToolBox->GetItemId(nIndex), OUString::fromUtf8(rIdent));
+ }
+
virtual void set_item_label(int nIndex, const OUString& rLabel) override
{
m_xToolBox->SetItemText(m_xToolBox->GetItemId(nIndex), rLabel);
}
+ virtual OUString get_item_label(const OString& rIdent) const override
+ {
+ return m_xToolBox->GetItemText(m_xToolBox->GetItemId(OUString::fromUtf8(rIdent)));
+ }
+
+ virtual void set_item_label(const OString& rIdent, const OUString& rLabel) override
+ {
+ m_xToolBox->SetItemText(m_xToolBox->GetItemId(OUString::fromUtf8(rIdent)), rLabel);
+ }
+
virtual void set_item_icon(int nIndex, const css::uno::Reference<css::graphic::XGraphic>& rIcon) override
{
m_xToolBox->SetItemImage(m_xToolBox->GetItemId(nIndex), Image(rIcon));
@@ -1060,6 +1085,11 @@ public:
m_xToolBox->SetQuickHelpText(m_xToolBox->GetItemId(nIndex), rTip);
}
+ virtual void set_item_tooltip_text(const OString& rIdent, const OUString& rTip) override
+ {
+ m_xToolBox->SetQuickHelpText(m_xToolBox->GetItemId(OUString::fromUtf8(rIdent)), rTip);
+ }
+
virtual vcl::ImageType get_icon_size() const override
{
return m_xToolBox->GetImageSize();
diff --git a/vcl/source/app/weldutils.cxx b/vcl/source/app/weldutils.cxx
index 8fc3a16459cf..dea707be3c5e 100644
--- a/vcl/source/app/weldutils.cxx
+++ b/vcl/source/app/weldutils.cxx
@@ -7,9 +7,9 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
-#include <comphelper/dispatchcommand.hxx>
#include <vcl/builderpage.hxx>
#include <vcl/commandinfoprovider.hxx>
+#include <vcl/settings.hxx>
#include <vcl/svapp.hxx>
#include <vcl/weldutils.hxx>
@@ -105,36 +105,6 @@ void TriStateEnabled::ButtonToggled(weld::ToggleButton& rToggle)
}
eState = rToggle.get_state();
}
-
-ToolbarUnoDispatcher::ToolbarUnoDispatcher(Toolbar& rToolbar,
- const css::uno::Reference<css::frame::XFrame>& rFrame)
- : m_xFrame(rFrame)
-{
- OUString aModuleName(vcl::CommandInfoProvider::GetModuleIdentifier(rFrame));
- vcl::ImageType eSize = rToolbar.get_icon_size();
-
- for (int i = 0, nItems = rToolbar.get_n_items(); i < nItems; ++i)
- {
- OUString sCommand = OUString::fromUtf8(rToolbar.get_item_ident(i));
-
- auto aProperties = vcl::CommandInfoProvider::GetCommandProperties(sCommand, aModuleName);
- OUString aLabel(vcl::CommandInfoProvider::GetLabelForCommand(aProperties));
- rToolbar.set_item_label(i, aLabel);
- OUString aTooltip(
- vcl::CommandInfoProvider::GetTooltipForCommand(sCommand, aProperties, rFrame));
- rToolbar.set_item_tooltip_text(i, aTooltip);
- auto xImage(vcl::CommandInfoProvider::GetXGraphicForCommand(sCommand, rFrame, eSize));
- rToolbar.set_item_icon(i, xImage);
- }
-
- rToolbar.connect_clicked(LINK(this, ToolbarUnoDispatcher, SelectHdl));
-}
-
-IMPL_LINK(ToolbarUnoDispatcher, SelectHdl, const OString&, rCommand, void)
-{
- comphelper::dispatchCommand(OUString::fromUtf8(rCommand), m_xFrame,
- css::uno::Sequence<css::beans::PropertyValue>());
-}
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index 152893cad43f..05e0b89efad0 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -7122,6 +7122,18 @@ public:
return gtk_widget_get_sensitive(GTK_WIDGET(m_aMap.find(rIdent)->second));
}
+ virtual void set_item_visible(const OString& rIdent, bool bVisible) override
+ {
+ disable_item_notify_events();
+ gtk_widget_set_visible(GTK_WIDGET(m_aMap[rIdent]), bVisible);
+ enable_item_notify_events();
+ }
+
+ virtual bool get_item_visible(const OString& rIdent) const override
+ {
+ return gtk_widget_get_visible(GTK_WIDGET(m_aMap.find(rIdent)->second));
+ }
+
virtual void set_item_active(const OString& rIdent, bool bActive) override
{
disable_item_notify_events();
@@ -7178,12 +7190,30 @@ public:
return OString(pStr, pStr ? strlen(pStr) : 0);
}
+ virtual void set_item_ident(int nIndex, const OString& rIdent) override
+ {
+ GtkToolItem* pItem = gtk_toolbar_get_nth_item(m_pToolbar, nIndex);
+ gtk_buildable_set_name(GTK_BUILDABLE(pItem), rIdent.getStr());
+ }
+
virtual void set_item_label(int nIndex, const OUString& rLabel) override
{
GtkToolItem* pItem = gtk_toolbar_get_nth_item(m_pToolbar, nIndex);
gtk_tool_button_set_label(GTK_TOOL_BUTTON(pItem), MapToGtkAccelerator(rLabel).getStr());
}
+ virtual void set_item_label(const OString& rIdent, const OUString& rLabel) override
+ {
+ GtkToolButton* pItem = m_aMap[rIdent];
+ gtk_tool_button_set_label(GTK_TOOL_BUTTON(pItem), MapToGtkAccelerator(rLabel).getStr());
+ }
+
+ OUString get_item_label(const OString& rIdent) const override
+ {
+ const gchar* pText = gtk_tool_button_get_label(m_aMap.find(rIdent)->second);
+ return OUString(pText, pText ? strlen(pText) : 0, RTL_TEXTENCODING_UTF8);
+ }
+
virtual void set_item_icon(int nIndex, const css::uno::Reference<css::graphic::XGraphic>& rIcon) override
{
GtkToolItem* pItem = gtk_toolbar_get_nth_item(m_pToolbar, nIndex);
@@ -7206,6 +7236,12 @@ public:
gtk_widget_set_tooltip_text(GTK_WIDGET(pItem), OUStringToOString(rTip, RTL_TEXTENCODING_UTF8).getStr());
}
+ virtual void set_item_tooltip_text(const OString& rIdent, const OUString& rTip) override
+ {
+ GtkToolButton* pItem = m_aMap[rIdent];
+ gtk_widget_set_tooltip_text(GTK_WIDGET(pItem), OUStringToOString(rTip, RTL_TEXTENCODING_UTF8).getStr());
+ }
+
virtual vcl::ImageType get_icon_size() const override
{
return GtkToVcl(gtk_toolbar_get_icon_size(m_pToolbar));
More information about the Libreoffice-commits
mailing list