diff src/accountopt.c @ 8570:1a62ab7225f3

[gaim-migrate @ 9318] This is what you've been waiting for, the infamous status rewrite! It's amazing, all the stuff it can do, and... oh wait, no, this is just basic core support for the list account option, which doesn't even have UI support yet. Sorry everyone. committer: Tailor Script <tailor@pidgin.im>
author Christian Hammond <chipx86@chipx86.com>
date Sat, 03 Apr 2004 03:30:57 +0000
parents fa6395637e2c
children 61930cadca7c
line wrap: on
line diff
--- 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)