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