diff options
author | Chris Adams <christopher.adams@nokia.com> | 2011-08-22 15:51:28 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-09-02 01:34:21 +0200 |
commit | 6080375fed90c09bfabb96a0319817f14f693b05 (patch) | |
tree | 2f91acc1e37cf5a747086066b741fa68fa0bbe57 /src/declarative/qml/v8/qv8typewrapper.cpp | |
parent | d481f2ff518df1e44103d1850e7d52bd69260c34 (diff) |
Allow conversion of QObject Module API to QVariant
This commit adds a conversion codepath for QV8TypeResource to QVariant
where the resource contains a QObject module API. This allows such a
module API to be used as the "target" in a Connections element.
Task-number: QTBUG-20937
Change-Id: I9214b531968f2e6981a86e643859a97297c6a02a
Reviewed-on: http://codereview.qt.nokia.com/3286
Reviewed-by: Chris Adams <christopher.adams@nokia.com>
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Diffstat (limited to 'src/declarative/qml/v8/qv8typewrapper.cpp')
-rw-r--r-- | src/declarative/qml/v8/qv8typewrapper.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/declarative/qml/v8/qv8typewrapper.cpp b/src/declarative/qml/v8/qv8typewrapper.cpp index f46aaab320..c89d5ab8ae 100644 --- a/src/declarative/qml/v8/qv8typewrapper.cpp +++ b/src/declarative/qml/v8/qv8typewrapper.cpp @@ -128,6 +128,34 @@ v8::Local<v8::Object> QV8TypeWrapper::newObject(QObject *o, QDeclarativeTypeName return rv; } +QVariant QV8TypeWrapper::toVariant(QV8ObjectResource *r) +{ + Q_ASSERT(r->resourceType() == QV8ObjectResource::TypeType); + QV8TypeResource *resource = static_cast<QV8TypeResource *>(r); + QV8Engine *v8engine = resource->engine; + + if (resource->typeNamespace) { + if (QDeclarativeMetaType::ModuleApiInstance *moduleApi = resource->typeNamespace->moduleApi(resource->importNamespace)) { + if (moduleApi->scriptCallback) { + moduleApi->scriptApi = moduleApi->scriptCallback(v8engine->engine(), v8engine->engine()); + moduleApi->scriptCallback = 0; + moduleApi->qobjectCallback = 0; + } else if (moduleApi->qobjectCallback) { + moduleApi->qobjectApi = moduleApi->qobjectCallback(v8engine->engine(), v8engine->engine()); + moduleApi->scriptCallback = 0; + moduleApi->qobjectCallback = 0; + } + + if (moduleApi->qobjectApi) { + return QVariant::fromValue<QObject*>(moduleApi->qobjectApi); + } + } + } + + // only QObject Module API can be converted to a variant. + return QVariant(); +} + v8::Handle<v8::Value> QV8TypeWrapper::Getter(v8::Local<v8::String> property, const v8::AccessorInfo &info) { |