include/vcl/weld/IconView.hxx        |    8 --------
 include/vcl/weld/ItemView.hxx        |    5 +++++
 include/vcl/weld/TreeView.hxx        |   16 ----------------
 vcl/inc/jsdialog/jsdialogbuilder.hxx |    2 --
 vcl/inc/qt5/QtInstanceIconView.hxx   |    2 +-
 vcl/inc/qt5/QtInstanceTreeView.hxx   |    1 -
 vcl/inc/salvtables.hxx               |    4 +---
 vcl/jsdialog/jsdialogbuilder.cxx     |    6 ------
 vcl/qt5/QtInstanceIconView.cxx       |    5 ++++-
 vcl/qt5/QtInstanceTreeView.cxx       |    2 --
 vcl/source/app/salvtables.cxx        |   12 +++---------
 vcl/source/weld/ItemView.cxx         |   13 +++++++++++++
 vcl/unx/gtk3/gtkinst.cxx             |   16 +++-------------
 13 files changed, 30 insertions(+), 62 deletions(-)

New commits:
commit 5daf2c7c11264bcfb6bda0c9ffc5333d9b2194b6
Author:     Michael Weghorn <[email protected]>
AuthorDate: Sat Dec 20 16:01:34 2025 +0100
Commit:     Michael Weghorn <[email protected]>
CommitDate: Sat Dec 20 22:31:13 2025 +0100

    weld: Move TreeView and ItemView's (do_)remove to ItemView base
    
    By now, both TreeView and ItemView both provide
    index and TreeIter-based weld::(do_)remove methods.
    
    Move the IconView implementation to the shared ItemView
    base class.
    
    This also allows dropping the int-based TreeView::do_remove
    implementations in the toolkit-specific implementations,
    because the previous IconView version now available for both
    ItemView subclasses implements that one directly using the
    variant taking a weld::TreeIter.
    (I.e. this commit simplifies the implementations while leaving
    public weld::TreeView and weld::IconView API unchanged.)
    
    Change-Id: Ie7568fb785560c56d618997e591cf37c84d6df07
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/196006
    Reviewed-by: Michael Weghorn <[email protected]>
    Tested-by: Jenkins

diff --git a/include/vcl/weld/IconView.hxx b/include/vcl/weld/IconView.hxx
index 55e1c63c2c08..c368ed85aa7d 100644
--- a/include/vcl/weld/IconView.hxx
+++ b/include/vcl/weld/IconView.hxx
@@ -53,7 +53,6 @@ protected:
     virtual void do_insert(int pos, const OUString* pStr, const OUString* pId, 
const Bitmap* pIcon,
                            TreeIter* pRet)
         = 0;
-    virtual void do_remove(const TreeIter& rIter) = 0;
     virtual void do_scroll_to_item(const TreeIter& rIter) = 0;
 
 public:
@@ -121,9 +120,6 @@ public:
     virtual void set_item_accessible_name(int pos, const OUString& rName) = 0;
     virtual void set_item_tooltip_text(int pos, const OUString& rToolTip) = 0;
 
-    void remove(int pos);
-    void remove(const TreeIter& rIter);
-
     tools::Rectangle get_rect(int pos) const;
     virtual tools::Rectangle get_rect(const TreeIter& rIter) const = 0;
 
diff --git a/include/vcl/weld/ItemView.hxx b/include/vcl/weld/ItemView.hxx
index be8f97fb3681..e19af46cb030 100644
--- a/include/vcl/weld/ItemView.hxx
+++ b/include/vcl/weld/ItemView.hxx
@@ -28,6 +28,8 @@ protected:
     virtual void do_select_all() = 0;
     virtual void do_unselect_all() = 0;
 
+    virtual void do_remove(const TreeIter& rIter) = 0;
+
     virtual void do_clear() = 0;
 
 public:
@@ -67,6 +69,9 @@ public:
     // return the number of toplevel nodes
     virtual int n_children() const = 0;
 
+    void remove(int pos);
+    void remove(const TreeIter& rIter);
+
     void clear();
 
     void save_value() { m_sSavedValue = get_selected_text(); }
diff --git a/include/vcl/weld/TreeView.hxx b/include/vcl/weld/TreeView.hxx
index cd3909ae09b8..6c36487926d0 100644
--- a/include/vcl/weld/TreeView.hxx
+++ b/include/vcl/weld/TreeView.hxx
@@ -129,11 +129,9 @@ protected:
                            VirtualDevice* pImageSurface, bool 
bChildrenOnDemand, TreeIter* pRet)
         = 0;
     virtual void do_insert_separator(int pos, const OUString& rId) = 0;
-    virtual void do_remove(int pos) = 0;
     virtual void do_scroll_to_row(int row) = 0;
     using weld::ItemView::do_set_cursor;
     virtual void do_set_cursor(int pos) = 0;
