comparison gtk/gtkblist.h @ 14191:009db0b357b5

This is a hand-crafted commit to migrate across subversion revisions 16854:16861, due to some vagaries of the way the original renames were done. Witness that monotone can do in one revision what svn had to spread across several.
author Ethan Blanton <elb@pidgin.im>
date Sat, 16 Dec 2006 04:59:55 +0000
parents
children a6034bc8c84e
comparison
equal deleted inserted replaced
14190:366be2ce35a7 14191:009db0b357b5
1 /**
2 * @file gtkblist.h GTK+ Buddy List API
3 * @ingroup gtkui
4 *
5 * gaim
6 *
7 * Gaim is the legal property of its developers, whose names are too numerous
8 * to list here. Please refer to the COPYRIGHT file distributed with this
9 * source distribution.
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2 of the License, or
14 * (at your option) any later version.
15 *
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
20 *
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24 */
25 #ifndef _GAIM_GTKBLIST_H_
26 #define _GAIM_GTKBLIST_H_
27
28 typedef struct _GaimGtkBuddyList GaimGtkBuddyList;
29
30 enum {
31 STATUS_ICON_COLUMN,
32 STATUS_ICON_VISIBLE_COLUMN,
33 NAME_COLUMN,
34 IDLE_COLUMN,
35 BUDDY_ICON_COLUMN,
36 NODE_COLUMN,
37 BLIST_COLUMNS
38
39 };
40
41 typedef enum {
42 GAIM_STATUS_ICON_LARGE,
43 GAIM_STATUS_ICON_SMALL
44
45 } GaimStatusIconSize;
46
47 #include "gtkgaim.h"
48 #include "blist.h"
49
50 /**************************************************************************
51 * @name Structures
52 **************************************************************************/
53 /**
54 * Like, everything you need to know about the gtk buddy list
55 */
56 struct _GaimGtkBuddyList {
57 GtkWidget *window;
58 GtkWidget *vbox; /**< This is the vbox that everything gets packed into. Your plugin might
59 want to pack something in it itself. Go, plugins! */
60
61 GtkWidget *treeview; /**< It's a treeview... d'uh. */
62 GtkTreeStore *treemodel; /**< This is the treemodel. */
63 GtkTreeViewColumn *idle_column,
64 *warning_column,
65 *buddy_icon_column,
66 *text_column;
67
68 GtkCellRenderer *text_rend;
69
70 GtkItemFactory *ift;
71 GtkWidget *menutray; /**< The menu tray widget. */
72 GtkWidget *menutrayicon; /**< The menu tray icon. */
73
74 GHashTable *connection_errors; /**< Caches connection error messages and accounts. */
75
76 guint refresh_timer; /**< The timer for refreshing every 30 seconds */
77
78 guint timeout; /**< The timeout for the tooltip. */
79 guint drag_timeout; /**< The timeout for expanding contacts on drags */
80 GdkRectangle tip_rect; /**< This is the bounding rectangle of the
81 cell we're currently hovering over. This is
82 used for tooltips. */
83 GdkRectangle contact_rect; /**< This is the bounding rectangle of the contact node
84 and its children. This is used for auto-expand on
85 mouseover. */
86 GaimBlistNode *mouseover_contact; /**< This is the contact currently mouse-over expanded */
87
88 GtkWidget *tipwindow; /**< The window used by the tooltip */
89 GList *tooltipdata; /**< The data for each "chunk" of the tooltip */
90
91 GaimBlistNode *selected_node; /**< The currently selected node */
92 GtkWidget *error_buttons; /**< Box containing the connection error buttons */
93 GtkWidget *statusbox; /**< The status selector dropdown */
94 GdkPixbuf *east, *south; /**< Drop shadow stuff */
95 GdkWindow *east_shadow, *south_shadow; /**< Drop shadow stuff */
96
97 };
98
99 #define GAIM_GTK_BLIST(list) ((GaimGtkBuddyList *)(list)->ui_data)
100 #define GAIM_IS_GTK_BLIST(list) \
101 ((list)->ui_ops == gaim_gtk_blist_get_ui_ops())
102
103 /**************************************************************************
104 * @name GTK+ Buddy List API
105 **************************************************************************/
106
107 /**
108 * Get the handle for the GTK+ blist system.
109 *
110 * @return the handle to the blist system
111 */
112 void *gaim_gtk_blist_get_handle(void);
113
114 /**
115 * Initializes the GTK+ blist system.
116 */
117 void gaim_gtk_blist_init(void);
118
119 /**
120 * Uninitializes the GTK+ blist system.
121 */
122 void gaim_gtk_blist_uninit(void);
123
124 /**
125 * Returns the UI operations structure for the buddy list.
126 *
127 * @return The GTK+ list operations structure.
128 */
129 GaimBlistUiOps *gaim_gtk_blist_get_ui_ops(void);
130
131 /**
132 * Returns the default gtk buddy list
133 *
134 * There's normally only one buddy list window, but that isn't a necessity. This function
135 * returns the GaimGtkBuddyList we're most likely wanting to work with. This is slightly
136 * cleaner than an externed global.
137 *
138 * @return The default GTK+ buddy list
139 */
140 GaimGtkBuddyList *gaim_gtk_blist_get_default_gtk_blist(void);
141
142 /**
143 * Populates a menu with the items shown on the buddy list for a buddy.
144 *
145 * @param menu The menu to populate
146 * @param buddy The buddy whose menu to get
147 * @param sub TRUE if this is a sub-menu, FALSE otherwise
148 */
149 void gaim_gtk_blist_make_buddy_menu(GtkWidget *menu, GaimBuddy *buddy, gboolean sub);
150
151 /**
152 * Refreshes all the nodes of the buddy list.
153 * This should only be called when something changes to affect most of the nodes (such as a ui preference changing)
154 *
155 * @param list This is the core list that gets updated from
156 */
157 void gaim_gtk_blist_refresh(GaimBuddyList *list);
158
159 /**
160 * Tells the buddy list to update its toolbar based on the preferences
161 *
162 */
163 void gaim_gtk_blist_update_toolbar(void);
164
165 void gaim_gtk_blist_update_columns(void);
166 void gaim_gtk_blist_update_refresh_timeout(void);
167
168 /**
169 * Useful for the buddy ticker
170 */
171 GdkPixbuf *gaim_gtk_blist_get_status_icon(GaimBlistNode *node,
172 GaimStatusIconSize size);
173
174 /**
175 * Returns a boolean indicating if @a node is part of an expanded contact.
176 *
177 * This only makes sense for contact and buddy nodes. @c FALSE is returned
178 * for other types of nodes.
179 *
180 * @param node The node in question.
181 * @return A boolean indicating if @a node is part of an expanded contact.
182 */
183 gboolean gaim_gtk_blist_node_is_contact_expanded(GaimBlistNode *node);
184
185 /**
186 * Intelligently toggles the visibility of the buddy list. If the buddy
187 * list is obscured, it is brought to the front. If it is not obscured,
188 * it is hidden. If it is hidden it is shown.
189 */
190 void gaim_gtk_blist_toggle_visibility(void);
191
192 /**
193 * Increases the reference count of visibility managers. Callers should
194 * call the complementary remove function when no longer managing
195 * visibility.
196 *
197 * A visibility manager is something that provides some method for
198 * showing the buddy list after it is hidden (e.g. docklet plugin).
199 */
200 void gaim_gtk_blist_visibility_manager_add(void);
201
202 /**
203 * Decreases the reference count of visibility managers. If the count
204 * drops below zero, the buddy list is shown.
205 */
206 void gaim_gtk_blist_visibility_manager_remove(void);
207
208
209 /**************************************************************************
210 * @name GTK+ Buddy List sorting functions
211 **************************************************************************/
212
213 typedef void (*gaim_gtk_blist_sort_function)(GaimBlistNode *new, GaimBuddyList *blist, GtkTreeIter group, GtkTreeIter *cur, GtkTreeIter *iter);
214
215 /**
216 * Gets the current list of sort methods.
217 *
218 * @return A GSlist of sort methods
219 */
220 GList *gaim_gtk_blist_get_sort_methods(void);
221
222 struct gaim_gtk_blist_sort_method {
223 char *id;
224 char *name;
225 gaim_gtk_blist_sort_function func;
226 };
227
228 typedef struct gaim_gtk_blist_sort_method GaimGtkBlistSortMethod;
229
230 /**
231 * Registers a buddy list sorting method.
232 *
233 * @param id The unique ID of the sorting method
234 * @param name The method's name.
235 * @param func A pointer to the function.
236 *
237 */
238 void gaim_gtk_blist_sort_method_reg(const char *id, const char *name, gaim_gtk_blist_sort_function func);
239
240 /**
241 * Unregisters a buddy list sorting method.
242 *
243 * @param id The method's id
244 */
245 void gaim_gtk_blist_sort_method_unreg(const char *id);
246
247 /**
248 * Sets a buddy list sorting method.
249 *
250 * @param id The method's id.
251 */
252 void gaim_gtk_blist_sort_method_set(const char *id);
253
254 /**
255 * Sets up the programs default sort methods
256 */
257 void gaim_gtk_blist_setup_sort_methods(void);
258
259 /**
260 * Updates the accounts menu on the GTK+ buddy list window.
261 */
262 void gaim_gtk_blist_update_accounts_menu(void);
263
264 /**
265 * Updates the plugin actions menu on the GTK+ buddy list window.
266 */
267 void gaim_gtk_blist_update_plugin_actions(void);
268
269 /**
270 * Updates the Sorting menu on the GTK+ buddy list window.
271 */
272 void gaim_gtk_blist_update_sort_methods(void);
273
274 /**
275 * Determines if showing the join chat dialog is a valid action.
276 *
277 * @return Returns TRUE if there are accounts online capable of
278 * joining chat rooms. Otherwise returns FALSE.
279 */
280 gboolean gaim_gtk_blist_joinchat_is_showable(void);
281
282 /**
283 * Shows the join chat dialog.
284 */
285 void gaim_gtk_blist_joinchat_show(void);
286
287 /**
288 * Appends the protocol specific menu items for a GaimBlistNode
289 * TODO: Rename these.
290 */
291 void gaim_gtk_append_blist_node_proto_menu (GtkWidget *menu, GaimConnection *gc, GaimBlistNode *node);
292
293 /**
294 * Appends the extended menu items for a GaimBlistNode
295 * TODO: Rename these.
296 */
297 void gaim_gtk_append_blist_node_extended_menu(GtkWidget *menu, GaimBlistNode *node);
298
299 /**
300 * Used by the connection API to tell the blist if an account
301 * has a connection error or no longer has a connection error.
302 *
303 * @param account The account that either has a connection error
304 * or no longer has a connection error.
305 * @param message The connection error message, or NULL if this
306 * account is no longer in an error state.
307 */
308 void gaim_gtk_blist_update_account_error_state(GaimAccount *account, const char *message);
309
310 #endif /* _GAIM_GTKBLIST_H_ */