1 /* 2 * Copyright (C) 2008 Massimo Cora <maxcvs@email.it> 3 * Copyright (C) 2008 - 2011 Vivien Malerba <malerba@gnome-db.org> 4 * 5 * This library is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU Lesser General Public 7 * License as published by the Free Software Foundation; either 8 * version 2 of the License, or (at your option) any later version. 9 * 10 * This library is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * Lesser General Public License for more details. 14 * 15 * You should have received a copy of the GNU Lesser General Public 16 * License along with this library; if not, write to the 17 * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, 18 * Boston, MA 02110-1301, USA. 19 */ 20 21 22 #ifndef __GDA_HOLDER_H_ 23 #define __GDA_HOLDER_H_ 24 25 #include <libgda/gda-decl.h> 26 #include "gda-value.h" 27 28 G_BEGIN_DECLS 29 30 #define GDA_TYPE_HOLDER (gda_holder_get_type()) 31 #define GDA_HOLDER(obj) G_TYPE_CHECK_INSTANCE_CAST (obj, gda_holder_get_type(), GdaHolder) 32 #define GDA_HOLDER_CLASS(klass) G_TYPE_CHECK_CLASS_CAST (klass, gda_holder_get_type (), GdaHolderClass) 33 #define GDA_IS_HOLDER(obj) G_TYPE_CHECK_INSTANCE_TYPE (obj, gda_holder_get_type ()) 34 35 /* error reporting */ 36 extern GQuark gda_holder_error_quark (void); 37 #define GDA_HOLDER_ERROR gda_holder_error_quark () 38 39 typedef enum { 40 GDA_HOLDER_STRING_CONVERSION_ERROR, 41 GDA_HOLDER_VALUE_TYPE_ERROR, 42 GDA_HOLDER_VALUE_NULL_ERROR 43 } GdaHolderError; 44 45 /* struct for the object's data */ 46 struct _GdaHolder 47 { 48 GObject object; 49 GdaHolderPrivate *priv; 50 }; 51 52 53 /* struct for the object's class */ 54 struct _GdaHolderClass 55 { 56 GObjectClass parent_class; 57 void (*changed) (GdaHolder *holder); 58 void (*source_changed) (GdaHolder *holder); 59 GError *(*validate_change) (GdaHolder *holder, const GValue *new_value); 60 void (*att_changed) (GdaHolder *holder, const gchar *att_name, const GValue *att_value); 61 62 /*< private >*/ 63 /* Padding for future expansion */ 64 void (*_gda_reserved1) (void); 65 void (*_gda_reserved2) (void); 66 void (*_gda_reserved3) (void); 67 void (*_gda_reserved4) (void); 68 }; 69 70 /** 71 * SECTION:gda-holder 72 * @short_description: Container for a single #GValue 73 * @title: GdaHolder 74 * @stability: Stable 75 * @see_also: The #GdaSet object which "groups" several #GdaHolder objects 76 * 77 * The #GdaHolder is a container for a single #GValue value. It also specifies various attributes 78 * of the contained value (default value, ...) 79 * 80 * The type of a #GdaHolder has to be set and cannot be modified, except if it's initialized 81 * with a GDA_TYPE_NULL GType (representing NULL values) where it can be changed once to a real GType. 82 * 83 * Each GdaHolder object is thread safe. 84 */ 85 86 GType gda_holder_get_type (void) G_GNUC_CONST; 87 GdaHolder *gda_holder_new (GType type); 88 GdaHolder *gda_holder_new_inline (GType type, const gchar *id, ...); 89 GdaHolder *gda_holder_copy (GdaHolder *orig); 90 91 GType gda_holder_get_g_type (GdaHolder *holder); 92 const gchar *gda_holder_get_id (GdaHolder *holder); 93 gchar * gda_holder_get_alphanum_id (GdaHolder *holder); 94 95 96 /** 97 * gda_holder_new_string: 98 * @id: a string 99 * @str: a string 100 * 101 * Creates a new boolean #GdaHolder object with an ID set to @id, and a value initialized to 102 * @str. 103 * 104 * Returns: a new #GdaHolder 105 */ 106 #define gda_holder_new_string(id,str) gda_holder_new_inline (G_TYPE_STRING, (id), (str)) 107 108 /** 109 * gda_holder_new_boolean: 110 * @id: a string 111 * @abool: a boolean value 112 * 113 * Creates a new boolean #GdaHolder object with an ID set to @id, and a value initialized to 114 * @abool. 115 * 116 * Returns: a new #GdaHolder 117 */ 118 #define gda_holder_new_boolean(id,abool) gda_holder_new_inline (G_TYPE_BOOLEAN, (id), (abool)) 119 120 /** 121 * gda_holder_new_int: 122 * @id: a string 123 * @anint: an int value 124 * 125 * Creates a new boolean #GdaHolder object with an ID set to @id, and a value initialized to 126 * @anint. 127 * 128 * Returns: a new #GdaHolder 129 */ 130 #define gda_holder_new_int(id,anint) gda_holder_new_inline (G_TYPE_INT, (id), (anint)) 131 132 const GValue *gda_holder_get_value (GdaHolder *holder); 133 gchar *gda_holder_get_value_str (GdaHolder *holder, GdaDataHandler *dh); 134 gboolean gda_holder_set_value (GdaHolder *holder, const GValue *value, GError **error); 135 gboolean gda_holder_take_value (GdaHolder *holder, GValue *value, GError **error); 136 GValue *gda_holder_take_static_value (GdaHolder *holder, const GValue *value, gboolean *value_changed, GError **error); 137 gboolean gda_holder_set_value_str (GdaHolder *holder, GdaDataHandler *dh, const gchar *value, GError **error); 138 139 const GValue *gda_holder_get_default_value (GdaHolder *holder); 140 void gda_holder_set_default_value (GdaHolder *holder, const GValue *value); 141 gboolean gda_holder_set_value_to_default (GdaHolder *holder); 142 gboolean gda_holder_value_is_default (GdaHolder *holder); 143 144 void gda_holder_force_invalid (GdaHolder *holder); 145 void gda_holder_force_invalid_e (GdaHolder *holder, GError *error); 146 gboolean gda_holder_is_valid (GdaHolder *holder); 147 gboolean gda_holder_is_valid_e (GdaHolder *holder, GError **error); 148 149 150 void gda_holder_set_not_null (GdaHolder *holder, gboolean not_null); 151 gboolean gda_holder_get_not_null (GdaHolder *holder); 152 153 gboolean gda_holder_set_source_model (GdaHolder *holder, GdaDataModel *model, 154 gint col, GError **error); 155 GdaDataModel *gda_holder_get_source_model (GdaHolder *holder, gint *col); 156 157 gboolean gda_holder_set_bind (GdaHolder *holder, GdaHolder *bind_to, GError **error); 158 GdaHolder *gda_holder_get_bind (GdaHolder *holder); 159 160 const GValue *gda_holder_get_attribute (GdaHolder *holder, const gchar *attribute); 161 void gda_holder_set_attribute (GdaHolder *holder, const gchar *attribute, const GValue *value, 162 GDestroyNotify destroy); 163 164 /** 165 * gda_holder_set_attribute_static: 166 * @holder: a #GdaHolder 167 * @attribute: attribute's name 168 * @value: (allow-none): a #GValue, or %NULL 169 * 170 * This function is similar to gda_holder_set_attribute() but for static strings 171 */ 172 #define gda_holder_set_attribute_static(holder,attribute,value) gda_holder_set_attribute((holder),(attribute),(value),NULL) 173 174 G_END_DECLS 175 176 #endif 177