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 {
00186 void *(*request_input)(const char *title, const char *primary,
00187 const char *secondary, const char *default_value,
00188 gboolean multiline, gboolean masked, gchar *hint,
00189 const char *ok_text, GCallback ok_cb,
00190 const char *cancel_text, GCallback cancel_cb,
00191 PurpleAccount *account, const char *who, PurpleConversation *conv,
00192 void *user_data);
00193 void *(*request_choice)(const char *title, const char *primary,
00194 const char *secondary, int default_value,
00195 const char *ok_text, GCallback ok_cb,
00196 const char *cancel_text, GCallback cancel_cb,
00197 PurpleAccount *account, const char *who, PurpleConversation *conv,
00198 void *user_data, va_list choices);
00199 void *(*request_action)(const char *title, const char *primary,
00200 const char *secondary, int default_action,
00201 PurpleAccount *account, const char *who, PurpleConversation *conv,
00202 void *user_data, size_t action_count,
00203 va_list actions);
00204 void *(*request_fields)(const char *title, const char *primary,
00205 const char *secondary, PurpleRequestFields *fields,
00206 const char *ok_text, GCallback ok_cb,
00207 const char *cancel_text, GCallback cancel_cb,
00208 PurpleAccount *account, const char *who, PurpleConversation *conv,
00209 void *user_data);
00210 void *(*request_file)(const char *title, const char *filename,
00211 gboolean savedialog, GCallback ok_cb, GCallback cancel_cb,
00212 PurpleAccount *account, const char *who, PurpleConversation *conv,
00213 void *user_data);
00214 void (*close_request)(PurpleRequestType type, void *ui_handle);
00215 void *(*request_folder)(const char *title, const char *dirname,
00216 GCallback ok_cb, GCallback cancel_cb,
00217 PurpleAccount *account, const char *who, PurpleConversation *conv,
00218 void *user_data);
00219
00220 void (*_purple_reserved1)(void);
00221 void (*_purple_reserved2)(void);
00222 void (*_purple_reserved3)(void);
00223 void (*_purple_reserved4)(void);
00224 } PurpleRequestUiOps;
00225
00226 typedef void (*PurpleRequestInputCb)(void *, const char *);
00227 typedef void (*PurpleRequestActionCb)(void *, int);
00228 typedef void (*PurpleRequestChoiceCb)(void *, int);
00229 typedef void (*PurpleRequestFieldsCb)(void *, PurpleRequestFields *fields);
00230 typedef void (*PurpleRequestFileCb)(void *, const char *filename);
00231
00232 #ifdef __cplusplus
00233 extern "C" {
00234 #endif
00235
00236
00238
00246 PurpleRequestFields *purple_request_fields_new(void);
00247
00253 void purple_request_fields_destroy(PurpleRequestFields *fields);
00254
00261 void purple_request_fields_add_group(PurpleRequestFields *fields,
00262 PurpleRequestFieldGroup *group);
00263
00271 GList *purple_request_fields_get_groups(const PurpleRequestFields *fields);
00272
00281 gboolean purple_request_fields_exists(const PurpleRequestFields *fields,
00282 const char *id);
00283
00291 GList *purple_request_fields_get_required(const PurpleRequestFields *fields);
00292
00301 gboolean purple_request_fields_is_field_required(const PurpleRequestFields *fields,
00302 const char *id);
00303
00311 gboolean purple_request_fields_all_required_filled(
00312 const PurpleRequestFields *fields);
00313
00322 PurpleRequestField *purple_request_fields_get_field(
00323 const PurpleRequestFields *fields, const char *id);
00324
00333 const char *purple_request_fields_get_string(const PurpleRequestFields *fields,
00334 const char *id);
00335
00344 int purple_request_fields_get_integer(const PurpleRequestFields *fields,
00345 const char *id);
00346
00355 gboolean purple_request_fields_get_bool(const PurpleRequestFields *fields,
00356 const char *id);
00357
00366 int purple_request_fields_get_choice(const PurpleRequestFields *fields,
00367 const char *id);
00368
00377 PurpleAccount *purple_request_fields_get_account(const PurpleRequestFields *fields,
00378 const char *id);
00379
00382
00384
00394 PurpleRequestFieldGroup *purple_request_field_group_new(const char *title);
00395
00401 void purple_request_field_group_destroy(PurpleRequestFieldGroup *group);
00402
00409 void purple_request_field_group_add_field(PurpleRequestFieldGroup *group,
00410 PurpleRequestField *field);
00411
00419 const char *purple_request_field_group_get_title(
00420 const PurpleRequestFieldGroup *group);
00421
00429 GList *purple_request_field_group_get_fields(
00430 const PurpleRequestFieldGroup *group);
00431
00434
00436
00448 PurpleRequestField *purple_request_field_new(const char *id, const char *text,
00449 PurpleRequestFieldType type);
00450
00456 void purple_request_field_destroy(PurpleRequestField *field);
00457
00464 void purple_request_field_set_label(PurpleRequestField *field, const char *label);
00465
00472 void purple_request_field_set_visible(PurpleRequestField *field, gboolean visible);
00473
00483 void purple_request_field_set_type_hint(PurpleRequestField *field,
00484 const char *type_hint);
00485
00492 void purple_request_field_set_required(PurpleRequestField *field,
00493 gboolean required);
00494
00502 PurpleRequestFieldType purple_request_field_get_type(const PurpleRequestField *field);
00503
00511 const char *purple_request_field_get_id(const PurpleRequestField *field);
00512
00520 const char *purple_request_field_get_label(const PurpleRequestField *field);
00521
00529 gboolean purple_request_field_is_visible(const PurpleRequestField *field);
00530
00538 const char *purple_request_field_get_type_hint(const PurpleRequestField *field);
00539
00547 gboolean purple_request_field_is_required(const PurpleRequestField *field);
00548
00551
00553
00566 PurpleRequestField *purple_request_field_string_new(const char *id,
00567 const char *text,
00568 const char *default_value,
00569 gboolean multiline);
00570
00577 void purple_request_field_string_set_default_value(PurpleRequestField *field,
00578 const char *default_value);
00579
00586 void purple_request_field_string_set_value(PurpleRequestField *field,
00587 const char *value);
00588
00596 void purple_request_field_string_set_masked(PurpleRequestField *field,
00597 gboolean masked);
00598
00605 void purple_request_field_string_set_editable(PurpleRequestField *field,
00606 gboolean editable);
00607
00615 const char *purple_request_field_string_get_default_value(
00616 const PurpleRequestField *field);
00617
00625 const char *purple_request_field_string_get_value(const PurpleRequestField *field);
00626
00634 gboolean purple_request_field_string_is_multiline(const PurpleRequestField *field);
00635
00643 gboolean purple_request_field_string_is_masked(const PurpleRequestField *field);
00644
00652 gboolean purple_request_field_string_is_editable(const PurpleRequestField *field);
00653
00656
00658
00670 PurpleRequestField *purple_request_field_int_new(const char *id,
00671 const char *text,
00672 int default_value);
00673
00680 void purple_request_field_int_set_default_value(PurpleRequestField *field,
00681 int default_value);
00682
00689 void purple_request_field_int_set_value(PurpleRequestField *field, int value);
00690
00698 int purple_request_field_int_get_default_value(const PurpleRequestField *field);
00699
00707 int purple_request_field_int_get_value(const PurpleRequestField *field);
00708
00711
00713
00727 PurpleRequestField *purple_request_field_bool_new(const char *id,
00728 const char *text,
00729 gboolean default_value);
00730
00737 void purple_request_field_bool_set_default_value(PurpleRequestField *field,
00738 gboolean default_value);
00739
00746 void purple_request_field_bool_set_value(PurpleRequestField *field,
00747 gboolean value);
00748
00756 gboolean purple_request_field_bool_get_default_value(
00757 const PurpleRequestField *field);
00758
00766 gboolean purple_request_field_bool_get_value(const PurpleRequestField *field);
00767
00770
00772
00786 PurpleRequestField *purple_request_field_choice_new(const char *id,
00787 const char *text,
00788 int default_value);
00789
00796 void purple_request_field_choice_add(PurpleRequestField *field,
00797 const char *label);
00798
00805 void purple_request_field_choice_set_default_value(PurpleRequestField *field,
00806 int default_value);
00807
00814 void purple_request_field_choice_set_value(PurpleRequestField *field, int value);
00815
00823 int purple_request_field_choice_get_default_value(const PurpleRequestField *field);
00824
00832 int purple_request_field_choice_get_value(const PurpleRequestField *field);
00833
00841 GList *purple_request_field_choice_get_labels(const PurpleRequestField *field);
00842
00845
00847
00858 PurpleRequestField *purple_request_field_list_new(const char *id, const char *text);
00859
00867 void purple_request_field_list_set_multi_select(PurpleRequestField *field,
00868 gboolean multi_select);
00869
00877 gboolean purple_request_field_list_get_multi_select(
00878 const PurpleRequestField *field);
00879
00888 void *purple_request_field_list_get_data(const PurpleRequestField *field,
00889 const char *text);
00890
00898 void purple_request_field_list_add(PurpleRequestField *field,
00899 const char *item, void *data);
00900
00907 void purple_request_field_list_add_selected(PurpleRequestField *field,
00908 const char *item);
00909
00915 void purple_request_field_list_clear_selected(PurpleRequestField *field);
00916
00923 void purple_request_field_list_set_selected(PurpleRequestField *field,
00924 GList *items);
00925
00934 gboolean purple_request_field_list_is_selected(const PurpleRequestField *field,
00935 const char *item);
00936
00947 GList *purple_request_field_list_get_selected(
00948 const PurpleRequestField *field);
00949
00957 GList *purple_request_field_list_get_items(const PurpleRequestField *field);
00958
00961
00963
00974 PurpleRequestField *purple_request_field_label_new(const char *id,
00975 const char *text);
00976
00979
00981
00994 PurpleRequestField *purple_request_field_image_new(const char *id, const char *text,
00995 const char *buf, gsize size);
00996
01004 void purple_request_field_image_set_scale(PurpleRequestField *field, unsigned int x, unsigned int y);
01005
01013 const char *purple_request_field_image_get_buffer(PurpleRequestField *field);
01014
01022 gsize purple_request_field_image_get_size(PurpleRequestField *field);
01023
01031 unsigned int purple_request_field_image_get_scale_x(PurpleRequestField *field);
01032
01040 unsigned int purple_request_field_image_get_scale_y(PurpleRequestField *field);
01041
01044
01046
01060 PurpleRequestField *purple_request_field_account_new(const char *id,
01061 const char *text,
01062 PurpleAccount *account);
01063
01070 void purple_request_field_account_set_default_value(PurpleRequestField *field,
01071 PurpleAccount *default_value);
01072
01079 void purple_request_field_account_set_value(PurpleRequestField *field,
01080 PurpleAccount *value);
01081
01091 void purple_request_field_account_set_show_all(PurpleRequestField *field,
01092 gboolean show_all);
01093
01103 void purple_request_field_account_set_filter(PurpleRequestField *field,
01104 PurpleFilterAccountFunc filter_func);
01105
01113 PurpleAccount *purple_request_field_account_get_default_value(
01114 const PurpleRequestField *field);
01115
01123 PurpleAccount *purple_request_field_account_get_value(
01124 const PurpleRequestField *field);
01125
01135 gboolean purple_request_field_account_get_show_all(
01136 const PurpleRequestField *field);
01137
01148 PurpleFilterAccountFunc purple_request_field_account_get_filter(
01149 const PurpleRequestField *field);
01150
01153
01155
01194 void *purple_request_input(void *handle, const char *title,
01195 const char *primary, const char *secondary,
01196 const char *default_value,
01197 gboolean multiline, gboolean masked, gchar *hint,
01198 const char *ok_text, GCallback ok_cb,
01199 const char *cancel_text, GCallback cancel_cb,
01200 PurpleAccount *account, const char *who, PurpleConversation *conv,
01201 void *user_data);
01202
01226 void *purple_request_choice(void *handle, const char *title,
01227 const char *primary, const char *secondary,
01228 int default_value,
01229 const char *ok_text, GCallback ok_cb,
01230 const char *cancel_text, GCallback cancel_cb,
01231 PurpleAccount *account, const char *who, PurpleConversation *conv,
01232 void *user_data, ...) G_GNUC_NULL_TERMINATED;
01233
01257 void *purple_request_choice_varg(void *handle, const char *title,
01258 const char *primary, const char *secondary,
01259 int default_value,
01260 const char *ok_text, GCallback ok_cb,
01261 const char *cancel_text, GCallback cancel_cb,
01262 PurpleAccount *account, const char *who, PurpleConversation *conv,
01263 void *user_data, va_list choices);
01264
01292 void *purple_request_action(void *handle, const char *title,
01293 const char *primary, const char *secondary,
01294 int default_action,
01295 PurpleAccount *account, const char *who, PurpleConversation *conv,
01296 void *user_data, size_t action_count, ...);
01297
01319 void *purple_request_action_varg(void *handle, const char *title,
01320 const char *primary, const char *secondary,
01321 int default_action,
01322 PurpleAccount *account, const char *who, PurpleConversation *conv,
01323 void *user_data, size_t action_count,
01324 va_list actions);
01325
01347 void *purple_request_fields(void *handle, const char *title,
01348 const char *primary, const char *secondary,
01349 PurpleRequestFields *fields,
01350 const char *ok_text, GCallback ok_cb,
01351 const char *cancel_text, GCallback cancel_cb,
01352 PurpleAccount *account, const char *who, PurpleConversation *conv,
01353 void *user_data);
01354
01361 void purple_request_close(PurpleRequestType type, void *uihandle);
01362
01368 void purple_request_close_with_handle(void *handle);
01369
01373 #define purple_request_yes_no(handle, title, primary, secondary, \
01374 default_action, account, who, conv, \
01375 user_data, yes_cb, no_cb) \
01376 purple_request_action((handle), (title), (primary), (secondary), \
01377 (default_action), account, who, conv, (user_data), 2, \
01378 _("_Yes"), (yes_cb), _("_No"), (no_cb))
01379
01383 #define purple_request_ok_cancel(handle, title, primary, secondary, \
01384 default_action, account, who, conv, \
01385 user_data, ok_cb, cancel_cb) \
01386 purple_request_action((handle), (title), (primary), (secondary), \
01387 (default_action), account, who, conv, (user_data), 2, \
01388 _("_OK"), (ok_cb), _("_Cancel"), (cancel_cb))
01389
01393 #define purple_request_accept_cancel(handle, title, primary, secondary, \
01394 default_action, account, who, conv, \
01395 user_data, accept_cb, cancel_cb) \
01396 purple_request_action((handle), (title), (primary), (secondary), \
01397 (default_action), account, who, conv, (user_data), 2, \
01398 _("_Accept"), (accept_cb), _("_Cancel"), (cancel_cb))
01399
01420 void *purple_request_file(void *handle, const char *title, const char *filename,
01421 gboolean savedialog,
01422 GCallback ok_cb, GCallback cancel_cb,
01423 PurpleAccount *account, const char *who, PurpleConversation *conv,
01424 void *user_data);
01425
01444 void *purple_request_folder(void *handle, const char *title, const char *dirname,
01445 GCallback ok_cb, GCallback cancel_cb,
01446 PurpleAccount *account, const char *who, PurpleConversation *conv,
01447 void *user_data);
01448
01451
01453
01462 void purple_request_set_ui_ops(PurpleRequestUiOps *ops);
01463
01470 PurpleRequestUiOps *purple_request_get_ui_ops(void);
01471
01474 #ifdef __cplusplus
01475 }
01476 #endif
01477
01478 #endif