From 74d686bc59cd70e7ad89f7845199eb751aa7145d Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Thu, 15 Oct 2015 15:26:50 +0200 Subject: simplify the CellController modify Link<> handling in preparation for some more "make Link<> typed" work Change-Id: Ifdf58cc697c7172102bf9e4cc63f869c522517e6 --- dbaccess/source/ui/dlg/indexfieldscontrol.cxx | 29 +++----------------- include/svtools/editbrowsebox.hxx | 26 ++++++++++-------- svtools/source/brwbox/ebbcontrols.cxx | 38 ++++++++++++++++----------- svtools/source/brwbox/editbrowsebox.cxx | 5 ++-- 4 files changed, 44 insertions(+), 54 deletions(-) diff --git a/dbaccess/source/ui/dlg/indexfieldscontrol.cxx b/dbaccess/source/ui/dlg/indexfieldscontrol.cxx index 26004ae68ba8..b59938c439d5 100644 --- a/dbaccess/source/ui/dlg/indexfieldscontrol.cxx +++ b/dbaccess/source/ui/dlg/indexfieldscontrol.cxx @@ -40,7 +40,6 @@ namespace dbaui class DbaMouseDownListBoxController : public ListBoxCellController { protected: - Link<> m_aOriginalModifyHdl; Link<> m_aAdditionalModifyHdl; public: @@ -53,38 +52,18 @@ namespace dbaui protected: virtual bool WantMouseEvent() const override { return true; } - virtual void SetModifyHdl(const Link<>& _rHdl) override; - - private: - void implCheckLinks(); - DECL_LINK( OnMultiplexModify, void* ); + virtual void callModifyHdl() override; }; void DbaMouseDownListBoxController::SetAdditionalModifyHdl(const Link<>& _rHdl) { m_aAdditionalModifyHdl = _rHdl; - implCheckLinks(); } - void DbaMouseDownListBoxController::SetModifyHdl(const Link<>& _rHdl) + void DbaMouseDownListBoxController::callModifyHdl() { - m_aOriginalModifyHdl = _rHdl; - implCheckLinks(); - } - - IMPL_LINK( DbaMouseDownListBoxController, OnMultiplexModify, void*, _pArg ) - { - m_aAdditionalModifyHdl.Call(_pArg); - m_aOriginalModifyHdl.Call(_pArg); - return 0L; - } - - void DbaMouseDownListBoxController::implCheckLinks() - { - if (m_aAdditionalModifyHdl.IsSet() || m_aOriginalModifyHdl.IsSet()) - ListBoxCellController::SetModifyHdl(LINK(this, DbaMouseDownListBoxController, OnMultiplexModify)); - else - ListBoxCellController::SetModifyHdl(Link<>()); + m_aAdditionalModifyHdl.Call(nullptr); + ListBoxCellController::callModifyHdl(); } // IndexFieldsControl diff --git a/include/svtools/editbrowsebox.hxx b/include/svtools/editbrowsebox.hxx index bbabf5b4dd08..991f9b18f990 100644 --- a/include/svtools/editbrowsebox.hxx +++ b/include/svtools/editbrowsebox.hxx @@ -83,10 +83,11 @@ namespace svt class SVT_DLLPUBLIC CellController : public SvRefBase { friend class EditBrowseBox; + Link maModifyHdl; protected: - VclPtr pWindow; - bool bSuspended; // if the window is hidden and disabled + VclPtr pWindow; + bool bSuspended; // if the window is hidden and disabled public: TYPEINFO(); @@ -111,8 +112,9 @@ namespace svt protected: virtual bool MoveAllowed(const KeyEvent& rEvt) const; - virtual void SetModifyHdl(const Link<>& rLink) = 0; + void SetModifyHdl(const Link& rLink) { maModifyHdl = rLink; } virtual bool WantMouseEvent() const; + virtual void callModifyHdl() { maModifyHdl.Call(nullptr); } }; typedef tools::SvRef CellControllerRef; @@ -249,7 +251,8 @@ namespace svt protected: virtual bool MoveAllowed(const KeyEvent& rEvt) const override; - virtual void SetModifyHdl(const Link<>& rLink) override; + private: + DECL_LINK(ModifyHdl, void*); }; @@ -269,7 +272,8 @@ namespace svt protected: virtual bool MoveAllowed(const KeyEvent& rEvt) const override; - virtual void SetModifyHdl(const Link<>& rLink) override; + private: + DECL_LINK(ModifyHdl, void*); }; @@ -313,15 +317,16 @@ namespace svt public: TYPEINFO_OVERRIDE(); - CheckBoxCellController(CheckBoxControl* pWin):CellController(pWin){} + CheckBoxCellController(CheckBoxControl* pWin); CheckBox& GetCheckBox() const; virtual bool IsModified() const override; virtual void ClearModified() override; protected: - virtual void SetModifyHdl(const Link<>& rLink) override; virtual bool WantMouseEvent() const override; + private: + DECL_LINK(ModifyHdl, void*); }; @@ -354,7 +359,8 @@ namespace svt protected: virtual bool MoveAllowed(const KeyEvent& rEvt) const override; - virtual void SetModifyHdl(const Link<>& rLink) override; + private: + DECL_LINK(ModifyHdl, void*); }; @@ -388,9 +394,7 @@ namespace svt protected: virtual bool MoveAllowed(const KeyEvent& rEvt) const override; - virtual void SetModifyHdl(const Link<>& rLink) override; private: - Link<> maModifyHdl; DECL_LINK_TYPED(ListBoxSelectHdl, ListBox&, void); }; @@ -669,7 +673,7 @@ namespace svt SVT_DLLPRIVATE void implActivateCellOnMouseEvent(const BrowserMouseEvent& _rEvt, bool _bUp); SVT_DLLPRIVATE void impl_construct(); - DECL_DLLPRIVATE_LINK(ModifyHdl, void* ); + DECL_DLLPRIVATE_LINK_TYPED(ModifyHdl, LinkParamNone*, void ); DECL_DLLPRIVATE_LINK_TYPED(StartEditHdl, void*, void ); DECL_DLLPRIVATE_LINK_TYPED(EndEditHdl, void*, void ); DECL_DLLPRIVATE_LINK_TYPED(CellModifiedHdl, void*, void ); diff --git a/svtools/source/brwbox/ebbcontrols.cxx b/svtools/source/brwbox/ebbcontrols.cxx index 491f02be8f89..d31eb22cdc34 100644 --- a/svtools/source/brwbox/ebbcontrols.cxx +++ b/svtools/source/brwbox/ebbcontrols.cxx @@ -77,6 +77,7 @@ namespace svt ComboBoxCellController::ComboBoxCellController(ComboBoxControl* pWin) :CellController(pWin) { + GetComboBox().SetModifyHdl( LINK(this, ComboBoxCellController, ModifyHdl) ); } @@ -129,9 +130,10 @@ namespace svt GetComboBox().SaveValue(); } - void ComboBoxCellController::SetModifyHdl(const Link<>& rLink) + IMPL_LINK_NOARG(ComboBoxCellController, ModifyHdl) { - GetComboBox().SetModifyHdl(rLink); + callModifyHdl(); + return 0; } //= ListBoxControl @@ -215,14 +217,9 @@ namespace svt } - void ListBoxCellController::SetModifyHdl(const Link<>& rLink) + IMPL_LINK_NOARG_TYPED(ListBoxCellController, ListBoxSelectHdl, ListBox&, void) { - maModifyHdl = rLink; - } - - IMPL_LINK_TYPED(ListBoxCellController, ListBoxSelectHdl, ListBox&, rListBox, void) - { - maModifyHdl.Call(&rListBox); + callModifyHdl(); } @@ -333,6 +330,11 @@ namespace svt //= CheckBoxCellController + CheckBoxCellController::CheckBoxCellController(CheckBoxControl* pWin):CellController(pWin) + { + static_cast(GetWindow()).SetModifyHdl( LINK(this, CheckBoxCellController, ModifyHdl) ); + } + bool CheckBoxCellController::WantMouseEvent() const { return true; @@ -357,9 +359,10 @@ namespace svt } - void CheckBoxCellController::SetModifyHdl(const Link<>& rLink) + IMPL_LINK_NOARG(CheckBoxCellController, ModifyHdl) { - static_cast(GetWindow()).SetModifyHdl(rLink); + callModifyHdl(); + return 0; } @@ -386,6 +389,7 @@ namespace svt ,m_pEditImplementation( new EditImplementation( *_pEdit ) ) ,m_bOwnImplementation( true ) { + m_pEditImplementation->SetModifyHdl( LINK(this, EditCellController, ModifyHdl) ); } @@ -394,6 +398,7 @@ namespace svt ,m_pEditImplementation( _pImplementation ) ,m_bOwnImplementation( false ) { + m_pEditImplementation->SetModifyHdl( LINK(this, EditCellController, ModifyHdl) ); } @@ -446,9 +451,10 @@ namespace svt } - void EditCellController::SetModifyHdl(const Link<>& rLink) + IMPL_LINK_NOARG(EditCellController, ModifyHdl) { - m_pEditImplementation->SetModifyHdl(rLink); + callModifyHdl(); + return 0; } @@ -458,6 +464,7 @@ namespace svt SpinCellController::SpinCellController(SpinField* pWin) :CellController(pWin) { + GetSpinWindow().SetModifyHdl( LINK(this, SpinCellController, ModifyHdl) ); } @@ -503,9 +510,10 @@ namespace svt } - void SpinCellController::SetModifyHdl(const Link<>& rLink) + IMPL_LINK_NOARG(SpinCellController, ModifyHdl) { - GetSpinWindow().SetModifyHdl(rLink); + callModifyHdl(); + return 0; } diff --git a/svtools/source/brwbox/editbrowsebox.cxx b/svtools/source/brwbox/editbrowsebox.cxx index d64b3b850394..b5ad2ce63224 100644 --- a/svtools/source/brwbox/editbrowsebox.cxx +++ b/svtools/source/brwbox/editbrowsebox.cxx @@ -1044,7 +1044,7 @@ namespace svt aController.Clear(); // reset the modify handler - aOldController->SetModifyHdl(Link<>()); + aOldController->SetModifyHdl(Link()); if (bHasFocus) GrabFocus(); // ensure that we have (and keep) the focus @@ -1088,12 +1088,11 @@ namespace svt } - IMPL_LINK_NOARG(EditBrowseBox, ModifyHdl) + IMPL_LINK_NOARG_TYPED(EditBrowseBox, ModifyHdl, LinkParamNone*, void) { if (nCellModifiedEvent) Application::RemoveUserEvent(nCellModifiedEvent); nCellModifiedEvent = Application::PostUserEvent(LINK(this,EditBrowseBox,CellModifiedHdl), NULL, true); - return 0; } -- cgit