00001
00026 #ifndef _PURPLE_ROOMLIST_H_
00027 #define _PURPLE_ROOMLIST_H_
00028
00029 typedef struct _PurpleRoomlist PurpleRoomlist;
00030 typedef struct _PurpleRoomlistRoom PurpleRoomlistRoom;
00031 typedef struct _PurpleRoomlistField PurpleRoomlistField;
00032 typedef struct _PurpleRoomlistUiOps PurpleRoomlistUiOps;
00033
00039 typedef enum
00040 {
00041 PURPLE_ROOMLIST_ROOMTYPE_CATEGORY = 0x01,
00042 PURPLE_ROOMLIST_ROOMTYPE_ROOM = 0x02
00044 } PurpleRoomlistRoomType;
00045
00049 typedef enum
00050 {
00051 PURPLE_ROOMLIST_FIELD_BOOL,
00052 PURPLE_ROOMLIST_FIELD_INT,
00053 PURPLE_ROOMLIST_FIELD_STRING
00055 } PurpleRoomlistFieldType;
00056
00057 #include "account.h"
00058 #include "glib.h"
00059
00060
00062
00063
00067 struct _PurpleRoomlist {
00068 PurpleAccount *account;
00069 GList *fields;
00070 GList *rooms;
00071 gboolean in_progress;
00072 gpointer ui_data;
00073 gpointer proto_data;
00074 guint ref;
00075 };
00076
00080 struct _PurpleRoomlistRoom {
00081 PurpleRoomlistRoomType type;
00082 gchar *name;
00083 GList *fields;
00084 PurpleRoomlistRoom *parent;
00085 gboolean expanded_once;
00086 };
00087
00091 struct _PurpleRoomlistField {
00092 PurpleRoomlistFieldType type;
00093 gchar *label;
00094 gchar *name;
00095 gboolean hidden;
00096 };
00097
00101 struct _PurpleRoomlistUiOps {
00102 void (*show_with_account)(PurpleAccount *account);
00103 void (*create)(PurpleRoomlist *list);
00104 void (*set_fields)(PurpleRoomlist *list, GList *fields);
00105 void (*add_room)(PurpleRoomlist *list, PurpleRoomlistRoom *room);
00106 void (*in_progress)(PurpleRoomlist *list, gboolean flag);
00107 void (*destroy)(PurpleRoomlist *list);
00109 void (*_purple_reserved1)(void);
00110 void (*_purple_reserved2)(void);
00111 void (*_purple_reserved3)(void);
00112 void (*_purple_reserved4)(void);
00113 };
00114
00115
00116 #ifdef __cplusplus
00117 extern "C" {
00118 #endif
00119
00120
00122
00134 void purple_roomlist_show_with_account(PurpleAccount *account);
00135
00144 PurpleRoomlist *purple_roomlist_new(PurpleAccount *account);
00145
00151 void purple_roomlist_ref(PurpleRoomlist *list);
00152
00161 void purple_roomlist_unref(PurpleRoomlist *list);
00162
00172 void purple_roomlist_set_fields(PurpleRoomlist *list, GList *fields);
00173
00183 void purple_roomlist_set_in_progress(PurpleRoomlist *list, gboolean in_progress);
00184
00194 gboolean purple_roomlist_get_in_progress(PurpleRoomlist *list);
00195
00203 void purple_roomlist_room_add(PurpleRoomlist *list, PurpleRoomlistRoom *room);
00204
00214 PurpleRoomlist *purple_roomlist_get_list(PurpleConnection *gc);
00215
00224 void purple_roomlist_cancel_get_list(PurpleRoomlist *list);
00225
00237 void purple_roomlist_expand_category(PurpleRoomlist *list, PurpleRoomlistRoom *category);
00238
00241
00243
00255 PurpleRoomlistRoom *purple_roomlist_room_new(PurpleRoomlistRoomType type, const gchar *name,
00256 PurpleRoomlistRoom *parent);
00257
00265 void purple_roomlist_room_add_field(PurpleRoomlist *list, PurpleRoomlistRoom *room, gconstpointer field);
00266
00273 void purple_roomlist_room_join(PurpleRoomlist *list, PurpleRoomlistRoom *room);
00274
00277
00279
00293 PurpleRoomlistField *purple_roomlist_field_new(PurpleRoomlistFieldType type,
00294 const gchar *label, const gchar *name,
00295 gboolean hidden);
00298
00300
00308 void purple_roomlist_set_ui_ops(PurpleRoomlistUiOps *ops);
00309
00316 PurpleRoomlistUiOps *purple_roomlist_get_ui_ops(void);
00317
00320 #ifdef __cplusplus
00321 }
00322 #endif
00323
00324 #endif