From 9c12ef51fbcc78e79f0ad9e53770d83304b51a49 Mon Sep 17 00:00:00 2001 From: Kai Koehne <kai.koehne@nokia.com> Date: Mon, 12 Jul 2010 15:51:26 +0200 Subject: [PATCH] QmlOutline: Show id instead of element name if available --- src/plugins/qmljseditor/qmloutlinemodel.cpp | 35 +++++++++++++++++++-- src/plugins/qmljseditor/qmloutlinemodel.h | 2 +- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/src/plugins/qmljseditor/qmloutlinemodel.cpp b/src/plugins/qmljseditor/qmloutlinemodel.cpp index 33e2269cf97..f2bff31f320 100644 --- a/src/plugins/qmljseditor/qmloutlinemodel.cpp +++ b/src/plugins/qmljseditor/qmloutlinemodel.cpp @@ -63,6 +63,8 @@ private: return text; } + + bool visit(AST::UiObjectDefinition *objDef) { AST::SourceLocation location; @@ -71,7 +73,9 @@ private: - objDef->firstSourceLocation().offset + objDef->lastSourceLocation().length; - QModelIndex index = m_model->enterElement(asString(objDef->qualifiedTypeNameId), location); + const QString typeName = asString(objDef->qualifiedTypeNameId); + const QString id = getId(objDef); + QModelIndex index = m_model->enterElement(asString(objDef->qualifiedTypeNameId), id, location); m_nodeToIndex.insert(objDef, index); return true; } @@ -100,6 +104,26 @@ private: m_model->leaveProperty(); } + QString getId(AST::UiObjectDefinition *objDef) { + QString id; + for (AST::UiObjectMemberList *it = objDef->initializer->members; it; it = it->next) { + if (AST::UiScriptBinding *binding = dynamic_cast<AST::UiScriptBinding*>(it->member)) { + if (binding->qualifiedId->name->asString() == "id") { + AST::ExpressionStatement *expr = dynamic_cast<AST::ExpressionStatement*>(binding->statement); + if (!expr) + continue; + AST::IdentifierExpression *idExpr = dynamic_cast<AST::IdentifierExpression*>(expr->expression); + if (!idExpr) + continue; + id = idExpr->name->asString(); + break; + } + } + } + return id; + } + + QmlOutlineModel *m_model; QHash<AST::Node*, QModelIndex> m_nodeToIndex; int indent; @@ -128,10 +152,15 @@ void QmlOutlineModel::update(QmlJS::Document::Ptr doc) emit updated(); } -QModelIndex QmlOutlineModel::enterElement(const QString &type, const AST::SourceLocation &sourceLocation) +QModelIndex QmlOutlineModel::enterElement(const QString &type, const QString &id, const AST::SourceLocation &sourceLocation) { QStandardItem *item = enterNode(sourceLocation); - item->setText(type); + if (!id.isEmpty()) { + item->setText(id); + } else { + item->setText(type); + } + item->setToolTip(type); item->setIcon(m_icons.objectDefinitionIcon()); return item->index(); } diff --git a/src/plugins/qmljseditor/qmloutlinemodel.h b/src/plugins/qmljseditor/qmloutlinemodel.h index e5065238d91..8df66e4db5b 100644 --- a/src/plugins/qmljseditor/qmloutlinemodel.h +++ b/src/plugins/qmljseditor/qmloutlinemodel.h @@ -21,7 +21,7 @@ public: void update(QmlJS::Document::Ptr doc); - QModelIndex enterElement(const QString &typeName, const QmlJS::AST::SourceLocation &location); + QModelIndex enterElement(const QString &typeName, const QString &id, const QmlJS::AST::SourceLocation &location); void leaveElement(); QModelIndex enterProperty(const QString &name, const QmlJS::AST::SourceLocation &location); -- GitLab