src/conversation.h

changeset 11581
5c7f44be5dfe
parent 11485
fe334b13d1d0
child 11664
050d0caa0832
equal deleted inserted replaced
11580:41ecd9e08031 11581:5c7f44be5dfe
29 29
30 /**************************************************************************/ 30 /**************************************************************************/
31 /** Data Structures */ 31 /** Data Structures */
32 /**************************************************************************/ 32 /**************************************************************************/
33 33
34 typedef struct _GaimConvWindowUiOps GaimConvWindowUiOps; 34
35 typedef struct _GaimConvWindow GaimConvWindow;
36 typedef struct _GaimConversationUiOps GaimConversationUiOps; 35 typedef struct _GaimConversationUiOps GaimConversationUiOps;
37 typedef struct _GaimConversation GaimConversation; 36 typedef struct _GaimConversation GaimConversation;
38 typedef struct _GaimConvIm GaimConvIm; 37 typedef struct _GaimConvIm GaimConvIm;
39 typedef struct _GaimConvChat GaimConvChat; 38 typedef struct _GaimConvChat GaimConvChat;
40 typedef struct _GaimConvChatBuddy GaimConvChatBuddy; 39 typedef struct _GaimConvChatBuddy GaimConvChatBuddy;
133 GAIM_CBFLAGS_VOICE = 0x0001, /**< Voiced user or "Participant" */ 132 GAIM_CBFLAGS_VOICE = 0x0001, /**< Voiced user or "Participant" */
134 GAIM_CBFLAGS_HALFOP = 0x0002, /**< Half-op */ 133 GAIM_CBFLAGS_HALFOP = 0x0002, /**< Half-op */
135 GAIM_CBFLAGS_OP = 0x0004, /**< Channel Op or Moderator */ 134 GAIM_CBFLAGS_OP = 0x0004, /**< Channel Op or Moderator */
136 GAIM_CBFLAGS_FOUNDER = 0x0008, /**< Channel Founder */ 135 GAIM_CBFLAGS_FOUNDER = 0x0008, /**< Channel Founder */
137 GAIM_CBFLAGS_TYPING = 0x0010, /**< Currently typing */ 136 GAIM_CBFLAGS_TYPING = 0x0010, /**< Currently typing */
138 137
139 138
140 } GaimConvChatBuddyFlags; 139 } GaimConvChatBuddyFlags;
141 140
142 #include "account.h" 141 #include "account.h"
143 #include "buddyicon.h" 142 #include "buddyicon.h"
144 #include "log.h" 143 #include "log.h"
145 #include "server.h" 144 #include "server.h"
146 145
147 /** 146 /**
148 * Conversation window operations.
149 *
150 * Any UI representing a window must assign a filled-out gaim_conv_window_ops
151 * structure to the GaimConvWindow.
152 */
153 struct _GaimConvWindowUiOps
154 {
155 GaimConversationUiOps *(*get_conversation_ui_ops)(void);
156
157 void (*new_window)(GaimConvWindow *win);
158 void (*destroy_window)(GaimConvWindow *win);
159
160 void (*show)(GaimConvWindow *win);
161 void (*hide)(GaimConvWindow *win);
162 void (*raise)(GaimConvWindow *win);
163
164 void (*switch_conversation)(GaimConvWindow *win, GaimConversation *conv);
165 void (*add_conversation)(GaimConvWindow *win, GaimConversation *conv);
166 void (*remove_conversation)(GaimConvWindow *win, GaimConversation *conv);
167
168 GaimConversation *(*get_active_conversation)(const GaimConvWindow *win);
169 gboolean (*has_focus)(GaimConvWindow *win);
170 };
171
172 /**
173 * Conversation operations and events. 147 * Conversation operations and events.
174 * 148 *
175 * Any UI representing a conversation must assign a filled-out 149 * Any UI representing a conversation must assign a filled-out
176 * GaimConversationUiOps structure to the GaimConversation. 150 * GaimConversationUiOps structure to the GaimConversation.
177 */ 151 */
178 struct _GaimConversationUiOps 152 struct _GaimConversationUiOps
179 { 153 {
154 void (*create_conversation)(GaimConversation *conv);
180 void (*destroy_conversation)(GaimConversation *conv); 155 void (*destroy_conversation)(GaimConversation *conv);
181 void (*write_chat)(GaimConversation *conv, const char *who, 156 void (*write_chat)(GaimConversation *conv, const char *who,
182 const char *message, GaimMessageFlags flags, 157 const char *message, GaimMessageFlags flags,
183 time_t mtime); 158 time_t mtime);
184 void (*write_im)(GaimConversation *conv, const char *who, 159 void (*write_im)(GaimConversation *conv, const char *who,
193 const char *new_name, const char *new_alias); 168 const char *new_name, const char *new_alias);
194 void (*chat_remove_user)(GaimConversation *conv, const char *user); 169 void (*chat_remove_user)(GaimConversation *conv, const char *user);
195 void (*chat_remove_users)(GaimConversation *conv, GList *users); 170 void (*chat_remove_users)(GaimConversation *conv, GList *users);
196 void (*chat_update_user)(GaimConversation *conv, const char *user); 171 void (*chat_update_user)(GaimConversation *conv, const char *user);
197 172
198 void (*update_progress)(GaimConversation *conv, float percent);
199 173
200 gboolean (*has_focus)(GaimConversation *conv); 174 gboolean (*has_focus)(GaimConversation *conv);
201 175
202 /* Custom Smileys */ 176 /* Custom Smileys */
203 gboolean (*custom_smiley_add)(GaimConversation *conv, const char *smile); 177 gboolean (*custom_smiley_add)(GaimConversation *conv, const char *smile);
206 void (*custom_smiley_close)(GaimConversation *conv, const char *smile); 180 void (*custom_smiley_close)(GaimConversation *conv, const char *smile);
207 181
208 /* Events */ 182 /* Events */
209 void (*updated)(GaimConversation *conv, GaimConvUpdateType type); 183 void (*updated)(GaimConversation *conv, GaimConvUpdateType type);
210 184
211 };
212
213 /**
214 * A core representation of a graphical window containing one or more
215 * conversations.
216 */
217 struct _GaimConvWindow
218 {
219 GList *conversations; /**< The conversations in the window. */
220 size_t conversation_count; /**< The number of conversations. */
221
222 GaimConvWindowUiOps *ui_ops; /**< UI-specific window operations. */
223 void *ui_data; /**< UI-specific data. */
224 }; 185 };
225 186
226 /** 187 /**
227 * Data specific to Instant Messages. 188 * Data specific to Instant Messages.
228 */ 189 */
265 }; 226 };
266 227
267 /** 228 /**
268 * A core representation of a conversation between two or more people. 229 * A core representation of a conversation between two or more people.
269 * 230 *
270 * The conversation can be an IM or a chat. Each conversation is kept 231 * The conversation can be an IM or a chat.
271 * in a GaimConvWindow and has a UI representation.
272 */ 232 */
273 struct _GaimConversation 233 struct _GaimConversation
274 { 234 {
275 GaimConversationType type; /**< The type of conversation. */ 235 GaimConversationType type; /**< The type of conversation. */
276 236
277 GaimAccount *account; /**< The user using this conversation. */ 237 GaimAccount *account; /**< The user using this conversation. */
278 GaimConvWindow *window; /**< The parent window. */ 238
279
280 int conversation_pos; /**< The position in the window's list. */
281 239
282 char *name; /**< The name of the conversation. */ 240 char *name; /**< The name of the conversation. */
283 char *title; /**< The window title. */ 241 char *title; /**< The window title. */
284 242
285 gboolean logging; /**< The status of logging. */ 243 gboolean logging; /**< The status of logging. */
305 263
306 GaimConnectionFlags features; /**< The supported features */ 264 GaimConnectionFlags features; /**< The supported features */
307 265
308 }; 266 };
309 267
310 typedef void (*GaimConvPlacementFunc)(GaimConversation *);
311
312 #ifdef __cplusplus 268 #ifdef __cplusplus
313 extern "C" { 269 extern "C" {
314 #endif 270 #endif
315
316 /**************************************************************************/
317 /** @name Conversation Window API */
318 /**************************************************************************/
319 /*@{*/
320
321 /**
322 * Creates a new conversation window.
323 *
324 * This window is added to the list of windows, but is not shown until
325 * gaim_conv_window_show() is called.
326 *
327 * @return The new conversation window.
328 */
329 GaimConvWindow *gaim_conv_window_new(void);
330
331 /**
332 * Destroys the specified conversation window and all conversations in it.
333 *
334 * @param win The window to destroy.
335 */
336 void gaim_conv_window_destroy(GaimConvWindow *win);
337
338 /**
339 * Shows the specified conversation window.
340 *
341 * @param win The window.
342 */
343 void gaim_conv_window_show(GaimConvWindow *win);
344
345 /**
346 * Hides the specified conversation window.
347 *
348 * @param win The window.
349 */
350 void gaim_conv_window_hide(GaimConvWindow *win);
351
352 /**
353 * Raises the specified conversation window.
354 *
355 * @param win The window.
356 */
357 void gaim_conv_window_raise(GaimConvWindow *win);
358
359 /**
360 * Sets the specified window's UI window operations structure.
361 *
362 * @param win The window.
363 * @param ops The UI window operations structure.
364 */
365 void gaim_conv_window_set_ui_ops(GaimConvWindow *win,
366 GaimConvWindowUiOps *ops);
367
368 /**
369 * Returns the specified window's UI window operations structure.
370 *
371 * @param win The window.
372 *
373 * @return The UI window operations structure.
374 */
375 GaimConvWindowUiOps *gaim_conv_window_get_ui_ops(const GaimConvWindow *win);
376
377 /**
378 * Adds a conversation to this window.
379 *
380 * If the conversation already has a parent window, this will do nothing.
381 *
382 * @param win The window.
383 * @param conv The conversation.
384 *
385 * @return The new index of the conversation in the window.
386 */
387 int gaim_conv_window_add_conversation(GaimConvWindow *win,
388 GaimConversation *conv);
389
390 /**
391 * Removes the conversation from the window.
392 *
393 * @param win The window.
394 * @param conv The conversation.
395 *
396 * @return The conversation removed.
397 */
398 GaimConversation *gaim_conv_window_remove_conversation(GaimConvWindow *win,
399 GaimConversation *conv);
400 /**
401 * Returns the number of conversations in the window.
402 *
403 * @param win The window.
404 *
405 * @return The number of conversations.
406 */
407 size_t gaim_conv_window_get_conversation_count(const GaimConvWindow *win);
408
409 /**
410 * Switches the active conversation to the one at the specified index.
411 *
412 * @param win The window.
413 * @param conv The converstion to switch to.
414 */
415 void gaim_conv_window_switch_conversation(GaimConvWindow *win,
416 GaimConversation *conv);
417
418 /**
419 * Returns the active conversation in the window.
420 *
421 * @param win The window.
422 *
423 * @return The active conversation.
424 */
425 GaimConversation *gaim_conv_window_get_active_conversation(
426 const GaimConvWindow *win);
427
428 /**
429 * Determines if a conversation window has focus
430 *
431 * @param win The window.
432 *
433 * @return @c TRUE if the conversation window has focus, @c FALSE if
434 * it does not or the UI does not have a concept of window focus
435 */
436 gboolean gaim_conv_window_has_focus(GaimConvWindow *win);
437
438 /**
439 * Returns the list of conversations in the specified window.
440 *
441 * @param win The window.
442 *
443 * @return The list of conversations.
444 */
445 GList *gaim_conv_window_get_conversations(const GaimConvWindow *win);
446
447 /**
448 * Returns a list of all windows.
449 *
450 * @return A list of windows.
451 */
452 GList *gaim_get_windows(void);
453
454 /**
455 * Returns the first window containing a conversation of the specified type.
456 *
457 * @param type The conversation type.
458 *
459 * @return The window if found, or @c NULL if not found.
460 */
461 GaimConvWindow *gaim_get_first_window_with_type(GaimConversationType type);
462 /**
463 * Returns the last window containing a conversation of the specified type.
464 *
465 * @param type The conversation type.
466 *
467 * @return The window if found, or @c NULL if not found.
468 */
469 GaimConvWindow *gaim_get_last_window_with_type(GaimConversationType type);
470
471 /*@}*/
472 271
473 /**************************************************************************/ 272 /**************************************************************************/
474 /** @name Conversation API */ 273 /** @name Conversation API */
475 /**************************************************************************/ 274 /**************************************************************************/
476 /*@{*/ 275 /*@{*/
517 */ 316 */
518 void gaim_conversation_set_ui_ops(GaimConversation *conv, 317 void gaim_conversation_set_ui_ops(GaimConversation *conv,
519 GaimConversationUiOps *ops); 318 GaimConversationUiOps *ops);
520 319
521 /** 320 /**
321 * Sets the default conversation UI operations structure.
322 *
323 * @param ops The UI conversation operations structure.
324 */
325 void gaim_conversations_set_ui_ops(GaimConversationUiOps *ops);
326
327 /**
522 * Returns the specified conversation's UI operations structure. 328 * Returns the specified conversation's UI operations structure.
523 * 329 *
524 * @param conv The conversation. 330 * @param conv The conversation.
525 * 331 *
526 * @return The operations structure. 332 * @return The operations structure.
648 * @param conv The conversation. 454 * @param conv The conversation.
649 * 455 *
650 * @return The conversation's send history. 456 * @return The conversation's send history.
651 */ 457 */
652 GList *gaim_conversation_get_send_history(const GaimConversation *conv); 458 GList *gaim_conversation_get_send_history(const GaimConversation *conv);
653
654 /**
655 * Returns the specified conversation's parent window.
656 *
657 * @param conv The conversation.
658 *
659 * @return The conversation's parent window.
660 */
661 GaimConvWindow *gaim_conversation_get_window(const GaimConversation *conv);
662 459
663 /** 460 /**
664 * Returns the specified conversation's IM-specific data. 461 * Returns the specified conversation's IM-specific data.
665 * 462 *
666 * If the conversation type is not GAIM_CONV_TYPE_IM, this will return @c NULL. 463 * If the conversation type is not GAIM_CONV_TYPE_IM, this will return @c NULL.
778 575
779 /** 576 /**
780 Get the features supported by the given conversation. 577 Get the features supported by the given conversation.
781 @param conv The conversation 578 @param conv The conversation
782 */ 579 */
783 GaimConnectionFlags gaim_conversation_get_features(GaimConversation *conv); 580 GaimConnectionFlags gaim_conversation_get_features(GaimConversation *conv);
784
785
786 /**
787 * Updates the progress bar on a conversation window
788 * (if one exists in the UI).
789 *
790 * This is used for loading images typically.
791 *
792 * @param conv The conversation.
793 * @param percent The percentage.
794 */
795 void gaim_conversation_update_progress(GaimConversation *conv, float percent);
796 581
797 /** 582 /**
798 * Determines if a conversation has focus 583 * Determines if a conversation has focus
799 * 584 *
800 * @param conv The conversation. 585 * @param conv The conversation.
959 const char *message, GaimMessageFlags flags, 744 const char *message, GaimMessageFlags flags,
960 time_t mtime); 745 time_t mtime);
961 746
962 /** 747 /**
963 * Presents an IM-error to the user 748 * Presents an IM-error to the user
964 * 749 *
965 * This is a helper function to find a conversation, write an error to it, and 750 * This is a helper function to find a conversation, write an error to it, and
966 * raise the window. If a conversation with this user doesn't already exist, 751 * raise the window. If a conversation with this user doesn't already exist,
967 * the function will return FALSE and the calling function can attempt to present 752 * the function will return FALSE and the calling function can attempt to present
968 * the error another way (gaim_notify_error, most likely) 753 * the error another way (gaim_notify_error, most likely)
969 * 754 *
1373 void gaim_conv_chat_cb_destroy(GaimConvChatBuddy *cb); 1158 void gaim_conv_chat_cb_destroy(GaimConvChatBuddy *cb);
1374 1159
1375 /*@}*/ 1160 /*@}*/
1376 1161
1377 /**************************************************************************/ 1162 /**************************************************************************/
1378 /** @name Conversation Placement API */
1379 /**************************************************************************/
1380 /*@{*/
1381
1382 /**
1383 * Returns a GList containing the IDs and Names of the registered placement
1384 * functions.
1385 *
1386 * @return The list of IDs and names.
1387 */
1388 GList *gaim_conv_placement_get_options(void);
1389
1390 /**
1391 * Adds a conversation placement function to the list of possible functions.
1392 *
1393 * @param id The unique ID of the placement function.
1394 * @param name The name of the function.
1395 * @param fnc A pointer to the function.
1396 */
1397 void gaim_conv_placement_add_fnc(const char *id, const char *name,
1398 GaimConvPlacementFunc fnc);
1399
1400 /**
1401 * Removes a conversation placement function from the list of possible
1402 * functions.
1403 *
1404 * @param id The id of the function.
1405 */
1406 void gaim_conv_placement_remove_fnc(const char *id);
1407
1408 /**
1409 * Returns the name of the conversation placement function at the
1410 * specified id.
1411 *
1412 * @param id The id.
1413 *
1414 * @return The name of the function, or @c NULL if this id is invalid.
1415 */
1416 const char *gaim_conv_placement_get_name(const char *id);
1417
1418 /**
1419 * Returns a pointer to the conversation placement function at the
1420 * specified id.
1421 *
1422 * @param id The id.
1423 *
1424 * @return A pointer to the function.
1425 */
1426 GaimConvPlacementFunc gaim_conv_placement_get_fnc(const char *id);
1427
1428 /**
1429 * Sets the current conversation placement function.
1430 *
1431 * @param func The new conversation placement function.
1432 */
1433 void gaim_conv_placement_set_current_func(GaimConvPlacementFunc func);
1434
1435 /**
1436 * Returns the current conversation placement function.
1437 *
1438 * @return The current conversation placement function.
1439 */
1440 GaimConvPlacementFunc gaim_conv_placement_get_current_func(void);
1441
1442 /*@}*/
1443
1444 /**************************************************************************/
1445 /** @name UI Registration Functions */
1446 /**************************************************************************/
1447 /*@{*/
1448
1449 /**
1450 * Sets the UI operations structure to be used in all gaim conversation
1451 * windows.
1452 *
1453 * @param ops The UI operations structure.
1454 */
1455 void gaim_conversations_set_win_ui_ops(GaimConvWindowUiOps *ops);
1456
1457 /**
1458 * Returns the gaim window UI operations structure to be used in
1459 * new windows.
1460 *
1461 * @return A filled-out GaimConvWindowUiOps structure.
1462 */
1463 GaimConvWindowUiOps *gaim_conversations_get_win_ui_ops(void);
1464
1465
1466 /*@}*/
1467
1468 /**************************************************************************/
1469 /** @name Conversations Subsystem */ 1163 /** @name Conversations Subsystem */
1470 /**************************************************************************/ 1164 /**************************************************************************/
1471 /*@{*/ 1165 /*@{*/
1472 1166
1473 /** 1167 /**

mercurial