From 7f0972362c6969fbf306945fc76f23b716400794 Mon Sep 17 00:00:00 2001 From: Renato Araujo Oliveira Filho Date: Mon, 15 Oct 2012 17:22:05 -0300 Subject: Implemented conversion for QVariantMap; --- libqmenumodel/src/converter.cpp | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/libqmenumodel/src/converter.cpp b/libqmenumodel/src/converter.cpp index 452f68c..2451d79 100644 --- a/libqmenumodel/src/converter.cpp +++ b/libqmenumodel/src/converter.cpp @@ -38,6 +38,19 @@ QVariant Converter::toQVariant(GVariant *value) gsize size = 0; const gchar *v = g_variant_get_string(value, &size); result.setValue(QString::fromLatin1(v, size)); + } else if (g_variant_type_equal(type, G_VARIANT_TYPE_VARDICT)) { + GVariantIter iter; + GVariant *vvalue; + gchar *key; + QVariantMap qmap; + + g_variant_iter_init (&iter, value); + while (g_variant_iter_loop (&iter, "{sv}", &key, &vvalue)) + { + qmap.insert(QString::fromLatin1(key), toQVariant(vvalue)); + } + + result.setValue(qmap); } else { qWarning() << "Unsupported GVariant value"; } @@ -109,6 +122,21 @@ GVariant* Converter::toGVariant(const QVariant &value) case QVariant::UInt: result = g_variant_new_uint32(value.toUInt()); break; + case QVariant::Map: + { + GVariantBuilder *b; + GVariant *dict; + + b = g_variant_builder_new(G_VARIANT_TYPE ("a{sv}")); + QMapIterator i(value.toMap()); + while (i.hasNext()) { + i.next(); + g_variant_builder_add(b, "{sv}", reinterpret_cast(i.key().toLatin1().data()), toGVariant(i.value())); + } + result = g_variant_builder_end(b); + g_variant_builder_unref(b); + break; + } default: result = ::toGVariant(value.typeName(), value); } -- cgit v1.2.3 From a98d5486c37d68e1c1ce8fc1b6ad0a9018dd534d Mon Sep 17 00:00:00 2001 From: Renato Araujo Oliveira Filho Date: Mon, 15 Oct 2012 17:22:27 -0300 Subject: Created unit test for QVariantMap conversion; --- tests/client/convertertest.cpp | 6 ++++-- tests/client/modeltest.cpp | 10 ++++++++++ tests/client/script_modeltest.py | 9 ++++++++- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/tests/client/convertertest.cpp b/tests/client/convertertest.cpp index 72b6a87..633ecf1 100644 --- a/tests/client/convertertest.cpp +++ b/tests/client/convertertest.cpp @@ -35,7 +35,7 @@ private: bool compare(const QVariant &qv, const GVariantType *type) { bool result; - GVariant *gv = Converter::toGVariant(qv); + GVariant *gv = Converter::toGVariant(qv); result = g_variant_type_equal(g_variant_get_type(gv), type); if (!result) { qWarning() << "types are different: QVariant:" << qv.typeName() @@ -48,7 +48,6 @@ private: private Q_SLOTS: - /* * Test converter QVariant to GVariant */ @@ -86,6 +85,9 @@ private Q_SLOTS: // ByteArray QVERIFY(compare(QVariant(QByteArray("42")), G_VARIANT_TYPE_BYTESTRING)); + + // Map + QVERIFY(compare(QVariantMap(), G_VARIANT_TYPE_VARDICT)); } }; diff --git a/tests/client/modeltest.cpp b/tests/client/modeltest.cpp index 9f6ee76..ebcec34 100644 --- a/tests/client/modeltest.cpp +++ b/tests/client/modeltest.cpp @@ -202,6 +202,16 @@ private Q_SLOTS: v = extra["string"]; QCOMPARE(v.type(), QVariant::String); QCOMPARE(v.toString(), QString("42")); + + // Map + v = extra["map"]; + QVariantMap map; + map.insert("int64", QVariant::fromValue(-42)); + map.insert("string", "42"); + map.insert("double", 42.42); + + QCOMPARE(v.type(), QVariant::Map); + QCOMPARE(v.toMap(), map); } }; diff --git a/tests/client/script_modeltest.py b/tests/client/script_modeltest.py index db4e28b..95df442 100755 --- a/tests/client/script_modeltest.py +++ b/tests/client/script_modeltest.py @@ -5,6 +5,12 @@ from gi.repository import GLib from menuscript import Script, ActionList, MENU_OBJECT_PATH al = ActionList(MENU_OBJECT_PATH) + +# create map +pmap = {'int64' : GLib.Variant('x', -42), + 'string': GLib.Variant('s', u'42'), + 'double': GLib.Variant('d', 42.42)} + al.appendItem("Menu0", "Menu0Act", None, None, {'x-boolean' : GLib.Variant('b', True), 'x-byte' : GLib.Variant('y', 42), 'x-int16' : GLib.Variant('n', -42), @@ -14,7 +20,8 @@ al.appendItem("Menu0", "Menu0Act", None, None, {'x-boolean' : GLib.Variant('b', 'x-int64' : GLib.Variant('x', -42), 'x-uint64' : GLib.Variant('t', 42), 'x-double' : GLib.Variant('d', 42.42), - 'x-string' : GLib.Variant('s', u'42') + 'x-string' : GLib.Variant('s', u'42'), + 'x-map' : GLib.Variant('a{sv}', pmap), }) al.appendItem("Menu1", "Menu1Act") -- cgit v1.2.3 From c805b4887a928b3ee45fdf489f043c87165f46e5 Mon Sep 17 00:00:00 2001 From: Renato Araujo Oliveira Filho Date: Wed, 17 Oct 2012 10:41:37 -0300 Subject: Used 'G_VARIANT_TYPE_VARDICT' in GVariantBuilder constructor. --- libqmenumodel/src/converter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libqmenumodel/src/converter.cpp b/libqmenumodel/src/converter.cpp index 2451d79..f7be5d7 100644 --- a/libqmenumodel/src/converter.cpp +++ b/libqmenumodel/src/converter.cpp @@ -127,7 +127,7 @@ GVariant* Converter::toGVariant(const QVariant &value) GVariantBuilder *b; GVariant *dict; - b = g_variant_builder_new(G_VARIANT_TYPE ("a{sv}")); + b = g_variant_builder_new(G_VARIANT_TYPE_VARDICT); QMapIterator i(value.toMap()); while (i.hasNext()) { i.next(); -- cgit v1.2.3 From cdd910c7a326af6d87acc6df1c90016c8e30cbc7 Mon Sep 17 00:00:00 2001 From: Renato Araujo Oliveira Filho Date: Wed, 17 Oct 2012 10:43:30 -0300 Subject: Used utf8 instead of latin1 on QString conversion; --- libqmenumodel/src/converter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libqmenumodel/src/converter.cpp b/libqmenumodel/src/converter.cpp index f7be5d7..c2b8fb1 100644 --- a/libqmenumodel/src/converter.cpp +++ b/libqmenumodel/src/converter.cpp @@ -131,7 +131,7 @@ GVariant* Converter::toGVariant(const QVariant &value) QMapIterator i(value.toMap()); while (i.hasNext()) { i.next(); - g_variant_builder_add(b, "{sv}", reinterpret_cast(i.key().toLatin1().data()), toGVariant(i.value())); + g_variant_builder_add(b, "{sv}", i.key().toUtf8().data(), toGVariant(i.value())); } result = g_variant_builder_end(b); g_variant_builder_unref(b); -- cgit v1.2.3