qofchoice.c

00001 /***************************************************************************
00002  *            qofchoice.c
00003  *
00004  *  Thu Jul  7 12:24:30 2005
00005  *  Copyright  2005  Neil Williams
00006  *  linux@codehelp.co.uk
00007  ****************************************************************************/
00008 /*
00009  *  This program is free software; you can redistribute it and/or modify
00010  *  it under the terms of the GNU General Public License as published by
00011  *  the Free Software Foundation; either version 2 of the License, or
00012  *  (at your option) any later version.
00013  *
00014  *  This program is distributed in the hope that it will be useful,
00015  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00016  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00017  *  GNU General Public License for more details.
00018  *
00019  *  You should have received a copy of the GNU General Public License
00020  *  along with this program; if not, write to the Free Software
00021  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
00022  */
00023 
00024 #include "config.h"
00025 #include <glib.h>
00026 #include "qof.h"
00027 #include "qofchoice.h"
00028 
00029 static QofLogModule log_module = QOF_MOD_CHOICE;
00030 static GHashTable *qof_choice_table = NULL;
00031 
00032 /* To initialise, call qof_choice_add_class in
00033 qof_object_register for the choice object. */
00034 static gboolean qof_choice_is_initialized(void)
00035 {
00036         if(!qof_choice_table)
00037         {
00038                 qof_choice_table = g_hash_table_new(g_str_hash, g_str_equal);
00039         }
00040         if(!qof_choice_table) { return FALSE; }
00041         return TRUE;
00042 }
00043 
00044 gboolean qof_object_is_choice(QofIdType type)
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 }
00057 
00058 gboolean
00059 qof_choice_create(char* type)
00060 {
00061         GHashTable *param_table;
00062 
00063         g_return_val_if_fail(type != NULL, FALSE);
00064         g_return_val_if_fail(qof_choice_is_initialized() == TRUE, FALSE);
00065         param_table = g_hash_table_new(g_str_hash, g_str_equal);
00066         g_hash_table_insert(qof_choice_table, type, param_table);
00067         return TRUE;
00068 }
00069 
00070 gboolean qof_choice_add_class(char* select, char* option, char* param_name)
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 }
00086 
00087 GList* qof_object_get_choices(QofIdType type, QofParam *param)
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 }
00099 
00100 gboolean qof_choice_check(char* choice_obj, char *param_name, char* choice )
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 }

Generated on Fri May 12 17:57:20 2006 for QOF by  doxygen 1.4.4