00001
00025 #ifndef _PURPLE_REQUEST_H_
00026 #define _PURPLE_REQUEST_H_
00027
00028 #include <stdlib.h>
00029 #include <glib-object.h>
00030 #include <glib.h>
00031
00032 #include "account.h"
00033
00034 #define PURPLE_DEFAULT_ACTION_NONE -1
00035
00039 typedef enum
00040 {
00041 PURPLE_REQUEST_INPUT = 0,
00042 PURPLE_REQUEST_CHOICE,
00043 PURPLE_REQUEST_ACTION,
00044 PURPLE_REQUEST_FIELDS,
00045 PURPLE_REQUEST_FILE,
00046 PURPLE_REQUEST_FOLDER
00048 } PurpleRequestType;
00049
00053 typedef enum
00054 {
00055 PURPLE_REQUEST_FIELD_NONE,
00056 PURPLE_REQUEST_FIELD_STRING,
00057 PURPLE_REQUEST_FIELD_INTEGER,
00058 PURPLE_REQUEST_FIELD_BOOLEAN,
00059 PURPLE_REQUEST_FIELD_CHOICE,
00060 PURPLE_REQUEST_FIELD_LIST,
00061 PURPLE_REQUEST_FIELD_LABEL,
00062 PURPLE_REQUEST_FIELD_IMAGE,
00063 PURPLE_REQUEST_FIELD_ACCOUNT
00064
00065 } PurpleRequestFieldType;
00066
00070 typedef struct
00071 {
00072 GList *groups;
00073
00074 GHashTable *fields;
00075
00076 GList *required_fields;
00077
00078 void *ui_data;
00079
00080 } PurpleRequestFields;
00081
00085 typedef struct
00086 {
00087 PurpleRequestFields *fields_list;
00088
00089 char *title;
00090
00091 GList *fields;
00092
00093 } PurpleRequestFieldGroup;
00094
00098 typedef struct
00099 {
00100 PurpleRequestFieldType type;
00101 PurpleRequestFieldGroup *group;
00102
00103 char *id;
00104 char *label;
00105 char *type_hint;
00106
00107 gboolean visible;
00108 gboolean required;
00109
00110 union
00111 {
00112 struct
00113 {
00114 gboolean multiline;
00115 gboolean masked;
00116 gboolean editable;
00117 char *default_value;
00118 char *value;
00119
00120 } string;
00121
00122 struct
00123 {
00124 int default_value;
00125 int value;
00126
00127 } integer;
00128
00129 struct
00130 {
00131 gboolean default_value;
00132 gboolean value;
00133
00134 } boolean;
00135
00136 struct
00137 {
00138 int default_value;
00139 int value;
00140
00141 GList *labels;
00142
00143 } choice;
00144
00145 struct
00146 {
00147 GList *items;
00148 GHashTable *item_data;
00149 GList *selected;
00150 GHashTable *selected_table;
00151
00152 gboolean multiple_selection;
00153
00154 } list;
00155
00156 struct
00157 {
00158 PurpleAccount *default_account;
00159 PurpleAccount *account;
00160 gboolean show_all;
00161
00162 PurpleFilterAccountFunc filter_func;
00163
00164 } account;
00165
00166 struct
00167 {
00168 unsigned int scale_x;
00169 unsigned int scale_y;
00170 const char *buffer;
00171 gsize size;
00172 } image;
00173
00174 } u;
00175
00176 void *ui_data;
00177
00178 } PurpleRequestField;
00179
00183 typedef struct
00184 {
00185 void *(*request_input)(const char *title, const char *primary,
00186 const char *secondary, const char *default_value,
00187 gboolean multiline, gboolean masked, gchar *hint,
00188 const char *ok_text, GCallback ok_cb,
00189 const char *cancel_text, GCallback cancel_cb,
00190 PurpleAccount *account, const char *who, PurpleConversation *conv,
00191 void *user_data);
00192 void *(*request_choice)(const char *title, const char *primary,
00193 const char *secondary, unsigned int default_value,
00194 const char *ok_text, GCallback ok_cb,
00195 const char *cancel_text, GCallback cancel_cb,
00196 PurpleAccount *account, const char *who, PurpleConversation *conv,
00197 void *user_data, va_list choices);
00198 void *(*request_action)(const char *title, const char *primary,
00199 const char *secondary, unsigned int default_action,
00200 PurpleAccount *account, const char *who, PurpleConversation *conv,
00201 void *user_data, size_t action_count,
00202 va_list actions);
00203 void *(*request_fields)(const char *title, const char *primary,
00204 const char *secondary, PurpleRequestFields *fields,
00205 const char *ok_text, GCallback ok_cb,
00206 const char *cancel_text, GCallback cancel_cb,
00207 PurpleAccount *account, const char *who, PurpleConversation *conv,
00208 void *user_data);
00209 void *(*request_file)(const char *title, const char *filename,
00210 gboolean savedialog, GCallback ok_cb, GCallback cancel_cb,
00211 PurpleAccount *account, const char *who, PurpleConversation *conv,
00212 void *user_data);
00213 void (*close_request)(PurpleRequestType type, void *ui_handle);
00214 void *(*request_folder)(const char *title, const char *dirname,
00215 GCallback ok_cb, GCallback cancel_cb,
00216 PurpleAccount *account, const char *who, PurpleConversation *conv,
00217 void *user_data);
00218
00219 void (*_purple_reserved1)(void);
00220 void (*_purple_reserved2)(void);
00221 void (*_purple_reserved3)(void);
00222 void (*_purple_reserved4)(void);
00223 } PurpleRequestUiOps;
00224
00225 typedef void (*PurpleRequestInputCb)(void *, const char *);
00226 typedef void (*PurpleRequestActionCb)(void *, int);
00227 typedef void (*PurpleRequestChoiceCb)(void *, int);
00228 typedef void (*PurpleRequestFieldsCb)(void *, PurpleRequestFields *fields);
00229 typedef void (*PurpleRequestFileCb)(void *, const char *filename);
00230
00231 #ifdef __cplusplus
00232 extern "C" {
00233 #endif
00234
00235
00237
00245 PurpleRequestFields *purple_request_fields_new(void);
00246
00252 void purple_request_fields_destroy(PurpleRequestFields *fields);
00253
00260 void purple_request_fields_add_group(PurpleRequestFields *fields,
00261 PurpleRequestFieldGroup *group);
00262
00270 GList *purple_request_fields_get_groups(const PurpleRequestFields *fields);
00271
00280 gboolean purple_request_fields_exists(const PurpleRequestFields *fields,
00281 const char *id);
00282
00290 const GList *purple_request_fields_get_required(const PurpleRequestFields *fields);
00291
00300 gboolean purple_request_fields_is_field_required(const PurpleRequestFields *fields,
00301 const char *id);
00302
00310 gboolean purple_request_fields_all_required_filled(
00311 const PurpleRequestFields *fields);
00312
00321 PurpleRequestField *purple_request_fields_get_field(
00322 const PurpleRequestFields *fields, const char *id);
00323
00332 const char *purple_request_fields_get_string(const PurpleRequestFields *fields,
00333 const char *id);
00334
00343 int purple_request_fields_get_integer(const PurpleRequestFields *fields,
00344 const char *id);
00345
00354 gboolean purple_request_fields_get_bool(const PurpleRequestFields *fields,
00355 const char *id);
00356
00365 int purple_request_fields_get_choice(const PurpleRequestFields *fields,
00366 const char *id);
00367
00376 PurpleAccount *purple_request_fields_get_account(const PurpleRequestFields *fields,
00377 const char *id);
00378
00381
00383
00393 PurpleRequestFieldGroup *purple_request_field_group_new(const char *title);
00394
00400 void purple_request_field_group_destroy(PurpleRequestFieldGroup *group);
00401
00408 void purple_request_field_group_add_field(PurpleRequestFieldGroup *group,
00409 PurpleRequestField *field);
00410
00418 const char *purple_request_field_group_get_title(
00419 const PurpleRequestFieldGroup *group);
00420
00428 GList *purple_request_field_group_get_fields(
00429 const PurpleRequestFieldGroup *group);
00430
00433
00435
00447 PurpleRequestField *purple_request_field_new(const char *id, const char *text,
00448 PurpleRequestFieldType type);
00449
00455 void purple_request_field_destroy(PurpleRequestField *field);
00456
00463 void purple_request_field_set_label(PurpleRequestField *field, const char *label);
00464
00471 void purple_request_field_set_visible(PurpleRequestField *field, gboolean visible);
00472
00482 void purple_request_field_set_type_hint(PurpleRequestField *field,
00483 const char *type_hint);
00484
00491 void purple_request_field_set_required(PurpleRequestField *field,
00492 gboolean required);
00493
00501 PurpleRequestFieldType purple_request_field_get_type(const PurpleRequestField *field);
00502
00510 const char *purple_request_field_get_id(const PurpleRequestField *field);
00511
00519 const char *purple_request_field_get_label(const PurpleRequestField *field);
00520
00528 gboolean purple_request_field_is_visible(const PurpleRequestField *field);
00529
00537 const char *purple_request_field_get_type_hint(const PurpleRequestField *field);
00538
00546 gboolean purple_request_field_is_required(const PurpleRequestField *field);
00547
00550
00552
00565 PurpleRequestField *purple_request_field_string_new(const char *id,
00566 const char *text,
00567 const char *default_value,
00568 gboolean multiline);
00569
00576 void purple_request_field_string_set_default_value(PurpleRequestField *field,
00577 const char *default_value);
00578
00585 void purple_request_field_string_set_value(PurpleRequestField *field,
00586 const char *value);
00587
00595 void purple_request_field_string_set_masked(PurpleRequestField *field,
00596 gboolean masked);
00597
00604 void purple_request_field_string_set_editable(PurpleRequestField *field,
00605 gboolean editable);
00606
00614 const char *purple_request_field_string_get_default_value(
00615 const PurpleRequestField *field);
00616
00624 const char *purple_request_field_string_get_value(const PurpleRequestField *field);
00625
00633 gboolean purple_request_field_string_is_multiline(const PurpleRequestField *field);
00634
00642 gboolean purple_request_field_string_is_masked(const PurpleRequestField *field);
00643
00651 gboolean purple_request_field_string_is_editable(const PurpleRequestField *field);
00652
00655
00657
00669 PurpleRequestField *purple_request_field_int_new(const char *id,
00670 const char *text,
00671 int default_value);
00672
00679 void purple_request_field_int_set_default_value(PurpleRequestField *field,
00680 int default_value);
00681
00688 void purple_request_field_int_set_value(PurpleRequestField *field, int value);
00689
00697 int purple_request_field_int_get_default_value(const PurpleRequestField *field);
00698
00706 int purple_request_field_int_get_value(const PurpleRequestField *field);
00707
00710
00712
00726 PurpleRequestField *purple_request_field_bool_new(const char *id,
00727 const char *text,
00728 gboolean default_value);
00729
00736 void purple_request_field_bool_set_default_value(PurpleRequestField *field,
00737 gboolean default_value);
00738
00745 void purple_request_field_bool_set_value(PurpleRequestField *field,
00746 gboolean value);
00747
00755 gboolean purple_request_field_bool_get_default_value(
00756 const PurpleRequestField *field);
00757
00765 gboolean purple_request_field_bool_get_value(const PurpleRequestField *field);
00766
00769
00771
00785 PurpleRequestField *purple_request_field_choice_new(const char *id,
00786 const char *text,
00787 int default_value);
00788
00795 void purple_request_field_choice_add(PurpleRequestField *field,
00796 const char *label);
00797
00804 void purple_request_field_choice_set_default_value(PurpleRequestField *field,
00805 int default_value);
00806
00813 void purple_request_field_choice_set_value(PurpleRequestField *field, int value);
00814
00822 int purple_request_field_choice_get_default_value(const PurpleRequestField *field);
00823
00831 int purple_request_field_choice_get_value(const PurpleRequestField *field);
00832
00840 GList *purple_request_field_choice_get_labels(const PurpleRequestField *field);
00841
00844
00846
00857 PurpleRequestField *purple_request_field_list_new(const char *id, const char *text);
00858
00866 void purple_request_field_list_set_multi_select(PurpleRequestField *field,
00867 gboolean multi_select);
00868
00876 gboolean purple_request_field_list_get_multi_select(
00877 const PurpleRequestField *field);
00878
00887 void *purple_request_field_list_get_data(const PurpleRequestField *field,
00888 const char *text);
00889
00897 void purple_request_field_list_add(PurpleRequestField *field,
00898 const char *item, void *data);
00899
00906 void purple_request_field_list_add_selected(PurpleRequestField *field,
00907 const char *item);
00908
00914 void purple_request_field_list_clear_selected(PurpleRequestField *field);
00915
00922 void purple_request_field_list_set_selected(PurpleRequestField *field,
00923 const GList *items);
00924
00933 gboolean purple_request_field_list_is_selected(const PurpleRequestField *field,
00934 const char *item);
00935
00946 const GList *purple_request_field_list_get_selected(
00947 const PurpleRequestField *field);
00948
00956 const GList *purple_request_field_list_get_items(const PurpleRequestField *field);
00957
00960
00962
00973 PurpleRequestField *purple_request_field_label_new(const char *id,
00974 const char *text);
00975
00978
00980
00993 PurpleRequestField *purple_request_field_image_new(const char *id, const char *text,
00994 const char *buf, gsize size);
00995
01003 void purple_request_field_image_set_scale(PurpleRequestField *field, unsigned int x, unsigned int y);
01004
01012 const char *purple_request_field_image_get_buffer(PurpleRequestField *field);
01013
01021 gsize purple_request_field_image_get_size(PurpleRequestField *field);
01022
01030 unsigned int purple_request_field_image_get_scale_x(PurpleRequestField *field);
01031
01039 unsigned int purple_request_field_image_get_scale_y(PurpleRequestField *field);
01040
01043
01045
01059 PurpleRequestField *purple_request_field_account_new(const char *id,
01060 const char *text,
01061 PurpleAccount *account);
01062
01069 void purple_request_field_account_set_default_value(PurpleRequestField *field,
01070 PurpleAccount *default_value);
01071
01078 void purple_request_field_account_set_value(PurpleRequestField *field,
01079 PurpleAccount *value);
01080
01090 void purple_request_field_account_set_show_all(PurpleRequestField *field,
01091 gboolean show_all);
01092
01102 void purple_request_field_account_set_filter(PurpleRequestField *field,
01103 PurpleFilterAccountFunc filter_func);
01104
01112 PurpleAccount *purple_request_field_account_get_default_value(
01113 const PurpleRequestField *field);
01114
01122 PurpleAccount *purple_request_field_account_get_value(
01123 const PurpleRequestField *field);
01124
01134 gboolean purple_request_field_account_get_show_all(
01135 const PurpleRequestField *field);
01136
01147 PurpleFilterAccountFunc purple_request_field_account_get_filter(
01148 const PurpleRequestField *field);
01149
01152
01154
01193 void *purple_request_input(void *handle, const char *title,
01194 const char *primary, const char *secondary,
01195 const char *default_value,
01196 gboolean multiline, gboolean masked, gchar *hint,
01197 const char *ok_text, GCallback ok_cb,
01198 const char *cancel_text, GCallback cancel_cb,
01199 PurpleAccount *account, const char *who, PurpleConversation *conv,
01200 void *user_data);
01201
01225 void *purple_request_choice(void *handle, const char *title,
01226 const char *primary, const char *secondary,
01227 unsigned int default_value,
01228 const char *ok_text, GCallback ok_cb,
01229 const char *cancel_text, GCallback cancel_cb,
01230 PurpleAccount *account, const char *who, PurpleConversation *conv,
01231 void *user_data, ...);
01232
01256 void *purple_request_choice_varg(void *handle, const char *title,
01257 const char *primary, const char *secondary,
01258 unsigned int default_value,
01259 const char *ok_text, GCallback ok_cb,
01260 const char *cancel_text, GCallback cancel_cb,
01261 PurpleAccount *account, const char *who, PurpleConversation *conv,
01262 void *user_data, va_list choices);
01263
01291 void *purple_request_action(void *handle, const char *title,
01292 const char *primary, const char *secondary,
01293 unsigned int default_action,
01294 PurpleAccount *account, const char *who, PurpleConversation *conv,
01295 void *user_data, size_t action_count, ...);
01296
01318 void *purple_request_action_varg(void *handle, const char *title,
01319 const char *primary, const char *secondary,
01320 unsigned int default_action,
01321 PurpleAccount *account, const char *who, PurpleConversation *conv,
01322 void *user_data, size_t action_count,
01323 va_list actions);
01324
01346 void *purple_request_fields(void *handle, const char *title,
01347 const char *primary, const char *secondary,
01348 PurpleRequestFields *fields,
01349 const char *ok_text, GCallback ok_cb,
01350 const char *cancel_text, GCallback cancel_cb,
01351 PurpleAccount *account, const char *who, PurpleConversation *conv,
01352 void *user_data);
01353
01360 void purple_request_close(PurpleRequestType type, void *uihandle);
01361
01367 void purple_request_close_with_handle(void *handle);
01368
01372 #define purple_request_yes_no(handle, title, primary, secondary, \
01373 default_action, account, who, conv, \
01374 user_data, yes_cb, no_cb) \
01375 purple_request_action((handle), (title), (primary), (secondary), \
01376 (default_action), account, who, conv, (user_data), 2, \
01377 _("_Yes"), (yes_cb), _("_No"), (no_cb))
01378
01382 #define purple_request_ok_cancel(handle, title, primary, secondary, \
01383 default_action, account, who, conv, \
01384 user_data, ok_cb, cancel_cb) \
01385 purple_request_action((handle), (title), (primary), (secondary), \
01386 (default_action), account, who, conv, (user_data), 2, \
01387 _("_OK"), (ok_cb), _("_Cancel"), (cancel_cb))
01388
01392 #define purple_request_accept_cancel(handle, title, primary, secondary, \
01393 default_action, account, who, conv, \
01394 user_data, accept_cb, cancel_cb) \
01395 purple_request_action((handle), (title), (primary), (secondary), \
01396 (default_action), account, who, conv, (user_data), 2, \
01397 _("_Accept"), (accept_cb), _("_Cancel"), (cancel_cb))
01398
01419 void *purple_request_file(void *handle, const char *title, const char *filename,
01420 gboolean savedialog,
01421 GCallback ok_cb, GCallback cancel_cb,
01422 PurpleAccount *account, const char *who, PurpleConversation *conv,
01423 void *user_data);
01424
01443 void *purple_request_folder(void *handle, const char *title, const char *dirname,
01444 GCallback ok_cb, GCallback cancel_cb,
01445 PurpleAccount *account, const char *who, PurpleConversation *conv,
01446 void *user_data);
01447
01450
01452
01461 void purple_request_set_ui_ops(PurpleRequestUiOps *ops);
01462
01469 PurpleRequestUiOps *purple_request_get_ui_ops(void);
01470
01473 #ifdef __cplusplus
01474 }
01475 #endif
01476
01477 #endif