aboutsummaryrefslogtreecommitdiff
path: root/libqmenumodel/src/converter.cpp
diff options
context:
space:
mode:
authorRenato Araujo Oliveira Filho <renato.filho@canonical.com>2012-10-17 15:10:49 +0000
committerTarmac <>2012-10-17 15:10:49 +0000
commitd46ee24446b49d8ef00f9f0aef44ee863966f245 (patch)
tree6c13049fc74b0c44d2bbe28dfd1dc212dad1970c /libqmenumodel/src/converter.cpp
parentced307a448aeed3a20d1a1e4bdcbf4dcbe4b1e46 (diff)
parentcdd910c7a326af6d87acc6df1c90016c8e30cbc7 (diff)
downloadqmenumodel-d46ee24446b49d8ef00f9f0aef44ee863966f245.tar.gz
qmenumodel-d46ee24446b49d8ef00f9f0aef44ee863966f245.tar.bz2
qmenumodel-d46ee24446b49d8ef00f9f0aef44ee863966f245.zip
Implemented conversion for QVariantMap;
Created unit test for QVariantMap conversion;. Approved by Olivier Tilloy, PS Jenkins bot.
Diffstat (limited to 'libqmenumodel/src/converter.cpp')
-rw-r--r--libqmenumodel/src/converter.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/libqmenumodel/src/converter.cpp b/libqmenumodel/src/converter.cpp
index 452f68c..c2b8fb1 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_VARDICT);
+ QMapIterator<QString, QVariant> i(value.toMap());
+ while (i.hasNext()) {
+ i.next();
+ g_variant_builder_add(b, "{sv}", i.key().toUtf8().data(), toGVariant(i.value()));
+ }
+ result = g_variant_builder_end(b);
+ g_variant_builder_unref(b);
+ break;
+ }
default:
result = ::toGVariant(value.typeName(), value);
}