summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDenis Dzyubenko <denis.dzyubenko@nokia.com>2012-01-02 16:25:17 +0100
committerQt by Nokia <qt-info@nokia.com>2012-01-05 02:17:04 +0100
commit92f9678055eef647c9e6ebc7fb0ce29b89db5f89 (patch)
tree3c4a5232263e6684bceff91fd8b351ad3b6fa127
parent99eb5051039052bc782ca3224aac1c9b99c67b28 (diff)
Registered QUuid in the metatype system as a builtin type.
Change-Id: I6be6129d9f6bf468ba8a5805cfa0f6f79199afb3 Reviewed-by: João Abecasis <joao.abecasis@nokia.com> Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com> Reviewed-by: Prasanth Ullattil <prasanth.ullattil@nokia.com>
-rw-r--r--src/corelib/kernel/qmetatype.cpp14
-rw-r--r--src/corelib/kernel/qmetatype.h3
-rw-r--r--src/corelib/kernel/qvariant.cpp23
-rw-r--r--src/corelib/kernel/qvariant.h1
-rw-r--r--src/gui/kernel/qguivariant.cpp1
-rw-r--r--tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp3
-rw-r--r--tests/auto/corelib/plugin/quuid/tst_quuid.cpp31
7 files changed, 73 insertions, 3 deletions
diff --git a/src/corelib/kernel/qmetatype.cpp b/src/corelib/kernel/qmetatype.cpp
index e72cd7c575..38bfd2987c 100644
--- a/src/corelib/kernel/qmetatype.cpp
+++ b/src/corelib/kernel/qmetatype.cpp
@@ -50,6 +50,7 @@
#include "qvector.h"
#include "qlocale.h"
#include "qeasingcurve.h"
+#include "quuid.h"
#include "qvariant.h"
#include "qmetatypeswitcher_p.h"
@@ -788,6 +789,9 @@ bool QMetaType::save(QDataStream &stream, int type, const void *data)
return false;
qMetaTypeWidgetsHelper[type - FirstWidgetsType].saveOp(stream, data);
break;
+ case QMetaType::QUuid:
+ stream << *static_cast<const NS(QUuid)*>(data);
+ break;
default: {
const QVector<QCustomTypeInfo> * const ct = customTypes();
if (!ct)
@@ -995,6 +999,9 @@ bool QMetaType::load(QDataStream &stream, int type, void *data)
return false;
qMetaTypeWidgetsHelper[type - FirstWidgetsType].loadOp(stream, data);
break;
+ case QMetaType::QUuid:
+ stream >> *static_cast< NS(QUuid)*>(data);
+ break;
default: {
const QVector<QCustomTypeInfo> * const ct = customTypes();
if (!ct)
@@ -1115,6 +1122,8 @@ void *QMetaType::create(int type, const void *copy)
case QMetaType::QEasingCurve:
return new NS(QEasingCurve)(*static_cast<const NS(QEasingCurve)*>(copy));
#endif
+ case QMetaType::QUuid:
+ return new NS(QUuid)(*static_cast<const NS(QUuid)*>(copy));
case QMetaType::Void:
return 0;
default:
@@ -1212,6 +1221,8 @@ void *QMetaType::create(int type, const void *copy)
case QMetaType::QEasingCurve:
return new NS(QEasingCurve);
#endif
+ case QMetaType::QUuid:
+ return new NS(QUuid);
case QMetaType::Void:
return 0;
default:
@@ -1379,6 +1390,9 @@ void QMetaType::destroy(int type, void *data)
delete static_cast< NS(QEasingCurve)* >(data);
break;
#endif
+ case QMetaType::QUuid:
+ delete static_cast< NS(QUuid)* >(data);
+ break;
case QMetaType::Void:
break;
default: {
diff --git a/src/corelib/kernel/qmetatype.h b/src/corelib/kernel/qmetatype.h
index dd5b1f8ed5..9bc949105c 100644
--- a/src/corelib/kernel/qmetatype.h
+++ b/src/corelib/kernel/qmetatype.h
@@ -98,6 +98,7 @@ QT_MODULE(Core)
F(QPointF, 26, QPointF) \
F(QRegExp, 27, QRegExp) \
F(QEasingCurve, 29, QEasingCurve) \
+ F(QUuid, 30, QUuid) \
F(QVariant, 138, QVariant) \
#define QT_FOR_EACH_STATIC_CORE_POINTER(F)\
@@ -182,7 +183,7 @@ public:
// these are merged with QVariant
QT_FOR_EACH_STATIC_TYPE(QT_DEFINE_METATYPE_ID)
- LastCoreType = QEasingCurve,
+ LastCoreType = QUuid,
FirstGuiType = QFont,
LastGuiType = QPolygonF,
FirstWidgetsType = QIcon,
diff --git a/src/corelib/kernel/qvariant.cpp b/src/corelib/kernel/qvariant.cpp
index f898cc4823..abffe53ab7 100644
--- a/src/corelib/kernel/qvariant.cpp
+++ b/src/corelib/kernel/qvariant.cpp
@@ -52,6 +52,7 @@
#include "qstringlist.h"
#include "qurl.h"
#include "qlocale.h"
+#include "quuid.h"
#include "private/qvariant_p.h"
#include "qmetatype_p.h"
@@ -345,6 +346,9 @@ static bool convert(const QVariant::Private *d, QVariant::Type t, void *result,
case QVariant::Url:
*str = v_cast<QUrl>(d)->toString();
break;
+ case QVariant::Uuid:
+ *str = v_cast<QUuid>(d)->toString();
+ break;
default:
return false;
}
@@ -709,6 +713,15 @@ static bool convert(const QVariant::Private *d, QVariant::Type t, void *result,
return *ok;
}
#endif
+ case QVariant::Uuid:
+ switch (d->type) {
+ case QVariant::String:
+ *static_cast<QUuid *>(result) = QUuid(*v_cast<QString>(d));
+ break;
+ default:
+ return false;
+ }
+ break;
default:
return false;
}
@@ -807,6 +820,9 @@ static void streamDebug(QDebug dbg, const QVariant &v)
dbg.nospace() << v.toRectF();
break;
#endif
+ case QVariant::Uuid:
+ dbg.nospace() << v.value<QUuid>().toString();
+ break;
case QVariant::BitArray:
//dbg.nospace() << v.toBitArray();
break;
@@ -1073,6 +1089,7 @@ Q_CORE_EXPORT void QVariantPrivate::unregisterHandler(const int /* Modules::Name
\value DateTime a QDateTime
\value Double a double
\value EasingCurve a QEasingCurve
+ \value Uuid a QUuid
\value Font a QFont
\value Hash a QVariantHash
\value Icon a QIcon
@@ -2402,7 +2419,7 @@ static const quint32 qCanConvertMatrix[QVariant::LastCoreType + 1] =
| 1 << QVariant::UInt | 1 << QVariant::Bool | 1 << QVariant::Double
| 1 << QVariant::Date | 1 << QVariant::Time | 1 << QVariant::DateTime
| 1 << QVariant::LongLong | 1 << QVariant::ULongLong | 1 << QVariant::Char
- | 1 << QVariant::Url,
+ | 1 << QVariant::Url | 1 << QVariant::Uuid,
/*QStringList*/ 1 << QVariant::List | 1 << QVariant::String,
@@ -2441,7 +2458,9 @@ static const quint32 qCanConvertMatrix[QVariant::LastCoreType + 1] =
/*QHash*/ 0,
-/*QEasingCurve*/ 0
+/*QEasingCurve*/ 0,
+
+/*QUuid*/ 1 << QVariant::String
};
/*!
diff --git a/src/corelib/kernel/qvariant.h b/src/corelib/kernel/qvariant.h
index 9b477e5dd6..8d00cb0713 100644
--- a/src/corelib/kernel/qvariant.h
+++ b/src/corelib/kernel/qvariant.h
@@ -123,6 +123,7 @@ class Q_CORE_EXPORT QVariant
RegExp = QMetaType::QRegExp,
Hash = QMetaType::QVariantHash,
EasingCurve = QMetaType::QEasingCurve,
+ Uuid = QMetaType::QUuid,
LastCoreType = QMetaType::LastCoreType,
Font = QMetaType::QFont,
diff --git a/src/gui/kernel/qguivariant.cpp b/src/gui/kernel/qguivariant.cpp
index 45100131de..dfd052df4f 100644
--- a/src/gui/kernel/qguivariant.cpp
+++ b/src/gui/kernel/qguivariant.cpp
@@ -79,6 +79,7 @@
#include "qstringlist.h"
#include "qurl.h"
#include "qlocale.h"
+#include "quuid.h"
#ifndef QT_NO_GEOM_VARIANT
#include "qsize.h"
diff --git a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp
index 12a57447cd..3da48c756e 100644
--- a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp
+++ b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp
@@ -446,6 +446,9 @@ template<> struct TestValueFactory<QMetaType::QPointF> {
template<> struct TestValueFactory<QMetaType::QEasingCurve> {
static QEasingCurve *create() { return new QEasingCurve(QEasingCurve::InOutElastic); }
};
+template<> struct TestValueFactory<QMetaType::QUuid> {
+ static QUuid *create() { return new QUuid(); }
+};
template<> struct TestValueFactory<QMetaType::QRegExp> {
static QRegExp *create()
{
diff --git a/tests/auto/corelib/plugin/quuid/tst_quuid.cpp b/tests/auto/corelib/plugin/quuid/tst_quuid.cpp
index 90a391039f..8ce7f17416 100644
--- a/tests/auto/corelib/plugin/quuid/tst_quuid.cpp
+++ b/tests/auto/corelib/plugin/quuid/tst_quuid.cpp
@@ -76,6 +76,9 @@ private slots:
void hash();
+ void qvariant();
+ void qvariant_conversion();
+
public:
// Variables
QUuid uuidA;
@@ -327,7 +330,35 @@ void tst_QUuid::hash()
QCOMPARE(qHash(QUuid(uuidA.toString())), h);
}
+void tst_QUuid::qvariant()
+{
+ QUuid uuid = QUuid::createUuid();
+ QVariant v = QVariant::fromValue(uuid);
+ QVERIFY(!v.isNull());
+ QCOMPARE(v.type(), QVariant::Uuid);
+
+ QUuid uuid2 = v.value<QUuid>();
+ QVERIFY(!uuid2.isNull());
+ QCOMPARE(uuid, uuid2);
+}
+void tst_QUuid::qvariant_conversion()
+{
+ QUuid uuid = QUuid::createUuid();
+ QVariant v = QVariant::fromValue(uuid);
+
+ QVERIFY(v.canConvert<QString>());
+ QCOMPARE(v.toString(), uuid.toString());
+ QCOMPARE(v.value<QString>(), uuid.toString());
+ QVERIFY(!v.canConvert<int>());
+ QVERIFY(!v.canConvert<QStringList>());
+
+ // try reverse conversion QString -> QUuid
+ QVariant sv = QVariant::fromValue(uuid.toString());
+ QCOMPARE(sv.type(), QVariant::String);
+ QVERIFY(sv.canConvert<QUuid>());
+ QCOMPARE(sv.value<QUuid>(), uuid);
+}
QTEST_MAIN(tst_QUuid)
#include "tst_quuid.moc"