[Libreoffice-commits] core.git: include/svx officecfg/registry sc/source sd/source svtools/source svx/source svx/util sw/source

Caolán McNamara (via logerrit) logerrit at kemper.freedesktop.org
Sat Jan 25 21:45:46 UTC 2020


 include/svx/verttexttbxctrl.hxx                                 |   38 ++-
 officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu |   88 +++++++
 sc/source/ui/app/scdll.cxx                                      |    7 
 sd/source/ui/app/sddll.cxx                                      |    8 
 svtools/source/uno/popupwindowcontroller.cxx                    |   11 
 svx/source/tbxctrls/verttexttbxctrl.cxx                         |  120 +++++++---
 svx/util/svx.component                                          |    8 
 sw/source/uibase/app/swmodule.cxx                               |    7 
 8 files changed, 213 insertions(+), 74 deletions(-)

New commits:
commit eeb2d19e77d6dc47c68e8ba0920a02cf64a1247b
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Sat Jan 25 20:04:13 2020 +0000
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Sat Jan 25 22:44:57 2020 +0100

    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 at redhat.com>

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);


More information about the Libreoffice-commits mailing list