00001
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef _PURPLE_REQUEST_H_
00027 #define _PURPLE_REQUEST_H_
00028
00029 #include <stdlib.h>
00030 #include <glib-object.h>
00031 #include <glib.h>
00032
00033 #include "account.h"
00034
00035 #define PURPLE_DEFAULT_ACTION_NONE -1
00036
00040 typedef enum
00041 {
00042 PURPLE_REQUEST_INPUT = 0,
00043 PURPLE_REQUEST_CHOICE,
00044 PURPLE_REQUEST_ACTION,
00045 PURPLE_REQUEST_FIELDS,
00046 PURPLE_REQUEST_FILE,
00047 PURPLE_REQUEST_FOLDER
00049 } PurpleRequestType;
00050
00054 typedef enum
00055 {
00056 PURPLE_REQUEST_FIELD_NONE,
00057 PURPLE_REQUEST_FIELD_STRING,
00058 PURPLE_REQUEST_FIELD_INTEGER,
00059 PURPLE_REQUEST_FIELD_BOOLEAN,
00060 PURPLE_REQUEST_FIELD_CHOICE,
00061 PURPLE_REQUEST_FIELD_LIST,
00062 PURPLE_REQUEST_FIELD_LABEL,
00063 PURPLE_REQUEST_FIELD_IMAGE,
00064 PURPLE_REQUEST_FIELD_ACCOUNT
00065
00066 } PurpleRequestFieldType;
00067
00071 typedef struct
00072 {
00073 GList *groups;
00074
00075 GHashTable *fields;
00076
00077 GList *required_fields;
00078
00079 void *ui_data;
00080
00081 } PurpleRequestFields;
00082
00086 typedef struct
00087 {
00088 PurpleRequestFields *fields_list;
00089
00090 char *title;
00091
00092 GList *fields;
00093
00094 } PurpleRequestFieldGroup;
00095
00099 typedef struct
00100 {
00101 PurpleRequestFieldType type;
00102 PurpleRequestFieldGroup *group;
00103
00104 char *id;
00105 char *label;
00106 char *type_hint;
00107
00108 gboolean visible;
00109 gboolean required;
00110
00111 union
00112 {
00113 struct
00114 {
00115 gboolean multiline;
00116 gboolean masked;
00117 gboolean editable;
00118 char *default_value;
00119 char *value;
00120
00121 } string;
00122
00123 struct
00124 {
00125 int default_value;
00126 int value;
00127
00128 } integer;
00129
00130 struct
00131 {
00132 gboolean default_value;
00133 gboolean value;
00134
00135 } boolean;
00136
00137 struct
00138 {
00139 int default_value;
00140 int value;
00141
00142 GList *labels;
00143
00144 } choice;
00145
00146 struct
00147 {
00148 GList *items;
00149 GHashTable *item_data;
00150 GList *selected;
00151 GHashTable *selected_table;
00152
00153 gboolean multiple_selection;
00154
00155 } list;
00156
00157 struct
00158 {
00159 PurpleAccount *default_account;
00160 PurpleAccount *account;
00161 gboolean show_all;
00162
00163 PurpleFilterAccountFunc filter_func;
00164
00165 } account;
00166
00167 struct
00168 {
00169 unsigned int scale_x;
00170 unsigned int scale_y;
00171 const char *buffer;
00172 gsize size;
00173 } image;
00174
00175 } u;
00176
00177 void *ui_data;
00178
00179 } PurpleRequestField;
00180
00184 typedef struct
00185 {
00187 void *(*request_input)(const char *title, const char *primary,
00188 const char *secondary, const char *default_value,
00189 gboolean multiline, gboolean masked, gchar *hint,
00190 const char *ok_text, GCallback ok_cb,
00191 const char *cancel_text, GCallback cancel_cb,
00192 PurpleAccount *account, const char *who,
00193 PurpleConversation *conv, void *user_data);
00194
00196 void *(*request_choice)(const char *title, const char *primary,
00197 const char *secondary, int default_value,
00198 const char *ok_text, GCallback ok_cb,
00199 const char *cancel_text, GCallback cancel_cb,
00200 PurpleAccount *account, const char *who,
00201 PurpleConversation *conv, void *user_data,
00202 va_list choices);
00203
00205 void *(*request_action)(const char *title, const char *primary,
00206 const char *secondary, int default_action,
00207 PurpleAccount *account, const char *who,
00208 PurpleConversation *conv, void *user_data,
00209 size_t action_count, va_list actions);
00210
00212 void *(*request_fields)(const char *title, const char *primary,
00213 const char *secondary, PurpleRequestFields *fields,
00214 const char *ok_text, GCallback ok_cb,
00215 const char *cancel_text, GCallback cancel_cb,
00216 PurpleAccount *account, const char *who,
00217 PurpleConversation *conv, void *user_data);
00218
00220 void *(*request_file)(const char *title, const char *filename,
00221 gboolean savedialog, GCallback ok_cb,
00222 GCallback cancel_cb, PurpleAccount *account,
00223 const char *who, PurpleConversation *conv,
00224 void *user_data);
00225
00226 void (*close_request)(PurpleRequestType type, void *ui_handle);
00227
00229 void *(*request_folder)(const char *title, const char *dirname,
00230 GCallback ok_cb, GCallback cancel_cb,
00231 PurpleAccount *account, const char *who,
00232 PurpleConversation *conv, void *user_data);
00233
00234 void (*_purple_reserved1)(void);
00235 void (*_purple_reserved2)(void);
00236 void (*_purple_reserved3)(void);
00237 void (*_purple_reserved4)(void);
00238 } PurpleRequestUiOps;
00239
00240 typedef void (*PurpleRequestInputCb)(void *, const char *);
00241
00246 typedef void (*PurpleRequestActionCb)(void *, int);
00247 typedef void (*PurpleRequestChoiceCb)(void *, int);
00248 typedef void (*PurpleRequestFieldsCb)(void *, PurpleRequestFields *fields);
00249 typedef void (*PurpleRequestFileCb)(void *, const char *filename);
00250
00251 #ifdef __cplusplus
00252 extern "C" {
00253 #endif
00254
00255
00257
00265 PurpleRequestFields *purple_request_fields_new(void);
00266
00272 void purple_request_fields_destroy(PurpleRequestFields *fields);
00273
00280 void purple_request_fields_add_group(PurpleRequestFields *fields,
00281 PurpleRequestFieldGroup *group);
00282
00290 GList *purple_request_fields_get_groups(const PurpleRequestFields *fields);
00291
00300 gboolean purple_request_fields_exists(const PurpleRequestFields *fields,
00301 const char *id);
00302
00310 GList *purple_request_fields_get_required(const PurpleRequestFields *fields);
00311
00320 gboolean purple_request_fields_is_field_required(const PurpleRequestFields *fields,
00321 const char *id);
00322
00330 gboolean purple_request_fields_all_required_filled(
00331 const PurpleRequestFields *fields);
00332
00341 PurpleRequestField *purple_request_fields_get_field(
00342 const PurpleRequestFields *fields, const char *id);
00343
00352 const char *purple_request_fields_get_string(const PurpleRequestFields *fields,
00353 const char *id);
00354
00363 int purple_request_fields_get_integer(const PurpleRequestFields *fields,
00364 const char *id);
00365
00374 gboolean purple_request_fields_get_bool(const PurpleRequestFields *fields,
00375 const char *id);
00376
00385 int purple_request_fields_get_choice(const PurpleRequestFields *fields,
00386 const char *id);
00387
00396 PurpleAccount *purple_request_fields_get_account(const PurpleRequestFields *fields,
00397 const char *id);
00398
00401
00403
00413 PurpleRequestFieldGroup *purple_request_field_group_new(const char *title);
00414
00420 void purple_request_field_group_destroy(PurpleRequestFieldGroup *group);
00421
00428 void purple_request_field_group_add_field(PurpleRequestFieldGroup *group,
00429 PurpleRequestField *field);
00430
00438 const char *purple_request_field_group_get_title(
00439 const PurpleRequestFieldGroup *group);
00440
00448 GList *purple_request_field_group_get_fields(
00449 const PurpleRequestFieldGroup *group);
00450
00453
00455
00467 PurpleRequestField *purple_request_field_new(const char *id, const char *text,
00468 PurpleRequestFieldType type);
00469
00475 void purple_request_field_destroy(PurpleRequestField *field);
00476
00483 void purple_request_field_set_label(PurpleRequestField *field, const char *label);
00484
00491 void purple_request_field_set_visible(PurpleRequestField *field, gboolean visible);
00492
00502 void purple_request_field_set_type_hint(PurpleRequestField *field,
00503 const char *type_hint);
00504
00511 void purple_request_field_set_required(PurpleRequestField *field,
00512 gboolean required);
00513
00521 PurpleRequestFieldType purple_request_field_get_type(const PurpleRequestField *field);
00522
00530 const char *purple_request_field_get_id(const PurpleRequestField *field);
00531
00539 const char *purple_request_field_get_label(const PurpleRequestField *field);
00540
00548 gboolean purple_request_field_is_visible(const PurpleRequestField *field);
00549
00557 const char *purple_request_field_get_type_hint(const PurpleRequestField *field);
00558
00566 gboolean purple_request_field_is_required(const PurpleRequestField *field);
00567
00570
00572
00585 PurpleRequestField *purple_request_field_string_new(const char *id,
00586 const char *text,
00587 const char *default_value,
00588 gboolean multiline);
00589
00596 void purple_request_field_string_set_default_value(PurpleRequestField *field,
00597 const char *default_value);
00598
00605 void purple_request_field_string_set_value(PurpleRequestField *field,
00606 const char *value);
00607
00615 void purple_request_field_string_set_masked(PurpleRequestField *field,
00616 gboolean masked);
00617
00624 void purple_request_field_string_set_editable(PurpleRequestField *field,
00625 gboolean editable);
00626
00634 const char *purple_request_field_string_get_default_value(
00635 const PurpleRequestField *field);
00636
00644 const char *purple_request_field_string_get_value(const PurpleRequestField *field);
00645
00653 gboolean purple_request_field_string_is_multiline(const PurpleRequestField *field);
00654
00662 gboolean purple_request_field_string_is_masked(const PurpleRequestField *field);
00663
00671 gboolean purple_request_field_string_is_editable(const PurpleRequestField *field);
00672
00675
00677
00689 PurpleRequestField *purple_request_field_int_new(const char *id,
00690 const char *text,
00691 int default_value);
00692
00699 void purple_request_field_int_set_default_value(PurpleRequestField *field,
00700 int default_value);
00701
00708 void purple_request_field_int_set_value(PurpleRequestField *field, int value);
00709
00717 int purple_request_field_int_get_default_value(const PurpleRequestField *field);
00718
00726 int purple_request_field_int_get_value(const PurpleRequestField *field);
00727
00730
00732
00746 PurpleRequestField *purple_request_field_bool_new(const char *id,
00747 const char *text,
00748 gboolean default_value);
00749
00756 void purple_request_field_bool_set_default_value(PurpleRequestField *field,
00757 gboolean default_value);
00758
00765 void purple_request_field_bool_set_value(PurpleRequestField *field,
00766 gboolean value);
00767
00775 gboolean purple_request_field_bool_get_default_value(
00776 const PurpleRequestField *field);
00777
00785 gboolean purple_request_field_bool_get_value(const PurpleRequestField *field);
00786
00789
00791
00805 PurpleRequestField *purple_request_field_choice_new(const char *id,
00806 const char *text,
00807 int default_value);
00808
00815 void purple_request_field_choice_add(PurpleRequestField *field,
00816 const char *label);
00817
00824 void purple_request_field_choice_set_default_value(PurpleRequestField *field,
00825 int default_value);
00826
00833 void purple_request_field_choice_set_value(PurpleRequestField *field, int value);
00834
00842 int purple_request_field_choice_get_default_value(const PurpleRequestField *field);
00843
00851 int purple_request_field_choice_get_value(const PurpleRequestField *field);
00852
00860 GList *purple_request_field_choice_get_labels(const PurpleRequestField *field);
00861
00864
00866
00877 PurpleRequestField *purple_request_field_list_new(const char *id, const char *text);
00878
00886 void purple_request_field_list_set_multi_select(PurpleRequestField *field,
00887 gboolean multi_select);
00888
00896 gboolean purple_request_field_list_get_multi_select(
00897 const PurpleRequestField *field);
00898
00907 void *purple_request_field_list_get_data(const PurpleRequestField *field,
00908 const char *text);
00909
00917 void purple_request_field_list_add(PurpleRequestField *field,
00918 const char *item, void *data);
00919
00926 void purple_request_field_list_add_selected(PurpleRequestField *field,
00927 const char *item);
00928
00934 void purple_request_field_list_clear_selected(PurpleRequestField *field);
00935
00942 void purple_request_field_list_set_selected(PurpleRequestField *field,
00943 GList *items);
00944
00953 gboolean purple_request_field_list_is_selected(const PurpleRequestField *field,
00954 const char *item);
00955
00966 GList *purple_request_field_list_get_selected(
00967 const PurpleRequestField *field);
00968
00976 GList *purple_request_field_list_get_items(const PurpleRequestField *field);
00977
00980
00982
00993 PurpleRequestField *purple_request_field_label_new(const char *id,
00994 const char *text);
00995
00998
01000
01013 PurpleRequestField *purple_request_field_image_new(const char *id, const char *text,
01014 const char *buf, gsize size);
01015
01023 void purple_request_field_image_set_scale(PurpleRequestField *field, unsigned int x, unsigned int y);
01024
01032 const char *purple_request_field_image_get_buffer(PurpleRequestField *field);
01033
01041 gsize purple_request_field_image_get_size(PurpleRequestField *field);
01042
01050 unsigned int purple_request_field_image_get_scale_x(PurpleRequestField *field);
01051
01059 unsigned int purple_request_field_image_get_scale_y(PurpleRequestField *field);
01060
01063
01065
01079 PurpleRequestField *purple_request_field_account_new(const char *id,
01080 const char *text,
01081 PurpleAccount *account);
01082
01089 void purple_request_field_account_set_default_value(PurpleRequestField *field,
01090 PurpleAccount *default_value);
01091
01098 void purple_request_field_account_set_value(PurpleRequestField *field,
01099 PurpleAccount *value);
01100
01110 void purple_request_field_account_set_show_all(PurpleRequestField *field,
01111 gboolean show_all);
01112
01122 void purple_request_field_account_set_filter(PurpleRequestField *field,
01123 PurpleFilterAccountFunc filter_func);
01124
01132 PurpleAccount *purple_request_field_account_get_default_value(
01133 const PurpleRequestField *field);
01134
01142 PurpleAccount *purple_request_field_account_get_value(
01143 const PurpleRequestField *field);
01144
01154 gboolean purple_request_field_account_get_show_all(
01155 const PurpleRequestField *field);
01156
01167 PurpleFilterAccountFunc purple_request_field_account_get_filter(
01168 const PurpleRequestField *field);
01169
01172
01174
01223 void *purple_request_input(void *handle, const char *title, const char *primary,
01224 const char *secondary, const char *default_value, gboolean multiline,
01225 gboolean masked, gchar *hint,
01226 const char *ok_text, GCallback ok_cb,
01227 const char *cancel_text, GCallback cancel_cb,
01228 PurpleAccount *account, const char *who, PurpleConversation *conv,
01229 void *user_data);
01230
01264 void *purple_request_choice(void *handle, const char *title, const char *primary,
01265 const char *secondary, int default_value,
01266 const char *ok_text, GCallback ok_cb,
01267 const char *cancel_text, GCallback cancel_cb,
01268 PurpleAccount *account, const char *who, PurpleConversation *conv,
01269 void *user_data, ...) G_GNUC_NULL_TERMINATED;
01270
01274 void *purple_request_choice_varg(void *handle, const char *title,
01275 const char *primary, const char *secondary, int default_value,
01276 const char *ok_text, GCallback ok_cb,
01277 const char *cancel_text, GCallback cancel_cb,
01278 PurpleAccount *account, const char *who, PurpleConversation *conv,
01279 void *user_data, va_list choices);
01280
01316 void *purple_request_action(void *handle, const char *title, const char *primary,
01317 const char *secondary, int default_action, PurpleAccount *account,
01318 const char *who, PurpleConversation *conv, void *user_data,
01319 size_t action_count, ...);
01320
01324 void *purple_request_action_varg(void *handle, const char *title,
01325 const char *primary, const char *secondary, int default_action,
01326 PurpleAccount *account, const char *who, PurpleConversation *conv,
01327 void *user_data, size_t action_count, va_list actions);
01328
01358 void *purple_request_fields(void *handle, const char *title, const char *primary,
01359 const char *secondary, PurpleRequestFields *fields,
01360 const char *ok_text, GCallback ok_cb,
01361 const char *cancel_text, GCallback cancel_cb,
01362 PurpleAccount *account, const char *who, PurpleConversation *conv,
01363 void *user_data);
01364
01371 void purple_request_close(PurpleRequestType type, void *uihandle);
01372
01381 void purple_request_close_with_handle(void *handle);
01382
01386 #define purple_request_yes_no(handle, title, primary, secondary, \
01387 default_action, account, who, conv, \
01388 user_data, yes_cb, no_cb) \
01389 purple_request_action((handle), (title), (primary), (secondary), \
01390 (default_action), account, who, conv, (user_data), 2, \
01391 _("_Yes"), (yes_cb), _("_No"), (no_cb))
01392
01396 #define purple_request_ok_cancel(handle, title, primary, secondary, \
01397 default_action, account, who, conv, \
01398 user_data, ok_cb, cancel_cb) \
01399 purple_request_action((handle), (title), (primary), (secondary), \
01400 (default_action), account, who, conv, (user_data), 2, \
01401 _("_OK"), (ok_cb), _("_Cancel"), (cancel_cb))
01402
01406 #define purple_request_accept_cancel(handle, title, primary, secondary, \
01407 default_action, account, who, conv, \
01408 user_data, accept_cb, cancel_cb) \
01409 purple_request_action((handle), (title), (primary), (secondary), \
01410 (default_action), account, who, conv, (user_data), 2, \
01411 _("_Accept"), (accept_cb), _("_Cancel"), (cancel_cb))
01412
01437 void *purple_request_file(void *handle, const char *title, const char *filename,
01438 gboolean savedialog, GCallback ok_cb, GCallback cancel_cb,
01439 PurpleAccount *account, const char *who, PurpleConversation *conv,
01440 void *user_data);
01441
01464 void *purple_request_folder(void *handle, const char *title, const char *dirname,
01465 GCallback ok_cb, GCallback cancel_cb,
01466 PurpleAccount *account, const char *who, PurpleConversation *conv,
01467 void *user_data);
01468
01471
01473
01482 void purple_request_set_ui_ops(PurpleRequestUiOps *ops);
01483
01490 PurpleRequestUiOps *purple_request_get_ui_ops(void);
01491
01494 #ifdef __cplusplus
01495 }
01496 #endif
01497
01498 #endif