32 static gboolean initialized = FALSE;
33 static GSList *paramList = NULL;
34 static GSList *classList = NULL;
40 clear_table (gpointer key, gpointer value, gpointer user_data)
57 qof_object_initialize ();
62 qof_gobject_shutdown (
void)
71 for (n = paramList; n; n = n->next)
73 g_slist_free (paramList);
75 for (n = classList; n; n = n->next)
77 g_slist_free (classList);
83 g_hash_table_foreach_remove (gobjectParamTable, clear_table, NULL);
84 g_hash_table_destroy (gobjectParamTable);
90 #define GOBJECT_TABLE "GobjectTable" 96 GSList *instance_list;
104 instance_list = g_slist_prepend (instance_list, gob);
111 qof_gobject_getter (gpointer data,
QofParam * getter)
116 GParamSpec *gps = getter->param_userdata;
121 if (G_IS_PARAM_SPEC_STRING (gps))
124 g_value_init (&gval, G_TYPE_STRING);
125 g_object_get_property (gob, getter->param_name, &gval);
127 str = g_value_get_string (&gval);
128 return (gpointer) str;
130 else if (G_IS_PARAM_SPEC_INT (gps))
135 g_value_init (&gval, G_TYPE_INT);
136 g_object_get_property (gob, getter->param_name, &gval);
138 ival = g_value_get_int (&gval);
139 return (gpointer) ival;
141 else if (G_IS_PARAM_SPEC_UINT (gps))
145 g_value_init (&gval, G_TYPE_UINT);
146 g_object_get_property (gob, getter->param_name, &gval);
148 ival = g_value_get_uint (&gval);
149 return (gpointer) ival;
151 else if (G_IS_PARAM_SPEC_BOOLEAN (gps))
156 g_value_init (&gval, G_TYPE_BOOLEAN);
157 g_object_get_property (gob, getter->param_name, &gval);
159 ival = g_value_get_boolean (&gval);
160 return GINT_TO_POINTER (ival);
163 PWARN (
"unhandled parameter type %s for parameter %s",
164 G_PARAM_SPEC_TYPE_NAME (gps), getter->param_name);
169 qof_gobject_double_getter (gpointer data,
QofParam * getter)
174 GParamSpec *gps = getter->param_userdata;
179 if (G_IS_PARAM_SPEC_FLOAT (gps))
182 g_value_init (&gval, G_TYPE_FLOAT);
183 g_object_get_property (gob, getter->param_name, &gval);
185 fval = g_value_get_float (&gval);
188 else if (G_IS_PARAM_SPEC_DOUBLE (gps))
191 g_value_init (&gval, G_TYPE_DOUBLE);
192 g_object_get_property (gob, getter->param_name, &gval);
194 fval = g_value_get_double (&gval);
198 PWARN (
"unhandled parameter type %s for parameter %s",
199 G_PARAM_SPEC_TYPE_NAME (gps), getter->param_name);
213 for (; n; n = n->next)
227 GParamSpec **prop_list, *gparam;
231 prop_list = g_object_class_list_properties (obclass, &n_props);
233 qof_param_list = g_new0 (
QofParam, n_props);
234 paramList = g_slist_prepend (paramList, qof_param_list);
236 PINFO (
"object %s has %d props", e_type, n_props);
238 for (i = 0; i < n_props; i++)
240 gparam = prop_list[i];
241 qpar = &qof_param_list[j];
243 PINFO (
"param %d %s is type %s",
244 i, gparam->name, G_PARAM_SPEC_TYPE_NAME (gparam));
246 qpar->param_name = g_param_spec_get_name (gparam);
248 qpar->param_setfcn = NULL;
249 qpar->param_userdata = gparam;
250 if ((G_IS_PARAM_SPEC_INT (gparam)) ||
251 (G_IS_PARAM_SPEC_UINT (gparam)) ||
252 (G_IS_PARAM_SPEC_ENUM (gparam)) ||
253 (G_IS_PARAM_SPEC_FLAGS (gparam)))
255 qpar->param_type = QOF_TYPE_INT32;
258 else if ((G_IS_PARAM_SPEC_INT64 (gparam)) ||
259 (G_IS_PARAM_SPEC_UINT64 (gparam)))
261 qpar->param_type = QOF_TYPE_INT64;
264 else if (G_IS_PARAM_SPEC_BOOLEAN (gparam))
266 qpar->param_type = QOF_TYPE_BOOLEAN;
269 else if (G_IS_PARAM_SPEC_STRING (gparam))
271 qpar->param_type = QOF_TYPE_STRING;
274 else if ((G_IS_PARAM_SPEC_POINTER (gparam)) ||
275 (G_IS_PARAM_SPEC_OBJECT (gparam)))
279 else if ((G_IS_PARAM_SPEC_FLOAT (gparam)) ||
280 (G_IS_PARAM_SPEC_DOUBLE (gparam)))
282 qpar->param_getfcn = (
QofAccessFunc) qof_gobject_double_getter;
283 qpar->param_type = QOF_TYPE_DOUBLE;
286 else if (G_IS_PARAM_SPEC_CHAR (gparam))
288 qpar->param_type = QOF_TYPE_CHAR;
293 PWARN (
"Unknown/unhandled parameter type %s on %s:%s\n",
294 G_PARAM_SPEC_TYPE_NAME (gparam), e_type, qpar->param_name);
299 qof_param_list[j].param_type = NULL;
306 classList = g_slist_prepend (classList, class_def);
309 class_def->e_type = e_type;
312 class_def->type_label = G_OBJECT_CLASS_NAME (obclass);
318 class_def->
foreach = qof_gobject_foreach;
#define PINFO(format, args...)
QofCollection * qof_book_get_collection(QofBook *book, QofIdType entity_type)
#define QOF_OBJECT_VERSION
void qof_class_register(QofIdTypeConst obj_name, QofSortFunc default_sort_function, const QofParam *params)
registers a new object class with the Qof subsystem.
void(* QofEntityForeachCB)(QofEntity *, gpointer user_data)
void qof_gobject_register_instance(QofBook *book, QofType type, GObject *gob)
gpointer(* create)(QofBook *)
QOF to GLib GObject mapping.
void(* book_end)(QofBook *)
struct QofCollection_s QofCollection
void(* book_begin)(QofBook *)
void qof_query_init(void)
void qof_gobject_init(void)
void(* mark_clean)(QofCollection *)
void qof_collection_set_data(QofCollection *col, gpointer user_data)
void qof_gobject_register(QofType e_type, GObjectClass *obclass)
gpointer(* QofAccessFunc)(gpointer object, const QofParam *param)
gboolean(* is_dirty)(QofCollection *)
gboolean qof_object_register(const QofObject *object)
gpointer qof_collection_get_data(QofCollection *col)
#define PWARN(format, args...)
const gchar *(* printable)(gpointer instance)
void(* foreach)(QofCollection *, QofEntityForeachCB, gpointer)
gint(* version_cmp)(gpointer instance_left, gpointer instance_right)
const gchar * QofLogModule