diff options
author | hjk <hjk@theqtcompany.com> | 2016-07-25 16:48:15 +0200 |
---|---|---|
committer | hjk <hjk@qt.io> | 2016-08-03 09:23:46 +0000 |
commit | def8ca8ba1fce10a0514215e333598f831ab6e45 (patch) | |
tree | e9851f299860491d39ee9ecd121c3aa8129e7fbd /src/libs/utils/treemodel.cpp | |
parent | be2a0b9ecd3cd67d122591d202a97d5515086763 (diff) |
TreeModel: Move some base TreeItem code out-of-line
Avoid code explosion.
Change-Id: I7d239a4560e90b68cc4991341adf940a98776254
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'src/libs/utils/treemodel.cpp')
-rw-r--r-- | src/libs/utils/treemodel.cpp | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/src/libs/utils/treemodel.cpp b/src/libs/utils/treemodel.cpp index 48dd4ac1b0..3acc9dbcdf 100644 --- a/src/libs/utils/treemodel.cpp +++ b/src/libs/utils/treemodel.cpp @@ -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()) { |