QOF  0.8.7
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
00035 qof_choice_is_initialized (void)
00036 {
00037     if (!qof_choice_table)
00038         qof_choice_table = g_hash_table_new (g_str_hash, g_str_equal);
00039     if (!qof_choice_table)
00040         return FALSE;
00041     return TRUE;
00042 }
00043 
00044 gboolean
00045 qof_object_is_choice (QofIdType type)
00046 {
00047     gpointer value;
00048 
00049     value = NULL;
00050     if (!qof_choice_is_initialized ())
00051         return FALSE;
00052     g_return_val_if_fail (type != NULL, FALSE);
00053     value = g_hash_table_lookup (qof_choice_table, type);
00054     if ((GHashTable *) value)
00055         return TRUE;
00056     return FALSE;
00057 }
00058 
00059 gboolean
00060 qof_choice_create (gchar *type)
00061 {
00062     GHashTable *param_table;
00063 
00064     g_return_val_if_fail (type != NULL, FALSE);
00065     g_return_val_if_fail (qof_choice_is_initialized () == TRUE, FALSE);
00066     ENTER (" ");
00067     param_table = g_hash_table_new (g_str_hash, g_str_equal);
00068     g_hash_table_insert (qof_choice_table, type, param_table);
00069     LEAVE (" ");
00070     return TRUE;
00071 }
00072 
00073 gboolean
00074 qof_choice_add_class (gchar *select, gchar *option, gchar *param_name)
00075 {
00076     GHashTable *param_table;
00077     GList *option_list;
00078 
00079     option_list = NULL;
00080     param_table = NULL;
00081     g_return_val_if_fail (select != NULL, FALSE);
00082     g_return_val_if_fail (qof_object_is_choice (select), FALSE);
00083     param_table =
00084         (GHashTable *) g_hash_table_lookup (qof_choice_table, select);
00085     g_return_val_if_fail (param_table, FALSE);
00086     option_list = (GList *) g_hash_table_lookup (param_table, param_name);
00087     option_list = g_list_append (option_list, option);
00088     g_hash_table_insert (param_table, param_name, option_list);
00089     return TRUE;
00090 }
00091 
00092 GList *
00093 qof_object_get_choices (QofIdType type, QofParam * param)
00094 {
00095     GList *choices;
00096     GHashTable *param_table;
00097 
00098     g_return_val_if_fail (type != NULL, NULL);
00099     g_return_val_if_fail (qof_choice_is_initialized () == TRUE, FALSE);
00100     choices = NULL;
00101     param_table = g_hash_table_lookup (qof_choice_table, type);
00102     choices = g_hash_table_lookup (param_table, param->param_name);
00103     return choices;
00104 }
00105 
00106 gboolean
00107 qof_choice_check (gchar *choice_obj, gchar *param_name, gchar *choice)
00108 {
00109     GList *choices, *result;
00110     GHashTable *param_table;
00111 
00112     choices = result = NULL;
00113     g_return_val_if_fail (qof_object_is_choice (choice_obj), FALSE);
00114     param_table = g_hash_table_lookup (qof_choice_table, choice_obj);
00115     choices = g_hash_table_lookup (param_table, param_name);
00116     result = g_list_find (choices, choice);
00117     if (!result)
00118         return FALSE;
00119     return TRUE;
00120 }