/* * Copyright (C) 2013 - Juan Ferrer Toribio * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "sql-param-list.h" #include "sql-holder.h" GParamSpec * sql_param_list (const gchar * name, const gchar * nick, const gchar * blurb, GType items_type, GParamFlags flags) { SqlParamList * pspec; g_return_val_if_fail (g_type_is_a (items_type, SQL_TYPE_OBJECT), NULL); pspec = g_param_spec_internal (SQL_TYPE_PARAM_OBJECT ,name ,nick ,blurb ,flags ); pspec->items_type = items_type; G_PARAM_SPEC (pspec)->value_type = SQL_TYPE_LIST; return G_PARAM_SPEC (pspec); } static void sql_param_list_init (GParamSpec * pspec) {} static void sql_param_list_set_default (GParamSpec * pspec, GValue * value) { SqlList * list = sql_list_new (SQL_PARAM_LIST (pspec)->items_type); g_value_set_object (value, list); } static gboolean sql_param_list_validate (GParamSpec * pspec, GValue * value) { GType type; gboolean change; gpointer object = g_value_get_object (value); if (!object) return TRUE; type = G_OBJECT_TYPE (object); change = !( (g_value_type_compatible (type, SQL_TYPE_LIST) && SQL_PARAM_LIST (pspec)->items_type == sql_list_get_items_type (object)) || g_value_type_compatible (type, SQL_TYPE_HOLDER) ); if (change) g_value_set_object (value, NULL); return change; } static gint sql_param_list_values_cmp (GParamSpec * pspec, const GValue * a, const GValue * b) { guint8 * pa = g_value_get_object (a); guint8 * pb = g_value_get_object (b); return pa < pb ? -1 : pa > pb; } GType sql_param_list_get_type () { static GType type = 0; if (!type) { GParamSpecTypeInfo pspec_info = { sizeof (SqlParamList) ,16 ,sql_param_list_init ,SQL_TYPE_LIST ,NULL ,sql_param_list_set_default ,sql_param_list_validate ,sql_param_list_values_cmp }; type = g_param_type_register_static ( g_intern_static_string ("SqlParamList"), &pspec_info); } return type; }