forked from qt-creator/qt-creator
QmlJS: Improve handling of user defined enums
Improves handling of Qml based enums inside qml documents. * completion of enums * follow the enum * highlighting values inside the declaration * displaying the enum declaration inside the outline * minor static checks Task-number: QTCREATORBUG-19226 Change-Id: Ia07fd9a8b7fa3106f2ea53198bfdcc50eecb7307 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
This commit is contained in:
@@ -233,6 +233,19 @@ private:
|
||||
m_model->leavePublicMember();
|
||||
}
|
||||
|
||||
bool visit(AST::UiEnumDeclaration *enumDecl) override
|
||||
{
|
||||
QModelIndex index = m_model->enterEnumDeclaration(enumDecl);
|
||||
m_nodeToIndex.insert(enumDecl, index);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void endVisit(AST::UiEnumDeclaration *) override
|
||||
{
|
||||
m_model->leavePublicMember();
|
||||
}
|
||||
|
||||
bool visit(AST::FunctionDeclaration *functionDeclaration) override
|
||||
{
|
||||
QModelIndex index = m_model->enterFunctionDeclaration(functionDeclaration);
|
||||
@@ -576,6 +589,33 @@ void QmlOutlineModel::leavePublicMember()
|
||||
leaveNode();
|
||||
}
|
||||
|
||||
QModelIndex QmlOutlineModel::enterEnumDeclaration(AST::UiEnumDeclaration *enumDecl)
|
||||
{
|
||||
QMap<int, QVariant> objectData;
|
||||
if (!enumDecl->name.isEmpty())
|
||||
objectData.insert(Qt::DisplayRole, enumDecl->name.toString());
|
||||
objectData.insert(ItemTypeRole, ElementBindingType);
|
||||
|
||||
QmlOutlineItem *item = enterNode(objectData, enumDecl, nullptr, Icons::enumMemberIcon());
|
||||
|
||||
for (auto member = enumDecl->members; member; member = member->next) {
|
||||
QMap<int, QVariant> memberData;
|
||||
if (!member->member.isEmpty())
|
||||
memberData.insert(Qt::DisplayRole, member->member.toString());
|
||||
memberData.insert(ItemTypeRole, ElementBindingType);
|
||||
memberData.insert(AnnotationRole, QString::number(member->value));
|
||||
enterNode(memberData, member, nullptr, Icons::publicMemberIcon());
|
||||
leaveNode();
|
||||
}
|
||||
|
||||
return item->index();
|
||||
}
|
||||
|
||||
void QmlOutlineModel::leaveEnumDeclaration()
|
||||
{
|
||||
leaveNode();
|
||||
}
|
||||
|
||||
static QString functionDisplayName(QStringView name, AST::FormalParameterList *formals)
|
||||
{
|
||||
QString display;
|
||||
|
||||
Reference in New Issue
Block a user