diff options
author | Caolán McNamara <caolanm@redhat.com> | 2020-01-25 20:04:13 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2020-01-25 22:44:57 +0100 |
commit | eeb2d19e77d6dc47c68e8ba0920a02cf64a1247b (patch) | |
tree | 48b058b83abd59d61047d91afe43c6a190412acf | |
parent | 9ce254a7797405b3b655ba4e5be2190cddad2902 (diff) |
Resolves: tdf#130159 hide writedirection unless CTL is enabled
rework as ToolboxControllers registered in Controller.xcu
Change-Id: I3e7fea09fe83d1ed6400218c41384f82b38b07a2
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/87419
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r-- | include/svx/verttexttbxctrl.hxx | 38 | ||||
-rw-r--r-- | officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu | 88 | ||||
-rw-r--r-- | sc/source/ui/app/scdll.cxx | 7 | ||||
-rw-r--r-- | sd/source/ui/app/sddll.cxx | 8 | ||||
-rw-r--r-- | svtools/source/uno/popupwindowcontroller.cxx | 11 | ||||
-rw-r--r-- | svx/source/tbxctrls/verttexttbxctrl.cxx | 120 | ||||
-rw-r--r-- | svx/util/svx.component | 8 | ||||
-rw-r--r-- | sw/source/uibase/app/swmodule.cxx | 7 |
8 files changed, 213 insertions, 74 deletions
diff --git a/include/svx/verttexttbxctrl.hxx b/include/svx/verttexttbxctrl.hxx index 157a1f85def9..12498068c467 100644 --- a/include/svx/verttexttbxctrl.hxx +++ b/include/svx/verttexttbxctrl.hxx @@ -19,37 +19,53 @@ #ifndef INCLUDED_SVX_VERTTEXTTBXCTRL_HXX #define INCLUDED_SVX_VERTTEXTTBXCTRL_HXX -#include <sfx2/tbxctrl.hxx> +#include <com/sun/star/lang/XServiceInfo.hpp> + +#include <cppuhelper/implbase.hxx> +#include <svtools/toolboxcontroller.hxx> + #include <svx/svxdllapi.h> +//HACK to avoid duplicate ImplInheritanceHelper symbols with MSVC: +class SAL_DLLPUBLIC_TEMPLATE SvxVertCTLTextTbxCtrl_Base: + public cppu::ImplInheritanceHelper<svt::ToolboxController, css::lang::XServiceInfo> +{ + using ImplInheritanceHelper::ImplInheritanceHelper; +}; + /* control to remove/insert cjk settings dependent vertical text toolbox item */ -class SvxVertCTLTextTbxCtrl : public SfxToolBoxControl +class SvxVertCTLTextTbxCtrl : public SvxVertCTLTextTbxCtrl_Base { public: - SvxVertCTLTextTbxCtrl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ); + explicit SvxVertCTLTextTbxCtrl(const css::uno::Reference<css::uno::XComponentContext>& rContext); + virtual ~SvxVertCTLTextTbxCtrl() override; - // XInitialization - virtual void SAL_CALL initialize(const css::uno::Sequence<css::uno::Any>& rArguments) override; + // XServiceInfo + virtual OUString SAL_CALL getImplementationName() override = 0; + virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override; + virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override; - virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, - const SfxPoolItem* pState ) override; + // XStatusListener + virtual void SAL_CALL statusChanged(const css::frame::FeatureStateEvent& rEvent) override; }; class SVX_DLLPUBLIC SvxCTLTextTbxCtrl final : public SvxVertCTLTextTbxCtrl { public: - SFX_DECL_TOOLBOX_CONTROL(); - SvxCTLTextTbxCtrl(sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ); + SvxCTLTextTbxCtrl(const css::uno::Reference<css::uno::XComponentContext>& rContext); + + virtual OUString SAL_CALL getImplementationName() override; }; class SVX_DLLPUBLIC SvxVertTextTbxCtrl final : public SvxVertCTLTextTbxCtrl { public: - SFX_DECL_TOOLBOX_CONTROL(); - SvxVertTextTbxCtrl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ); + SvxVertTextTbxCtrl(const css::uno::Reference<css::uno::XComponentContext>& rContext); + + virtual OUString SAL_CALL getImplementationName() override; }; #endif diff --git a/officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu b/officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu index 8ed8d5c901de..b9c4d64f4278 100644 --- a/officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu +++ b/officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu @@ -1371,6 +1371,94 @@ <value>com.sun.star.comp.svx.LineEndToolBoxControl</value> </prop> </node> + <node oor:name="VertTopToBottomToolBoxControl" oor:op="replace"> + <prop oor:name="Command"> + <value>.uno:TextdirectionTopToBottom</value> + </prop> + <prop oor:name="Module"> + <value/> + </prop> + <prop oor:name="Controller"> + <value>com.sun.star.comp.svx.VertTextToolBoxControl</value> + </prop> + </node> + <node oor:name="VertLeftToRightToolBoxControl" oor:op="replace"> + <prop oor:name="Command"> + <value>.uno:TextdirectionLeftToRight</value> + </prop> + <prop oor:name="Module"> + <value/> + </prop> + <prop oor:name="Controller"> + <value>com.sun.star.comp.svx.VertTextToolBoxControl</value> + </prop> + </node> + <node oor:name="VertCaptionToolBoxControl" oor:op="replace"> + <prop oor:name="Command"> + <value>.uno:VerticalCaption</value> + </prop> + <prop oor:name="Module"> + <value/> + </prop> + <prop oor:name="Controller"> + <value>com.sun.star.comp.svx.VertTextToolBoxControl</value> + </prop> + </node> + <node oor:name="VertDrawFontworkToolBoxControl" oor:op="replace"> + <prop oor:name="Command"> + <value>.uno:DrawFontworkVertical</value> + </prop> + <prop oor:name="Module"> + <value/> + </prop> + <prop oor:name="Controller"> + <value>com.sun.star.comp.svx.VertTextToolBoxControl</value> + </prop> + </node> + <node oor:name="VertTextToolBoxControl" oor:op="replace"> + <prop oor:name="Command"> + <value>.uno:VerticalText</value> + </prop> + <prop oor:name="Module"> + <value/> + </prop> + <prop oor:name="Controller"> + <value>com.sun.star.comp.svx.VertTextToolBoxControl</value> + </prop> + </node> + <node oor:name="VertTextFitToSizeToolBoxControl" oor:op="replace"> + <prop oor:name="Command"> + <value>.uno:VerticalTextFitToSizeTool</value> + </prop> + <prop oor:name="Module"> + <value/> + </prop> + <prop oor:name="Controller"> + <value>com.sun.star.comp.svx.VertTextToolBoxControl</value> + </prop> + </node> + <node oor:name="CTLParaLeftToRightToolBoxControl" oor:op="replace"> + <prop oor:name="Command"> + <value>.uno:ParaLeftToRight</value> + </prop> + <prop oor:name="Module"> + <value/> + </prop> + <prop oor:name="Controller"> + <value>com.sun.star.comp.svx.CTLToolBoxControl</value> + </prop> + </node> + <node oor:name="CTLParaRightToLeftToolBoxControl" oor:op="replace"> + <prop oor:name="Command"> + <value>.uno:ParaRightToLeft</value> + </prop> + <prop oor:name="Module"> + <value/> + </prop> + <prop oor:name="Controller"> + <value>com.sun.star.comp.svx.CTLToolBoxControl</value> + </prop> + </node> <node oor:name="LineStyleToolBoxControl" oor:op="replace"> <prop oor:name="Command"> <value>.uno:XLineStyle</value> diff --git a/sc/source/ui/app/scdll.cxx b/sc/source/ui/app/scdll.cxx index 03d431fc2d5b..c50fcce995cd 100644 --- a/sc/source/ui/app/scdll.cxx +++ b/sc/source/ui/app/scdll.cxx @@ -162,13 +162,6 @@ void ScDLL::Init() SvxGrafGammaToolBoxControl ::RegisterControl(SID_ATTR_GRAF_GAMMA, pMod); SvxGrafTransparenceToolBoxControl::RegisterControl(SID_ATTR_GRAF_TRANSPARENCE, pMod); - SvxVertTextTbxCtrl::RegisterControl(SID_DRAW_CAPTION_VERTICAL, pMod); - SvxVertTextTbxCtrl::RegisterControl(SID_DRAW_TEXT_VERTICAL, pMod); - SvxVertTextTbxCtrl::RegisterControl(SID_TEXTDIRECTION_LEFT_TO_RIGHT, pMod); - SvxVertTextTbxCtrl::RegisterControl(SID_TEXTDIRECTION_TOP_TO_BOTTOM, pMod); - SvxCTLTextTbxCtrl::RegisterControl(SID_ATTR_PARA_LEFT_TO_RIGHT, pMod); - SvxCTLTextTbxCtrl::RegisterControl(SID_ATTR_PARA_RIGHT_TO_LEFT, pMod); - // Media Controller #if HAVE_FEATURE_AVMEDIA ::avmedia::MediaToolBoxControl::RegisterControl( SID_AVMEDIA_TOOLBOX, pMod ); diff --git a/sd/source/ui/app/sddll.cxx b/sd/source/ui/app/sddll.cxx index 4df9b7774d33..dcaab836ec68 100644 --- a/sd/source/ui/app/sddll.cxx +++ b/sd/source/ui/app/sddll.cxx @@ -189,14 +189,6 @@ void SdDLL::RegisterControllers(SdModule* pMod) SvxGrafContrastToolBoxControl::RegisterControl( SID_ATTR_GRAF_CONTRAST, pMod ); SvxGrafGammaToolBoxControl::RegisterControl( SID_ATTR_GRAF_GAMMA, pMod ); SvxGrafTransparenceToolBoxControl::RegisterControl( SID_ATTR_GRAF_TRANSPARENCE, pMod ); - SvxVertTextTbxCtrl::RegisterControl(SID_TEXTDIRECTION_TOP_TO_BOTTOM, pMod); - SvxVertTextTbxCtrl::RegisterControl(SID_TEXTDIRECTION_LEFT_TO_RIGHT, pMod); - SvxVertTextTbxCtrl::RegisterControl(SID_DRAW_CAPTION_VERTICAL, pMod); - SvxVertTextTbxCtrl::RegisterControl(SID_DRAW_FONTWORK_VERTICAL, pMod); - SvxVertTextTbxCtrl::RegisterControl(SID_DRAW_TEXT_VERTICAL, pMod); - SvxVertTextTbxCtrl::RegisterControl(SID_TEXT_FITTOSIZE_VERTICAL, pMod); - SvxCTLTextTbxCtrl::RegisterControl(SID_ATTR_PARA_LEFT_TO_RIGHT, pMod); - SvxCTLTextTbxCtrl::RegisterControl(SID_ATTR_PARA_RIGHT_TO_LEFT, pMod); // register StatusBarControls SvxZoomPageStatusBarControl::RegisterControl( SID_ZOOM_ENTIRE_PAGE, pMod ); diff --git a/svtools/source/uno/popupwindowcontroller.cxx b/svtools/source/uno/popupwindowcontroller.cxx index fcddc6c872c0..66986be60430 100644 --- a/svtools/source/uno/popupwindowcontroller.cxx +++ b/svtools/source/uno/popupwindowcontroller.cxx @@ -185,16 +185,16 @@ void SAL_CALL PopupWindowController::dispose() // XStatusListener void SAL_CALL PopupWindowController::statusChanged( const frame::FeatureStateEvent& rEvent ) { + SolarMutexGuard aSolarLock; + bool bValue = false; rEvent.State >>= bValue; - if (weld::TransportAsXWindow* pTunnel = dynamic_cast<weld::TransportAsXWindow*>(getParent().get())) + if (m_pToolbar) { - auto pToolbar = dynamic_cast<weld::Toolbar*>(pTunnel->getWidget()); - assert(pToolbar && "must be a toolbar"); OString sId = m_aCommandURL.toUtf8(); - pToolbar->set_item_active(sId, bValue); - pToolbar->set_item_sensitive(sId, rEvent.IsEnabled); + m_pToolbar->set_item_active(sId, bValue); + m_pToolbar->set_item_sensitive(sId, rEvent.IsEnabled); return; } @@ -202,7 +202,6 @@ void SAL_CALL PopupWindowController::statusChanged( const frame::FeatureStateEve sal_uInt16 nItemId = 0; if ( getToolboxId( nItemId, &pToolBox ) ) { - SolarMutexGuard aSolarLock; pToolBox->CheckItem( nItemId, bValue ); pToolBox->EnableItem( nItemId, rEvent.IsEnabled ); } diff --git a/svx/source/tbxctrls/verttexttbxctrl.cxx b/svx/source/tbxctrls/verttexttbxctrl.cxx index 24dda13495e9..7fbb87c245d7 100644 --- a/svx/source/tbxctrls/verttexttbxctrl.cxx +++ b/svx/source/tbxctrls/verttexttbxctrl.cxx @@ -17,81 +17,131 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ - +#include <cppuhelper/supportsservice.hxx> #include <svx/svxids.hrc> #include <svx/verttexttbxctrl.hxx> #include <svl/languageoptions.hxx> #include <sfx2/app.hxx> #include <svl/eitem.hxx> #include <vcl/toolbox.hxx> +#include <vcl/weld.hxx> #include <rtl/ustring.hxx> -SFX_IMPL_TOOLBOX_CONTROL(SvxCTLTextTbxCtrl, SfxBoolItem); -SFX_IMPL_TOOLBOX_CONTROL(SvxVertTextTbxCtrl, SfxBoolItem); +SvxCTLTextTbxCtrl::SvxCTLTextTbxCtrl(const css::uno::Reference<css::uno::XComponentContext>& rContext) + : SvxVertCTLTextTbxCtrl(rContext) +{ + addStatusListener(".uno:CTLFontState"); +} -SvxCTLTextTbxCtrl::SvxCTLTextTbxCtrl(sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ) : - SvxVertCTLTextTbxCtrl( nSlotId, nId, rTbx ) +OUString SvxCTLTextTbxCtrl::getImplementationName() { - addStatusListener( ".uno:CTLFontState"); + return "com.sun.star.comp.svx.CTLToolBoxControl"; } -SvxVertTextTbxCtrl::SvxVertTextTbxCtrl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ) : - SvxVertCTLTextTbxCtrl( nSlotId, nId, rTbx ) +extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * +com_sun_star_comp_svx_CTLToolBoxControl_get_implementation( + css::uno::XComponentContext* rContext, + css::uno::Sequence<css::uno::Any> const & ) { - addStatusListener( ".uno:VerticalTextState"); + return cppu::acquire(new SvxCTLTextTbxCtrl(rContext)); } -SvxVertCTLTextTbxCtrl::SvxVertCTLTextTbxCtrl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ) : - SfxToolBoxControl( nSlotId, nId, rTbx ) +SvxVertTextTbxCtrl::SvxVertTextTbxCtrl(const css::uno::Reference<css::uno::XComponentContext>& rContext) + : SvxVertCTLTextTbxCtrl(rContext) { + addStatusListener(".uno:VerticalTextState"); } -SvxVertCTLTextTbxCtrl::~SvxVertCTLTextTbxCtrl( ) +OUString SvxVertTextTbxCtrl::getImplementationName() +{ + return "com.sun.star.comp.svx.VertTextToolBoxControl"; +} + +extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * +com_sun_star_comp_svx_VertTextToolBoxControl_get_implementation( + css::uno::XComponentContext* rContext, + css::uno::Sequence<css::uno::Any> const & ) +{ + return cppu::acquire(new SvxVertTextTbxCtrl(rContext)); +} + +SvxVertCTLTextTbxCtrl::SvxVertCTLTextTbxCtrl(const css::uno::Reference<css::uno::XComponentContext>& rContext) + : SvxVertCTLTextTbxCtrl_Base(rContext, nullptr, OUString()) { } -void SvxVertCTLTextTbxCtrl::initialize(const css::uno::Sequence<css::uno::Any>& rArguments) +SvxVertCTLTextTbxCtrl::~SvxVertCTLTextTbxCtrl( ) { - SfxToolBoxControl::initialize(rArguments); - setFastPropertyValue_NoBroadcast(1, css::uno::makeAny(true)); } -void SvxVertCTLTextTbxCtrl::StateChanged( - sal_uInt16 nSID, - SfxItemState eState, - const SfxPoolItem* pState ) +void SAL_CALL SvxVertCTLTextTbxCtrl::statusChanged(const css::frame::FeatureStateEvent& rEvent) { - SvtLanguageOptions aLangOptions; - bool bCalc = false; + ToolBox* pToolBox = nullptr; + sal_uInt16 nItemId = 0; + bool bVclToolBox = getToolboxId(nItemId, &pToolBox); + bool bEnabled = false; - if ( nSID == SID_VERTICALTEXT_STATE ) + if (rEvent.FeatureURL.Complete == ".uno:VerticalTextState") + { + SvtLanguageOptions aLangOptions; bEnabled = aLangOptions.IsVerticalTextEnabled(); - else if ( nSID == SID_CTLFONT_STATE ) + } + else if (rEvent.FeatureURL.Complete == ".uno:CTLFontState") + { + SvtLanguageOptions aLangOptions; bEnabled = aLangOptions.IsCTLFontEnabled(); + } else { - SfxToolBoxControl::StateChanged(nSID, eState, pState); + // normal command + bool bValue = false; + rEvent.State >>= bValue; + + if (m_pToolbar) + { + OString sId = m_aCommandURL.toUtf8(); + m_pToolbar->set_item_active(sId, bValue); + m_pToolbar->set_item_sensitive(sId, rEvent.IsEnabled); + } + + if (bVclToolBox) + { + pToolBox->CheckItem(nItemId, bValue); + pToolBox->EnableItem(nItemId, rEvent.IsEnabled); + } + return; } - if(!bEnabled) + if (m_pToolbar) { - // always hide if either IsVerticalTextEnabled or IsCTLFontEnabled - // is false - GetToolBox().HideItem( GetId() ); - bCalc = true; + m_pToolbar->set_item_visible(m_aCommandURL.toUtf8(), bEnabled); + return; } - if(bCalc) + + if (bVclToolBox) { - ToolBox& rTbx = GetToolBox(); - vcl::Window* pParent = rTbx.GetParent(); - if(WindowType::FLOATINGWINDOW == pParent->GetType()) + pToolBox->ShowItem(nItemId, bEnabled); + + vcl::Window* pParent = pToolBox->GetParent(); + if (WindowType::FLOATINGWINDOW == pParent->GetType()) { - Size aSize(rTbx.CalcWindowSizePixel()); - rTbx.SetPosSizePixel( Point(), aSize ); + Size aSize(pToolBox->CalcWindowSizePixel()); + pToolBox->SetPosSizePixel( Point(), aSize ); pParent->SetOutputSizePixel( aSize ); } } } +// XServiceInfo +sal_Bool SAL_CALL SvxVertCTLTextTbxCtrl::supportsService( const OUString& ServiceName ) +{ + return cppu::supportsService(this, ServiceName); +} + +css::uno::Sequence< OUString > SvxVertCTLTextTbxCtrl::getSupportedServiceNames() +{ + return { "com.sun.star.frame.ToolbarController" }; +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/svx/util/svx.component b/svx/util/svx.component index 81cae7623bd2..ff8d802394ac 100644 --- a/svx/util/svx.component +++ b/svx/util/svx.component @@ -124,4 +124,12 @@ constructor="com_sun_star_comp_svx_UndoRedoToolBoxControl_get_implementation"> <service name="com.sun.star.frame.ToolbarController"/> </implementation> + <implementation name="com.sun.star.comp.svx.CTLToolBoxControl" + constructor="com_sun_star_comp_svx_CTLToolBoxControl_get_implementation"> + <service name="com.sun.star.frame.ToolbarController"/> + </implementation> + <implementation name="com.sun.star.comp.svx.VertTextToolBoxControl" + constructor="com_sun_star_comp_svx_VertTextToolBoxControl_get_implementation"> + <service name="com.sun.star.frame.ToolbarController"/> + </implementation> </component> diff --git a/sw/source/uibase/app/swmodule.cxx b/sw/source/uibase/app/swmodule.cxx index b62455e83aac..d68c2eff51d4 100644 --- a/sw/source/uibase/app/swmodule.cxx +++ b/sw/source/uibase/app/swmodule.cxx @@ -329,13 +329,6 @@ void SwDLL::RegisterControls() SvxGrafGammaToolBoxControl::RegisterControl( SID_ATTR_GRAF_GAMMA, pMod ); SvxGrafTransparenceToolBoxControl::RegisterControl( SID_ATTR_GRAF_TRANSPARENCE, pMod ); SvxGrafModeToolBoxControl::RegisterControl( SID_ATTR_GRAF_MODE, pMod ); - SvxVertTextTbxCtrl::RegisterControl(SID_TEXTDIRECTION_LEFT_TO_RIGHT, pMod); - SvxVertTextTbxCtrl::RegisterControl(SID_TEXTDIRECTION_TOP_TO_BOTTOM, pMod); - SvxVertTextTbxCtrl::RegisterControl(SID_DRAW_CAPTION_VERTICAL, pMod); - SvxVertTextTbxCtrl::RegisterControl(SID_DRAW_TEXT_VERTICAL, pMod); - - SvxCTLTextTbxCtrl::RegisterControl(SID_ATTR_PARA_LEFT_TO_RIGHT, pMod); - SvxCTLTextTbxCtrl::RegisterControl(SID_ATTR_PARA_RIGHT_TO_LEFT, pMod); #if HAVE_FEATURE_AVMEDIA ::avmedia::MediaToolBoxControl::RegisterControl(SID_AVMEDIA_TOOLBOX, pMod); |