diff options
author | Chris Adams <christopher.adams@nokia.com> | 2012-03-15 17:09:13 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-03-21 05:18:35 +0100 |
commit | 4c9d326230a2c522bc8fd80eee9664c7d0c1205f (patch) | |
tree | 3e7e9fcc2a78d852b961b6b2c54ffe8e5c414dd0 /src/qml/qml/qqmlcompiler.cpp | |
parent | b2722ab31e524fc223a332fc0574e4b66c716b20 (diff) |
Allow literal enum to int property assignments
Previously, enum to int property assignments were considered bindings.
This commit adds support for assigning enum values to int properties
as enums.
Note that to use an enum in QML, it must have been declared with
Q_ENUMS or otherwise registered as a metatype. Enum values from the
global Qt object are also usable.
Task-number: QTBUG-23403
Change-Id: I50db6cae54a24400ea472bde43619d547e4ceb78
Reviewed-by: Michael Brasser <michael.brasser@nokia.com>
Diffstat (limited to 'src/qml/qml/qqmlcompiler.cpp')
-rw-r--r-- | src/qml/qml/qqmlcompiler.cpp | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/src/qml/qml/qqmlcompiler.cpp b/src/qml/qml/qqmlcompiler.cpp index 9304a75fbf..fe0cc7a95c 100644 --- a/src/qml/qml/qqmlcompiler.cpp +++ b/src/qml/qml/qqmlcompiler.cpp @@ -2227,7 +2227,7 @@ bool QQmlCompiler::buildValueTypeProperty(QObject *type, //optimization for <Type>.<EnumValue> enum assignments bool isEnumAssignment = false; - if (prop->core.isEnum()) + if (prop->core.isEnum() || prop->core.propType == QMetaType::Int) COMPILE_CHECK(testQualifiedEnumAssignment(prop, obj, value, &isEnumAssignment)); if (isEnumAssignment) { @@ -2495,7 +2495,7 @@ bool QQmlCompiler::buildPropertyLiteralAssignment(QQmlScript::Property *prop, if (v->value.isScript()) { //optimization for <Type>.<EnumValue> enum assignments - if (prop->core.isEnum()) { + if (prop->core.isEnum() || prop->core.propType == QMetaType::Int) { bool isEnumAssignment = false; COMPILE_CHECK(testQualifiedEnumAssignment(prop, obj, v, &isEnumAssignment)); if (isEnumAssignment) { @@ -2525,8 +2525,9 @@ bool QQmlCompiler::testQualifiedEnumAssignment(QQmlScript::Property *prop, QQmlScript::Value *v, bool *isAssignment) { + bool isIntProp = (prop->core.propType == QMetaType::Int) && !prop->core.isEnum(); *isAssignment = false; - if (!prop->core.isEnum()) + if (!prop->core.isEnum() && !isIntProp) return true; QMetaProperty mprop = obj->metaObject()->property(prop->index); @@ -2538,6 +2539,17 @@ bool QQmlCompiler::testQualifiedEnumAssignment(QQmlScript::Property *prop, if (!string.at(0).isUpper()) return true; + if (isIntProp) { + // Allow enum assignment to ints. + int enumval = evaluateEnum(string.toUtf8()); + if (enumval != -1) { + v->type = Value::Literal; + v->value = QQmlScript::Variant((double)enumval); + *isAssignment = true; + } + return true; + } + QStringList parts = string.split(QLatin1Char('.')); if (parts.count() != 2) return true; |