diff options
Diffstat (limited to 'src/qml/jsapi')
-rw-r--r-- | src/qml/jsapi/qjsvalue.cpp | 65 | ||||
-rw-r--r-- | src/qml/jsapi/qjsvalue.h | 5 |
2 files changed, 70 insertions, 0 deletions
diff --git a/src/qml/jsapi/qjsvalue.cpp b/src/qml/jsapi/qjsvalue.cpp index 663f6ced82..4a1833be51 100644 --- a/src/qml/jsapi/qjsvalue.cpp +++ b/src/qml/jsapi/qjsvalue.cpp @@ -1277,4 +1277,69 @@ bool QJSValue::isQMetaObject() const return QJSValuePrivate::asManagedType<QV4::QMetaObjectWrapper>(this); } +#ifndef QT_NO_DATASTREAM +QDataStream &operator<<(QDataStream &stream, const QJSValue &jsv) +{ + quint32 isNullOrUndefined = 0; + if (jsv.isNull()) + isNullOrUndefined |= 0x1; + if (jsv.isUndefined()) + isNullOrUndefined |= 0x2; + stream << isNullOrUndefined; + if (!isNullOrUndefined) { + const QVariant v = jsv.toVariant(); + switch (v.userType()) { + case QMetaType::Bool: + case QMetaType::Double: + case QMetaType::Int: + case QMetaType::QString: + v.save(stream); + break; + default: + qWarning() << "QDataStream::operator<< was to save a non-trivial QJSValue." + << "This is not supported anymore, please stream a QVariant instead."; + QVariant().save(stream); + break; + } + + } + return stream; +} + +QDataStream &operator>>(QDataStream &stream, QJSValue &jsv) +{ + quint32 isNullOrUndefined; + stream >> isNullOrUndefined; + + if (isNullOrUndefined & 0x1) { + jsv = QJSValue(QJSValue::NullValue); + } else if (isNullOrUndefined & 0x2) { + jsv = QJSValue(); + } else { + QVariant v; + v.load(stream); + + switch (v.userType()) { + case QMetaType::Bool: + jsv = QJSValue(v.toBool()); + break; + case QMetaType::Double: + jsv = QJSValue(v.toDouble()); + break; + case QMetaType::Int: + jsv = QJSValue(v.toInt()); + break; + case QMetaType::QString: + jsv = QJSValue(v.toString()); + break; + default: + qWarning() << "QDataStream::operator>> to restore a non-trivial QJSValue." + << "This is not supported anymore, please stream a QVariant instead."; + break; + } + } + return stream; +} +#endif + QT_END_NAMESPACE diff --git a/src/qml/jsapi/qjsvalue.h b/src/qml/jsapi/qjsvalue.h index 3da76d16cb..c814ce14f8 100644 --- a/src/qml/jsapi/qjsvalue.h +++ b/src/qml/jsapi/qjsvalue.h @@ -158,6 +158,11 @@ private: quint64 d; }; +#ifndef QT_NO_DATASTREAM +Q_QML_EXPORT QDataStream &operator<<(QDataStream &, const QJSValue &); +Q_QML_EXPORT QDataStream &operator>>(QDataStream &, QJSValue &); +#endif + QT_END_NAMESPACE Q_DECLARE_METATYPE(QJSValue) |