QOF
0.8.7
|
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 }