-    virtual void do_remove(const TreeIter& rIter) = 0;
     virtual void do_scroll_to_row(const TreeIter& rIter) = 0;
     virtual void do_set_children_on_demand(const TreeIter& rIter, bool 
bChildrenOnDemand) = 0;
     virtual void do_remove_selection() = 0;
@@ -226,13 +224,6 @@ public:
     //by index
     int get_selected_index() const;
 
-    void remove(int pos)
-    {
-        disable_notify_events();
-        do_remove(pos);
-        enable_notify_events();
-    }
-
     // col index -1 gets the first text column
     virtual OUString get_text(int row, int col = -1) const = 0;
     // col index -1 sets the first text column
@@ -335,13 +326,6 @@ public:
     // returns the number of direct children rIter has
     virtual int iter_n_children(const TreeIter& rIter) const = 0;
 
-    void remove(const TreeIter& rIter)
-    {
-        disable_notify_events();
-        do_remove(rIter);
-        enable_notify_events();
-    }
-
     //visually indent this row as if it was at get_iter_depth() + nIndentLevel
     virtual void set_extra_row_indent(const TreeIter& rIter, int nIndentLevel) 
= 0;
     // col index -1 sets the first text column
diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index 2f2ea25d0f6b..10d9afc28f2a 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -745,8 +745,6 @@ public:
     void set_cursor_without_notify(const weld::TreeIter& rIter);
     virtual void do_set_cursor(int pos) override;
 
-    using SalInstanceTreeView::do_remove;
-    virtual void do_remove(int pos) override;
     virtual void do_remove(const weld::TreeIter& rIter) override;
 
     virtual void do_clear() override;
diff --git a/vcl/inc/qt5/QtInstanceTreeView.hxx 
b/vcl/inc/qt5/QtInstanceTreeView.hxx
index 2e0b6f8e4708..d2748d3f7ac6 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 do_remove(int nPos) override;
     virtual OUString get_text(int nRow, int nCol = -1) const override;
     virtual void set_text(int nRow, const OUString& rText, int nCol = -1) 
override;
     virtual void set_sensitive(int nRow, bool bSensitive, int nCol = -1) 
override;
diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx
index 79a77eff9e1c..69dc87236be6 100644
--- a/vcl/inc/salvtables.hxx
+++ b/vcl/inc/salvtables.hxx
@@ -1649,8 +1649,6 @@ public:
 
     virtual void set_font_color(const weld::TreeIter& rIter, const Color& 
rColor) override;
 
-    virtual void do_remove(int pos) override;
-
     virtual int find_text(const OUString& rText) const override;
 
     virtual int find_id(const OUString& rId) const override;
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index aa3bd95861f7..c7eee27eb83a 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -1790,12 +1790,6 @@ void JSTreeView::set_text(const weld::TreeIter& rIter, 
const OUString& rStr, int
     sendUpdate();
 }
 
