include/vcl/weld/TreeView.hxx | 2 +- vcl/Library_vcl.mk | 1 + vcl/inc/qt5/QtInstanceTreeView.hxx | 1 - vcl/inc/salvtables.hxx | 5 ----- vcl/qt5/QtInstanceTreeView.cxx | 16 ---------------- vcl/source/app/salvtables.cxx | 18 ++---------------- vcl/source/weld/TreeView.cxx | 24 ++++++++++++++++++++++++ vcl/unx/gtk3/gtkinst.cxx | 28 ---------------------------- 8 files changed, 28 insertions(+), 67 deletions(-)
New commits: commit 0d6539bb2ae53c430f58c85cb03be3c8cf1954c5 Author: Michael Weghorn <[email protected]> AuthorDate: Sat Dec 20 08:32:07 2025 +0100 Commit: Michael Weghorn <[email protected]> CommitDate: Sat Dec 20 12:30:36 2025 +0100 weld: Deduplicate weld::TreeView::get_selected_index impls There is already weld::TreeView::get_selected to get a weld::TreeIter for the currently selected entry. Implement the index-based method using that one right in the abstract weld::TreeView base class instead of implementing it in each of the toolkit-specific subclasses separately. Change-Id: Iadf72229f025919906ce6820894613a40cd0cc79 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195957 Tested-by: Jenkins Reviewed-by: Michael Weghorn <[email protected]> diff --git a/include/vcl/weld/TreeView.hxx b/include/vcl/weld/TreeView.hxx index b030c9313c66..cd3909ae09b8 100644 --- a/include/vcl/weld/TreeView.hxx +++ b/include/vcl/weld/TreeView.hxx @@ -224,7 +224,7 @@ public: virtual void set_clicks_to_toggle(int nToggleBehavior) = 0; //by index - virtual int get_selected_index() const = 0; + int get_selected_index() const; void remove(int pos) { diff --git a/vcl/Library_vcl.mk b/vcl/Library_vcl.mk index f82f3bd5a02a..6b7e5b020f08 100644 --- a/vcl/Library_vcl.mk +++ b/vcl/Library_vcl.mk @@ -588,6 +588,7 @@ $(eval $(call gb_Library_add_exception_objects,vcl,\ vcl/source/weld/IconView \ vcl/source/weld/ItemView \ vcl/source/weld/MetricSpinButton \ + vcl/source/weld/TreeView \ vcl/source/weld/weldutils \ vcl/backendtest/outputdevice/bitmap \ vcl/backendtest/outputdevice/clip \ diff --git a/vcl/inc/qt5/QtInstanceTreeView.hxx b/vcl/inc/qt5/QtInstanceTreeView.hxx index 337991762d9e..9b95c79c3efe 100644 --- a/vcl/inc/qt5/QtInstanceTreeView.hxx +++ b/vcl/inc/qt5/QtInstanceTreeView.hxx @@ -55,7 +55,6 @@ public: virtual void set_clicks_to_toggle(int nToggleBehavior) override; - virtual int get_selected_index() const 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; diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx index f885f6933ab7..fe800d6bd80c 100644 --- a/vcl/inc/salvtables.hxx +++ b/vcl/inc/salvtables.hxx @@ -1748,8 +1748,6 @@ public: virtual void set_image(const weld::TreeIter& rIter, VirtualDevice& rImage, int col = -1) override; - virtual int get_selected_index() const override; - virtual void copy_iterator(const weld::TreeIter& rSource, weld::TreeIter& rDest) const override; virtual bool get_selected(weld::TreeIter* pIter) const override; diff --git a/vcl/qt5/QtInstanceTreeView.cxx b/vcl/qt5/QtInstanceTreeView.cxx index 6f87ee170423..8c590f3ad09d 100644 --- a/vcl/qt5/QtInstanceTreeView.cxx +++ b/vcl/qt5/QtInstanceTreeView.cxx @@ -143,22 +143,6 @@ void QtInstanceTreeView::enable_toggle_buttons(weld::ColumnToggleType) void QtInstanceTreeView::set_clicks_to_toggle(int) { assert(false && "Not implemented yet"); } -int QtInstanceTreeView::get_selected_index() const -{ - SolarMutexGuard g; - - int nIndex = -1; - GetQtInstance().RunInMainThread([&] { - const QModelIndexList aSelectedIndexes = m_pSelectionModel->selectedIndexes(); - if (aSelectedIndexes.empty()) - return; - - nIndex = aSelectedIndexes.first().row(); - }); - - return nIndex; -} - void QtInstanceTreeView::do_remove(int nPos) { do_remove(treeIter(nPos)); } OUString QtInstanceTreeView::get_text(int nRow, int nCol) const diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx index 27157e31a376..1a8854d11cf4 100644 --- a/vcl/source/app/salvtables.cxx +++ b/vcl/source/app/salvtables.cxx @@ -4560,15 +4560,6 @@ void SalInstanceTreeView::set_image(const weld::TreeIter& rIter, VirtualDevice& set_image(rVclIter.iter, createImage(rImage), col); } -int SalInstanceTreeView::get_selected_index() const -{ - assert(m_xTreeView->IsUpdateMode() && "don't request selection when frozen"); - SvTreeListEntry* pEntry = m_xTreeView->FirstSelected(); - if (!pEntry) - return -1; - return SvTreeList::GetRelPos(pEntry); -} - void SalInstanceTreeView::copy_iterator(const weld::TreeIter& rSource, weld::TreeIter& rDest) const { const SalInstanceTreeIter& rVclSource(static_cast<const SalInstanceTreeIter&>(rSource)); diff --git a/vcl/source/weld/TreeView.cxx b/vcl/source/weld/TreeView.cxx new file mode 100644 index 000000000000..ccb990d27f9c --- /dev/null +++ b/vcl/source/weld/TreeView.cxx @@ -0,0 +1,24 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include <vcl/weld/TreeView.hxx> + +namespace weld +{ +int weld::TreeView::get_selected_index() const +{ + std::unique_ptr<weld::TreeIter> pIter = make_iterator(); + if (get_selected(pIter.get())) + return get_iter_index_in_parent(*pIter); + + return -1; +} +} + +/* 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 9da061781fac..5c5fa040c813 100644 --- a/vcl/unx/gtk3/gtkinst.cxx +++ b/vcl/unx/gtk3/gtkinst.cxx @@ -15684,34 +15684,6 @@ public: move_subtree(rGtkIter.iter, pGtkParentIter ? const_cast<GtkTreeIter*>(&pGtkParentIter->iter) : nullptr, nIndexInNewParent); } - virtual int get_selected_index() const override - { - assert(gtk_tree_view_get_model(m_pTreeView) && "don't request selection when frozen"); - int nRet = -1; - GtkTreeSelection *selection = gtk_tree_view_get_selection(m_pTreeView); - if (gtk_tree_selection_get_mode(selection) != GTK_SELECTION_MULTIPLE) - { - GtkTreeIter iter; - GtkTreeModel* pModel; - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(m_pTreeView), &pModel, &iter)) - { - GtkTreePath* path = gtk_tree_model_get_path(pModel, &iter); - - gint depth; - gint* indices = gtk_tree_path_get_indices_with_depth(path, &depth); - nRet = indices[depth-1]; - - gtk_tree_path_free(path); - } - } - else - { - auto vec = get_selected_rows(); - return vec.empty() ? -1 : vec[0]; - } - return nRet; - } - bool get_selected_iterator(GtkTreeIter* pIter) const { assert(gtk_tree_view_get_model(m_pTreeView) && "don't request selection when frozen"); commit 2bdee0cddd10136b558a95af7562b9e1ee4e8f4d Author: Michael Weghorn <[email protected]> AuthorDate: Sat Dec 20 08:07:31 2025 +0100 Commit: Michael Weghorn <[email protected]> CommitDate: Sat Dec 20 12:30:28 2025 +0100 vcl weld: Merge both SalInstanceItemView::set_id With Change-Id: Idd8f674f7852987723040e3af2335645b395fe46 Author: Michael Weghorn <[email protected]> Date: Sat Dec 20 08:03:00 2025 +0100 weld: Implement index-based ItemView::{g,s}et_id in base class in place, the helper method is only used in one place, so inline the logic there. Change-Id: Ia0a4df6c58dab5c396c3730770e1ffc3c1e26eb2 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195956 Tested-by: Jenkins Reviewed-by: Michael Weghorn <[email protected]> diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx index faccdee57f12..f885f6933ab7 100644 --- a/vcl/inc/salvtables.hxx +++ b/vcl/inc/salvtables.hxx @@ -1527,9 +1527,6 @@ public: virtual int n_children() const override; -protected: - void set_id(SvTreeListEntry* pEntry, const OUString& rId); - private: const OUString* getEntryData(int index) const; }; diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx index 63550d320a4a..27157e31a376 100644 --- a/vcl/source/app/salvtables.cxx +++ b/vcl/source/app/salvtables.cxx @@ -3567,16 +3567,11 @@ OUString SalInstanceItemView::get_id(const weld::TreeIter& rIter) const return OUString(); } -void SalInstanceItemView::set_id(SvTreeListEntry* pEntry, const OUString& rId) -{ - m_aUserData.emplace_back(std::make_unique<OUString>(rId)); - pEntry->SetUserData(m_aUserData.back().get()); -} - void SalInstanceItemView::set_id(const weld::TreeIter& rIter, const OUString& rId) { const SalInstanceTreeIter& rVclIter = static_cast<const SalInstanceTreeIter&>(rIter); - set_id(rVclIter.iter, rId); + m_aUserData.emplace_back(std::make_unique<OUString>(rId)); + rVclIter.iter->SetUserData(m_aUserData.back().get()); } OUString SalInstanceItemView::get_selected_id() const
