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