r18893 - gnucash/trunk/src/libqof/qof - Add some new gobject-related infrastructure so that when deleting an object, it can be determined if there are other objects with references to that object (bug 140400).

Phil Longstaff plongstaff at code.gnucash.org
Fri Mar 12 05:14:27 EST 2010


Author: plongstaff
Date: 2010-03-12 05:14:27 -0500 (Fri, 12 Mar 2010)
New Revision: 18893
Trac: http://svn.gnucash.org/trac/changeset/18893

Modified:
   gnucash/trunk/src/libqof/qof/qofinstance.c
   gnucash/trunk/src/libqof/qof/qofinstance.h
Log:
Add some new gobject-related infrastructure so that when deleting an object, it can be determined if there are other objects with references to that object (bug 140400).

Some routines are normal routines, and some routines use the gobject structure to allow different implementations by different object types.

Per-instance routine: gboolean qof_instance_refers_to_object(QofInstance* A, QofInstance* B) - returns TRUE/FALSE whether object A contains a reference to object B.
Normal routine: GList* qof_instance_get_referring_object_list_from_collection(QofCollection* c, QofInstance* B) - Calls qof_instance_refers_to_object() for each object in the collection, and returns a list of the objects which contain a reference to B.
Per-instance routine: GList* qof_instance_get_typed_referring_object_list(QofInstance* A, QofInstance* B) - returns a list of all objects of the same type as A which contain a reference to B.  Being per-instance allows an object to use knowledge to avoid scanning cases where there are no references (e.g. billterms do not contain references to splits), or a scan is not needed (references from splits to an account can be determined using xaccAccountGetSplitList()).  This routine can do a scan by calling qof_instnace_get_referring_object_list_from_collection().
Normal routine: qof_instance_get_referring_object_list(QofInstance* A) - For all collections in the book, gets an instance and calls its qof_instance_get_typed_referring_object_list() routine, concatenating all of the returned lists.  This is the routine that external code can call to get a list of all objects with references to an object A.  The list must be freed by the caller but the contents must not.
Per-instance routine: gchar* qof_instance_get_display_name(QofInstance* A) - returns a string which can identify object A to the user.  This could be used to display a list of the objects returned by qof_instance_get_referring_object_list() ("Invoice 0004 for customer C") so that the user can modify those objects to remove the references.  Note that this is going to require internationalization, which has not been implemented yet.  If not overridden by the object class, the default string is "Object <type> <address>" e.g. "Object gncCustomer 0x12345678".




More information about the gnucash-patches mailing list