TreeModel: Introduce a TreeItem::indexInParent() convenience function

To shorten user code and hide the ugly const_cast.

Change-Id: I798bd105932004ea17cb95b243fc38ccfcda0a2c
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
hjk
2016-07-27 18:08:56 +02:00
committed by hjk
parent def8ca8ba1
commit a6acd3e8d9
5 changed files with 9 additions and 3 deletions

View File

@@ -766,6 +766,11 @@ int TreeItem::level() const
return l;
}
int TreeItem::indexInParent() const
{
return m_parent ? m_parent->m_children.indexOf(const_cast<TreeItem *>(this)) : -1;
}
QModelIndex TreeItem::index() const
{
QTC_ASSERT(m_model, return QModelIndex());

View File

@@ -65,6 +65,7 @@ public:
int level() const;
int childCount() const { return m_children.size(); }
int indexInParent() const;
TreeItem *childAt(int index) const;
QVector<TreeItem *> children() const { return m_children; }
QModelIndex index() const;

View File

@@ -272,7 +272,7 @@ QVariant ExplainingStepItem::data(int column, int role) const
case ClangStaticAnalyzerDiagnosticModel::DiagnosticRole:
return QVariant::fromValue(static_cast<DiagnosticItem *>(parent())->diagnostic());
case Qt::DisplayRole: {
const int row = parent()->children().indexOf(const_cast<ExplainingStepItem *>(this)) + 1;
const int row = indexInParent() + 1;
const int padding = static_cast<int>(std::log10(parent()->childCount()))
- static_cast<int>(std::log10(row));
return QString::fromLatin1("%1%2: %3")

View File

@@ -361,7 +361,7 @@ void ProjectWindow::deregisterProject(Project *project)
void ProjectWindow::startupProjectChanged(Project *project)
{
if (ProjectItem *projectItem = itemForProject(project)) {
int index = projectItem->parent()->children().indexOf(projectItem);
int index = projectItem->indexInParent();
QTC_ASSERT(index != -1, return);
m_projectSelection->setCurrentIndex(index);
m_selectorModel->rootItem()->m_currentProjectIndex = index;

View File

@@ -278,7 +278,7 @@ QVariant FrameItem::data(int column, int role) const
case ErrorListModel::ErrorRole:
return QVariant::fromValue(getErrorItem()->error());
case Qt::DisplayRole: {
const int row = parent()->children().indexOf(const_cast<FrameItem *>(this)) + 1;
const int row = indexInParent() + 1;
const int padding = static_cast<int>(std::log10(parent()->childCount()))
- static_cast<int>(std::log10(row));
return QString::fromLatin1("%1%2: %3")