From 8fda8d16df9744b69a97020e3aae1ad40ff1f538 Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Wed, 27 Jul 2011 10:19:26 +1000 Subject: [PATCH] Allow Qt enum values in ListElement. Task-number: QTBUG-16547 Change-Id: Id215cea5cdaaaef8ff8a06a0bde682f95c91e416 Reviewed-by: Aaron Kennedy Reviewed-on: http://codereview.qt.nokia.com/2227 Reviewed-by: Qt Sanity Bot Reviewed-by: Aaron Kennedy --- src/declarative/qml/qdeclarativecompiler.cpp | 13 ++++++++++--- .../qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp | 4 ++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/declarative/qml/qdeclarativecompiler.cpp b/src/declarative/qml/qdeclarativecompiler.cpp index 0f0acba..a0b1d8f 100644 --- a/src/declarative/qml/qdeclarativecompiler.cpp +++ b/src/declarative/qml/qdeclarativecompiler.cpp @@ -2294,16 +2294,23 @@ bool QDeclarativeCompiler::testQualifiedEnumAssignment(const QMetaProperty &prop return true; } +struct StaticQtMetaObject : public QObject +{ + static const QMetaObject *get() + { return &static_cast (0)->staticQtMetaObject; } +}; + // Similar logic to above, but not knowing target property. int QDeclarativeCompiler::evaluateEnum(const QByteArray& script) const { int dot = script.indexOf('.'); if (dot > 0) { + const QByteArray &scope = script.left(dot); QDeclarativeType *type = 0; - unit->imports().resolveType(script.left(dot), &type, 0, 0, 0, 0); - if (!type) + unit->imports().resolveType(scope, &type, 0, 0, 0, 0); + if (!type && scope != "Qt") return -1; - const QMetaObject *mo = type->metaObject(); + const QMetaObject *mo = type ? type->metaObject() : StaticQtMetaObject::get(); const char *key = script.constData() + dot+1; int i = mo->enumeratorCount(); while (i--) { diff --git a/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp b/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp index 1016e5d..fd68933 100644 --- a/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp +++ b/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp @@ -171,6 +171,10 @@ void tst_qdeclarativelistmodel::static_types_data() QTest::newRow("enum") << "ListElement { foo: Text.AlignHCenter }" << QVariant(double(QSGText::AlignHCenter)); + + QTest::newRow("Qt enum") + << "ListElement { foo: Qt.AlignBottom }" + << QVariant(double(Qt::AlignBottom)); } void tst_qdeclarativelistmodel::static_types() -- 2.7.4