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, 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 }
00059 
00060 gboolean
00061 qof_choice_create (gchar *type)
00062 {
00063     GHashTable *param_table;
00064 
00065     g_return_val_if_fail (type != NULL, FALSE);
00066     g_return_val_if_fail (qof_choice_is_initialized () == TRUE, FALSE);
00067     ENTER (" ");
00068     param_table = g_hash_table_new (g_str_hash, g_str_equal);
00069     g_hash_table_insert (qof_choice_table, type, param_table);
00070     LEAVE (" ");
00071     return TRUE;
00072 }
00073 
00074 gboolean
00075 qof_choice_add_class (gchar *select, gchar *option, gchar *param_name)
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 }
00092 
00093 GList *
00094 qof_object_get_choices (QofIdType type, QofParam * param)
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 }
00106 
00107 gboolean
00108 qof_choice_check (gchar *choice_obj, gchar *param_name, gchar *choice)
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 }

Generated on Thu Jan 31 22:50:25 2008 for QOF by  doxygen 1.5.4