libpurple/request-datasheet.c

changeset 34504
188423493b57
parent 34502
433382371e89
child 34509
15514969ff61
child 35052
af1e4a48e628
--- a/libpurple/request-datasheet.c	Tue Oct 29 19:01:56 2013 +0100
+++ b/libpurple/request-datasheet.c	Mon Nov 04 21:19:33 2013 +0100
@@ -34,6 +34,7 @@
 	guint col_count;
 	GArray *col_types;
 	GArray *col_titles;
+	GList *actions;
 
 	GList *record_list;
 	GHashTable *record_li_by_key;
@@ -46,6 +47,17 @@
 	gchar **data; /* at this point, there is only string data possible */
 };
 
+struct _PurpleRequestDatasheetAction
+{
+	gchar *label;
+
+	PurpleRequestDatasheetActionCb cb;
+	gpointer cb_data;
+
+	PurpleRequestDatasheetActionCheckCb sens_cb;
+	gpointer sens_data;
+};
+
 static void
 purple_request_datasheet_record_free(PurpleRequestDatasheetRecord *rec);
 
@@ -95,6 +107,9 @@
 	g_array_free(sheet->col_titles, TRUE);
 	g_array_free(sheet->col_types, TRUE);
 
+	g_list_free_full(sheet->actions,
+		(GDestroyNotify)purple_request_datasheet_action_free);
+
 	g_hash_table_destroy(sheet->record_li_by_key);
 	g_list_free_full(sheet->record_list,
 		(GDestroyNotify)purple_request_datasheet_record_free);
@@ -158,6 +173,104 @@
 	return sheet->record_list;
 }
 
+void
+purple_request_datasheet_add_action(PurpleRequestDatasheet *sheet,
+	PurpleRequestDatasheetAction *action)
+{
+	g_return_if_fail(sheet != NULL);
+	g_return_if_fail(action != NULL);
+
+	sheet->actions = g_list_append(sheet->actions, action);
+}
+
+const GList *
+purple_request_datasheet_get_actions(PurpleRequestDatasheet *sheet)
+{
+	g_return_val_if_fail(sheet != NULL, NULL);
+
+	return sheet->actions;
+}
+
+/***** Datasheet actions API **************************************************/
+
+PurpleRequestDatasheetAction *
+purple_request_datasheet_action_new(void)
+{
+	return g_new0(PurpleRequestDatasheetAction, 1);
+}
+
+void
+purple_request_datasheet_action_free(PurpleRequestDatasheetAction *act)
+{
+	g_return_if_fail(act != NULL);
+	g_free(act->label);
+	g_free(act);
+}
+
+void
+purple_request_datasheet_action_set_label(PurpleRequestDatasheetAction *act,
+	const gchar *label)
+{
+	gchar *new_label;
+
+	g_return_if_fail(act != NULL);
+
+	new_label = g_strdup(label);
+	g_free(act->label);
+	act->label = new_label;
+}
+
+const gchar*
+purple_request_datasheet_action_get_label(PurpleRequestDatasheetAction *act)
+{
+	g_return_val_if_fail(act != NULL, NULL);
+
+	return act->label;
+}
+
+void
+purple_request_datasheet_action_set_cb(PurpleRequestDatasheetAction *act,
+	PurpleRequestDatasheetActionCb cb, gpointer user_data)
+{
+	g_return_if_fail(act != NULL);
+
+	act->cb = cb;
+	act->cb_data = user_data;
+}
+
+void
+purple_request_datasheet_action_call(PurpleRequestDatasheetAction *act,
+	PurpleRequestDatasheetRecord *rec)
+{
+	g_return_if_fail(act != NULL);
+
+	if (act->cb)
+		act->cb(rec, act->cb_data);
+}
+
+void
+purple_request_datasheet_action_set_sens_cb(
+	PurpleRequestDatasheetAction *act,
+	PurpleRequestDatasheetActionCheckCb cb, gpointer user_data)
+{
+	g_return_if_fail(act != NULL);
+
+	act->sens_cb = cb;
+	act->sens_data = user_data;
+}
+
+gboolean
+purple_request_datasheet_action_is_sensitive(PurpleRequestDatasheetAction *act,
+	PurpleRequestDatasheetRecord *rec)
+{
+	g_return_val_if_fail(act != NULL, FALSE);
+
+	if (!act->sens_cb)
+		return (rec != NULL);
+
+	return act->sens_cb(rec, act->cb_data);
+}
+
 /***** Datasheet record API ***************************************************/
 
 static PurpleRequestDatasheetRecord *

mercurial