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 
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 /* _PURPLE_REQUEST_H_ */