tdf#130857 weld: Filter dummy entries in base weld::TreeView::iter_children
Make the so far purely virtual weld::TreeView::iter_children a new method implemented directly in the base class that wraps the new purely virtual weld::TreeView::do_iter_children. Let the new base class implementation/wrapper detect when a node is a children-on-demand-node (as described in the "expanding on-demand node details" comment above weld::TreeView::get_row_expanded) and return false right there, to unify and deduplicate the toolkit-specific implementations a bit. This is also one step to prepare for implementing support for on-demand children in the Qt implementation. Change-Id: I9c0d5e5893ebef029c0065b45b0805d009b99516 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/196994 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
This commit is contained in:
@@ -132,6 +132,7 @@ protected:
|
||||
using weld::ItemView::do_set_cursor;
|
||||
virtual void do_set_cursor(int pos) = 0;
|
||||
virtual void do_scroll_to_row(const TreeIter& rIter) = 0;
|
||||
virtual bool do_iter_children(TreeIter& rIter) const = 0;
|
||||
virtual void do_set_children_on_demand(const TreeIter& rIter, bool bChildrenOnDemand) = 0;
|
||||
virtual void do_remove_selection() = 0;
|
||||
|
||||
@@ -318,7 +319,7 @@ public:
|
||||
// set iter to point to previous node, sibling first then depth
|
||||
virtual bool iter_previous(TreeIter& rIter) const = 0;
|
||||
// set iter to point to first child node
|
||||
virtual bool iter_children(TreeIter& rIter) const = 0;
|
||||
bool iter_children(TreeIter& rIter) const;
|
||||
bool iter_nth_sibling(TreeIter& rIter, int nChild) const
|
||||
{
|
||||
bool bRet = true;
|
||||
|
||||
@@ -64,7 +64,7 @@ public:
|
||||
virtual bool iter_previous_sibling(weld::TreeIter& rIter) const override;
|
||||
virtual bool iter_next(weld::TreeIter& rIter) const override;
|
||||
virtual bool iter_previous(weld::TreeIter& rIter) const override;
|
||||
virtual bool iter_children(weld::TreeIter& rIter) const override;
|
||||
virtual bool do_iter_children(weld::TreeIter& rIter) const override;
|
||||
virtual bool iter_parent(weld::TreeIter& rIter) const override;
|
||||
virtual int get_iter_depth(const weld::TreeIter& rIter) const override;
|
||||
|
||||
|
||||
@@ -1732,7 +1732,7 @@ public:
|
||||
|
||||
virtual bool iter_previous(weld::TreeIter& rIter) const override;
|
||||
|
||||
virtual bool iter_children(weld::TreeIter& rIter) const override;
|
||||
virtual bool do_iter_children(weld::TreeIter& rIter) const override;
|
||||
|
||||
virtual bool iter_parent(weld::TreeIter& rIter) const override;
|
||||
|
||||
|
||||
@@ -233,7 +233,7 @@ bool QtInstanceTreeView::iter_previous(weld::TreeIter&) const
|
||||
return false;
|
||||
}
|
||||
|
||||
bool QtInstanceTreeView::iter_children(weld::TreeIter& rIter) const
|
||||
bool QtInstanceTreeView::do_iter_children(weld::TreeIter& rIter) const
|
||||
{
|
||||
QtInstanceTreeIter& rQtIter = static_cast<QtInstanceTreeIter&>(rIter);
|
||||
const QModelIndex aChildIndex = m_pModel->index(0, 0, rQtIter.modelIndex());
|
||||
|
||||
@@ -4513,17 +4513,11 @@ bool SalInstanceTreeView::iter_previous(weld::TreeIter& rIter) const
|
||||
return rVclIter.iter != nullptr;
|
||||
}
|
||||
|
||||
bool SalInstanceTreeView::iter_children(weld::TreeIter& rIter) const
|
||||
bool SalInstanceTreeView::do_iter_children(weld::TreeIter& rIter) const
|
||||
{
|
||||
SalInstanceTreeIter& rVclIter = static_cast<SalInstanceTreeIter&>(rIter);
|
||||
rVclIter.iter = m_xTreeView->FirstChild(rVclIter.iter);
|
||||
bool bRet = rVclIter.iter != nullptr;
|
||||
if (bRet)
|
||||
{
|
||||
//on-demand dummy entry doesn't count
|
||||
return !IsDummyEntry(rVclIter.iter);
|
||||
}
|
||||
return bRet;
|
||||
return rVclIter.iter != nullptr;
|
||||
}
|
||||
|
||||
bool SalInstanceTreeView::iter_parent(weld::TreeIter& rIter) const
|
||||
|
||||
@@ -127,6 +127,14 @@ bool weld::TreeView::is_selected(int pos) const
|
||||
return false;
|
||||
}
|
||||
|
||||
bool weld::TreeView::iter_children(TreeIter& rIter) const
|
||||
{
|
||||
if (get_children_on_demand(rIter))
|
||||
return false;
|
||||
|
||||
return do_iter_children(rIter);
|
||||
}
|
||||
|
||||
bool weld::TreeView::iter_has_child(const TreeIter& rIter) const
|
||||
{
|
||||
std::unique_ptr<weld::TreeIter> pIter = make_iterator(&rIter);
|
||||
|
||||
@@ -15669,17 +15669,12 @@ public:
|
||||
return false;
|
||||
}
|
||||
|
||||
virtual bool iter_children(weld::TreeIter& rIter) const override
|
||||
virtual bool do_iter_children(weld::TreeIter& rIter) const override
|
||||
{
|
||||
GtkInstanceTreeIter& rGtkIter = static_cast<GtkInstanceTreeIter&>(rIter);
|
||||
GtkTreeIter tmp;
|
||||
bool ret = gtk_tree_model_iter_children(m_pTreeModel, &tmp, &rGtkIter.iter);
|
||||
rGtkIter.iter = tmp;
|
||||
if (ret)
|
||||
{
|
||||
//on-demand dummy entry doesn't count
|
||||
return get_text(rGtkIter, -1) != "<dummy>";
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user