-void JSTreeView::do_remove(int pos)
-{
-    SalInstanceTreeView::do_remove(pos);
-    sendUpdate();
-}
-
 void JSTreeView::do_remove(const weld::TreeIter& rIter)
 {
     SalInstanceTreeView::do_remove(rIter);
diff --git a/vcl/qt5/QtInstanceTreeView.cxx b/vcl/qt5/QtInstanceTreeView.cxx
index 2a76fee3bf51..df077e6d45ef 100644
--- a/vcl/qt5/QtInstanceTreeView.cxx
+++ b/vcl/qt5/QtInstanceTreeView.cxx
@@ -109,8 +109,6 @@ void 
QtInstanceTreeView::enable_toggle_buttons(weld::ColumnToggleType)
 
 void QtInstanceTreeView::set_clicks_to_toggle(int) { assert(false && "Not 
implemented yet"); }
 
-void QtInstanceTreeView::do_remove(int nPos) { do_remove(treeIter(nPos)); }
-
 OUString QtInstanceTreeView::get_text(int nRow, int nCol) const
 {
     return get_text(treeIter(nRow), nCol);
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 9dced410c951..90177868d7ab 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -4133,12 +4133,6 @@ void SalInstanceTreeView::set_font_color(const 
weld::TreeIter& rIter, const Colo
     set_font_color(rVclIter.iter, rColor);
 }
 
-void SalInstanceTreeView::do_remove(int pos)
-{
-    SvTreeListEntry* pEntry = m_xTreeView->GetEntry(nullptr, pos);
-    m_xTreeView->RemoveEntry(pEntry);
-}
-
 int SalInstanceTreeView::find_text(const OUString& rText) const
 {
     for (SvTreeListEntry* pEntry = m_xTreeView->First(); pEntry; pEntry = 
m_xTreeView->Next(pEntry))
diff --git a/vcl/source/weld/IconView.cxx b/vcl/source/weld/IconView.cxx
index fbc232551007..f1baedc4fd85 100644
--- a/vcl/source/weld/IconView.cxx
+++ b/vcl/source/weld/IconView.cxx
@@ -33,19 +33,6 @@ std::unique_ptr<weld::TreeIter> 
IconView::get_item_at_pos(const Point& rPos)
 
     return {};
 }
-
-void IconView::remove(int pos)
-{
-    if (std::unique_ptr<weld::TreeIter> pIter = get_iterator(pos))
-        remove(*pIter);
-}
-
-void IconView::remove(const TreeIter& rIter)
-{
-    disable_notify_events();
-    do_remove(rIter);
-    enable_notify_events();
-}
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s 
cinkeys+=0=break: */
diff --git a/vcl/source/weld/ItemView.cxx b/vcl/source/weld/ItemView.cxx
index 10b5d4a2ffff..a8ec38592ab6 100644
--- a/vcl/source/weld/ItemView.cxx
+++ b/vcl/source/weld/ItemView.cxx
@@ -84,6 +84,19 @@ void ItemView::unselect_all()
     enable_notify_events();
 }
 
+void ItemView::remove(int pos)
+{
+    if (std::unique_ptr<weld::TreeIter> pIter = get_iterator(pos))
+        remove(*pIter);
+}
+
+void ItemView::remove(const TreeIter& rIter)
+{
+    disable_notify_events();
+    do_remove(rIter);
+    enable_notify_events();
+}
+
 void ItemView::clear()
 {
     disable_notify_events();
diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx
index f82a721fc574..edce731c5d5b 100644
--- a/vcl/unx/gtk3/gtkinst.cxx
+++ b/vcl/unx/gtk3/gtkinst.cxx
@@ -15020,15 +15020,6 @@ public:
         set_font_color(rGtkIter.iter, rColor);
     }
 
-    virtual void do_remove(int pos) override
-    {
-        disable_notify_events();
-        GtkTreeIter iter;
-        gtk_tree_model_iter_nth_child(m_pTreeModel, &iter, nullptr, pos);
-        m_Remove(m_pTreeModel, &iter);
-        enable_notify_events();
-    }
-
     virtual int find_text(const OUString& rText) const override
     {
         Search aSearch(rText, m_nTextCol);
commit 2c2e427ada6c2dff1c543771340ff50c0660aaf2
Author:     Michael Weghorn <[email protected]>
AuthorDate: Sat Dec 20 15:43:49 2025 +0100
Commit:     Michael Weghorn <[email protected]>
CommitDate: Sat Dec 20 22:31:03 2025 +0100

    weld: Introduce iter-based weld::IconView::remove
    
    Replace the index-based purely virtual
    weld::IconView::do_remove by one that takes an iter
    and adjust all toolkit-specific implementations.
    
    Add a corresponding weld::IconView::remove that
    calls this.
    
    For the index-based one, implement the logic
    right in the abstract weld::IconView base
    class, by calling the new iter-based implementation.
    
    This aligns the API more with the weld::TreeView
    one and will allow moving more logic to the
    common weld::ItemView base class in an upcoming
    commit.
    
    Change-Id: I1fa4bf3e7dde4f369e3dc0f73fc9d411d24a2b4c
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/196005
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <[email protected]>

diff --git a/include/vcl/weld/IconView.hxx b/include/vcl/weld/IconView.hxx
index 79e034c23f62..55e1c63c2c08 100644
--- a/include/vcl/weld/IconView.hxx
+++ b/include/vcl/weld/IconView.hxx
@@ -53,7 +53,7 @@ protected:
     virtual void do_insert(int pos, const OUString* pStr, const OUString* pId, 
const Bitmap* pIcon,
                            TreeIter* pRet)
         = 0;
-    virtual void do_remove(int pos) = 0;
+    virtual void do_remove(const TreeIter& rIter) = 0;
     virtual void do_scroll_to_item(const TreeIter& rIter) = 0;
 
 public:
@@ -121,12 +121,8 @@ public:
     virtual void set_item_accessible_name(int pos, const OUString& rName) = 0;
     virtual void set_item_tooltip_text(int pos, const OUString& rToolTip) = 0;
 
-    void remove(int pos)
-    {
-        disable_notify_events();
-        do_remove(pos);
-        enable_notify_events();
-    }
+    void remove(int pos);
+    void remove(const TreeIter& rIter);
 
     tools::Rectangle get_rect(int pos) const;
     virtual tools::Rectangle get_rect(const TreeIter& rIter) const = 0;
diff --git a/vcl/inc/qt5/QtInstanceIconView.hxx 
b/vcl/inc/qt5/QtInstanceIconView.hxx
index ed6c677239ae..e543d7e730ed 100644
--- a/vcl/inc/qt5/QtInstanceIconView.hxx
+++ b/vcl/inc/qt5/QtInstanceIconView.hxx
@@ -44,7 +44,7 @@ public:
     virtual void set_text(int nPos, const OUString& rText) override;
     virtual void set_item_accessible_name(int nPos, const OUString& rName) 
override;
     virtual void set_item_tooltip_text(int nPos, const OUString& rToolTip) 
override;
-    virtual void do_remove(int pos) override;
+    virtual void do_remove(const weld::TreeIter& rIter) override;
     virtual tools::Rectangle get_rect(const weld::TreeIter& rIter) const 
override;
 
     virtual OUString get_text(const weld::TreeIter& rIter) const override;
diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx
index fe800d6bd80c..79a77eff9e1c 100644
--- a/vcl/inc/salvtables.hxx
+++ b/vcl/inc/salvtables.hxx
@@ -1942,7 +1942,7 @@ public:
 
     virtual void selected_foreach(const std::function<bool(weld::TreeIter&)>& 
func) override;
 
-    virtual void do_remove(int pos) override;
+    virtual void do_remove(const weld::TreeIter& rIter) override;
 
     virtual void set_image(int pos, VirtualDevice& rImage) override;
 
diff --git a/vcl/qt5/QtInstanceIconView.cxx b/vcl/qt5/QtInstanceIconView.cxx
index 21531250f6b7..aff9edd4d1ce 100644
--- a/vcl/qt5/QtInstanceIconView.cxx
+++ b/vcl/qt5/QtInstanceIconView.cxx
@@ -149,7 +149,10 @@ void QtInstanceIconView::set_item_tooltip_text(int nPos, 
const OUString& rToolTi
     });
 }
 
-void QtInstanceIconView::do_remove(int) { assert(false && "Not implemented 
yet"); }
+void QtInstanceIconView::do_remove(const weld::TreeIter&)
+{
+    assert(false && "Not implemented yet");
+}
 
 tools::Rectangle QtInstanceIconView::get_rect(const weld::TreeIter&) const
 {
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 1a8854d11cf4..9dced410c951 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -5424,10 +5424,10 @@ void SalInstanceIconView::set_image(int pos, 
VirtualDevice& rIcon)
     }
 }
 
-void SalInstanceIconView::do_remove(int pos)
+void SalInstanceIconView::do_remove(const weld::TreeIter& rIter)
 {
-    SvTreeListEntry* pEntry = m_xIconView->GetEntry(nullptr, pos);
-    m_xIconView->RemoveEntry(pEntry);
+    const SalInstanceTreeIter& rVclIter = static_cast<const 
SalInstanceTreeIter&>(rIter);
+    m_xIconView->RemoveEntry(rVclIter.iter);
 }
 
 OUString SalInstanceIconView::get_text(const weld::TreeIter& rIter) const
diff --git a/vcl/source/weld/IconView.cxx b/vcl/source/weld/IconView.cxx
index f1baedc4fd85..fbc232551007 100644
--- a/vcl/source/weld/IconView.cxx
+++ b/vcl/source/weld/IconView.cxx
@@ -33,6 +33,19 @@ std::unique_ptr<weld::TreeIter> 
IconView::get_item_at_pos(const Point& rPos)
 
     return {};
 }
+
+void IconView::remove(int pos)
+{
+    if (std::unique_ptr<weld::TreeIter> pIter = get_iterator(pos))
+        remove(*pIter);
+}
+
+void IconView::remove(const TreeIter& rIter)
+{
+    disable_notify_events();
+    do_remove(rIter);
+    enable_notify_events();
+}
 }
 
 /* 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 5c5fa040c813..f82a721fc574 100644
--- a/vcl/unx/gtk3/gtkinst.cxx
+++ b/vcl/unx/gtk3/gtkinst.cxx
@@ -16887,13 +16887,12 @@ private:
             gtk_tree_store_set(m_pTreeStore, &iter, nToolTipCol, 
rToolTip.toUtf8().getStr(), -1);
     }
 
-    virtual void do_remove(int pos) override
+    virtual void do_remove(const weld::TreeIter& rIter) override
     {
         disable_notify_events();
+        const GtkInstanceTreeIter& rGtkIter = static_cast<const 
GtkInstanceTreeIter&>(rIter);
         GtkTreeModel* pModel = GTK_TREE_MODEL(m_pTreeStore);
-        GtkTreeIter iter;
-        if (gtk_tree_model_iter_nth_child(pModel, &iter, nullptr, pos))
-            tree_store_remove(pModel, &iter);
+        tree_store_remove(pModel, const_cast<GtkTreeIter*>(&rGtkIter.iter));
         enable_notify_events();
     }
 

Reply via email to