~ps-jenkins/dee-qt/latestsnapshot-3.3+14.04.20140116-0ubuntu1

« back to all changes in this revision

Viewing changes to deelistmodel.cpp

  • Committer: Tarmac
  • Author(s): Michal Hruby
  • Date: 2013-07-25 16:04:11 UTC
  • mfrom: (78.1.1 dee-qt)
  • Revision ID: tarmac-20130725160411-qd1ijh9rcjx2swiy
Add API that exposes variant conversions.

Approved by PS Jenkins bot, Albert Astals Cid.

Show diffs side-by-side

added added

removed removed

Lines of Context:
24
24
#include <glib-object.h>
25
25
 
26
26
#include "deelistmodel.h"
27
 
 
28
 
static QVariant
29
 
QVariantFromGVariant(GVariant *value)
30
 
{
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);
35
 
        QVariantHash hash;
36
 
        for (gsize i = 0; i < nChildren; ++i)
37
 
        {
38
 
            GVariant* dict_entry = g_variant_get_child_value(value, i);
39
 
 
40
 
            gchar* dict_key;
41
 
            GVariant *dict_var;
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);
46
 
        }
47
 
        return hash;
48
 
    }
49
 
 
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:
73
 
        {
74
 
            const gsize nChildren = g_variant_n_children(value);
75
 
            QList<QVariant> array;
76
 
            for (gsize i = 0; i < nChildren; ++i)
77
 
            {
78
 
              GVariant* gvariant = g_variant_get_child_value(value, i);
79
 
              array << QVariantFromGVariant(gvariant);
80
 
              g_variant_unref(gvariant);
81
 
            }
82
 
            return array;
83
 
        }
84
 
        default:
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
93
 
            */
94
 
            return QVariant();
95
 
    }
96
 
}
 
27
#include "variantconversions.h"
97
28
 
98
29
class DeeListModelPrivate {
99
30
public:
416
347
{
417
348
    return rowCount();
418
349
}
 
350
 
 
351
QVariant DeeListModel::VariantForData(GVariant* data)
 
352
{
 
353
  return QVariantFromGVariant(data);
 
354
}
 
355
 
 
356
GVariant* DeeListModel::DataFromVariant(const QVariant& variant)
 
357
{
 
358
  return GVariantFromQVariant(variant);
 
359
}
 
360