[Libreoffice-commits] core.git: include/svx svx/source

Caolán McNamara (via logerrit) logerrit at kemper.freedesktop.org
Thu Dec 10 13:02:11 UTC 2020


 include/svx/linectrl.hxx                          |    5 +++++
 include/svx/sidebar/LinePropertyPanelBase.hxx     |    4 ++--
 svx/source/sidebar/line/LinePropertyPanelBase.cxx |   18 ++++++------------
 svx/source/tbxctrls/linectrl.cxx                  |    9 +++++++++
 4 files changed, 22 insertions(+), 14 deletions(-)

New commits:
commit 248ceefbbc3be28f7192b986d5d34985106268e1
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Thu Dec 10 11:27:15 2020 +0000
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Thu Dec 10 14:01:25 2020 +0100

    Resolves: tdf#138789 disable widgets on 'none' when status changes
    
    instead of when chage is dispatched, the chart case has its own
    dispatcher that disables the base class one. This fixes the reported
    problem, and the related problem of updating when moving focus from
    one line that has style 'none' to one that doesn't, and vice-versa,
    where no change is dispached on received on context change
    
    Change-Id: I6afb396e75ba93c13fcae71c52618cfce7f9cecb
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107524
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/include/svx/linectrl.hxx b/include/svx/linectrl.hxx
index 62f428aa5136..7ade8dc06643 100644
--- a/include/svx/linectrl.hxx
+++ b/include/svx/linectrl.hxx
@@ -32,6 +32,7 @@ class XLineStyleItem;
 class XLineDashItem;
 
 typedef std::function<bool(const OUString&, const css::uno::Any&)> LineStyleSelectFunction;
+typedef std::function<void(bool)> LineStyleIsNoneFunction;
 
 // SvxLineStyleController:
 class SVXCORE_DLLPUBLIC SvxLineStyleToolBoxControl final : public svt::PopupWindowController
@@ -40,6 +41,7 @@ private:
     std::unique_ptr<svx::ToolboxButtonLineStyleUpdater> m_xBtnUpdater;
 
     LineStyleSelectFunction m_aLineStyleSelectFunction;
+    LineStyleIsNoneFunction m_aLineStyleIsNoneFunction;
 
 public:
     SvxLineStyleToolBoxControl( const css::uno::Reference<css::uno::XComponentContext>& rContext );
@@ -56,7 +58,10 @@ public:
 
     virtual ~SvxLineStyleToolBoxControl() override;
 
+    // called when the user selects a line style
     void setLineStyleSelectFunction(const LineStyleSelectFunction& aLineStyleSelectFunction);
+    // called when the line style changes, can be used to trigger disabling the arrows if the none line style is selected
+    void setLineStyleIsNoneFunction(const LineStyleIsNoneFunction& aLineStyleIsNoneFunction);
     void dispatchLineStyleCommand(const OUString& rCommand, const css::uno::Sequence<css::beans::PropertyValue>& rArgs);
 
 private:
