diff options
author | Aaron Kennedy <aaron.kennedy@nokia.com> | 2010-01-28 05:54:33 (GMT) |
---|---|---|
committer | Aaron Kennedy <aaron.kennedy@nokia.com> | 2010-01-28 05:54:33 (GMT) |
commit | 5f1d7d1e73edd1c2ff3e1ad244100fdbc3495458 (patch) | |
tree | 55d084dfdd94a1d1bf7e5732a7eb732b83a3cb30 /src/declarative/qml | |
parent | 044c93a48213e325f486c3076837a2a7cebbe9aa (diff) | |
download | Qt-5f1d7d1e73edd1c2ff3e1ad244100fdbc3495458.zip Qt-5f1d7d1e73edd1c2ff3e1ad244100fdbc3495458.tar.gz Qt-5f1d7d1e73edd1c2ff3e1ad244100fdbc3495458.tar.bz2 |
Convert lists to variants on assignment.
QTBUG-5675
Diffstat (limited to 'src/declarative/qml')
-rw-r--r-- | src/declarative/qml/qmllistscriptclass.cpp | 29 | ||||
-rw-r--r-- | src/declarative/qml/qmllistscriptclass_p.h | 5 | ||||
-rw-r--r-- | src/declarative/qml/qmlobjectscriptclass.cpp | 4 |
3 files changed, 32 insertions, 6 deletions
diff --git a/src/declarative/qml/qmllistscriptclass.cpp b/src/declarative/qml/qmllistscriptclass.cpp index 441c410..d4cdc6e 100644 --- a/src/declarative/qml/qmllistscriptclass.cpp +++ b/src/declarative/qml/qmllistscriptclass.cpp @@ -49,7 +49,8 @@ QT_BEGIN_NAMESPACE struct ListData : public QScriptDeclarativeClass::Object { QmlGuard<QObject> object; int propertyIdx; - QmlListScriptClass::ListType type; + QmlListScriptClass::ListCategory type; + int propertyType; }; QmlListScriptClass::QmlListScriptClass(QmlEngine *e) @@ -65,7 +66,7 @@ QmlListScriptClass::~QmlListScriptClass() { } -QScriptValue QmlListScriptClass::newList(QObject *object, int propId, ListType type) +QScriptValue QmlListScriptClass::newList(QObject *object, int propId, ListCategory type, int propType) { QScriptEngine *scriptEngine = QmlEnginePrivate::getScriptEngine(engine); @@ -76,6 +77,7 @@ QScriptValue QmlListScriptClass::newList(QObject *object, int propId, ListType t data->object = object; data->propertyIdx = propId; data->type = type; + data->propertyType = propType; return newObject(scriptEngine, this, data); } @@ -144,5 +146,28 @@ QmlListScriptClass::ScriptValue QmlListScriptClass::property(Object *obj, const } } +QVariant QmlListScriptClass::toVariant(Object *obj, bool *ok) +{ + ListData *data = (ListData *)obj; + + if (!data->object) { + if (ok) *ok = false; + return QVariant(); + } + + void *list = 0; + void *args[] = { &list, 0 }; + QMetaObject::metacall(data->object, QMetaObject::ReadProperty, + data->propertyIdx, args); + + if (!list) { + if (ok) *ok = false; + return QVariant(); + } + + if (ok) *ok = true; + return QVariant(data->propertyType, &list); +} + QT_END_NAMESPACE diff --git a/src/declarative/qml/qmllistscriptclass_p.h b/src/declarative/qml/qmllistscriptclass_p.h index 0c6c5b2..e484b34 100644 --- a/src/declarative/qml/qmllistscriptclass_p.h +++ b/src/declarative/qml/qmllistscriptclass_p.h @@ -64,13 +64,14 @@ public: QmlListScriptClass(QmlEngine *); ~QmlListScriptClass(); - enum ListType { QListPtr, QmlListPtr }; - QScriptValue newList(QObject *, int, ListType); + enum ListCategory { QListPtr, QmlListPtr }; + QScriptValue newList(QObject *, int, ListCategory, int); protected: virtual QScriptClass::QueryFlags queryProperty(Object *, const Identifier &, QScriptClass::QueryFlags flags); virtual ScriptValue property(Object *, const Identifier &); + virtual QVariant toVariant(Object *, bool *ok); private: PersistentIdentifier m_lengthId; diff --git a/src/declarative/qml/qmlobjectscriptclass.cpp b/src/declarative/qml/qmlobjectscriptclass.cpp index f8af5a7..5fd76c6 100644 --- a/src/declarative/qml/qmlobjectscriptclass.cpp +++ b/src/declarative/qml/qmlobjectscriptclass.cpp @@ -254,9 +254,9 @@ QmlObjectScriptClass::property(QObject *obj, const Identifier &name) } if (lastData->flags & QmlPropertyCache::Data::IsQList) { - return Value(scriptEngine, enginePriv->listClass->newList(obj, lastData->coreIndex, QmlListScriptClass::QListPtr)); + return Value(scriptEngine, enginePriv->listClass->newList(obj, lastData->coreIndex, QmlListScriptClass::QListPtr, lastData->propType)); } else if (lastData->flags & QmlPropertyCache::Data::IsQmlList) { - return Value(scriptEngine, enginePriv->listClass->newList(obj, lastData->coreIndex, QmlListScriptClass::QmlListPtr)); + return Value(scriptEngine, enginePriv->listClass->newList(obj, lastData->coreIndex, QmlListScriptClass::QmlListPtr, lastData->propType)); } else if (lastData->flags & QmlPropertyCache::Data::IsQObjectDerived) { QObject *rv = 0; void *args[] = { &rv, 0 }; |