00001
00026 #ifndef _GAIM_ROOMLIST_H_
00027 #define _GAIM_ROOMLIST_H_
00028
00029
00031
00032
00033 typedef struct _GaimRoomlist GaimRoomlist;
00034 typedef struct _GaimRoomlistRoom GaimRoomlistRoom;
00035 typedef enum _GaimRoomlistRoomType GaimRoomlistRoomType;
00036 typedef struct _GaimRoomlistField GaimRoomlistField;
00037 typedef enum _GaimRoomlistFieldType GaimRoomlistFieldType;
00038 typedef struct _GaimRoomlistUiOps GaimRoomlistUiOps;
00039
00043 struct _GaimRoomlist {
00044 GaimAccount *account;
00045 GList *fields;
00046 GList *rooms;
00047 gboolean in_progress;
00048 gpointer ui_data;
00049 gpointer proto_data;
00050 guint ref;
00051 };
00052
00058 enum _GaimRoomlistRoomType {
00059 GAIM_ROOMLIST_ROOMTYPE_CATEGORY = 0x01,
00060 GAIM_ROOMLIST_ROOMTYPE_ROOM = 0x02,
00061 };
00062
00066 struct _GaimRoomlistRoom {
00067 GaimRoomlistRoomType type;
00068 gchar *name;
00069 GList *fields;
00070 GaimRoomlistRoom *parent;
00071 gboolean expanded_once;
00072 };
00073
00077 enum _GaimRoomlistFieldType {
00078 GAIM_ROOMLIST_FIELD_BOOL,
00079 GAIM_ROOMLIST_FIELD_INT,
00080 GAIM_ROOMLIST_FIELD_STRING,
00081 };
00082
00086 struct _GaimRoomlistField {
00087 GaimRoomlistFieldType type;
00088 gchar *label;
00089 gchar *name;
00090 gboolean hidden;
00091 };
00092
00096 struct _GaimRoomlistUiOps {
00097 void (*show_with_account)(GaimAccount *account);
00098 void (*new)(GaimRoomlist *list);
00099 void (*set_fields)(GaimRoomlist *list, GList *fields);
00100 void (*add_room)(GaimRoomlist *list, GaimRoomlistRoom *room);
00101 void (*in_progress)(GaimRoomlist *list, gboolean flag);
00102 void (*destroy)(GaimRoomlist *list);
00103 };
00104
00105
00106 #ifdef __cplusplus
00107 extern "C" {
00108 #endif
00109
00110
00112
00124 void gaim_roomlist_show_with_account(GaimAccount *account);
00125
00134 GaimRoomlist *gaim_roomlist_new(GaimAccount *account);
00135
00141 void gaim_roomlist_ref(GaimRoomlist *list);
00142
00151 void gaim_roomlist_unref(GaimRoomlist *list);
00152
00162 void gaim_roomlist_set_fields(GaimRoomlist *list, GList *fields);
00163
00173 void gaim_roomlist_set_in_progress(GaimRoomlist *list, gboolean in_progress);
00174
00184 gboolean gaim_roomlist_get_in_progress(GaimRoomlist *list);
00185
00193 void gaim_roomlist_room_add(GaimRoomlist *list, GaimRoomlistRoom *room);
00194
00201 gboolean gaim_roomlist_is_possible(GaimConnection *gc);
00202
00212 GaimRoomlist *gaim_roomlist_get_list(GaimConnection *gc);
00213
00222 void gaim_roomlist_cancel_get_list(GaimRoomlist *list);
00223
00235 void gaim_roomlist_expand_category(GaimRoomlist *list, GaimRoomlistRoom *category);
00236
00239
00241
00253 GaimRoomlistRoom *gaim_roomlist_room_new(GaimRoomlistRoomType type, const gchar *name,
00254 GaimRoomlistRoom *parent);
00255
00263 void gaim_roomlist_room_add_field(GaimRoomlist *list, GaimRoomlistRoom *room, gconstpointer field);
00264
00271 void gaim_roomlist_room_join(GaimRoomlist *list, GaimRoomlistRoom *room);
00272
00275
00277
00290 GaimRoomlistField *gaim_roomlist_field_new(GaimRoomlistFieldType type,
00291 const gchar *label, const gchar *name,
00292 gboolean hidden);
00295
00297
00305 void gaim_roomlist_set_ui_ops(GaimRoomlistUiOps *ops);
00306
00313 GaimRoomlistUiOps *gaim_roomlist_get_ui_ops(void);
00314
00317 #ifdef __cplusplus
00318 }
00319 #endif
00320
00321 #endif