diff options
author | Tomasz Wasilczyk <twasilczyk@pidgin.im> | 2013-11-04 21:19:33 +0100 |
---|---|---|
committer | Tomasz Wasilczyk <twasilczyk@pidgin.im> | 2013-11-04 21:19:33 +0100 |
commit | 30be5da02abe962802e147baaeacc57b3f803d71 (patch) | |
tree | 4b1f91e7b7f4c6fdb23145ef701d4e8f42b68c4d /libpurple/request-datasheet.c | |
parent | 4f5dd77e475caa66eab70180230b01a434aeb1da (diff) | |
download | pidgin-30be5da02abe962802e147baaeacc57b3f803d71.tar.gz |
Request API: actions for datasheet field
Diffstat (limited to 'libpurple/request-datasheet.c')
-rw-r--r-- | libpurple/request-datasheet.c | 113 |
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 * |