include/vcl/weld/TreeView.hxx        |   12 ++++++------
 vcl/inc/jsdialog/jsdialogbuilder.hxx |    4 +---
 vcl/inc/qt5/QtInstanceTreeView.hxx   |    2 --
 vcl/inc/salvtables.hxx               |    4 ----
 vcl/jsdialog/jsdialogbuilder.cxx     |   16 ----------------
 vcl/qt5/QtInstanceTreeView.cxx       |   10 ----------
 vcl/source/app/salvtables.cxx        |   12 ------------
 vcl/source/weld/TreeView.cxx         |   14 ++++++++++++++
 vcl/unx/gtk3/gtkinst.cxx             |   30 ------------------------------
 9 files changed, 21 insertions(+), 83 deletions(-)

New commits:
commit ac2e20379a59ee5e5224da976aae56b29f97b98e
Author:     Michael Weghorn <[email protected]>
AuthorDate: Mon Dec 22 20:53:35 2025 +0100
Commit:     Michael Weghorn <[email protected]>
CommitDate: Tue Dec 23 10:12:11 2025 +0100

    weld: Deduplicate TreeView::get_toggle implementations
    
    The variant taking an int param can be implemented using
    the variant taking a weld::TreeIter param.
    
    Do so once in the abstract weld::TreeView base class, and drop
    the toolkit-specific implementations.
    
    Also move the method declarations of both methods
    next to each other, so one comment can describe both
    of them.
    
    Change-Id: Id858f36c1efe13b43abb2cad70611c2a9e166a1a
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/196134
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <[email protected]>

diff --git a/include/vcl/weld/TreeView.hxx b/include/vcl/weld/TreeView.hxx
index 6f09f88508ed..f7ac1215bb1b 100644
--- a/include/vcl/weld/TreeView.hxx
+++ b/include/vcl/weld/TreeView.hxx
@@ -243,7 +243,9 @@ public:
     virtual void set_toggle(const TreeIter& rIter, TriState bOn, int col = -1) 
= 0;
 
     // col index -1 gets the expander toggle, enable_toggle_buttons must have 
been called to create that column
-    virtual TriState get_toggle(int row, int col = -1) const = 0;
+    TriState get_toggle(int row, int col = -1) const;
+    virtual TriState get_toggle(const TreeIter& rIter, int col = -1) const = 0;
+
     // col index -1 sets the expander image
     virtual void set_image(int row, const OUString& rImage, int col = -1) = 0;
     // col index -1 sets the expander image
@@ -339,9 +341,6 @@ public:
     virtual bool get_text_emphasis(const TreeIter& rIter, int col) const = 0;
     virtual void set_text_align(const TreeIter& rIter, TxtAlign eAlign, int 
col) = 0;
 
-    // col index -1 gets the expander toggle, enable_toggle_buttons must have 
been called to create that column
-    virtual TriState get_toggle(const TreeIter& rIter, int col = -1) const = 0;
-
     // col index -1 sets the expander image
     virtual void set_image(const TreeIter& rIter, const OUString& rImage, int 
col = -1) = 0;
     // col index -1 sets the expander image
diff --git a/vcl/inc/qt5/QtInstanceTreeView.hxx 
b/vcl/inc/qt5/QtInstanceTreeView.hxx
index 5c9f5a424c11..fa35bca72a47 100644
--- a/vcl/inc/qt5/QtInstanceTreeView.hxx
+++ b/vcl/inc/qt5/QtInstanceTreeView.hxx
@@ -52,7 +52,6 @@ public:
 
     virtual void set_clicks_to_toggle(int nToggleBehavior) override;
 
-    virtual TriState get_toggle(int nRow, int nCol = -1) const override;
     virtual void set_image(int nRow, const OUString& rImage, int nCol = -1) 
override;
     virtual void set_image(int nRow, VirtualDevice& rImage, int nCol = -1) 
