aboutsummaryrefslogtreecommitdiffstats
path: root/src/declarative/qml/v8/qv8typewrapper.cpp
diff options
context:
space:
mode:
authorChris Adams <christopher.adams@nokia.com>2011-08-22 15:51:28 +1000
committerQt by Nokia <qt-info@nokia.com>2011-09-02 01:34:21 +0200
commit6080375fed90c09bfabb96a0319817f14f693b05 (patch)
tree2f91acc1e37cf5a747086066b741fa68fa0bbe57 /src/declarative/qml/v8/qv8typewrapper.cpp
parentd481f2ff518df1e44103d1850e7d52bd69260c34 (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.cpp28
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)
{