24
24
#include <glib-object.h>
26
26
#include "deelistmodel.h"
29
QVariantFromGVariant(GVariant *value)
31
/* We need to special-case a{sv} here as G_VARIANT_CLASS_ARRAY handles simple arrays;
32
we need to create QVariantHash, not a list */
33
if (g_variant_is_of_type(value, G_VARIANT_TYPE_VARDICT)) {
34
const gsize nChildren = g_variant_n_children(value);
36
for (gsize i = 0; i < nChildren; ++i)
38
GVariant* dict_entry = g_variant_get_child_value(value, i);
42
g_variant_get(dict_entry, "{&sv}", &dict_key, &dict_var);
43
hash.insert(QString::fromUtf8(dict_key), QVariantFromGVariant(dict_var));
44
g_variant_unref(dict_var);
45
g_variant_unref(dict_entry);
50
switch (g_variant_classify(value)) {
51
case G_VARIANT_CLASS_BOOLEAN:
52
return QVariant((bool) g_variant_get_boolean(value));
53
case G_VARIANT_CLASS_BYTE:
54
return QVariant((uchar) g_variant_get_byte(value));
55
case G_VARIANT_CLASS_INT16:
56
return QVariant((qint16) g_variant_get_int16(value));
57
case G_VARIANT_CLASS_UINT16:
58
return QVariant((quint16) g_variant_get_uint16(value));
59
case G_VARIANT_CLASS_INT32:
60
return QVariant((qint32) g_variant_get_int32(value));
61
case G_VARIANT_CLASS_UINT32:
62
return QVariant((quint32) g_variant_get_uint32(value));
63
case G_VARIANT_CLASS_INT64:
64
return QVariant((qint64) g_variant_get_int64(value));
65
case G_VARIANT_CLASS_UINT64:
66
return QVariant((quint64) g_variant_get_uint64(value));
67
case G_VARIANT_CLASS_DOUBLE:
68
return QVariant(g_variant_get_double(value));
69
case G_VARIANT_CLASS_STRING:
70
return QVariant(QString::fromUtf8(g_variant_get_string(value, NULL)));
71
case G_VARIANT_CLASS_ARRAY:
72
case G_VARIANT_CLASS_TUPLE:
74
const gsize nChildren = g_variant_n_children(value);
75
QList<QVariant> array;
76
for (gsize i = 0; i < nChildren; ++i)
78
GVariant* gvariant = g_variant_get_child_value(value, i);
79
array << QVariantFromGVariant(gvariant);
80
g_variant_unref(gvariant);
85
/* Fallback on an empty QVariant.
86
FIXME: Missing conversion of following GVariant types:
87
- G_VARIANT_CLASS_HANDLE
88
- G_VARIANT_CLASS_OBJECT_PATH
89
- G_VARIANT_CLASS_SIGNATURE
90
- G_VARIANT_CLASS_VARIANT
91
- G_VARIANT_CLASS_MAYBE
92
- G_VARIANT_CLASS_DICT_ENTRY
27
#include "variantconversions.h"
98
29
class DeeListModelPrivate {