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

Noel Grandin noel at peralex.com
Thu Oct 15 06:47:38 PDT 2015


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

New commits:
commit 74d686bc59cd70e7ad89f7845199eb751aa7145d
Author: Noel Grandin <noel at peralex.com>
Date:   Thu Oct 15 15:26:50 2015 +0200

    simplify the CellController modify Link<> handling
    
    in preparation for some more "make Link<> typed" work
    
    Change-Id: Ifdf58cc697c7172102bf9e4cc63f869c522517e6

diff --git a/dbaccess/source/ui/dlg/indexfieldscontrol.cxx b/dbaccess/source/ui/dlg/indexfieldscontrol.cxx
index 26004ae..b59938c 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 bbabf5b..991f9b1 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<LinkParamNone*, void> maModifyHdl;
 
     protected:
-        VclPtr<Control>  pWindow;
-        bool        bSuspended;     // <true> if the window is hidden and disabled
+        VclPtr<Control>            pWindow;
+        bool                       bSuspended;     // <true> 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<LinkParamNone*,void>& rLink) { maModifyHdl = rLink; }
         virtual bool WantMouseEvent() const;
+        virtual void callModifyHdl() { maModifyHdl.Call(nullptr); }
     };
 
     typedef tools::SvRef<CellController> 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 491f02b..d31eb22 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<CheckBoxControl &>(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<CheckBoxControl &>(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 d64b3b8..b5ad2ce 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<LinkParamNone*,void>());
 
             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;
     }
 
 


More information about the Libreoffice-commits mailing list