include/vcl/weld.hxx | 2 ++ vcl/source/app/salvtables.cxx | 9 +++++++++ vcl/unx/gtk3/gtk3gtkinst.cxx | 27 ++++++++++++++++++++++++++- 3 files changed, 37 insertions(+), 1 deletion(-)
New commits: commit e165db83d52f55ace9958c93374a21a6bf2676c6 Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Fri Mar 6 12:44:32 2020 +0000 Commit: Caolán McNamara <caol...@redhat.com> CommitDate: Fri Mar 6 16:54:17 2020 +0100 add iter_previous Change-Id: Id481e687c623db6ade6c17d039f347e66cb167aa Reviewed-on: https://gerrit.libreoffice.org/c/core/+/90106 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caol...@redhat.com> diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx index ee86bf5d37f4..aeb656720188 100644 --- a/include/vcl/weld.hxx +++ b/include/vcl/weld.hxx @@ -897,6 +897,8 @@ public: virtual bool iter_previous_sibling(TreeIter& rIter) const = 0; // set iter to point to next node, depth first, then sibling virtual bool iter_next(TreeIter& rIter) const = 0; + // set iter to point to previous node, sibling first then depth + virtual bool iter_previous(TreeIter& rIter) const = 0; virtual bool iter_children(TreeIter& rIter) const = 0; bool iter_nth_sibling(TreeIter& rIter, int nChild) const { diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx index 0c73fdbba7ca..6aa99b7706fd 100644 --- a/vcl/source/app/salvtables.cxx +++ b/vcl/source/app/salvtables.cxx @@ -4127,6 +4127,15 @@ public: return rVclIter.iter != nullptr; } + virtual bool iter_previous(weld::TreeIter& rIter) const override + { + SalInstanceTreeIter& rVclIter = static_cast<SalInstanceTreeIter&>(rIter); + rVclIter.iter = m_xTreeView->Prev(rVclIter.iter); + if (rVclIter.iter && IsDummyEntry(rVclIter.iter)) + return iter_previous(rVclIter); + return rVclIter.iter != nullptr; + } + virtual bool iter_children(weld::TreeIter& rIter) const override { SalInstanceTreeIter& rVclIter = static_cast<SalInstanceTreeIter&>(rIter); diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx index cb0fb884affe..bf480535ec8e 100644 --- a/vcl/unx/gtk3/gtk3gtkinst.cxx +++ b/vcl/unx/gtk3/gtk3gtkinst.cxx @@ -9125,7 +9125,7 @@ private: return true; } - void last_child(GtkTreeModel* pModel, GtkTreeIter* result, GtkTreeIter* pParent, int nChildren) + void last_child(GtkTreeModel* pModel, GtkTreeIter* result, GtkTreeIter* pParent, int nChildren) const { gtk_tree_model_iter_nth_child(pModel, result, pParent, nChildren - 1); nChildren = gtk_tree_model_iter_n_children(pModel, result); @@ -10118,6 +10118,31 @@ public: return false; } + virtual bool iter_previous(weld::TreeIter& rIter) const override + { + GtkInstanceTreeIter& rGtkIter = static_cast<GtkInstanceTreeIter&>(rIter); + GtkTreeModel *pModel = GTK_TREE_MODEL(m_pTreeStore); + GtkTreeIter iter = rGtkIter.iter; + GtkTreeIter tmp = iter; + if (gtk_tree_model_iter_previous(pModel, &tmp)) + { + // Move down level(s) until we find the level where the last node exists. + int nChildren = gtk_tree_model_iter_n_children(pModel, &tmp); + if (!nChildren) + rGtkIter.iter = tmp; + else + last_child(pModel, &rGtkIter.iter, &tmp, nChildren); + return true; + } + // Move up level + if (gtk_tree_model_iter_parent(pModel, &tmp, &iter)) + { + rGtkIter.iter = tmp; + return true; + } + return false; + } + virtual bool iter_children(weld::TreeIter& rIter) const override { GtkInstanceTreeIter& rGtkIter = static_cast<GtkInstanceTreeIter&>(rIter); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits