request.h

Go to the documentation of this file.
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 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                                           GList *items);
00924 
00933 gboolean purple_request_field_list_is_selected(const PurpleRequestField *field,
00934                                              const char *item);
00935 
00946 GList *purple_request_field_list_get_selected(
00947     const PurpleRequestField *field);
00948 
00956 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, ...) G_GNUC_NULL_TERMINATED;
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 /* _PURPLE_REQUEST_H_ */