src/accountopt.c

changeset 8570
bce05cb55dbc
parent 8046
c581b20a47d6
child 10658
6223ea383921
--- a/src/accountopt.c	Sat Apr 03 03:17:51 2004 +0000
+++ b/src/accountopt.c	Sat Apr 03 03:30:57 2004 +0000
@@ -30,12 +30,9 @@
 {
 	GaimAccountOption *option;
 
-	g_return_val_if_fail(type == GAIM_PREF_BOOLEAN ||
-						 type == GAIM_PREF_INT ||
-						 type == GAIM_PREF_STRING,
-						 NULL);
-	g_return_val_if_fail(text != NULL, NULL);
-	g_return_val_if_fail(pref_name != NULL, NULL);
+	g_return_val_if_fail(type      != GAIM_PREF_NONE, NULL);
+	g_return_val_if_fail(text      != NULL,           NULL);
+	g_return_val_if_fail(pref_name != NULL,           NULL);
 
 	option = g_new0(GaimAccountOption, 1);
 
@@ -95,6 +92,22 @@
 	return option;
 }
 
+GaimAccountOption *
+gaim_account_option_list_new(const char *text, const char *pref_name,
+							 GList *list)
+{
+	GaimAccountOption *option;
+
+	option = gaim_account_option_new(GAIM_PREF_STRING_LIST, text, pref_name);
+
+	if (option == NULL)
+		return NULL;
+
+	option->default_value.list = list;
+
+	return option;
+}
+
 void
 gaim_account_option_destroy(GaimAccountOption *option)
 {
@@ -106,10 +119,18 @@
 	if (option->pref_name != NULL)
 		g_free(option->pref_name);
 
-	if (option->type == GAIM_PREF_STRING &&
-		option->default_value.string != NULL) {
-
-		g_free(option->default_value.string);
+	if (option->type == GAIM_PREF_STRING)
+	{
+		if (option->default_value.string != NULL)
+			g_free(option->default_value.string);
+	}
+	else if (option->type == GAIM_PREF_STRING_LIST)
+	{
+		if (option->default_value.list != NULL)
+		{
+			g_list_foreach(option->default_value.list, (GFunc)g_free, NULL);
+			g_list_free(option->default_value.list);
+		}
 	}
 
 	g_free(option);
@@ -147,6 +168,36 @@
 	option->default_value.string = (value == NULL ? NULL : g_strdup(value));
 }
 
+void
+gaim_account_option_set_list(GaimAccountOption *option, GList *values)
+{
+	g_return_if_fail(option != NULL);
+	g_return_if_fail(option->type == GAIM_PREF_STRING_LIST);
+
+	if (option->default_value.list != NULL)
+	{
+		g_list_foreach(option->default_value.list, (GFunc)g_free, NULL);
+		g_list_free(option->default_value.list);
+	}
+
+	option->default_value.list = values;
+}
+
+void
+gaim_account_option_add_list_item(GaimAccountOption *option,
+								  const char *key, const char *value)
+{
+	g_return_if_fail(option != NULL);
+	g_return_if_fail(key    != NULL);
+	g_return_if_fail(value  != NULL);
+	g_return_if_fail(option->type == GAIM_PREF_STRING_LIST);
+
+	option->default_value.list = g_list_append(option->default_value.list,
+											   g_strdup(key));
+	option->default_value.list = g_list_append(option->default_value.list,
+											   g_strdup(value));
+}
+
 GaimPrefType
 gaim_account_option_get_type(const GaimAccountOption *option)
 {
@@ -198,7 +249,18 @@
 	return option->default_value.string;
 }
 
+const GList *
+gaim_account_option_get_list(const GaimAccountOption *option)
+{
+	g_return_val_if_fail(option != NULL, NULL);
+	g_return_val_if_fail(option->type == GAIM_PREF_STRING_LIST, NULL);
 
+	return option->default_value.list;
+}
+
+/**************************************************************************
+ * Account User Split API
+ **************************************************************************/
 GaimAccountUserSplit *
 gaim_account_user_split_new(const char *text, const char *default_value,
 							char sep)

mercurial