From 2aab5510eda74b36345ef80b3914472ceb0d5982 Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 4 Apr 2017 12:45:49 +0200 Subject: [PATCH] TreeModel: Add a sibling() implementation The base implementation uses the parent() index, which in turn accesses the grand parent level. We can save a few cycles here. Change-Id: I3c3696118fe7c3d4563ee3cd28981fca62013828 Reviewed-by: Christian Stenger --- src/libs/utils/treemodel.cpp | 12 ++++++++++++ src/libs/utils/treemodel.h | 1 + 2 files changed, 13 insertions(+) diff --git a/src/libs/utils/treemodel.cpp b/src/libs/utils/treemodel.cpp index 2b94d56311c..78e80b273f7 100644 --- a/src/libs/utils/treemodel.cpp +++ b/src/libs/utils/treemodel.cpp @@ -966,6 +966,18 @@ QModelIndex BaseTreeModel::parent(const QModelIndex &idx) const return createIndex(i, 0, static_cast(parent)); } +QModelIndex BaseTreeModel::sibling(int row, int column, const QModelIndex &idx) const +{ + const TreeItem *item = itemForIndex(idx); + QTC_ASSERT(item, return QModelIndex()); + QModelIndex result; + if (TreeItem *parent = item->parent()) { + if (TreeItem *sibl = parent->childAt(row)) + result = createIndex(row, column, static_cast(sibl)); + } + return result; +} + int BaseTreeModel::rowCount(const QModelIndex &idx) const { CHECK_INDEX(idx); diff --git a/src/libs/utils/treemodel.h b/src/libs/utils/treemodel.h index 63818b27c22..b28eebf79dd 100644 --- a/src/libs/utils/treemodel.h +++ b/src/libs/utils/treemodel.h @@ -188,6 +188,7 @@ protected: QVariant data(const QModelIndex &idx, int role) const override; QModelIndex index(int, int, const QModelIndex &idx = QModelIndex()) const override; QModelIndex parent(const QModelIndex &idx) const override; + QModelIndex sibling(int row, int column, const QModelIndex &idx) const override; Qt::ItemFlags flags(const QModelIndex &idx) const override; QVariant headerData(int section, Qt::Orientation orientation, int role) const override; bool hasChildren(const QModelIndex &idx) const override;