forked from qt-creator/qt-creator
Utils: Introduce TreeItem::{begin,end}
... and use this to reduce the number of explicit uses of m_children. Despite of being shorter code by itself it is a step towards having an explicit LeafItem object that doesn't explicitly store a(n empty) vector of child nodes. Change-Id: If8db85e2f1134dd1578a78d31235bf57a28f863a Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
@@ -620,7 +620,13 @@ TreeItem::~TreeItem()
|
||||
TreeItem *TreeItem::childAt(int pos) const
|
||||
{
|
||||
QTC_ASSERT(pos >= 0, return 0);
|
||||
return pos < m_children.size() ? m_children.at(pos) : 0;
|
||||
return pos < childCount() ? *(begin() + pos) : nullptr;
|
||||
}
|
||||
|
||||
int TreeItem::indexOf(const TreeItem *item) const
|
||||
{
|
||||
auto it = std::find(begin(), end(), item);
|
||||
return it == end() ? -1 : it - begin();
|
||||
}
|
||||
|
||||
QVariant TreeItem::data(int column, int role) const
|
||||
@@ -661,14 +667,14 @@ void TreeItem::prependChild(TreeItem *item)
|
||||
|
||||
void TreeItem::appendChild(TreeItem *item)
|
||||
{
|
||||
insertChild(m_children.size(), item);
|
||||
insertChild(childCount(), item);
|
||||
}
|
||||
|
||||
void TreeItem::insertChild(int pos, TreeItem *item)
|
||||
{
|
||||
QTC_CHECK(!item->model());
|
||||
QTC_CHECK(!item->parent());
|
||||
QTC_ASSERT(0 <= pos && pos <= m_children.size(), return); // '<= size' is intentional.
|
||||
QTC_ASSERT(0 <= pos && pos <= childCount(), return); // '<=' is intentional.
|
||||
|
||||
if (m_model) {
|
||||
QModelIndex idx = index();
|
||||
@@ -733,7 +739,7 @@ void TreeItem::updateAll()
|
||||
if (m_model) {
|
||||
QModelIndex idx = index();
|
||||
m_model->dataChanged(idx, idx.sibling(idx.row(), m_model->m_columnCount - 1));
|
||||
foreach (TreeItem *item, m_children)
|
||||
for (TreeItem *item : *this)
|
||||
item->updateAll();
|
||||
}
|
||||
}
|
||||
@@ -748,12 +754,12 @@ void TreeItem::updateColumn(int column)
|
||||
|
||||
TreeItem *TreeItem::firstChild() const
|
||||
{
|
||||
return m_children.isEmpty() ? 0 : m_children.first();
|
||||
return childCount() == 0 ? nullptr : *begin();
|
||||
}
|
||||
|
||||
TreeItem *TreeItem::lastChild() const
|
||||
{
|
||||
return m_children.isEmpty() ? 0 : m_children.last();
|
||||
return childCount() == 0 ? nullptr : *(end() - 1);
|
||||
}
|
||||
|
||||
int TreeItem::level() const
|
||||
@@ -766,7 +772,7 @@ int TreeItem::level() const
|
||||
|
||||
int TreeItem::indexInParent() const
|
||||
{
|
||||
return m_parent ? m_parent->m_children.indexOf(const_cast<TreeItem *>(this)) : -1;
|
||||
return m_parent ? m_parent->indexOf(this) : -1;
|
||||
}
|
||||
|
||||
QModelIndex TreeItem::index() const
|
||||
@@ -782,7 +788,7 @@ QAbstractItemModel *TreeItem::model() const
|
||||
|
||||
void TreeItem::forAllChildren(const std::function<void (TreeItem *)> &pred) const
|
||||
{
|
||||
foreach (TreeItem *item, m_children) {
|
||||
for (TreeItem *item : *this) {
|
||||
pred(item);
|
||||
item->forAllChildren(pred);
|
||||
}
|
||||
@@ -790,7 +796,7 @@ void TreeItem::forAllChildren(const std::function<void (TreeItem *)> &pred) cons
|
||||
|
||||
void TreeItem::forSelectedChildren(const std::function<bool (TreeItem *)> &pred) const
|
||||
{
|
||||
foreach (TreeItem *item, m_children) {
|
||||
for (TreeItem *item : *this) {
|
||||
if (pred(item))
|
||||
item->forSelectedChildren(pred);
|
||||
}
|
||||
@@ -800,10 +806,10 @@ void TreeItem::forChildrenAtLevel(int level, const std::function<void(TreeItem *
|
||||
{
|
||||
QTC_ASSERT(level > 0, return);
|
||||
if (level == 1) {
|
||||
foreach (TreeItem *item, m_children)
|
||||
for (TreeItem *item : *this)
|
||||
pred(item);
|
||||
} else {
|
||||
foreach (TreeItem *item, m_children)
|
||||
for (TreeItem *item : *this)
|
||||
item->forChildrenAtLevel(level - 1, pred);
|
||||
}
|
||||
}
|
||||
@@ -812,11 +818,11 @@ TreeItem *TreeItem::findChildAtLevel(int level, const std::function<bool(TreeIte
|
||||
{
|
||||
QTC_ASSERT(level > 0, return 0);
|
||||
if (level == 1) {
|
||||
foreach (TreeItem *item, m_children)
|
||||
for (TreeItem *item : *this)
|
||||
if (pred(item))
|
||||
return item;
|
||||
} else {
|
||||
foreach (TreeItem *item, m_children) {
|
||||
for (TreeItem *item : *this) {
|
||||
if (auto found = item->findChildAtLevel(level - 1, pred))
|
||||
return found;
|
||||
}
|
||||
@@ -826,7 +832,7 @@ TreeItem *TreeItem::findChildAtLevel(int level, const std::function<bool(TreeIte
|
||||
|
||||
TreeItem *TreeItem::findAnyChild(const std::function<bool(TreeItem *)> &pred) const
|
||||
{
|
||||
foreach (TreeItem *item, m_children) {
|
||||
for (TreeItem *item : *this) {
|
||||
if (pred(item))
|
||||
return item;
|
||||
if (TreeItem *found = item->findAnyChild(pred))
|
||||
@@ -837,7 +843,7 @@ TreeItem *TreeItem::findAnyChild(const std::function<bool(TreeItem *)> &pred) co
|
||||
|
||||
void TreeItem::clear()
|
||||
{
|
||||
while (m_children.size()) {
|
||||
while (childCount() != 0) {
|
||||
TreeItem *item = m_children.takeLast();
|
||||
item->m_model = 0;
|
||||
item->m_parent = 0;
|
||||
@@ -857,7 +863,7 @@ void TreeItem::propagateModel(BaseTreeModel *m)
|
||||
QTC_ASSERT(m_model == 0 || m_model == m, return);
|
||||
if (m && !m_model) {
|
||||
m_model = m;
|
||||
foreach (TreeItem *item, m_children)
|
||||
for (TreeItem *item : *this)
|
||||
item->propagateModel(m);
|
||||
}
|
||||
}
|
||||
@@ -1067,7 +1073,7 @@ QModelIndex BaseTreeModel::indexForItem(const TreeItem *item) const
|
||||
QTC_ASSERT(p, return QModelIndex());
|
||||
|
||||
TreeItem *mitem = const_cast<TreeItem *>(item);
|
||||
int row = p->m_children.indexOf(mitem);
|
||||
int row = p->indexOf(mitem);
|
||||
return createIndex(row, 0, mitem);
|
||||
}
|
||||
|
||||
@@ -1095,7 +1101,7 @@ TreeItem *BaseTreeModel::takeItem(TreeItem *item)
|
||||
QTC_ASSERT(item, return item);
|
||||
TreeItem *parent = item->parent();
|
||||
QTC_ASSERT(parent, return item);
|
||||
int pos = parent->m_children.indexOf(item);
|
||||
int pos = parent->indexOf(item);
|
||||
QTC_ASSERT(pos != -1, return item);
|
||||
|
||||
QModelIndex idx = indexForItem(parent);
|
||||
|
||||
Reference in New Issue
Block a user