diff options
-rw-r--r-- | include/svx/linectrl.hxx | 5 | ||||
-rw-r--r-- | include/svx/sidebar/LinePropertyPanelBase.hxx | 4 | ||||
-rw-r--r-- | svx/source/sidebar/line/LinePropertyPanelBase.cxx | 18 | ||||
-rw-r--r-- | svx/source/tbxctrls/linectrl.cxx | 9 |
4 files changed, 22 insertions, 14 deletions
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)) |