{ FOO_PARAM, BAR_ID, (QofAccessFunc)qofFooGetBar, (QofSetterFunc)qofFooSetBar },
This is limited as each FOO entity can contain only one reference to a single BAR entity per parameter. Also, this parameter cannot be used to link to a similar object, OBJ. This requires "one to many" links.
There are two types of one-to-many links in QOF.
Currently, there is no explicit way to support many-to-many links but existing methods can be combined to give approximately the same results.
A QOF_TYPE_CHOICE object is like a C++ template. QOF_TYPE_CHOICE doesn't really exist by itself:
QOF_TYPE_CHOICE<QOF_X, QOF_Y, QOF_Z>
Each choice type has it's own definition of the allowable objects - each of which need to be registered as normal. Objects can declare themselves to be one option of a particular choice. There is no requirement for any object to be either a choice or an option for a choice object.
Files | |
file | qofchoice.h |
Linking one entity to other entities of many possible types. | |
#define | QOF_TYPE_CHOICE "choice" |
Identify an object as containing a choice. | |
gboolean | qof_object_is_choice (QofIdType type) |
Does this object contain a choice parameter? | |
gboolean | qof_choice_create (char *type) |
Set an object as using QOF_TYPE_CHOICE. | |
gboolean | qof_choice_add_class (char *choice, char *add, char *param_name) |
Add the choices for this parameter to the object. | |
GList * | qof_object_get_choices (QofIdType type, QofParam *param) |
Return the list of all object types usable with this parameter. | |
gboolean | qof_choice_check (char *choice_obj, char *param_name, char *choice) |
Is the choice valid for this param_name? | |
Defines | |
#define | QOF_MOD_CHOICE "qof-choice" |
|
Add the choices for this parameter to the object.
Definition at line 70 of file qofchoice.c. 00071 { 00072 GHashTable *param_table; 00073 GList *option_list; 00074 00075 option_list = NULL; 00076 param_table = NULL; 00077 g_return_val_if_fail(select != NULL, FALSE); 00078 g_return_val_if_fail(qof_object_is_choice(select), FALSE); 00079 param_table = (GHashTable*)g_hash_table_lookup(qof_choice_table, select); 00080 g_return_val_if_fail(param_table, FALSE); 00081 option_list = (GList*)g_hash_table_lookup(param_table, param_name); 00082 option_list = g_list_append(option_list, option); 00083 g_hash_table_insert(param_table, param_name, option_list); 00084 return TRUE; 00085 }
|
|
Is the choice valid for this param_name?
Definition at line 100 of file qofchoice.c. 00101 { 00102 GList *choices, *result; 00103 GHashTable *param_table; 00104 00105 choices = result = NULL; 00106 g_return_val_if_fail(qof_object_is_choice(choice_obj), FALSE); 00107 param_table = g_hash_table_lookup(qof_choice_table, choice_obj); 00108 choices = g_hash_table_lookup(param_table, param_name); 00109 result = g_list_find(choices, choice); 00110 if(!result) { return FALSE; } 00111 return TRUE; 00112 }
|
|
Return the list of all object types usable with this parameter.
Definition at line 87 of file qofchoice.c. 00088 { 00089 GList *choices; 00090 GHashTable *param_table; 00091 00092 g_return_val_if_fail(type != NULL, NULL); 00093 g_return_val_if_fail(qof_choice_is_initialized() == TRUE, FALSE); 00094 choices = NULL; 00095 param_table = g_hash_table_lookup(qof_choice_table, type); 00096 choices = g_hash_table_lookup(param_table, param->param_name); 00097 return choices; 00098 }
|
|
Does this object contain a choice parameter? Returns TRUE if any parameter in the object definition uses a choice of elements, whether or not those parameters contain any data.
Definition at line 44 of file qofchoice.c. 00045 { 00046 gpointer value, check; 00047 00048 value = NULL; 00049 check = NULL; 00050 if(!qof_choice_is_initialized()) { return FALSE; } 00051 g_return_val_if_fail(type != NULL, FALSE); 00052 value = g_hash_table_lookup(qof_choice_table, type); 00053 if((GHashTable*)value) { return TRUE; } 00054 DEBUG (" QOF_TYPE_CHOICE setup failed for %s\n", type); 00055 return FALSE; 00056 }
|