00001
00025 #ifndef _GAIM_REQUEST_H_
00026 #define _GAIM_REQUEST_H_
00027
00028 #include <stdlib.h>
00029 #include <glib-object.h>
00030 #include <glib.h>
00031
00032 #include "account.h"
00033
00034 #define GAIM_DEFAULT_ACTION_NONE -1
00035
00039 typedef enum
00040 {
00041 GAIM_REQUEST_INPUT = 0,
00042 GAIM_REQUEST_CHOICE,
00043 GAIM_REQUEST_ACTION,
00044 GAIM_REQUEST_FIELDS,
00045 GAIM_REQUEST_FILE
00047 } GaimRequestType;
00048
00052 typedef enum
00053 {
00054 GAIM_REQUEST_FIELD_NONE,
00055 GAIM_REQUEST_FIELD_STRING,
00056 GAIM_REQUEST_FIELD_INTEGER,
00057 GAIM_REQUEST_FIELD_BOOLEAN,
00058 GAIM_REQUEST_FIELD_CHOICE,
00059 GAIM_REQUEST_FIELD_LIST,
00060 GAIM_REQUEST_FIELD_LABEL,
00061 GAIM_REQUEST_FIELD_ACCOUNT
00062
00063 } GaimRequestFieldType;
00064
00068 typedef struct
00069 {
00070 GList *groups;
00071
00072 GHashTable *fields;
00073
00074 GList *required_fields;
00075
00076 void *ui_data;
00077
00078 } GaimRequestFields;
00079
00083 typedef struct
00084 {
00085 GaimRequestFields *fields_list;
00086
00087 char *title;
00088
00089 GList *fields;
00090
00091 } GaimRequestFieldGroup;
00092
00096 typedef struct
00097 {
00098 GaimRequestFieldType type;
00099 GaimRequestFieldGroup *group;
00100
00101 char *id;
00102 char *label;
00103 char *type_hint;
00104
00105 gboolean visible;
00106 gboolean required;
00107
00108 union
00109 {
00110 struct
00111 {
00112 gboolean multiline;
00113 gboolean masked;
00114 gboolean editable;
00115 char *default_value;
00116 char *value;
00117
00118 } string;
00119
00120 struct
00121 {
00122 int default_value;
00123 int value;
00124
00125 } integer;
00126
00127 struct
00128 {
00129 gboolean default_value;
00130 gboolean value;
00131
00132 } boolean;
00133
00134 struct
00135 {
00136 int default_value;
00137 int value;
00138
00139 GList *labels;
00140
00141 } choice;
00142
00143 struct
00144 {
00145 GList *items;
00146 GHashTable *item_data;
00147 GList *selected;
00148 GHashTable *selected_table;
00149
00150 gboolean multiple_selection;
00151
00152 } list;
00153
00154 struct
00155 {
00156 GaimAccount *default_account;
00157 GaimAccount *account;
00158 gboolean show_all;
00159
00160 GaimFilterAccountFunc filter_func;
00161
00162 } account;
00163
00164 } u;
00165
00166 void *ui_data;
00167
00168 } GaimRequestField;
00169
00173 typedef struct
00174 {
00175 void *(*request_input)(const char *title, const char *primary,
00176 const char *secondary, const char *default_value,
00177 gboolean multiline, gboolean masked, gchar *hint,
00178 const char *ok_text, GCallback ok_cb,
00179 const char *cancel_text, GCallback cancel_cb,
00180 void *user_data);
00181 void *(*request_choice)(const char *title, const char *primary,
00182 const char *secondary, unsigned int default_value,
00183 const char *ok_text, GCallback ok_cb,
00184 const char *cancel_text, GCallback cancel_cb,
00185 void *user_data, size_t choice_count,
00186 va_list choices);
00187 void *(*request_action)(const char *title, const char *primary,
00188 const char *secondary, unsigned int default_action,
00189 void *user_data, size_t action_count,
00190 va_list actions);
00191 void *(*request_fields)(const char *title, const char *primary,
00192 const char *secondary, GaimRequestFields *fields,
00193 const char *ok_text, GCallback ok_cb,
00194 const char *cancel_text, GCallback cancel_cb,
00195 void *user_data);
00196 void *(*request_file)(const char *title, const char *filename,
00197 gboolean savedialog, GCallback ok_cb,
00198 GCallback cancel_cb, void *user_data);
00199 void (*close_request)(GaimRequestType type, void *ui_handle);
00200 } GaimRequestUiOps;
00201
00202 typedef void (*GaimRequestInputCb)(void *, const char *);
00203 typedef void (*GaimRequestActionCb)(void *, int);
00204 typedef void (*GaimRequestFieldsCb)(void *, GaimRequestFields *fields);
00205 typedef void (*GaimRequestFileCb)(void *, const char *filename);
00206
00207 #ifdef __cplusplus
00208 extern "C" {
00209 #endif
00210
00211
00213
00221 GaimRequestFields *gaim_request_fields_new(void);
00222
00228 void gaim_request_fields_destroy(GaimRequestFields *fields);
00229
00236 void gaim_request_fields_add_group(GaimRequestFields *fields,
00237 GaimRequestFieldGroup *group);
00238
00246 GList *gaim_request_fields_get_groups(const GaimRequestFields *fields);
00247
00256 gboolean gaim_request_fields_exists(const GaimRequestFields *fields,
00257 const char *id);
00258
00266 const GList *gaim_request_fields_get_required(const GaimRequestFields *fields);
00267
00276 gboolean gaim_request_fields_is_field_required(const GaimRequestFields *fields,
00277 const char *id);
00278
00286 gboolean gaim_request_fields_all_required_filled(
00287 const GaimRequestFields *fields);
00288
00297 GaimRequestField *gaim_request_fields_get_field(
00298 const GaimRequestFields *fields, const char *id);
00299
00308 const char *gaim_request_fields_get_string(const GaimRequestFields *fields,
00309 const char *id);
00310
00319 int gaim_request_fields_get_integer(const GaimRequestFields *fields,
00320 const char *id);
00321
00330 gboolean gaim_request_fields_get_bool(const GaimRequestFields *fields,
00331 const char *id);
00332
00341 int gaim_request_fields_get_choice(const GaimRequestFields *fields,
00342 const char *id);
00343
00352 GaimAccount *gaim_request_fields_get_account(const GaimRequestFields *fields,
00353 const char *id);
00354
00357
00359
00369 GaimRequestFieldGroup *gaim_request_field_group_new(const char *title);
00370
00376 void gaim_request_field_group_destroy(GaimRequestFieldGroup *group);
00377
00384 void gaim_request_field_group_add_field(GaimRequestFieldGroup *group,
00385 GaimRequestField *field);
00386
00394 const char *gaim_request_field_group_get_title(
00395 const GaimRequestFieldGroup *group);
00396
00404 GList *gaim_request_field_group_get_fields(
00405 const GaimRequestFieldGroup *group);
00406
00409
00411
00423 GaimRequestField *gaim_request_field_new(const char *id, const char *text,
00424 GaimRequestFieldType type);
00425
00431 void gaim_request_field_destroy(GaimRequestField *field);
00432
00439 void gaim_request_field_set_label(GaimRequestField *field, const char *label);
00440
00447 void gaim_request_field_set_visible(GaimRequestField *field, gboolean visible);
00448
00458 void gaim_request_field_set_type_hint(GaimRequestField *field,
00459 const char *type_hint);
00460
00467 void gaim_request_field_set_required(GaimRequestField *field,
00468 gboolean required);
00469
00477 GaimRequestFieldType gaim_request_field_get_type(const GaimRequestField *field);
00478
00486 const char *gaim_request_field_get_id(const GaimRequestField *field);
00487
00495 const char *gaim_request_field_get_label(const GaimRequestField *field);
00496
00504 gboolean gaim_request_field_is_visible(const GaimRequestField *field);
00505
00513 const char *gaim_request_field_get_type_hint(const GaimRequestField *field);
00514
00522 gboolean gaim_request_field_is_required(const GaimRequestField *field);
00523
00526
00528
00541 GaimRequestField *gaim_request_field_string_new(const char *id,
00542 const char *text,
00543 const char *default_value,
00544 gboolean multiline);
00545
00552 void gaim_request_field_string_set_default_value(GaimRequestField *field,
00553 const char *default_value);
00554
00561 void gaim_request_field_string_set_value(GaimRequestField *field,
00562 const char *value);
00563
00571 void gaim_request_field_string_set_masked(GaimRequestField *field,
00572 gboolean masked);
00573
00580 void gaim_request_field_string_set_editable(GaimRequestField *field,
00581 gboolean editable);
00582
00590 const char *gaim_request_field_string_get_default_value(
00591 const GaimRequestField *field);
00592
00600 const char *gaim_request_field_string_get_value(const GaimRequestField *field);
00601
00609 gboolean gaim_request_field_string_is_multiline(const GaimRequestField *field);
00610
00618 gboolean gaim_request_field_string_is_masked(const GaimRequestField *field);
00619
00627 gboolean gaim_request_field_string_is_editable(const GaimRequestField *field);
00628
00631
00633
00645 GaimRequestField *gaim_request_field_int_new(const char *id,
00646 const char *text,
00647 int default_value);
00648
00655 void gaim_request_field_int_set_default_value(GaimRequestField *field,
00656 int default_value);
00657
00664 void gaim_request_field_int_set_value(GaimRequestField *field, int value);
00665
00673 int gaim_request_field_int_get_default_value(const GaimRequestField *field);
00674
00682 int gaim_request_field_int_get_value(const GaimRequestField *field);
00683
00686
00688
00702 GaimRequestField *gaim_request_field_bool_new(const char *id,
00703 const char *text,
00704 gboolean default_value);
00705
00712 void gaim_request_field_bool_set_default_value(GaimRequestField *field,
00713 gboolean default_value);
00714
00721 void gaim_request_field_bool_set_value(GaimRequestField *field,
00722 gboolean value);
00723
00731 gboolean gaim_request_field_bool_get_default_value(
00732 const GaimRequestField *field);
00733
00741 gboolean gaim_request_field_bool_get_value(const GaimRequestField *field);
00742
00745
00747
00761 GaimRequestField *gaim_request_field_choice_new(const char *id,
00762 const char *text,
00763 int default_value);
00764
00771 void gaim_request_field_choice_add(GaimRequestField *field,
00772 const char *label);
00773
00780 void gaim_request_field_choice_set_default_value(GaimRequestField *field,
00781 int default_value);
00782
00789 void gaim_request_field_choice_set_value(GaimRequestField *field, int value);
00790
00798 int gaim_request_field_choice_get_default_value(const GaimRequestField *field);
00799
00807 int gaim_request_field_choice_get_value(const GaimRequestField *field);
00808
00816 GList *gaim_request_field_choice_get_labels(const GaimRequestField *field);
00817
00820
00822
00833 GaimRequestField *gaim_request_field_list_new(const char *id, const char *text);
00834
00842 void gaim_request_field_list_set_multi_select(GaimRequestField *field,
00843 gboolean multi_select);
00844
00852 gboolean gaim_request_field_list_get_multi_select(
00853 const GaimRequestField *field);
00854
00863 void *gaim_request_field_list_get_data(const GaimRequestField *field,
00864 const char *text);
00865
00873 void gaim_request_field_list_add(GaimRequestField *field,
00874 const char *item, void *data);
00875
00882 void gaim_request_field_list_add_selected(GaimRequestField *field,
00883 const char *item);
00884
00890 void gaim_request_field_list_clear_selected(GaimRequestField *field);
00891
00898 void gaim_request_field_list_set_selected(GaimRequestField *field,
00899 GList *items);
00900
00909 gboolean gaim_request_field_list_is_selected(const GaimRequestField *field,
00910 const char *item);
00911
00922 const GList *gaim_request_field_list_get_selected(
00923 const GaimRequestField *field);
00924
00932 const GList *gaim_request_field_list_get_items(const GaimRequestField *field);
00933
00936
00938
00949 GaimRequestField *gaim_request_field_label_new(const char *id,
00950 const char *text);
00951
00954
00956
00970 GaimRequestField *gaim_request_field_account_new(const char *id,
00971 const char *text,
00972 GaimAccount *account);
00973
00980 void gaim_request_field_account_set_default_value(GaimRequestField *field,
00981 GaimAccount *default_value);
00982
00989 void gaim_request_field_account_set_value(GaimRequestField *field,
00990 GaimAccount *value);
00991
01001 void gaim_request_field_account_set_show_all(GaimRequestField *field,
01002 gboolean show_all);
01003
01013 void gaim_request_field_account_set_filter(GaimRequestField *field,
01014 GaimFilterAccountFunc filter_func);
01015
01023 GaimAccount *gaim_request_field_account_get_default_value(
01024 const GaimRequestField *field);
01025
01033 GaimAccount *gaim_request_field_account_get_value(
01034 const GaimRequestField *field);
01035
01045 gboolean gaim_request_field_account_get_show_all(
01046 const GaimRequestField *field);
01047
01058 GaimFilterAccountFunc gaim_request_field_account_get_filter(
01059 const GaimRequestField *field);
01060
01063
01065
01089 void *gaim_request_input(void *handle, const char *title,
01090 const char *primary, const char *secondary,
01091 const char *default_value,
01092 gboolean multiline, gboolean masked, gchar *hint,
01093 const char *ok_text, GCallback ok_cb,
01094 const char *cancel_text, GCallback cancel_cb,
01095 void *user_data);
01096
01115 void *gaim_request_choice(void *handle, const char *title,
01116 const char *primary, const char *secondary,
01117 unsigned int default_value,
01118 const char *ok_text, GCallback ok_cb,
01119 const char *cancel_text, GCallback cancel_cb,
01120 void *user_data, size_t choice_count, ...);
01121
01140 void *gaim_request_choice_varg(void *handle, const char *title,
01141 const char *primary, const char *secondary,
01142 unsigned int default_value,
01143 const char *ok_text, GCallback ok_cb,
01144 const char *cancel_text, GCallback cancel_cb,
01145 void *user_data, size_t choice_count,
01146 va_list choices);
01147
01164 void *gaim_request_action(void *handle, const char *title,
01165 const char *primary, const char *secondary,
01166 unsigned int default_action,
01167 void *user_data, size_t action_count, ...);
01168
01185 void *gaim_request_action_varg(void *handle, const char *title,
01186 const char *primary, const char *secondary,
01187 unsigned int default_action,
01188 void *user_data, size_t action_count,
01189 va_list actions);
01190
01207 void *gaim_request_fields(void *handle, const char *title,
01208 const char *primary, const char *secondary,
01209 GaimRequestFields *fields,
01210 const char *ok_text, GCallback ok_cb,
01211 const char *cancel_text, GCallback cancel_cb,
01212 void *user_data);
01213
01220 void gaim_request_close(GaimRequestType type, void *uihandle);
01221
01227 void gaim_request_close_with_handle(void *handle);
01228
01232 #define gaim_request_yes_no(handle, title, primary, secondary, \
01233 default_action, user_data, yes_cb, no_cb) \
01234 gaim_request_action((handle), (title), (primary), (secondary), \
01235 (default_action), (user_data), 2, \
01236 _("Yes"), (yes_cb), _("No"), (no_cb))
01237
01241 #define gaim_request_ok_cancel(handle, title, primary, secondary, \
01242 default_action, user_data, ok_cb, cancel_cb) \
01243 gaim_request_action((handle), (title), (primary), (secondary), \
01244 (default_action), (user_data), 2, \
01245 _("OK"), (ok_cb), _("Cancel"), (cancel_cb))
01246
01250 #define gaim_request_accept_cancel(handle, title, primary, secondary, \
01251 default_action, user_data, accept_cb, \
01252 cancel_cb) \
01253 gaim_request_action((handle), (title), (primary), (secondary), \
01254 (default_action), (user_data), 2, \
01255 _("Accept"), (accept_cb), _("Cancel"), (cancel_cb))
01256
01272 void *gaim_request_file(void *handle, const char *title, const char *filename,
01273 gboolean savedialog,
01274 GCallback ok_cb, GCallback cancel_cb,
01275 void *user_data);
01276
01279
01281
01290 void gaim_request_set_ui_ops(GaimRequestUiOps *ops);
01291
01298 GaimRequestUiOps *gaim_request_get_ui_ops(void);
01299
01302 #ifdef __cplusplus
01303 }
01304 #endif
01305
01306 #endif