include/vcl/toolkit/treelist.hxx | 2 +- include/vcl/toolkit/treelistbox.hxx | 2 +- include/vcl/weld/TreeView.hxx | 2 +- vcl/inc/qt5/QtInstanceTreeView.hxx | 1 - vcl/inc/salvtables.hxx | 2 -- vcl/qt5/QtInstanceTreeView.cxx | 6 ------ vcl/source/app/salvtables.cxx | 6 ------ vcl/source/treelist/treelist.cxx | 3 +-- vcl/source/treelist/treelistbox.cxx | 2 +- vcl/source/weld/TreeView.cxx | 6 ++++++ vcl/unx/gtk3/gtkinst.cxx | 6 ------ 11 files changed, 11 insertions(+), 27 deletions(-)
New commits: commit ec8a326453d6347e9cbcd8724ec0ee6bb275afc5 Author: Michael Weghorn <[email protected]> AuthorDate: Sat Jan 10 20:51:20 2026 +0100 Commit: Michael Weghorn <[email protected]> CommitDate: Tue Jan 13 19:35:40 2026 +0100 tdf#130857 weld: Implement TreeView::iter_has_child in base class Instead of having a purely virtual method that needs to be implemented in each of the toolkit-specific subclasses, implement the logic right in the base class. The new base class logic is equivalent to what the GTK and vcl implementations were doing so far. This also helps in preparation for implementing support for dummy/on-demand children (see the "expanding on-demand node details" comment above weld::TreeView::get_row_expanded) in the Qt implementation. Change-Id: I4a3dec27892a83ed4d94b05a6da1ab1f4ae4ad98 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/196993 Reviewed-by: Michael Weghorn <[email protected]> Tested-by: Jenkins diff --git a/include/vcl/weld/TreeView.hxx b/include/vcl/weld/TreeView.hxx index 74dc33a219b3..0a5ddfbaa209 100644 --- a/include/vcl/weld/TreeView.hxx +++ b/include/vcl/weld/TreeView.hxx @@ -339,7 +339,7 @@ public: then 0 is returned. */ virtual int iter_compare(const TreeIter& a, const TreeIter& b) const = 0; - virtual bool iter_has_child(const TreeIter& rIter) const = 0; + bool iter_has_child(const TreeIter& rIter) const; // returns the number of direct children rIter has virtual int iter_n_children(const TreeIter& rIter) const = 0; diff --git a/vcl/inc/qt5/QtInstanceTreeView.hxx b/vcl/inc/qt5/QtInstanceTreeView.hxx index 0cab09b4565e..4fe51d26fa2c 100644 --- a/vcl/inc/qt5/QtInstanceTreeView.hxx +++ b/vcl/inc/qt5/QtInstanceTreeView.hxx @@ -69,7 +69,6 @@ public: virtual int get_iter_depth(const weld::TreeIter& rIter) const override; virtual int iter_compare(const weld::TreeIter& a, const weld::TreeIter& b) const override; - virtual bool iter_has_child(const weld::TreeIter& rIter) const override; virtual int iter_n_children(const weld::TreeIter& rIter) const override; virtual void set_extra_row_indent(const weld::TreeIter& rIter, int nIndentLevel) override; virtual void set_text(const weld::TreeIter& rIter, const OUString& rStr, diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx index a2d0f7f285f7..4b2806d1814b 100644 --- a/vcl/inc/salvtables.hxx +++ b/vcl/inc/salvtables.hxx @@ -1746,8 +1746,6 @@ public: virtual int get_iter_depth(const weld::TreeIter& rIter) const override; - virtual bool iter_has_child(const weld::TreeIter& rIter) const override; - virtual bool get_row_expanded(const weld::TreeIter& rIter) const override; virtual bool get_children_on_demand(const weld::TreeIter& rIter) const override; diff --git a/vcl/qt5/QtInstanceTreeView.cxx b/vcl/qt5/QtInstanceTreeView.cxx index 44afabcb0f76..f1ced87e9d0e 100644 --- a/vcl/qt5/QtInstanceTreeView.cxx +++ b/vcl/qt5/QtInstanceTreeView.cxx @@ -271,12 +271,6 @@ int QtInstanceTreeView::iter_compare(const weld::TreeIter&, const weld::TreeIter return 0; } -bool QtInstanceTreeView::iter_has_child(const weld::TreeIter& rIter) const -{ - const QtInstanceTreeIter& rQtIter = static_cast<const QtInstanceTreeIter&>(rIter); - return m_pModel->hasChildren(rQtIter.modelIndex()); -} - int QtInstanceTreeView::iter_n_children(const weld::TreeIter& rIter) const { const QtInstanceTreeIter& rQtIter = static_cast<const QtInstanceTreeIter&>(rIter); diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx index 10b3e9ec4044..c1ff84bdfb30 100644 --- a/vcl/source/app/salvtables.cxx +++ b/vcl/source/app/salvtables.cxx @@ -4564,12 +4564,6 @@ int SalInstanceTreeView::get_iter_depth(const weld::TreeIter& rIter) const return m_xTreeView->GetModel()->GetDepth(rVclIter.iter); } -bool SalInstanceTreeView::iter_has_child(const weld::TreeIter& rIter) const -{ - SalInstanceTreeIter aTempCopy(static_cast<const SalInstanceTreeIter*>(&rIter)); - return iter_children(aTempCopy); -} - bool SalInstanceTreeView::get_row_expanded(const weld::TreeIter& rIter) const { const SalInstanceTreeIter& rVclIter = static_cast<const SalInstanceTreeIter&>(rIter); diff --git a/vcl/source/weld/TreeView.cxx b/vcl/source/weld/TreeView.cxx index c19791de8dc1..4662d8bc6ce1 100644 --- a/vcl/source/weld/TreeView.cxx +++ b/vcl/source/weld/TreeView.cxx @@ -126,6 +126,12 @@ bool weld::TreeView::is_selected(int pos) const return false; } + +bool weld::TreeView::iter_has_child(const TreeIter& rIter) const +{ + std::unique_ptr<weld::TreeIter> pIter = make_iterator(&rIter); + return iter_children(*pIter); +} } /* 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 5892268aa4bc..f14f2e75a193 100644 --- a/vcl/unx/gtk3/gtkinst.cxx +++ b/vcl/unx/gtk3/gtkinst.cxx @@ -15760,12 +15760,6 @@ public: return ret; } - virtual bool iter_has_child(const weld::TreeIter& rIter) const override - { - GtkInstanceTreeIter aTempCopy(static_cast<const GtkInstanceTreeIter*>(&rIter)); - return iter_children(aTempCopy); - } - virtual bool get_row_expanded(const weld::TreeIter& rIter) const override { const GtkInstanceTreeIter& rGtkIter = static_cast<const GtkInstanceTreeIter&>(rIter); commit cbc01444f2eeb1ce4d1506d107dc487bca5bdf84 Author: Michael Weghorn <[email protected]> AuthorDate: Sat Jan 10 20:32:15 2026 +0100 Commit: Michael Weghorn <[email protected]> CommitDate: Tue Jan 13 19:35:30 2026 +0100 vcl: Make SvTreeList{,Box}::FirstChild param a const SvTreeListEntry* The param can be const. Change-Id: I890f484a40ceda45c35b2be4ad73681d17bf93cc Reviewed-on: https://gerrit.libreoffice.org/c/core/+/196992 Reviewed-by: Michael Weghorn <[email protected]> Tested-by: Jenkins diff --git a/include/vcl/toolkit/treelist.hxx b/include/vcl/toolkit/treelist.hxx index 504a78363a5f..efe5b12a204a 100644 --- a/include/vcl/toolkit/treelist.hxx +++ b/include/vcl/toolkit/treelist.hxx @@ -145,7 +145,7 @@ public: SvTreeListEntry* Prev( SvTreeListEntry* pEntry ) const; SvTreeListEntry* Last() const; - SvTreeListEntry* FirstChild( SvTreeListEntry* pParent ) const; + SvTreeListEntry* FirstChild(const SvTreeListEntry* pParent) const; sal_uInt32 Insert( SvTreeListEntry* pEntry,SvTreeListEntry* pPar,sal_uInt32 nPos = TREELIST_APPEND); sal_uInt32 Insert( SvTreeListEntry* pEntry,sal_uInt32 nRootPos = TREELIST_APPEND ) diff --git a/include/vcl/toolkit/treelistbox.hxx b/include/vcl/toolkit/treelistbox.hxx index f7cd71eb6471..553490a5334b 100644 --- a/include/vcl/toolkit/treelistbox.hxx +++ b/include/vcl/toolkit/treelistbox.hxx @@ -364,7 +364,7 @@ public: return pModel ? pModel->Last() : nullptr; } - SvTreeListEntry* FirstChild( SvTreeListEntry* pParent ) const; + SvTreeListEntry* FirstChild(const SvTreeListEntry* pParent) const; sal_uInt32 GetEntryPos(const SvTreeListEntry* pEntry) const; diff --git a/vcl/source/treelist/treelist.cxx b/vcl/source/treelist/treelist.cxx index 3f6d50572f39..f9d9106392b6 100644 --- a/vcl/source/treelist/treelist.cxx +++ b/vcl/source/treelist/treelist.cxx @@ -769,8 +769,7 @@ SvTreeListEntry* SvTreeList::FirstSelected( const SvListView* pView) const return pActSelEntry; } - -SvTreeListEntry* SvTreeList::FirstChild( SvTreeListEntry* pParent ) const +SvTreeListEntry* SvTreeList::FirstChild(const SvTreeListEntry* pParent) const { if ( !pParent ) pParent = pRootItem.get(); diff --git a/vcl/source/treelist/treelistbox.cxx b/vcl/source/treelist/treelistbox.cxx index b3a6aeeff361..8fb39b1140a0 100644 --- a/vcl/source/treelist/treelistbox.cxx +++ b/vcl/source/treelist/treelistbox.cxx @@ -558,7 +558,7 @@ TriState SvTreeListBox::NotifyCopying( return NotifyMoving(pTarget,pEntry,rpNewParent,rNewChildPos); } -SvTreeListEntry* SvTreeListBox::FirstChild( SvTreeListEntry* pParent ) const +SvTreeListEntry* SvTreeListBox::FirstChild(const SvTreeListEntry* pParent) const { return pModel->FirstChild(pParent); }
