TreeModel: Move some base TreeItem code out-of-line

Avoid code explosion.

Change-Id: I7d239a4560e90b68cc4991341adf940a98776254
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
hjk
2016-07-25 16:48:15 +02:00
committed by hjk
parent be2a0b9ecd
commit def8ca8ba1
6 changed files with 85 additions and 73 deletions

View File

@@ -777,6 +777,61 @@ QAbstractItemModel *TreeItem::model() const
return m_model;
}
void TreeItem::forAllChildren(const std::function<void (TreeItem *)> &pred) const
{
foreach (TreeItem *item, m_children) {
pred(item);
item->forAllChildren(pred);
}
}
void TreeItem::forSelectedChildren(const std::function<bool (TreeItem *)> &pred) const
{
foreach (TreeItem *item, m_children) {
if (pred(item))
item->forSelectedChildren(pred);
}
}
void TreeItem::forChildrenAtLevel(int level, const std::function<void(TreeItem *)> &pred) const
{
QTC_ASSERT(level > 0, return);
if (level == 1) {
foreach (TreeItem *item, m_children)
pred(item);
} else {
foreach (TreeItem *item, m_children)
item->forChildrenAtLevel(level - 1, pred);
}
}
TreeItem *TreeItem::findChildAtLevel(int level, const std::function<bool(TreeItem *)> &pred) const
{
QTC_ASSERT(level > 0, return 0);
if (level == 1) {
foreach (TreeItem *item, m_children)
if (pred(item))
return item;
} else {
foreach (TreeItem *item, m_children) {
if (auto found = item->findChildAtLevel(level - 1, pred))
return found;
}
}
return 0;
}
TreeItem *TreeItem::findAnyChild(const std::function<bool(TreeItem *)> &pred) const
{
foreach (TreeItem *item, m_children) {
if (pred(item))
return item;
if (TreeItem *found = item->findAnyChild(pred))
return found;
}
return 0;
}
void TreeItem::clear()
{
while (m_children.size()) {