Files | |
file | qofchoice.h |
Linking one entity to other entities of many possible types. | |
Defines | |
#define | QOF_MOD_CHOICE "qof-choice" |
| |
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. |
Objects can be linked together one-to-one by simply using the name of the related object as the parameter type in the QofClass parameter list.
{ 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>
It holds a single entity of type X, Y, or Z for the purposes of QOF or QSF. For querying the object it queries as if it's an X, Y, or 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.
#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 }