00001
00026 #ifndef _GAIM_ROOMLIST_H_
00027 #define _GAIM_ROOMLIST_H_
00028
00029
00030 #include <glib/glist.h>
00031 #include "account.h"
00032
00033
00034
00036
00037
00038 typedef struct _GaimRoomlist GaimRoomlist;
00039 typedef struct _GaimRoomlistRoom GaimRoomlistRoom;
00040 typedef enum _GaimRoomlistRoomType GaimRoomlistRoomType;
00041 typedef struct _GaimRoomlistField GaimRoomlistField;
00042 typedef enum _GaimRoomlistFieldType GaimRoomlistFieldType;
00043 typedef struct _GaimRoomlistUiOps GaimRoomlistUiOps;
00044
00048 struct _GaimRoomlist {
00049 GaimAccount *account;
00050 GList *fields;
00051 GList *rooms;
00052 gboolean in_progress;
00053 gpointer ui_data;
00054 gpointer proto_data;
00055 guint ref;
00056 };
00057
00063 enum _GaimRoomlistRoomType {
00064 GAIM_ROOMLIST_ROOMTYPE_CATEGORY = 0x01,
00065 GAIM_ROOMLIST_ROOMTYPE_ROOM = 0x02,
00066 };
00067
00071 struct _GaimRoomlistRoom {
00072 GaimRoomlistRoomType type;
00073 gchar *name;
00074 GList *fields;
00075 GaimRoomlistRoom *parent;
00076 gboolean expanded_once;
00077 };
00078
00082 enum _GaimRoomlistFieldType {
00083 GAIM_ROOMLIST_FIELD_BOOL,
00084 GAIM_ROOMLIST_FIELD_INT,
00085 GAIM_ROOMLIST_FIELD_STRING,
00086 };
00087
00091 struct _GaimRoomlistField {
00092 GaimRoomlistFieldType type;
00093 gchar *label;
00094 gchar *name;
00095 gboolean hidden;
00096 };
00097
00101 struct _GaimRoomlistUiOps {
00102 void (*show_with_account)(GaimAccount *account);
00103 void (*new)(GaimRoomlist *list);
00104 void (*set_fields)(GaimRoomlist *list, GList *fields);
00105 void (*add_room)(GaimRoomlist *list, GaimRoomlistRoom *room);
00106 void (*in_progress)(GaimRoomlist *list, gboolean flag);
00107 void (*destroy)(GaimRoomlist *list);
00108 };
00109
00110
00111 #ifdef __cplusplus
00112 extern "C" {
00113 #endif
00114
00115
00117
00129 void gaim_roomlist_show_with_account(GaimAccount *account);
00130
00139 GaimRoomlist *gaim_roomlist_new(GaimAccount *account);
00140
00146 void gaim_roomlist_ref(GaimRoomlist *list);
00147
00156 void gaim_roomlist_unref(GaimRoomlist *list);
00157
00167 void gaim_roomlist_set_fields(GaimRoomlist *list, GList *fields);
00168
00178 void gaim_roomlist_set_in_progress(GaimRoomlist *list, gboolean in_progress);
00179
00189 gboolean gaim_roomlist_get_in_progress(GaimRoomlist *list);
00190
00198 void gaim_roomlist_room_add(GaimRoomlist *list, GaimRoomlistRoom *room);
00199
00209 GaimRoomlist *gaim_roomlist_get_list(GaimConnection *gc);
00210
00219 void gaim_roomlist_cancel_get_list(GaimRoomlist *list);
00220
00232 void gaim_roomlist_expand_category(GaimRoomlist *list, GaimRoomlistRoom *category);
00233
00236
00238
00250 GaimRoomlistRoom *gaim_roomlist_room_new(GaimRoomlistRoomType type, const gchar *name,
00251 GaimRoomlistRoom *parent);
00252
00260 void gaim_roomlist_room_add_field(GaimRoomlist *list, GaimRoomlistRoom *room, gconstpointer field);
00261
00268 void gaim_roomlist_room_join(GaimRoomlist *list, GaimRoomlistRoom *room);
00269
00272
00274
00288 GaimRoomlistField *gaim_roomlist_field_new(GaimRoomlistFieldType type,
00289 const gchar *label, const gchar *name,
00290 gboolean hidden);
00293
00295
00303 void gaim_roomlist_set_ui_ops(GaimRoomlistUiOps *ops);
00304
00311 GaimRoomlistUiOps *gaim_roomlist_get_ui_ops(void);
00312
00315 #ifdef __cplusplus
00316 }
00317 #endif
00318
00319 #endif