summaryrefslogtreecommitdiff
path: root/libpurple/request-datasheet.c
diff options
context:
space:
mode:
authorTomasz Wasilczyk <twasilczyk@pidgin.im>2013-11-04 21:19:33 +0100
committerTomasz Wasilczyk <twasilczyk@pidgin.im>2013-11-04 21:19:33 +0100
commit30be5da02abe962802e147baaeacc57b3f803d71 (patch)
tree4b1f91e7b7f4c6fdb23145ef701d4e8f42b68c4d /libpurple/request-datasheet.c
parent4f5dd77e475caa66eab70180230b01a434aeb1da (diff)
downloadpidgin-30be5da02abe962802e147baaeacc57b3f803d71.tar.gz
Request API: actions for datasheet field
Diffstat (limited to 'libpurple/request-datasheet.c')
-rw-r--r--libpurple/request-datasheet.c113
1 files changed, 113 insertions, 0 deletions
diff --git a/libpurple/request-datasheet.c b/libpurple/request-datasheet.c
index d8de086dda..66d21d374d 100644
--- a/libpurple/request-datasheet.c
+++ b/libpurple/request-datasheet.c
@@ -34,6 +34,7 @@ struct _PurpleRequestDatasheet
guint col_count;
GArray *col_types;
GArray *col_titles;
+ GList *actions;
GList *record_list;
GHashTable *record_li_by_key;
@@ -46,6 +47,17 @@ struct _PurpleRequestDatasheetRecord
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 @@ purple_request_datasheet_free(PurpleRequestDatasheet *sheet)
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 @@ purple_request_datasheet_get_records(PurpleRequestDatasheet *sheet)
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 *