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 <[email protected]> AuthorDate: Mon Dec 23 11:16:28 2019 +0000 Commit: Caolán McNamara <[email protected]> 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 <[email protected]> Tested-by: Caolán McNamara <[email protected]> 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)); _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
