include/vcl/weld/TreeView.hxx | 27 ++++++--------------------- vcl/inc/qt5/QtInstanceTreeView.hxx | 2 -- vcl/inc/salvtables.hxx | 4 ---- vcl/qt5/QtInstanceTreeView.cxx | 4 ---- vcl/source/app/salvtables.cxx | 15 --------------- vcl/source/weld/TreeView.cxx | 21 +++++++++++++++++++++ vcl/unx/gtk3/gtkinst.cxx | 18 ------------------ 7 files changed, 27 insertions(+), 64 deletions(-)
New commits: commit 8ca520cf127a37fc72ccae3c657fdba07f28dc45 Author: Michael Weghorn <[email protected]> AuthorDate: Mon Dec 22 22:57:00 2025 +0100 Commit: Michael Weghorn <[email protected]> CommitDate: Tue Dec 23 10:13:03 2025 +0100 weld: Deduplicate TreeView::is_selected 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. Change-Id: I8480b43ecb190f8f10ae87c28d32466d6b602ac5 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/196140 Tested-by: Jenkins Reviewed-by: Michael Weghorn <[email protected]> diff --git a/include/vcl/weld/TreeView.hxx b/include/vcl/weld/TreeView.hxx index 059f9dfabae8..a31de1d522b1 100644 --- a/include/vcl/weld/TreeView.hxx +++ b/include/vcl/weld/TreeView.hxx @@ -277,7 +277,8 @@ public: void scroll_to_row(int row); void scroll_to_row(const TreeIter& rIter); - virtual bool is_selected(int pos) const = 0; + bool is_selected(int pos) const; + virtual bool is_selected(const TreeIter& rIter) const = 0; using weld::ItemView::set_cursor; void set_cursor(int pos) @@ -345,8 +346,6 @@ public: //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; - virtual bool is_selected(const TreeIter& rIter) const = 0; - virtual void move_subtree(TreeIter& rNode, const TreeIter* pNewParent, int nIndexInNewParent) = 0; diff --git a/vcl/inc/qt5/QtInstanceTreeView.hxx b/vcl/inc/qt5/QtInstanceTreeView.hxx index f945ef8d214d..a4a6d3ead119 100644 --- a/vcl/inc/qt5/QtInstanceTreeView.hxx +++ b/vcl/inc/qt5/QtInstanceTreeView.hxx @@ -54,7 +54,6 @@ public: virtual void swap(int nPos1, int nPos2) override; virtual std::vector<int> get_selected_rows() const override; - virtual bool is_selected(int nPos) const override; using QtInstanceItemView::do_set_cursor; virtual void do_set_cursor(int pos) override; diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx index a21d801c14c4..1069c252df51 100644 --- a/vcl/inc/salvtables.hxx +++ b/vcl/inc/salvtables.hxx @@ -1664,8 +1664,6 @@ public: using SalInstanceItemView::do_set_cursor; virtual void do_set_cursor(int pos) override; - virtual bool is_selected(int pos) const override; - virtual std::vector<int> get_selected_rows() const override; OUString get_text(SvTreeListEntry* pEntry, int col) const; diff --git a/vcl/qt5/QtInstanceTreeView.cxx b/vcl/qt5/QtInstanceTreeView.cxx index 8ee9fac10124..d0f5cbb4cd57 100644 --- a/vcl/qt5/QtInstanceTreeView.cxx +++ b/vcl/qt5/QtInstanceTreeView.cxx @@ -150,8 +150,6 @@ std::vector<int> QtInstanceTreeView::get_selected_rows() const return aSelectedRows; } -bool QtInstanceTreeView::is_selected(int nPos) const { return is_selected(treeIter(nPos)); } - void QtInstanceTreeView::do_set_cursor(int nPos) { do_set_cursor(treeIter(nPos)); } int QtInstanceTreeView::find_text(const OUString& rText) const diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx index e64f78ac739e..9f7d2577beb5 100644 --- a/vcl/source/app/salvtables.cxx +++ b/vcl/source/app/salvtables.cxx @@ -4201,12 +4201,6 @@ void SalInstanceTreeView::do_set_cursor(int pos) } } -bool SalInstanceTreeView::is_selected(int pos) const -{ - SvTreeListEntry* pEntry = m_xTreeView->GetEntry(nullptr, pos); - return m_xTreeView->IsSelected(pEntry); -} - std::vector<int> SalInstanceTreeView::get_selected_rows() const { std::vector<int> aRows; diff --git a/vcl/source/weld/TreeView.cxx b/vcl/source/weld/TreeView.cxx index f708516aabde..c19791de8dc1 100644 --- a/vcl/source/weld/TreeView.cxx +++ b/vcl/source/weld/TreeView.cxx @@ -118,6 +118,14 @@ void weld::TreeView::scroll_to_row(const TreeIter& rIter) do_scroll_to_row(rIter); enable_notify_events(); } + +bool weld::TreeView::is_selected(int pos) const +{ + if (std::unique_ptr<weld::TreeIter> pIter = get_iterator(pos)) + return is_selected(*pIter); + + return false; +} } /* 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 0d7a9b02a0ce..5bcc294881e0 100644 --- a/vcl/unx/gtk3/gtkinst.cxx +++ b/vcl/unx/gtk3/gtkinst.cxx @@ -15171,13 +15171,6 @@ public: enable_notify_events(); } - virtual bool is_selected(int pos) const override - { - GtkTreeIter iter; - gtk_tree_model_iter_nth_child(m_pTreeModel, &iter, nullptr, pos); - return gtk_tree_selection_iter_is_selected(gtk_tree_view_get_selection(m_pTreeView), &iter); - } - virtual std::vector<int> get_selected_rows() const override { std::vector<int> aRows; commit 2d7a769bf845008ef10ac1e0e6e31b38ec95320d Author: Michael Weghorn <[email protected]> AuthorDate: Mon Dec 22 22:51:04 2025 +0100 Commit: Michael Weghorn <[email protected]> CommitDate: Tue Dec 23 10:12:55 2025 +0100 weld: Deduplicate TreeView::{,do_}scroll_to_row 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. Change-Id: Ifbf04cd01f6ea4cbbd2dddcde32f7466407d2948 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/196139 Tested-by: Jenkins Reviewed-by: Michael Weghorn <[email protected]> diff --git a/include/vcl/weld/TreeView.hxx b/include/vcl/weld/TreeView.hxx index 0fc4e09195f4..059f9dfabae8 100644 --- a/include/vcl/weld/TreeView.hxx +++ b/include/vcl/weld/TreeView.hxx @@ -129,7 +129,6 @@ protected: VirtualDevice* pImageSurface, bool bChildrenOnDemand, TreeIter* pRet) = 0; virtual void do_insert_separator(int pos, const OUString& rId) = 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_scroll_to_row(const TreeIter& rIter) = 0; @@ -273,14 +272,10 @@ public: void set_font_color(int pos, const Color& rColor); virtual void set_font_color(const TreeIter& rIter, const Color& rColor) = 0; - // scroll to make 'row' visible, this will also expand all parent rows of 'row' as necessary to - // make 'row' visible - void scroll_to_row(int row) - { - disable_notify_events(); - do_scroll_to_row(row); - enable_notify_events(); - } + // scroll to make given row visible, this will also expand all parent rows + // of the row as necessary to make the row visible + void scroll_to_row(int row); + void scroll_to_row(const TreeIter& rIter); virtual bool is_selected(int pos) const = 0; @@ -350,15 +345,6 @@ public: //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; - // scroll to make rIter visible, this will also expand all parent rows of rIter as necessary to - // make rIter visible - void scroll_to_row(const TreeIter& rIter) - { - disable_notify_events(); - do_scroll_to_row(rIter); - enable_notify_events(); - } - virtual bool is_selected(const TreeIter& rIter) const = 0; virtual void move_subtree(TreeIter& rNode, const TreeIter* pNewParent, int nIndexInNewParent) diff --git a/vcl/inc/qt5/QtInstanceTreeView.hxx b/vcl/inc/qt5/QtInstanceTreeView.hxx index dca83bfed8fa..f945ef8d214d 100644 --- a/vcl/inc/qt5/QtInstanceTreeView.hxx +++ b/vcl/inc/qt5/QtInstanceTreeView.hxx @@ -54,7 +54,6 @@ public: virtual void swap(int nPos1, int nPos2) override; virtual std::vector<int> get_selected_rows() const override; - virtual void do_scroll_to_row(int nRow) override; virtual bool is_selected(int nPos) const override; using QtInstanceItemView::do_set_cursor; virtual void do_set_cursor(int pos) override; diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx index cce28c543c31..a21d801c14c4 100644 --- a/vcl/inc/salvtables.hxx +++ b/vcl/inc/salvtables.hxx @@ -1664,8 +1664,6 @@ public: using SalInstanceItemView::do_set_cursor; virtual void do_set_cursor(int pos) override; - virtual void do_scroll_to_row(int pos) override; - virtual bool is_selected(int pos) const override; virtual std::vector<int> get_selected_rows() const override; diff --git a/vcl/qt5/QtInstanceTreeView.cxx b/vcl/qt5/QtInstanceTreeView.cxx index ea75bf778516..8ee9fac10124 100644 --- a/vcl/qt5/QtInstanceTreeView.cxx +++ b/vcl/qt5/QtInstanceTreeView.cxx @@ -150,8 +150,6 @@ std::vector<int> QtInstanceTreeView::get_selected_rows() const return aSelectedRows; } -void QtInstanceTreeView::do_scroll_to_row(int nRow) { scroll_to_row(treeIter(nRow)); } - bool QtInstanceTreeView::is_selected(int nPos) const { return is_selected(treeIter(nPos)); } void QtInstanceTreeView::do_set_cursor(int nPos) { do_set_cursor(treeIter(nPos)); } diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx index d3d7dcd05a3a..e64f78ac739e 100644 --- a/vcl/source/app/salvtables.cxx +++ b/vcl/source/app/salvtables.cxx @@ -4201,15 +4201,6 @@ void SalInstanceTreeView::do_set_cursor(int pos) } } -void SalInstanceTreeView::do_scroll_to_row(int pos) -{ - assert(m_xTreeView->IsUpdateMode() - && "don't select when frozen, select after thaw. Note selection doesn't survive a " - "freeze"); - SvTreeListEntry* pEntry = m_xTreeView->GetEntry(nullptr, pos); - m_xTreeView->MakeVisible(pEntry); -} - bool SalInstanceTreeView::is_selected(int pos) const { SvTreeListEntry* pEntry = m_xTreeView->GetEntry(nullptr, pos); diff --git a/vcl/source/weld/TreeView.cxx b/vcl/source/weld/TreeView.cxx index a405a14d5c82..f708516aabde 100644 --- a/vcl/source/weld/TreeView.cxx +++ b/vcl/source/weld/TreeView.cxx @@ -105,6 +105,19 @@ void weld::TreeView::set_font_color(int pos, const Color& rColor) if (std::unique_ptr<weld::TreeIter> pIter = get_iterator(pos)) set_font_color(*pIter, rColor); } + +void weld::TreeView::scroll_to_row(int row) +{ + if (std::unique_ptr<weld::TreeIter> pIter = get_iterator(row)) + scroll_to_row(*pIter); +} + +void weld::TreeView::scroll_to_row(const TreeIter& rIter) +{ + disable_notify_events(); + do_scroll_to_row(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 577384b19905..0d7a9b02a0ce 100644 --- a/vcl/unx/gtk3/gtkinst.cxx +++ b/vcl/unx/gtk3/gtkinst.cxx @@ -15171,17 +15171,6 @@ public: enable_notify_events(); } - virtual void do_scroll_to_row(int pos) override - { - assert(gtk_tree_view_get_model(m_pTreeView) && "don't select when frozen, select after thaw. Note selection doesn't survive a freeze"); - disable_notify_events(); - GtkTreePath* path = gtk_tree_path_new_from_indices(pos, -1); - gtk_tree_view_expand_to_path(m_pTreeView, path); - gtk_tree_view_scroll_to_cell(m_pTreeView, path, nullptr, true, 0, 0); - gtk_tree_path_free(path); - enable_notify_events(); - } - virtual bool is_selected(int pos) const override { GtkTreeIter iter;
