XXX Only GObject properties are searchable, data and other hanging off the GObject is not. Fix this. This needs fixing.
Files | |
| file | qofgobj.h |
| QOF to GLib GObject mapping. | |
Functions | |
| void | qof_gobject_init (void) |
| void | qof_gobject_shutdown (void) |
| void | qof_gobject_register (QofType type, GObjectClass *obclass) |
| void | qof_gobject_register_instance (QofBook *book, QofType, GObject *) |
|
|
Initalize and shut down this subsystem. Definition at line 44 of file qofgobj.c. 00045 { 00046 if (initialized) return; 00047 initialized = TRUE; 00048 00049 // gobjectClassTable = g_hash_table_new (g_str_hash, g_str_equal); 00050 00051 /* Init the other subsystems that we need */ 00052 qof_object_initialize(); 00053 qof_query_init (); 00054 }
|
|
||||||||||||
|
Register a GObject class with the QOF subsystem. Doing this will make the properties associated with this GObject searchable using the QOF subsystem. The QofType can be any string you desire, although typically you might want to set it to G_OBJECT_CLASS_NAME() of the object class. Note that this type will become the name of the "table" that is searched by SQL queries: e.g. in order to be able to say "SELECT * FROM MyStuff;" you must first say: qof_gobject_register ("MyStuff", gobj_class); Definition at line 216 of file qofgobj.c. 00217 { 00218 int i; 00219 int j; 00220 QofParam *qof_param_list, *qpar; 00221 QofObject *class_def; 00222 GParamSpec **prop_list, *gparam; 00223 guint n_props; 00224 00225 /* Get the GObject properties, convert to QOF properties */ 00226 prop_list = g_object_class_list_properties (obclass, &n_props); 00227 00228 qof_param_list = g_new0 (QofParam, n_props); 00229 paramList = g_slist_prepend (paramList, qof_param_list); 00230 00231 PINFO ("object %s has %d props", e_type, n_props); 00232 j=0; 00233 for (i=0; i<n_props; i++) 00234 { 00235 gparam = prop_list[i]; 00236 qpar = &qof_param_list[j]; 00237 00238 PINFO ("param %d %s is type %s", 00239 i, gparam->name, G_PARAM_SPEC_TYPE_NAME(gparam)); 00240 00241 qpar->param_name = g_param_spec_get_name (gparam); 00242 qpar->param_getfcn = (QofAccessFunc)qof_gobject_getter; 00243 qpar->param_setfcn = NULL; 00244 qpar->param_userdata = gparam; 00245 if ((G_IS_PARAM_SPEC_INT(gparam)) || 00246 (G_IS_PARAM_SPEC_UINT(gparam)) || 00247 (G_IS_PARAM_SPEC_ENUM(gparam)) || 00248 (G_IS_PARAM_SPEC_FLAGS(gparam))) 00249 { 00250 qpar->param_type = QOF_TYPE_INT32; 00251 j++; 00252 } 00253 else 00254 if ((G_IS_PARAM_SPEC_INT64(gparam)) || 00255 (G_IS_PARAM_SPEC_UINT64(gparam))) 00256 { 00257 qpar->param_type = QOF_TYPE_INT64; 00258 j++; 00259 } 00260 else 00261 if (G_IS_PARAM_SPEC_BOOLEAN(gparam)) 00262 { 00263 qpar->param_type = QOF_TYPE_BOOLEAN; 00264 j++; 00265 } 00266 else 00267 if (G_IS_PARAM_SPEC_STRING(gparam)) 00268 { 00269 qpar->param_type = QOF_TYPE_STRING; 00270 j++; 00271 } 00272 else 00273 if ((G_IS_PARAM_SPEC_POINTER(gparam)) || 00274 (G_IS_PARAM_SPEC_OBJECT(gparam))) 00275 { 00276 /* No-op, silently ignore. Someday we should handle this ... */ 00277 } 00278 else 00279 if ((G_IS_PARAM_SPEC_FLOAT(gparam)) || 00280 (G_IS_PARAM_SPEC_DOUBLE(gparam))) 00281 { 00282 qpar->param_getfcn = (QofAccessFunc) qof_gobject_double_getter; 00283 qpar->param_type = QOF_TYPE_DOUBLE; 00284 j++; 00285 } 00286 else 00287 if (G_IS_PARAM_SPEC_CHAR(gparam)) 00288 { 00289 qpar->param_type = QOF_TYPE_CHAR; 00290 j++; 00291 } 00292 else 00293 { 00294 PWARN ("Unknown/unhandled parameter type %s on %s:%s\n", 00295 G_PARAM_SPEC_TYPE_NAME(gparam), e_type, qpar->param_name); 00296 } 00297 } 00298 00299 /* NULL-terminated list! */ 00300 qof_param_list[j].param_type = NULL; 00301 00302 qof_class_register (e_type, NULL, qof_param_list); 00303 00304 /* ------------------------------------------------------ */ 00305 /* Now do the class itself */ 00306 class_def = g_new0 (QofObject, 1); 00307 classList = g_slist_prepend (classList, class_def); 00308 00309 class_def->interface_version = QOF_OBJECT_VERSION; 00310 class_def->e_type = e_type; 00311 /* We could let the user specify a "nick" here, but 00312 * the actual class name seems reasonable, e.g. for debugging. */ 00313 class_def->type_label = G_OBJECT_CLASS_NAME (obclass); 00314 class_def->create = NULL; 00315 class_def->book_begin = NULL; 00316 class_def->book_end = NULL; 00317 class_def->is_dirty = NULL; 00318 class_def->mark_clean = NULL; 00319 class_def->foreach = qof_gobject_foreach; 00320 class_def->printable = NULL; 00321 class_def->version_cmp = NULL; 00322 00323 qof_object_register (class_def); 00324 }
|
|
||||||||||||||||
|
Register an instance of a GObject with the QOF subsystem. The QofType can be any string you desire, although typically you might want to set it to G_OBJECT_CLASS_NAME() of the object class. Note that this type will become the name of the "table" that is searched by SQL queries: e.g. in order to be able to say "SELECT * FROM MyStuff;" you must first say: qof_gobject_register_instance (book, "MyStuff", obj); The 'book' argument specifies an anchor point for the collection of all of the registered instances. By working with disjoint books, you can have multiple disjoint searchable sets of objects. Definition at line 85 of file qofgobj.c. 00086 { 00087 QofCollection *coll; 00088 GSList *instance_list; 00089 00090 if (!book || !type) return; 00091 00092 coll = qof_book_get_collection (book, type); 00093 00094 instance_list = qof_collection_get_data (coll); 00095 instance_list = g_slist_prepend (instance_list, gob); 00096 qof_collection_set_data (coll, instance_list); 00097 }
|
1.4.5