diff options
author | Chris Adams <christopher.adams@nokia.com> | 2011-08-22 17:01:04 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-08-31 05:03:34 +0200 |
commit | 9140731319269c75f24e80075750971e00844906 (patch) | |
tree | beaf13b75b87e648aab8ed0d69b30e1d30176aff /src/declarative/qml/v8/qv8typewrapper.cpp | |
parent | 1646db78918f740c5e5a7e487914f56d732f4a17 (diff) |
Add enums support to QObject module APIs
This commit adds support for retrieving enum values from QObject
module APIs.
Task-number: QTBUG-21033
Task-number: QTBUG-21056
Change-Id: Ib2bd107f3f5905e2d2d35f8a20c55045ef9bb322
Reviewed-on: http://codereview.qt.nokia.com/3291
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Martin Jones <martin.jones@nokia.com>
Reviewed-by: Aaron Kennedy <aaron.kennedy@nokia.com>
Diffstat (limited to 'src/declarative/qml/v8/qv8typewrapper.cpp')
-rw-r--r-- | src/declarative/qml/v8/qv8typewrapper.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/declarative/qml/v8/qv8typewrapper.cpp b/src/declarative/qml/v8/qv8typewrapper.cpp index dc99cbbcb6..f46aaab320 100644 --- a/src/declarative/qml/v8/qv8typewrapper.cpp +++ b/src/declarative/qml/v8/qv8typewrapper.cpp @@ -185,6 +185,24 @@ v8::Handle<v8::Value> QV8TypeWrapper::Getter(v8::Local<v8::String> property, } if (moduleApi->qobjectApi) { + // check for enum value + if (QV8Engine::startsWithUpper(property)) { + if (resource->mode == IncludeEnums) { + QString name = v8engine->toString(property); + + // ### Optimize + QByteArray enumName = name.toUtf8(); + const QMetaObject *metaObject = moduleApi->qobjectApi->metaObject(); + for (int ii = metaObject->enumeratorCount() - 1; ii >= 0; --ii) { + QMetaEnum e = metaObject->enumerator(ii); + int value = e.keyToValue(enumName.constData()); + if (value != -1) + return v8::Integer::New(value); + } + } + } + + // check for property. v8::Handle<v8::Value> rv = v8engine->qobjectWrapper()->getProperty(moduleApi->qobjectApi, propertystring, QV8QObjectWrapper::IgnoreRevision); return rv; } else if (moduleApi->scriptApi.isValid()) { |