{ 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. | |
gboolean | qof_object_is_choice (QofIdType type) |
Does this object contain a choice parameter? | |
gboolean | qof_choice_create (gchar *type) |
Set an object as using QOF_TYPE_CHOICE. | |
gboolean | qof_choice_add_class (gchar *choice, gchar *add, gchar *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 (gchar *choice_obj, gchar *param_name, gchar *choice) |
Is the choice valid for this param_name? | |
#define | QOF_TYPE_CHOICE "choice" |
Identify an object as containing a choice. | |
Defines | |
#define | QOF_MOD_CHOICE "qof-choice" |
#define QOF_TYPE_CHOICE "choice" |
gboolean qof_choice_add_class | ( | gchar * | choice, | |
gchar * | add, | |||
gchar * | param_name | |||
) |
Add the choices for this parameter to the object.
choice | The choice object. | |
add | The object to be added as an option. | |
param_name | The parameter that will be used to get or set options. |
Definition at line 75 of file qofchoice.c.
00076 { 00077 GHashTable *param_table; 00078 GList *option_list; 00079 00080 option_list = NULL; 00081 param_table = NULL; 00082 g_return_val_if_fail (select != NULL, FALSE); 00083 g_return_val_if_fail (qof_object_is_choice (select), FALSE); 00084 param_table = 00085 (GHashTable *) g_hash_table_lookup (qof_choice_table, select); 00086 g_return_val_if_fail (param_table, FALSE); 00087 option_list = (GList *) g_hash_table_lookup (param_table, param_name); 00088 option_list = g_list_append (option_list, option); 00089 g_hash_table_insert (param_table, param_name, option_list); 00090 return TRUE; 00091 }
gboolean qof_choice_check | ( | gchar * | choice_obj, | |
gchar * | param_name, | |||
gchar * | choice | |||
) |
Is the choice valid for this param_name?
choice_obj | The object containing the QOF_TYPE_CHOICE parameter. | |
param_name | The name of a QOF_TYPE_CHOICE parameter in this object. | |
choice | The QofIdType to look for in the list of choices. |
Definition at line 108 of file qofchoice.c.
00109 { 00110 GList *choices, *result; 00111 GHashTable *param_table; 00112 00113 choices = result = NULL; 00114 g_return_val_if_fail (qof_object_is_choice (choice_obj), FALSE); 00115 param_table = g_hash_table_lookup (qof_choice_table, choice_obj); 00116 choices = g_hash_table_lookup (param_table, param_name); 00117 result = g_list_find (choices, choice); 00118 if (!result) 00119 return FALSE; 00120 return TRUE; 00121 }
Return the list of all object types usable with this parameter.
type | The choice object type. | |
param | The name of the parameter that will be used to get or set options. |
Definition at line 94 of file qofchoice.c.
00095 { 00096 GList *choices; 00097 GHashTable *param_table; 00098 00099 g_return_val_if_fail (type != NULL, NULL); 00100 g_return_val_if_fail (qof_choice_is_initialized () == TRUE, FALSE); 00101 choices = NULL; 00102 param_table = g_hash_table_lookup (qof_choice_table, type); 00103 choices = g_hash_table_lookup (param_table, param->param_name); 00104 return choices; 00105 }
gboolean qof_object_is_choice | ( | QofIdType | type | ) |
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.
type | Type of object/entity. |
Definition at line 45 of file qofchoice.c.
00046 { 00047 gpointer value, check; 00048 00049 value = NULL; 00050 check = NULL; 00051 if (!qof_choice_is_initialized ()) 00052 return FALSE; 00053 g_return_val_if_fail (type != NULL, FALSE); 00054 value = g_hash_table_lookup (qof_choice_table, type); 00055 if ((GHashTable *) value) 00056 return TRUE; 00057 return FALSE; 00058 }