1
/* This file is part of Maliit framework
3
* Copyright (C) 2012 Openismus GmbH
5
* Contact: maliit-discuss@lists.maliit.org
7
* This library is free software; you can redistribute it and/or
8
* modify it under the terms of the GNU Lesser General Public
9
* License as published by the Free Software Foundation; either
10
* version 2.1 of the licence, or (at your option) any later version.
12
* This library is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
* Lesser General Public License for more details.
17
* You should have received a copy of the GNU Lesser General Public
18
* License along with this library; if not, write to the
19
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20
* Boston, MA 02111-1307, USA.
23
#include "maliitsettingdata.h"
26
* SECTION:maliitsettingdata
27
* @short_description: miscellaneous setting functions and types
28
* @title: Maliit settings misc
29
* @see_also: #MaliitSettingsEntry, #MaliitPluginSettings
31
* @include: maliit/maliitsettingdata.h
33
* Here #MaliitSettingsEntryType, attribute keys and
34
* maliit_validate_setting_value() are specified.
39
* MaliitSettingsEntryType:
40
* @MALIIT_STRING_TYPE: Entry is a string.
41
* @MALIIT_INT_TYPE: Entry is an integer.
42
* @MALIIT_BOOL_TYPE: Entry is a boolean.
43
* @MALIIT_STRING_LIST_TYPE: Entry is a list of strings.
44
* @MALIIT_INT_LIST_TYPE: Entry is a list of integers.
46
* This enum describes type of settings entry.
48
static const GEnumValue maliit_settings_entry_type_values[] = {
49
{ MALIIT_STRING_TYPE, "MALIIT_STRING_TYPE", "string-type" },
50
{ MALIIT_INT_TYPE, "MALIIT_INT_TYPE", "int-type" },
51
{ MALIIT_BOOL_TYPE, "MALIIT_BOOL_TYPE", "bool-type" },
52
{ MALIIT_STRING_LIST_TYPE, "MALIIT_STRING_LIST_TYPE", "string-list-type" },
53
{ MALIIT_INT_LIST_TYPE, "MALIIT_INT_LIST_TYPE", "int-list-type" },
58
maliit_settings_entry_type_get_type (void)
60
static GType type = G_TYPE_INVALID;
62
if (type == G_TYPE_INVALID) {
63
type = g_enum_register_static ("MaliitSettingsEntryType",
64
maliit_settings_entry_type_values);
71
check_single_value_domain(GVariant *value,
74
gsize array_len = g_variant_n_children(domain);
75
gboolean equal = FALSE;
78
for (iter = 0; iter < array_len && !equal; ++iter) {
79
GVariant *child = g_variant_get_child_value(domain, iter);
81
equal = g_variant_equal(value, child);
82
g_variant_unref(child);
88
check_variant_value_domain(GVariant *value,
95
if (!g_variant_is_of_type(domain, G_VARIANT_TYPE_ARRAY)) {
99
return check_single_value_domain(value, domain);
103
check_variant_array_domain(GVariant *values, GVariant *domain)
113
if (!g_variant_is_of_type(domain, G_VARIANT_TYPE_ARRAY)) {
117
array_len = g_variant_n_children(values);
119
for (iter = 0; iter < array_len && correct; ++iter) {
120
GVariant *child = g_variant_get_child_value(values, iter);
122
correct = check_single_value_domain(child, domain);
123
g_variant_unref (child);
129
check_single_value_range(GVariant *value,
134
if (!g_variant_is_of_type(range_min, G_VARIANT_TYPE_INT32) ||
135
g_variant_get_int32(range_min) > g_variant_get_int32(value)) {
141
if (!g_variant_is_of_type(range_max, G_VARIANT_TYPE_INT32) ||
142
g_variant_get_int32(range_max) < g_variant_get_int32(value)) {
151
check_variant_value_range(GVariant *value,
155
if (!range_min && !range_max) {
159
return check_single_value_range(value, range_min, range_max);
163
check_variant_array_range(GVariant *values,
171
if (!range_min && !range_max) {
176
values_len = g_variant_n_children(values);
177
for (iter = 0; iter < values_len && correct; ++iter) {
178
GVariant *child = g_variant_get_child_value(values, iter);
180
correct = check_single_value_range(child, range_min, range_max);
181
g_variant_unref (child);
188
check_variant_array_is_int_array(GVariant *values)
190
gsize array_len = g_variant_n_children(values);
192
gboolean correct = TRUE;
194
for (iter = 0; iter < array_len && correct; ++iter) {
195
GVariant *child = g_variant_get_child_value(values, iter);
197
correct = g_variant_is_of_type(child, G_VARIANT_TYPE_INT32);
198
g_variant_unref(child);
204
* maliit_validate_setting_value:
205
* @type: a #MaliitSettingsEntryType to validate against.
206
* @attributes: (transfer none) (element-type utf8 GLib.Variant): Attributes to validate.
207
* @value: (transfer none): A #GVariant to validate.
209
* Validate the value for a plugin setting entry.
211
* Returns: %TRUE if @value and @attributes are valid for given @type.
214
maliit_validate_setting_value(MaliitSettingsEntryType type,
215
GHashTable *attributes,
218
GVariant *domain = g_hash_table_lookup(attributes,
219
MALIIT_SETTING_VALUE_DOMAIN);
220
GVariant *range_min = g_hash_table_lookup(attributes,
221
MALIIT_SETTING_VALUE_RANGE_MIN);
222
GVariant *range_max = g_hash_table_lookup(attributes,
223
MALIIT_SETTING_VALUE_RANGE_MAX);
227
case MALIIT_STRING_TYPE:
228
return (g_variant_is_of_type(value, G_VARIANT_TYPE_STRING) &&
229
check_variant_value_domain(value, domain));
231
case MALIIT_INT_TYPE:
232
return (g_variant_is_of_type(value, G_VARIANT_TYPE_INT32) &&
233
check_variant_value_domain(value, domain) &&
234
check_variant_value_range(value, range_min, range_max));
236
case MALIIT_BOOL_TYPE:
237
return g_variant_is_of_type(value, G_VARIANT_TYPE_BOOLEAN);
239
case MALIIT_STRING_LIST_TYPE:
240
return (g_variant_is_of_type(value, G_VARIANT_TYPE_STRING_ARRAY) &&
241
check_variant_array_domain(value, domain));
243
case MALIIT_INT_LIST_TYPE:
244
return (g_variant_is_of_type(value, G_VARIANT_TYPE_ARRAY) &&
245
check_variant_array_is_int_array(value) &&
246
check_variant_array_domain(value, domain) &&
247
check_variant_array_range(value, range_min, range_max));