diff --git a/include/svx/sidebar/LinePropertyPanelBase.hxx b/include/svx/sidebar/LinePropertyPanelBase.hxx
index 1905e66d7c2c..cd924e6b8a8f 100644
--- a/include/svx/sidebar/LinePropertyPanelBase.hxx
+++ b/include/svx/sidebar/LinePropertyPanelBase.hxx
@@ -40,7 +40,7 @@ class XDashList;
 
 namespace svx::sidebar
 {
-class DisableArrowsWrapper;
+class LineStyleNoneChange;
 
 class SVX_DLLPUBLIC LinePropertyPanelBase : public PanelLayout
 {
@@ -108,7 +108,7 @@ private:
     //popup windows
     std::unique_ptr<LineWidthPopup> mxLineWidthPopup;
 
-    std::unique_ptr<DisableArrowsWrapper> mxDisableArrowsWrapper;
+    std::unique_ptr<LineStyleNoneChange> mxLineStyleNoneChange;
 
     sal_uInt16 mnTrans;
     MapUnit meMapUnit;
diff --git a/svx/source/sidebar/line/LinePropertyPanelBase.cxx b/svx/source/sidebar/line/LinePropertyPanelBase.cxx
index 2738f1fc4023..f1b49ebde5c1 100644
--- a/svx/source/sidebar/line/LinePropertyPanelBase.cxx
+++ b/svx/source/sidebar/line/LinePropertyPanelBase.cxx
@@ -36,26 +36,20 @@ const char SELECTWIDTH[] = "SelectWidth";
 namespace svx::sidebar {
 
 // trigger disabling the arrows if the none line style is selected
-class DisableArrowsWrapper
+class LineStyleNoneChange
 {
 private:
     LinePropertyPanelBase& m_rPanel;
 
 public:
-    DisableArrowsWrapper(LinePropertyPanelBase& rPanel)
+    LineStyleNoneChange(LinePropertyPanelBase& rPanel)
         : m_rPanel(rPanel)
     {
     }
 
-    bool operator()(std::u16string_view rCommand, const css::uno::Any& rValue)
+    void operator()(bool bLineStyleNone)
     {
-        if (rCommand == u".uno:XLineStyle")
-        {
-            css::drawing::LineStyle eLineStyle(css::drawing::LineStyle_NONE);
-            rValue >>= eLineStyle;
-            m_rPanel.SetNoneLineStyle(eLineStyle == css::drawing::LineStyle_NONE);
-        }
-        return false;
+        m_rPanel.SetNoneLineStyle(bLineStyleNone);
     }
 };
 
@@ -89,7 +83,7 @@ LinePropertyPanelBase::LinePropertyPanelBase(
     mxGridLineProps(m_xBuilder->weld_widget("lineproperties")),
     mxBoxArrowProps(m_xBuilder->weld_widget("arrowproperties")),
     mxLineWidthPopup(new LineWidthPopup(mxTBWidth.get(), *this)),
-    mxDisableArrowsWrapper(new DisableArrowsWrapper(*this)),
+    mxLineStyleNoneChange(new LineStyleNoneChange(*this)),
     mnTrans(0),
     meMapUnit(MapUnit::MapMM),
     mnWidthCoreValue(0),
@@ -150,7 +144,7 @@ void LinePropertyPanelBase::Initialize()
     mxLBCapStyle->connect_changed( LINK( this, LinePropertyPanelBase, ChangeCapStyleHdl ) );
 
     SvxLineStyleToolBoxControl* pLineStyleControl = getLineStyleToolBoxControl(*mxLineStyleDispatch);
-    pLineStyleControl->setLineStyleSelectFunction(*mxDisableArrowsWrapper);
+    pLineStyleControl->setLineStyleIsNoneFunction(*mxLineStyleNoneChange);
 }
 
 void LinePropertyPanelBase::updateLineTransparence(bool bDisabled, bool bSetOrDefault,
diff --git a/svx/source/tbxctrls/linectrl.cxx b/svx/source/tbxctrls/linectrl.cxx
index 5123db3f4bf7..895558d12f20 100644
--- a/svx/source/tbxctrls/linectrl.cxx
+++ b/svx/source/tbxctrls/linectrl.cxx
@@ -96,6 +96,7 @@ void SAL_CALL SvxLineStyleToolBoxControl::statusChanged( const frame::FeatureSta
 
     XDashListRef xList = pItem->GetDashList();
     int nIndex = m_xBtnUpdater->GetStyleIndex();
+    bool bNoneLineStyle = false;
     switch (nIndex)
     {
         case -1:
@@ -110,6 +111,7 @@ void SAL_CALL SvxLineStyleToolBoxControl::statusChanged( const frame::FeatureSta
             }
             else
                 pToolBox->SetItemImage(nId, Image(aEmpty));
+            bNoneLineStyle = true;
             break;
         }
         case 1:
@@ -131,6 +133,8 @@ void SAL_CALL SvxLineStyleToolBoxControl::statusChanged( const frame::FeatureSta
                 pToolBox->SetItemImage(nId, Image(xList->GetUiBitmap(nIndex - 2)));
             break;
     }
+    if (m_aLineStyleIsNoneFunction)
+        m_aLineStyleIsNoneFunction(bNoneLineStyle);
 }
 
 void SAL_CALL SvxLineStyleToolBoxControl::execute(sal_Int16 /*KeyModifier*/)
@@ -173,6 +177,11 @@ void SvxLineStyleToolBoxControl::setLineStyleSelectFunction(const LineStyleSelec
     m_aLineStyleSelectFunction = rLineStyleSelectFunction;
 }
 
+void SvxLineStyleToolBoxControl::setLineStyleIsNoneFunction(const LineStyleIsNoneFunction& rLineStyleIsNoneFunction)
+{
+    m_aLineStyleIsNoneFunction = rLineStyleIsNoneFunction;
+}
+
 void SvxLineStyleToolBoxControl::dispatchLineStyleCommand(const OUString& rCommand, const Sequence<PropertyValue>& rArgs)
 {
     if (m_aLineStyleSelectFunction && m_aLineStyleSelectFunction(rCommand, rArgs[0].Value))


More information about the Libreoffice-commits mailing list