override;
     virtual void set_image(int nRow, const 
css::uno::Reference<css::graphic::XGraphic>& rImage,
diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx
index 9cb02b9df797..13b41fb70192 100644
--- a/vcl/inc/salvtables.hxx
+++ b/vcl/inc/salvtables.hxx
@@ -1686,8 +1686,6 @@ public:
 
     virtual bool get_sensitive(const weld::TreeIter& rIter, int col) const 
override;
 
-    virtual TriState get_toggle(int pos, int col = -1) const override;
-
     virtual TriState get_toggle(const weld::TreeIter& rIter, int col = -1) 
const override;
 
     virtual void enable_toggle_buttons(weld::ColumnToggleType eType) override;
diff --git a/vcl/qt5/QtInstanceTreeView.cxx b/vcl/qt5/QtInstanceTreeView.cxx
index 0ec6de7899fd..88c587642219 100644
--- a/vcl/qt5/QtInstanceTreeView.cxx
+++ b/vcl/qt5/QtInstanceTreeView.cxx
@@ -109,11 +109,6 @@ void 
QtInstanceTreeView::enable_toggle_buttons(weld::ColumnToggleType)
 
 void QtInstanceTreeView::set_clicks_to_toggle(int) { assert(false && "Not 
implemented yet"); }
 
-TriState QtInstanceTreeView::get_toggle(int nRow, int nCol) const
-{
-    return get_toggle(treeIter(nRow), nCol);
-}
-
 void QtInstanceTreeView::set_image(int nRow, const OUString& rImage, int nCol)
 {
     set_image(treeIter(nRow), rImage, nCol);
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 8b7e127c17d6..4dce73301719 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -4341,12 +4341,6 @@ bool SalInstanceTreeView::get_sensitive(const 
weld::TreeIter& rIter, int col) co
     return get_sensitive(rVclIter.iter, col);
 }
 
-TriState SalInstanceTreeView::get_toggle(int pos, int col) const
-{
-    SvTreeListEntry* pEntry = m_xTreeView->GetEntry(nullptr, pos);
-    return get_toggle(pEntry, col);
-}
-
 TriState SalInstanceTreeView::get_toggle(const weld::TreeIter& rIter, int col) 
const
 {
     const SalInstanceTreeIter& rVclIter = static_cast<const 
SalInstanceTreeIter&>(rIter);
diff --git a/vcl/source/weld/TreeView.cxx b/vcl/source/weld/TreeView.cxx
index 10b6b221a1e1..f2661d68e9de 100644
--- a/vcl/source/weld/TreeView.cxx
+++ b/vcl/source/weld/TreeView.cxx
@@ -52,6 +52,14 @@ void weld::TreeView::set_toggle(int row, TriState eState, 
int col)
     if (std::unique_ptr<weld::TreeIter> pIter = get_iterator(row))
         set_toggle(*pIter, eState, col);
 }
+
+TriState weld::TreeView::get_toggle(int row, int col) const
+{
+    if (std::unique_ptr<weld::TreeIter> pIter = get_iterator(row))
+        return get_toggle(*pIter, col);
+
+    return TRISTATE_INDET;
+}
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s 
cinkeys+=0=break: */
diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx
index b8af1823d54c..b72aef36588b 100644
--- a/vcl/unx/gtk3/gtkinst.cxx
+++ b/vcl/unx/gtk3/gtkinst.cxx
@@ -14107,15 +14107,6 @@ private:
         return bRet;
     }
 
-    bool get_bool(int pos, int col) const
-    {
-        bool bRet(false);
-        GtkTreeIter iter;
-        if (gtk_tree_model_iter_nth_child(m_pTreeModel, &iter, nullptr, pos))
-            bRet = get_bool(iter, col);
-        return bRet;
-    }
-
     void set_toggle(const GtkTreeIter& iter, TriState eState, int col)
     {
         if (col == -1)
@@ -15337,20 +15328,6 @@ public:
         return 
gtk_tree_selection_iter_is_selected(gtk_tree_view_get_selection(m_pTreeView), 
const_cast<GtkTreeIter*>(&rGtkIter.iter));
     }
 
-    virtual TriState get_toggle(int pos, int col) const override
-    {
-        if (col == -1)
-            col = m_nExpanderToggleCol;
-        else
-            col = to_internal_model(col);
-
-        const auto iter = m_aToggleTriStateMap.find(col);
-        assert(iter != m_aToggleTriStateMap.end());
-        if (get_bool(pos, iter->second))
-            return TRISTATE_INDET;
-        return get_bool(pos, col) ? TRISTATE_TRUE : TRISTATE_FALSE;
-    }
-
     virtual TriState get_toggle(const weld::TreeIter& rIter, int col) const 
override
     {
         if (col == -1)
commit 230a8816f038fece36fb9f1e0e1ac13c2ab471e8
Author:     Michael Weghorn <[email protected]>
AuthorDate: Mon Dec 22 20:46:56 2025 +0100
Commit:     Michael Weghorn <[email protected]>
CommitDate: Tue Dec 23 10:12:02 2025 +0100

    weld: Deduplicate TreeView::set_toggle implementations
    
    The variant taking an int param can be implemented using
    the variant taking a weld::TreeIter param.
    
    Do so once in the abstract weld::TreeView base class, and drop
    the toolkit-specific implementations.
    
    Also move the method declarations of both methods
    next to each other, so one comment can describe both
    of them.
    
    Change-Id: I7864ac48c08d3abb73b3b1f43a53f604e338bcf5
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/196133
    Reviewed-by: Michael Weghorn <[email protected]>
    Tested-by: Jenkins

diff --git a/include/vcl/weld/TreeView.hxx b/include/vcl/weld/TreeView.hxx
index 57256a895080..6f09f88508ed 100644
--- a/include/vcl/weld/TreeView.hxx
+++ b/include/vcl/weld/TreeView.hxx
@@ -239,7 +239,9 @@ public:
     virtual bool get_sensitive(const TreeIter& rIter, int col) const = 0;
 
     // col index -1 sets the expander toggle, enable_toggle_buttons must have 
been called to create that column
-    virtual void set_toggle(int row, TriState eState, int col = -1) = 0;
+    void set_toggle(int row, TriState eState, int col = -1);
+    virtual void set_toggle(const TreeIter& rIter, TriState bOn, int col = -1) 
= 0;
+
     // col index -1 gets the expander toggle, enable_toggle_buttons must have 
been called to create that column
     virtual TriState get_toggle(int row, int col = -1) const = 0;
     // col index -1 sets the expander image
@@ -336,8 +338,7 @@ public:
     virtual void set_text_emphasis(const TreeIter& rIter, bool bOn, int col) = 
0;
     virtual bool get_text_emphasis(const TreeIter& rIter, int col) const = 0;
     virtual void set_text_align(const TreeIter& rIter, TxtAlign eAlign, int 
col) = 0;
-    // col index -1 sets the expander toggle, enable_toggle_buttons must have 
been called to create that column
-    virtual void set_toggle(const TreeIter& rIter, TriState bOn, int col = -1) 
= 0;
+
     // col index -1 gets the expander toggle, enable_toggle_buttons must have 
been called to create that column
     virtual TriState get_toggle(const TreeIter& rIter, int col = -1) const = 0;
 
diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index ee2a118148ee..209fd4ede7ed 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -715,9 +715,7 @@ public:
     JSTreeView(JSDialogSender* pSender, ::SvTabListBox* pTextView, 
SalInstanceBuilder* pBuilder,
                bool bTakeOwnership);
 
-    using SalInstanceTreeView::set_toggle;
-    /// pos is used differently here, it defines how many steps of iterator we 
need to perform to take entry
-    virtual void set_toggle(int pos, TriState eState, int col = -1) override;
+    using weld::TreeView::set_toggle;
     virtual void set_toggle(const weld::TreeIter& rIter, TriState bOn, int col 
= -1) override;
 
     using weld::TreeView::set_sensitive;
diff --git a/vcl/inc/qt5/QtInstanceTreeView.hxx 
b/vcl/inc/qt5/QtInstanceTreeView.hxx
index db96aa75fda4..5c9f5a424c11 100644
--- a/vcl/inc/qt5/QtInstanceTreeView.hxx
+++ b/vcl/inc/qt5/QtInstanceTreeView.hxx
@@ -52,7 +52,6 @@ public:
 
     virtual void set_clicks_to_toggle(int nToggleBehavior) override;
 
-    virtual void set_toggle(int nRow, TriState eState, int nCol = -1) override;
     virtual TriState get_toggle(int nRow, int nCol = -1) const override;
     virtual void set_image(int nRow, const OUString& rImage, int nCol = -1) 
override;
     virtual void set_image(int nRow, VirtualDevice& rImage, int nCol = -1) 
override;
diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx
index 3bbaa8503290..9cb02b9df797 100644
--- a/vcl/inc/salvtables.hxx
+++ b/vcl/inc/salvtables.hxx
@@ -1692,8 +1692,6 @@ public:
 
     virtual void enable_toggle_buttons(weld::ColumnToggleType eType) override;
 
-    virtual void set_toggle(int pos, TriState eState, int col = -1) override;
-
     virtual void set_toggle(const weld::TreeIter& rIter, TriState eState, int 
col = -1) override;
 
     virtual void set_clicks_to_toggle(int nToggleBehavior) override;
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index 8b4f0b6bb2e4..ee28d30450db 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -1686,22 +1686,6 @@ JSTreeView::JSTreeView(JSDialogSender* pSender, 
::SvTabListBox* pTreeView,
 {
 }
 
-void JSTreeView::set_toggle(int pos, TriState eState, int col)
-{
-    SvTreeListEntry* pEntry = m_xTreeView->GetEntry(nullptr, 0);
-
-    while (pEntry && pos--)
-        pEntry = m_xTreeView->Next(pEntry);
-
-    if (pEntry)
-    {
-        SalInstanceTreeView::set_toggle(pEntry, eState, col);
-        signal_toggled(iter_col(SalInstanceTreeIter(pEntry), col));
-
-        sendUpdate();
-    }
-}
-
 void JSTreeView::set_toggle(const weld::TreeIter& rIter, TriState bOn, int col)
 {
     SalInstanceTreeView::set_toggle(rIter, bOn, col);
diff --git a/vcl/qt5/QtInstanceTreeView.cxx b/vcl/qt5/QtInstanceTreeView.cxx
index b0d635ad03ce..0ec6de7899fd 100644
--- a/vcl/qt5/QtInstanceTreeView.cxx
+++ b/vcl/qt5/QtInstanceTreeView.cxx
@@ -109,11 +109,6 @@ void 
QtInstanceTreeView::enable_toggle_buttons(weld::ColumnToggleType)
 
 void QtInstanceTreeView::set_clicks_to_toggle(int) { assert(false && "Not 
implemented yet"); }
 
-void QtInstanceTreeView::set_toggle(int nRow, TriState eState, int nCol)
-{
-    set_toggle(treeIter(nRow), eState, nCol);
-}
-
 TriState QtInstanceTreeView::get_toggle(int nRow, int nCol) const
 {
     return get_toggle(treeIter(nRow), nCol);
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 19ed5b886913..8b7e127c17d6 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -4364,12 +4364,6 @@ void 
SalInstanceTreeView::enable_toggle_buttons(weld::ColumnToggleType eType)
     rData.SetLink(LINK(this, SalInstanceTreeView, ToggleHdl));
 }
 
-void SalInstanceTreeView::set_toggle(int pos, TriState eState, int col)
-{
-    SvTreeListEntry* pEntry = m_xTreeView->GetEntry(nullptr, pos);
-    set_toggle(pEntry, eState, col);
-}
-
 void SalInstanceTreeView::set_toggle(const weld::TreeIter& rIter, TriState 
eState, int col)
 {
     const SalInstanceTreeIter& rVclIter = static_cast<const 
SalInstanceTreeIter&>(rIter);
diff --git a/vcl/source/weld/TreeView.cxx b/vcl/source/weld/TreeView.cxx
index 337787703cc8..10b6b221a1e1 100644
--- a/vcl/source/weld/TreeView.cxx
+++ b/vcl/source/weld/TreeView.cxx
@@ -46,6 +46,12 @@ bool weld::TreeView::get_sensitive(int row, int col) const
 
     return false;
 }
+
+void weld::TreeView::set_toggle(int row, TriState eState, int col)
+{
+    if (std::unique_ptr<weld::TreeIter> pIter = get_iterator(row))
+        set_toggle(*pIter, eState, col);
+}
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s 
cinkeys+=0=break: */
diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx
index 8e5047ffef74..b8af1823d54c 100644
--- a/vcl/unx/gtk3/gtkinst.cxx
+++ b/vcl/unx/gtk3/gtkinst.cxx
@@ -15372,13 +15372,6 @@ public:
         set_toggle(rGtkIter.iter, eState, col);
     }
 
-    virtual void set_toggle(int pos, TriState eState, int col) override
-    {
-        GtkTreeIter iter;
-        if (gtk_tree_model_iter_nth_child(m_pTreeModel, &iter, nullptr, pos))
-            set_toggle(iter, eState, col);
-    }
-
     virtual void enable_toggle_buttons(weld::ColumnToggleType eType) override
     {
         for (GList* pEntry = g_list_first(m_pColumns); pEntry; pEntry = 
g_list_next(pEntry))

Reply via email to