request.h

Go to the documentation of this file.
00001
00006 /* purple
00007  *
00008  * Purple is the legal property of its developers, whose names are too numerous
00009  * to list here.  Please refer to the COPYRIGHT file distributed with this
00010  * source distribution.
00011  *
00012  * This program is free software; you can redistribute it and/or modify
00013  * it under the terms of the GNU General Public License as published by
00014  * the Free Software Foundation; either version 2 of the License, or
00015  * (at your option) any later version.
00016  *
00017  * This program is distributed in the hope that it will be useful,
00018  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00019  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00020  * GNU General Public License for more details.
00021  *
00022  * You should have received a copy of the GNU General Public License
00023  * along with this program; if not, write to the Free Software
00024  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
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
00034 typedef struct _PurpleRequestField PurpleRequestField;
00035
00036 #include "account.h"
00037
00038 #define PURPLE_DEFAULT_ACTION_NONE  -1
00039 
00043 typedef enum
00044 {
00045     PURPLE_REQUEST_INPUT = 0,
00046     PURPLE_REQUEST_CHOICE,
00047     PURPLE_REQUEST_ACTION,
00048     PURPLE_REQUEST_FIELDS,
00049     PURPLE_REQUEST_FILE,
00050     PURPLE_REQUEST_FOLDER
00052 } PurpleRequestType;
00053
00057 typedef enum
00058 {
00059     PURPLE_REQUEST_FIELD_NONE,
00060     PURPLE_REQUEST_FIELD_STRING,
00061     PURPLE_REQUEST_FIELD_INTEGER,
00062     PURPLE_REQUEST_FIELD_BOOLEAN,
00063     PURPLE_REQUEST_FIELD_CHOICE,
00064     PURPLE_REQUEST_FIELD_LIST,
00065     PURPLE_REQUEST_FIELD_LABEL,
00066     PURPLE_REQUEST_FIELD_IMAGE,
00067     PURPLE_REQUEST_FIELD_ACCOUNT
00068
00069 } PurpleRequestFieldType;
00070
00074 typedef struct
00075 {
00076     GList *groups;
00077
00078     GHashTable *fields;
00079
00080     GList *required_fields;
00081
00082     void *ui_data;
00083
00084 } PurpleRequestFields;
00085
00089 typedef struct
00090 {
00091     PurpleRequestFields *fields_list;
00092
00093     char *title;
00094
00095     GList *fields;
00096
00097 } PurpleRequestFieldGroup;
00098
00099 #if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_REQUEST_C_)
00100 
00103 struct _PurpleRequestField
00104 {
00105     PurpleRequestFieldType type;
00106     PurpleRequestFieldGroup *group;
00107
00108     char *id;
00109     char *label;
00110     char *type_hint;
00111
00112     gboolean visible;
00113     gboolean required;
00114
00115     union
00116     {
00117         struct
00118         {
00119             gboolean multiline;
00120             gboolean masked;
00121             gboolean editable;
00122             char *default_value;
00123             char *value;
00124
00125         } string;
00126
00127         struct
00128         {
00129             int default_value;
00130             int value;
00131
00132         } integer;
00133
00134         struct
00135         {
00136             gboolean default_value;
00137             gboolean value;
00138
00139         } boolean;
00140
00141         struct
00142         {
00143             int default_value;
00144             int value;
00145
00146             GList *labels;
00147
00148         } choice;
00149
00150         struct
00151         {
00152             GList *items;
00153             GList *icons;
00154             GHashTable *item_data;
00155             GList *selected;
00156             GHashTable *selected_table;
00157
00158             gboolean multiple_selection;
00159
00160         } list;
00161
00162         struct
00163         {
00164             PurpleAccount *default_account;
00165             PurpleAccount *account;
00166             gboolean show_all;
00167
00168             PurpleFilterAccountFunc filter_func;
00169
00170         } account;
00171
00172         struct
00173         {
00174             unsigned int scale_x;
00175             unsigned int scale_y;
00176             const char *buffer;
00177             gsize size;
00178         } image;
00179
00180     } u;
00181
00182     void *ui_data;
00183
00184 };
00185 #endif
00186 
00190 typedef struct
00191 {
00193     void *(*request_input)(const char *title, const char *primary,
00194                            const char *secondary, const char *default_value,
00195                            gboolean multiline, gboolean masked, gchar *hint,
00196                            const char *ok_text, GCallback ok_cb,
00197                            const char *cancel_text, GCallback cancel_cb,
00198                            PurpleAccount *account, const char *who,
00199                            PurpleConversation *conv, void *user_data);
00200
00202     void *(*request_choice)(const char *title, const char *primary,
00203                             const char *secondary, int default_value,
00204                             const char *ok_text, GCallback ok_cb,
00205                             const char *cancel_text, GCallback cancel_cb,
00206                             PurpleAccount *account, const char *who,
00207                             PurpleConversation *conv, void *user_data,
00208                             va_list choices);
00209
00211     void *(*request_action)(const char *title, const char *primary,
00212                             const char *secondary, int default_action,
00213                             PurpleAccount *account, const char *who,
00214                             PurpleConversation *conv, void *user_data,
00215                             size_t action_count, va_list actions);
00216
00218     void *(*request_fields)(const char *title, const char *primary,
00219                             const char *secondary, PurpleRequestFields *fields,
00220                             const char *ok_text, GCallback ok_cb,
00221                             const char *cancel_text, GCallback cancel_cb,
00222                             PurpleAccount *account, const char *who,
00223                             PurpleConversation *conv, void *user_data);
00224
00226     void *(*request_file)(const char *title, const char *filename,
00227                           gboolean savedialog, GCallback ok_cb,
00228                           GCallback cancel_cb, PurpleAccount *account,
00229                           const char *who, PurpleConversation *conv,
00230                           void *user_data);
00231
00232     void (*close_request)(PurpleRequestType type, void *ui_handle);
00233
00235     void *(*request_folder)(const char *title, const char *dirname,
00236                             GCallback ok_cb, GCallback cancel_cb,
00237                             PurpleAccount *account, const char *who,
00238                             PurpleConversation *conv, void *user_data);
00239
00240     void (*_purple_reserved1)(void);
00241     void (*_purple_reserved2)(void);
00242     void (*_purple_reserved3)(void);
00243     void (*_purple_reserved4)(void);
00244 } PurpleRequestUiOps;
00245
00246 typedef void (*PurpleRequestInputCb)(void *, const char *);
00247
00252 typedef void (*PurpleRequestActionCb)(void *, int);
00253 typedef void (*PurpleRequestChoiceCb)(void *, int);
00254 typedef void (*PurpleRequestFieldsCb)(void *, PurpleRequestFields *fields);
00255 typedef void (*PurpleRequestFileCb)(void *, const char *filename);
00256
00257 #ifdef __cplusplus
00258 extern "C" {
00259 #endif
00260 
00261 /**************************************************************************/
00263 /**************************************************************************/
00271 PurpleRequestFields *purple_request_fields_new(void);
00272
00278 void purple_request_fields_destroy(PurpleRequestFields *fields);
00279
00286 void purple_request_fields_add_group(PurpleRequestFields *fields,
00287                                    PurpleRequestFieldGroup *group);
00288
00296 GList *purple_request_fields_get_groups(const PurpleRequestFields *fields);
00297
00306 gboolean purple_request_fields_exists(const PurpleRequestFields *fields,
00307                                     const char *id);
00308
00316 GList *purple_request_fields_get_required(const PurpleRequestFields *fields);
00317
00326 gboolean purple_request_fields_is_field_required(const PurpleRequestFields *fields,
00327                                                const char *id);
00328
00336 gboolean purple_request_fields_all_required_filled(
00337     const PurpleRequestFields *fields);
00338
00347 PurpleRequestField *purple_request_fields_get_field(
00348         const PurpleRequestFields *fields, const char *id);
00349
00358 const char *purple_request_fields_get_string(const PurpleRequestFields *fields,
00359                                            const char *id);
00360
00369 int purple_request_fields_get_integer(const PurpleRequestFields *fields,
00370                                     const char *id);
00371
00380 gboolean purple_request_fields_get_bool(const PurpleRequestFields *fields,
00381                                       const char *id);
00382
00391 int purple_request_fields_get_choice(const PurpleRequestFields *fields,
00392                                    const char *id);
00393
00402 PurpleAccount *purple_request_fields_get_account(const PurpleRequestFields *fields,
00403                                              const char *id);
00404
00407 /**************************************************************************/
00409 /**************************************************************************/
00419 PurpleRequestFieldGroup *purple_request_field_group_new(const char *title);
00420
00426 void purple_request_field_group_destroy(PurpleRequestFieldGroup *group);
00427
00434 void purple_request_field_group_add_field(PurpleRequestFieldGroup *group,
00435                                         PurpleRequestField *field);
00436
00444 const char *purple_request_field_group_get_title(
00445         const PurpleRequestFieldGroup *group);
00446
00454 GList *purple_request_field_group_get_fields(
00455         const PurpleRequestFieldGroup *group);
00456
00459 /**************************************************************************/
00461 /**************************************************************************/
00473 PurpleRequestField *purple_request_field_new(const char *id, const char *text,
00474                                          PurpleRequestFieldType type);
00475
00481 void purple_request_field_destroy(PurpleRequestField *field);
00482
00489 void purple_request_field_set_label(PurpleRequestField *field, const char *label);
00490
00497 void purple_request_field_set_visible(PurpleRequestField *field, gboolean visible);
00498
00508 void purple_request_field_set_type_hint(PurpleRequestField *field,
00509                                       const char *type_hint);
00510
00517 void purple_request_field_set_required(PurpleRequestField *field,
00518                                      gboolean required);
00519
00527 PurpleRequestFieldType purple_request_field_get_type(const PurpleRequestField *field);
00528
00538 PurpleRequestFieldGroup *purple_request_field_get_group(const PurpleRequestField *field);
00539
00547 const char *purple_request_field_get_id(const PurpleRequestField *field);
00548
00556 const char *purple_request_field_get_label(const PurpleRequestField *field);
00557
00565 gboolean purple_request_field_is_visible(const PurpleRequestField *field);
00566
00574 const char *purple_request_field_get_type_hint(const PurpleRequestField *field);
00575
00583 gboolean purple_request_field_is_required(const PurpleRequestField *field);
00584
00594 gpointer purple_request_field_get_ui_data(const PurpleRequestField *field);
00595
00606 void purple_request_field_set_ui_data(PurpleRequestField *field,
00607                                       gpointer ui_data);
00608
00611 /**************************************************************************/
00613 /**************************************************************************/
00626 PurpleRequestField *purple_request_field_string_new(const char *id,
00627                                                 const char *text,
00628                                                 const char *default_value,
00629                                                 gboolean multiline);
00630
00637 void purple_request_field_string_set_default_value(PurpleRequestField *field,
00638                                                  const char *default_value);
00639
00646 void purple_request_field_string_set_value(PurpleRequestField *field,
00647                                          const char *value);
00648
00656 void purple_request_field_string_set_masked(PurpleRequestField *field,
00657                                           gboolean masked);
00658
00665 void purple_request_field_string_set_editable(PurpleRequestField *field,
00666                                             gboolean editable);
00667
00675 const char *purple_request_field_string_get_default_value(
00676         const PurpleRequestField *field);
00677
00685 const char *purple_request_field_string_get_value(const PurpleRequestField *field);
00686
00694 gboolean purple_request_field_string_is_multiline(const PurpleRequestField *field);
00695
00703 gboolean purple_request_field_string_is_masked(const PurpleRequestField *field);
00704
00712 gboolean purple_request_field_string_is_editable(const PurpleRequestField *field);
00713
00716 /**************************************************************************/
00718 /**************************************************************************/
00730 PurpleRequestField *purple_request_field_int_new(const char *id,
00731                                              const char *text,
00732                                              int default_value);
00733
00740 void purple_request_field_int_set_default_value(PurpleRequestField *field,
00741                                               int default_value);
00742
00749 void purple_request_field_int_set_value(PurpleRequestField *field, int value);
00750
00758 int purple_request_field_int_get_default_value(const PurpleRequestField *field);
00759
00767 int purple_request_field_int_get_value(const PurpleRequestField *field);
00768
00771 /**************************************************************************/
00773 /**************************************************************************/
00787 PurpleRequestField *purple_request_field_bool_new(const char *id,
00788                                               const char *text,
00789                                               gboolean default_value);
00790
00797 void purple_request_field_bool_set_default_value(PurpleRequestField *field,
00798                                                gboolean default_value);
00799
00806 void purple_request_field_bool_set_value(PurpleRequestField *field,
00807                                        gboolean value);
00808
00816 gboolean purple_request_field_bool_get_default_value(
00817         const PurpleRequestField *field);
00818
00826 gboolean purple_request_field_bool_get_value(const PurpleRequestField *field);
00827
00830 /**************************************************************************/
00832 /**************************************************************************/
00846 PurpleRequestField *purple_request_field_choice_new(const char *id,
00847                                                 const char *text,
00848                                                 int default_value);
00849
00856 void purple_request_field_choice_add(PurpleRequestField *field,
00857                                    const char *label);
00858
00865 void purple_request_field_choice_set_default_value(PurpleRequestField *field,
00866                                                  int default_value);
00867
00874 void purple_request_field_choice_set_value(PurpleRequestField *field, int value);
00875
00883 int purple_request_field_choice_get_default_value(const PurpleRequestField *field);
00884
00892 int purple_request_field_choice_get_value(const PurpleRequestField *field);
00893
00901 GList *purple_request_field_choice_get_labels(const PurpleRequestField *field);
00902
00905 /**************************************************************************/
00907 /**************************************************************************/
00918 PurpleRequestField *purple_request_field_list_new(const char *id, const char *text);
00919
00927 void purple_request_field_list_set_multi_select(PurpleRequestField *field,
00928                                               gboolean multi_select);
00929
00937 gboolean purple_request_field_list_get_multi_select(
00938     const PurpleRequestField *field);
00939
00948 void *purple_request_field_list_get_data(const PurpleRequestField *field,
00949                                        const char *text);
00950
00960 void purple_request_field_list_add(PurpleRequestField *field,
00961                                  const char *item, void *data);
00962
00971 void purple_request_field_list_add_icon(PurpleRequestField *field,
00972                                  const char *item, const char* icon_path, void* data);
00973
00980 void purple_request_field_list_add_selected(PurpleRequestField *field,
00981                                           const char *item);
00982
00988 void purple_request_field_list_clear_selected(PurpleRequestField *field);
00989
00996 void purple_request_field_list_set_selected(PurpleRequestField *field,
00997                                           GList *items);
00998
01007 gboolean purple_request_field_list_is_selected(const PurpleRequestField *field,
01008                                              const char *item);
01009
01020 GList *purple_request_field_list_get_selected(
01021     const PurpleRequestField *field);
01022
01030 GList *purple_request_field_list_get_items(const PurpleRequestField *field);
01031
01042 GList *purple_request_field_list_get_icons(const PurpleRequestField *field);
01043
01046 /**************************************************************************/
01048 /**************************************************************************/
01059 PurpleRequestField *purple_request_field_label_new(const char *id,
01060                                                const char *text);
01061
01064 /**************************************************************************/
01066 /**************************************************************************/
01079 PurpleRequestField *purple_request_field_image_new(const char *id, const char *text,
01080                                                const char *buf, gsize size);
01081
01089 void purple_request_field_image_set_scale(PurpleRequestField *field, unsigned int x, unsigned int y);
01090
01098 const char *purple_request_field_image_get_buffer(PurpleRequestField *field);
01099
01107 gsize purple_request_field_image_get_size(PurpleRequestField *field);
01108
01116 unsigned int purple_request_field_image_get_scale_x(PurpleRequestField *field);
01117
01125 unsigned int purple_request_field_image_get_scale_y(PurpleRequestField *field);
01126
01129 /**************************************************************************/
01131 /**************************************************************************/
01145 PurpleRequestField *purple_request_field_account_new(const char *id,
01146                                                  const char *text,
01147                                                  PurpleAccount *account);
01148
01155 void purple_request_field_account_set_default_value(PurpleRequestField *field,
01156                                                   PurpleAccount *default_value);
01157
01164 void purple_request_field_account_set_value(PurpleRequestField *field,
01165                                           PurpleAccount *value);
01166
01176 void purple_request_field_account_set_show_all(PurpleRequestField *field,
01177                                              gboolean show_all);
01178
01188 void purple_request_field_account_set_filter(PurpleRequestField *field,
01189                                            PurpleFilterAccountFunc filter_func);
01190
01198 PurpleAccount *purple_request_field_account_get_default_value(
01199         const PurpleRequestField *field);
01200
01208 PurpleAccount *purple_request_field_account_get_value(
01209         const PurpleRequestField *field);
01210
01220 gboolean purple_request_field_account_get_show_all(
01221         const PurpleRequestField *field);
01222
01233 PurpleFilterAccountFunc purple_request_field_account_get_filter(
01234         const PurpleRequestField *field);
01235
01238 /**************************************************************************/
01240 /**************************************************************************/
01289 void *purple_request_input(void *handle, const char *title, const char *primary,
01290     const char *secondary, const char *default_value, gboolean multiline,
01291     gboolean masked, gchar *hint,
01292     const char *ok_text, GCallback ok_cb,
01293     const char *cancel_text, GCallback cancel_cb,
01294     PurpleAccount *account, const char *who, PurpleConversation *conv,
01295     void *user_data);
01296
01330 void *purple_request_choice(void *handle, const char *title, const char *primary,
01331     const char *secondary, int default_value,
01332     const char *ok_text, GCallback ok_cb,
01333     const char *cancel_text, GCallback cancel_cb,
01334     PurpleAccount *account, const char *who, PurpleConversation *conv,
01335     void *user_data, ...) G_GNUC_NULL_TERMINATED;
01336
01340 void *purple_request_choice_varg(void *handle, const char *title,
01341     const char *primary, const char *secondary, int default_value,
01342     const char *ok_text, GCallback ok_cb,
01343     const char *cancel_text, GCallback cancel_cb,
01344     PurpleAccount *account, const char *who, PurpleConversation *conv,
01345     void *user_data, va_list choices);
01346
01382 void *purple_request_action(void *handle, const char *title, const char *primary,
01383     const char *secondary, int default_action, PurpleAccount *account,
01384     const char *who, PurpleConversation *conv, void *user_data,
01385     size_t action_count, ...);
01386
01390 void *purple_request_action_varg(void *handle, const char *title,
01391     const char *primary, const char *secondary, int default_action,
01392     PurpleAccount *account, const char *who, PurpleConversation *conv,
01393     void *user_data, size_t action_count, va_list actions);
01394
01424 void *purple_request_fields(void *handle, const char *title, const char *primary,
01425     const char *secondary, PurpleRequestFields *fields,
01426     const char *ok_text, GCallback ok_cb,
01427     const char *cancel_text, GCallback cancel_cb,
01428     PurpleAccount *account, const char *who, PurpleConversation *conv,
01429     void *user_data);
01430
01437 void purple_request_close(PurpleRequestType type, void *uihandle);
01438
01447 void purple_request_close_with_handle(void *handle);
01448
01452 #define purple_request_yes_no(handle, title, primary, secondary, \
01453                             default_action, account, who, conv, \
01454                             user_data, yes_cb, no_cb) \
01455     purple_request_action((handle), (title), (primary), (secondary), \
01456                         (default_action), account, who, conv, (user_data), 2, \
01457                         _("_Yes"), (yes_cb), _("_No"), (no_cb))
01458 
01462 #define purple_request_ok_cancel(handle, title, primary, secondary, \
01463                             default_action, account, who, conv, \
01464                             user_data, ok_cb, cancel_cb) \
01465     purple_request_action((handle), (title), (primary), (secondary), \
01466                         (default_action), account, who, conv, (user_data), 2, \
01467                         _("_OK"), (ok_cb), _("_Cancel"), (cancel_cb))
01468 
01472 #define purple_request_accept_cancel(handle, title, primary, secondary, \
01473                                    default_action, account, who, conv, \
01474                                    user_data, accept_cb, cancel_cb) \
01475     purple_request_action((handle), (title), (primary), (secondary), \
01476                         (default_action), account, who, conv, (user_data), 2, \
01477                         _("_Accept"), (accept_cb), _("_Cancel"), (cancel_cb))
01478 
01503 void *purple_request_file(void *handle, const char *title, const char *filename,
01504     gboolean savedialog, GCallback ok_cb, GCallback cancel_cb,
01505     PurpleAccount *account, const char *who, PurpleConversation *conv,
01506     void *user_data);
01507
01530 void *purple_request_folder(void *handle, const char *title, const char *dirname,
01531     GCallback ok_cb, GCallback cancel_cb,
01532     PurpleAccount *account, const char *who, PurpleConversation *conv,
01533     void *user_data);
01534
01537 /**************************************************************************/
01539 /**************************************************************************/
01548 void purple_request_set_ui_ops(PurpleRequestUiOps *ops);
01549
01556 PurpleRequestUiOps *purple_request_get_ui_ops(void);
01557
01560 #ifdef __cplusplus
01561 }
01562 #endif
01563 
01564 #endif /* _PURPLE_REQUEST_H_ */