From e48451b0a3207a9dc31ae3308edaab9293b6a939 Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 6 Jul 2016 13:38:00 +0200 Subject: [PATCH] TreeModel: Consolidate child()/childAt() and rowCount()/childCount() We never used the possibility to overload the virtual child() and rowCount() functions, it's unlikely to be needed in future. Change-Id: I7ebdf4dfc70bb0bcadea9ef3fb88f16632a95696 Reviewed-by: Christian Stenger --- src/libs/utils/treemodel.cpp | 27 ++++++++----------- src/libs/utils/treemodel.h | 8 +++--- src/plugins/autotest/testresultspane.cpp | 2 +- src/plugins/autotest/testtreeitem.cpp | 2 +- .../clangstaticanalyzerdiagnosticmodel.cpp | 2 +- .../cmakeprojectmanager/cmakesettingspage.cpp | 4 +-- .../debugger/console/consoleitemmodel.cpp | 2 +- src/plugins/debugger/moduleshandler.cpp | 16 +++++------ src/plugins/debugger/watchhandler.cpp | 2 +- .../projectexplorer/toolchainoptionspage.cpp | 2 +- .../valgrind/xmlprotocol/errorlistmodel.cpp | 2 +- tests/auto/utils/treemodel/tst_treemodel.cpp | 2 +- 12 files changed, 32 insertions(+), 39 deletions(-) diff --git a/src/libs/utils/treemodel.cpp b/src/libs/utils/treemodel.cpp index 5c4296688c..bb629c94db 100644 --- a/src/libs/utils/treemodel.cpp +++ b/src/libs/utils/treemodel.cpp @@ -617,17 +617,12 @@ TreeItem::~TreeItem() removeChildren(); } -TreeItem *TreeItem::child(int pos) const +TreeItem *TreeItem::childAt(int pos) const { QTC_ASSERT(pos >= 0, return 0); return pos < m_children.size() ? m_children.at(pos) : 0; } -int TreeItem::rowCount() const -{ - return m_children.size(); -} - QVariant TreeItem::data(int column, int role) const { Q_UNUSED(column); @@ -651,7 +646,7 @@ Qt::ItemFlags TreeItem::flags(int column) const bool TreeItem::hasChildren() const { - return canFetchMore() || rowCount() > 0; + return canFetchMore() || childCount() > 0; } bool TreeItem::canFetchMore() const @@ -692,11 +687,11 @@ void TreeItem::insertChild(int pos, TreeItem *item) void TreeItem::removeChildren() { - if (rowCount() == 0) + if (childCount() == 0) return; if (m_model) { QModelIndex idx = index(); - m_model->beginRemoveRows(idx, 0, rowCount() - 1); + m_model->beginRemoveRows(idx, 0, childCount() - 1); clear(); m_model->endRemoveRows(); } else { @@ -707,7 +702,7 @@ void TreeItem::removeChildren() void TreeItem::sortChildren(const std::function &cmp) { if (m_model) { - if (const int n = rowCount()) { + if (const int n = childCount()) { QVector tmp = m_children; std::sort(tmp.begin(), tmp.end(), cmp); if (tmp == m_children) { @@ -850,8 +845,8 @@ QModelIndex TreeModel::parent(const QModelIndex &idx) const if (!grandparent) return QModelIndex(); - for (int i = 0, n = grandparent->rowCount(); i < n; ++i) - if (grandparent->child(i) == parent) + for (int i = 0, n = grandparent->childCount(); i < n; ++i) + if (grandparent->childAt(i) == parent) return createIndex(i, 0, (void*) parent); return QModelIndex(); @@ -861,12 +856,12 @@ int TreeModel::rowCount(const QModelIndex &idx) const { CHECK_INDEX(idx); if (!idx.isValid()) - return m_root->rowCount(); + return m_root->childCount(); if (idx.column() > 0) return 0; const TreeItem *item = itemForIndex(idx); QTC_ASSERT(item, return 0); - return item->rowCount(); + return item->childCount(); } int TreeModel::columnCount(const QModelIndex &idx) const @@ -985,9 +980,9 @@ QModelIndex TreeModel::index(int row, int column, const QModelIndex &parent) con const TreeItem *item = itemForIndex(parent); QTC_ASSERT(item, return QModelIndex()); - if (row >= item->rowCount()) + if (row >= item->childCount()) return QModelIndex(); - return createIndex(row, column, (void*)(item->child(row))); + return createIndex(row, column, (void*)(item->childAt(row))); } TreeItem *TreeModel::itemForIndex(const QModelIndex &idx) const diff --git a/src/libs/utils/treemodel.h b/src/libs/utils/treemodel.h index 2a4efd0734..7c2120affe 100644 --- a/src/libs/utils/treemodel.h +++ b/src/libs/utils/treemodel.h @@ -41,10 +41,6 @@ public: TreeItem(); virtual ~TreeItem(); - TreeItem *parent() const { return m_parent; } - virtual TreeItem *child(int pos) const; - virtual int rowCount() const; - virtual QVariant data(int column, int role) const; virtual bool setData(int column, const QVariant &data, int role); virtual Qt::ItemFlags flags(int column) const; @@ -53,6 +49,8 @@ public: virtual bool canFetchMore() const; virtual void fetchMore() {} + TreeItem *parent() const { return m_parent; } + void prependChild(TreeItem *item); void appendChild(TreeItem *item); void insertChild(int pos, TreeItem *item); @@ -67,7 +65,7 @@ public: void setFlags(Qt::ItemFlags flags); int childCount() const { return m_children.size(); } - TreeItem *childAt(int index) const { return m_children.at(index); } + TreeItem *childAt(int index) const; QVector children() const { return m_children; } QModelIndex index() const; diff --git a/src/plugins/autotest/testresultspane.cpp b/src/plugins/autotest/testresultspane.cpp index 78b8a8971a..caefcb1115 100644 --- a/src/plugins/autotest/testresultspane.cpp +++ b/src/plugins/autotest/testresultspane.cpp @@ -338,7 +338,7 @@ void TestResultsPane::goToNext() if (!rootItem || !rootItem->childCount()) return; - nextCurrentIndex = m_filterModel->mapFromSource(m_model->indexForItem(rootItem->child(0))); + nextCurrentIndex = m_filterModel->mapFromSource(m_model->indexForItem(rootItem->childAt(0))); } m_treeView->setCurrentIndex(nextCurrentIndex); diff --git a/src/plugins/autotest/testtreeitem.cpp b/src/plugins/autotest/testtreeitem.cpp index 145ac5c344..9cc3e86140 100644 --- a/src/plugins/autotest/testtreeitem.cpp +++ b/src/plugins/autotest/testtreeitem.cpp @@ -217,7 +217,7 @@ TestTreeItem *TestTreeItem::parentItem() const TestTreeItem *TestTreeItem::childItem(int row) const { - return static_cast(child(row)); + return static_cast(childAt(row)); } TestTreeItem *TestTreeItem::findChildByName(const QString &name) diff --git a/src/plugins/clangstaticanalyzer/clangstaticanalyzerdiagnosticmodel.cpp b/src/plugins/clangstaticanalyzer/clangstaticanalyzerdiagnosticmodel.cpp index 39d1d945bf..36fee7b507 100644 --- a/src/plugins/clangstaticanalyzer/clangstaticanalyzerdiagnosticmodel.cpp +++ b/src/plugins/clangstaticanalyzer/clangstaticanalyzerdiagnosticmodel.cpp @@ -273,7 +273,7 @@ QVariant ExplainingStepItem::data(int column, int role) const return QVariant::fromValue(static_cast(parent())->diagnostic()); case Qt::DisplayRole: { const int row = parent()->children().indexOf(const_cast(this)) + 1; - const int padding = static_cast(std::log10(parent()->rowCount())) + const int padding = static_cast(std::log10(parent()->childCount())) - static_cast(std::log10(row)); return QString::fromLatin1("%1%2: %3") .arg(QString(padding, QLatin1Char(' '))) diff --git a/src/plugins/cmakeprojectmanager/cmakesettingspage.cpp b/src/plugins/cmakeprojectmanager/cmakesettingspage.cpp index 8dadc02220..c7b1903355 100644 --- a/src/plugins/cmakeprojectmanager/cmakesettingspage.cpp +++ b/src/plugins/cmakeprojectmanager/cmakesettingspage.cpp @@ -189,12 +189,12 @@ void CMakeToolItemModel::addCMakeTool(const CMakeTool *item, bool changed) TreeItem *CMakeToolItemModel::autoGroupItem() const { - return rootItem()->child(0); + return rootItem()->childAt(0); } TreeItem *CMakeToolItemModel::manualGroupItem() const { - return rootItem()->child(1); + return rootItem()->childAt(1); } void CMakeToolItemModel::reevaluateChangedFlag(CMakeToolTreeItem *item) const diff --git a/src/plugins/debugger/console/consoleitemmodel.cpp b/src/plugins/debugger/console/consoleitemmodel.cpp index 1373556a0e..fc65764c71 100644 --- a/src/plugins/debugger/console/consoleitemmodel.cpp +++ b/src/plugins/debugger/console/consoleitemmodel.cpp @@ -80,7 +80,7 @@ int ConsoleItemModel::sizeOfFile(const QFont &font) lastReadOnlyRow -= 2; // skip editable row if (lastReadOnlyRow < 0) return 0; - QString filename = static_cast(rootItem()->child(lastReadOnlyRow))->file(); + QString filename = static_cast(rootItem()->childAt(lastReadOnlyRow))->file(); const int pos = filename.lastIndexOf(QLatin1Char('/')); if (pos != -1) filename = filename.mid(pos + 1); diff --git a/src/plugins/debugger/moduleshandler.cpp b/src/plugins/debugger/moduleshandler.cpp index 5e0edcd008..e90093f504 100644 --- a/src/plugins/debugger/moduleshandler.cpp +++ b/src/plugins/debugger/moduleshandler.cpp @@ -157,8 +157,8 @@ QVariant ModuleItem::data(int column, int role) const static ModuleItem *moduleFromPath(TreeItem *root, const QString &modulePath) { // Recent modules are more likely to be unloaded first. - for (int i = root->rowCount(); --i >= 0; ) { - auto item = static_cast(root->child(i)); + for (int i = root->childCount(); --i >= 0; ) { + auto item = static_cast(root->childAt(i)); if (item->module.modulePath == modulePath) return item; } @@ -199,8 +199,8 @@ Modules ModulesHandler::modules() const { Modules mods; TreeItem *root = m_model->rootItem(); - for (int i = root->rowCount(); --i >= 0; ) - mods.append(static_cast(root->child(i))->module); + for (int i = root->childCount(); --i >= 0; ) + mods.append(static_cast(root->childAt(i))->module); return mods; } @@ -239,15 +239,15 @@ void ModulesHandler::updateModule(const Module &module) void ModulesHandler::beginUpdateAll() { TreeItem *root = m_model->rootItem(); - for (int i = root->rowCount(); --i >= 0; ) - static_cast(root->child(i))->updated = false; + for (int i = root->childCount(); --i >= 0; ) + static_cast(root->childAt(i))->updated = false; } void ModulesHandler::endUpdateAll() { TreeItem *root = m_model->rootItem(); - for (int i = root->rowCount(); --i >= 0; ) { - auto item = static_cast(root->child(i)); + for (int i = root->childCount(); --i >= 0; ) { + auto item = static_cast(root->childAt(i)); if (!item->updated) m_model->destroyItem(item); } diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp index 7c9b267644..8387f3f2e9 100644 --- a/src/plugins/debugger/watchhandler.cpp +++ b/src/plugins/debugger/watchhandler.cpp @@ -1162,7 +1162,7 @@ bool WatchModel::hasChildren(const QModelIndex &idx) const const WatchItem *item = nonRootItemForIndex(idx); if (!item) return true; - if (item->rowCount() > 0) + if (item->childCount() > 0) return true; // "Can fetch more", see above. diff --git a/src/plugins/projectexplorer/toolchainoptionspage.cpp b/src/plugins/projectexplorer/toolchainoptionspage.cpp index 2287633d34..190d2f52b4 100644 --- a/src/plugins/projectexplorer/toolchainoptionspage.cpp +++ b/src/plugins/projectexplorer/toolchainoptionspage.cpp @@ -236,7 +236,7 @@ void ToolChainOptionsWidget::addToolChain(ToolChain *tc) } } - TreeItem *parent = m_model.rootItem()->child(tc->isAutoDetected() ? 0 : 1); + TreeItem *parent = m_model.rootItem()->childAt(tc->isAutoDetected() ? 0 : 1); parent->appendChild(new ToolChainTreeItem(tc, false)); updateState(); diff --git a/src/plugins/valgrind/xmlprotocol/errorlistmodel.cpp b/src/plugins/valgrind/xmlprotocol/errorlistmodel.cpp index a5f0a765dd..a137948cc0 100644 --- a/src/plugins/valgrind/xmlprotocol/errorlistmodel.cpp +++ b/src/plugins/valgrind/xmlprotocol/errorlistmodel.cpp @@ -279,7 +279,7 @@ QVariant FrameItem::data(int column, int role) const return QVariant::fromValue(getErrorItem()->error()); case Qt::DisplayRole: { const int row = parent()->children().indexOf(const_cast(this)) + 1; - const int padding = static_cast(std::log10(parent()->rowCount())) + const int padding = static_cast(std::log10(parent()->childCount())) - static_cast(std::log10(row)); return QString::fromLatin1("%1%2: %3") .arg(QString(padding, QLatin1Char(' '))) diff --git a/tests/auto/utils/treemodel/tst_treemodel.cpp b/tests/auto/utils/treemodel/tst_treemodel.cpp index 974294d8e1..603a92dc5b 100644 --- a/tests/auto/utils/treemodel/tst_treemodel.cpp +++ b/tests/auto/utils/treemodel/tst_treemodel.cpp @@ -79,7 +79,7 @@ void tst_TreeModel::testIteration() group2->appendChild(item21); group2->appendChild(item22); - QCOMPARE(r->rowCount(), 3); + QCOMPARE(r->childCount(), 3); QCOMPARE(countLevelItems(r, 1), 3); QCOMPARE(countLevelItems(r, 2), 6); QCOMPARE(countLevelItems(r, 3), 0); -- GitLab