Mercurial > pidgin
diff console/gntblist.c @ 13850:0e1e59770cb0
[gaim-migrate @ 16308]
This is my first commit here. So don't yell at me if things get borked.
Also, I haven't looked at the auto-thingies yet. So don't puke at the
Makefiles.
Files in console/libgnt/ are for the 'Gaim/GObjectified Ncurses Toolkit'
library. Files in console/ uses libgaim and libgnt. Currently, only the
buddylist-ui is 'functional', ie. the buddy-list updates when someone
logs on or logs off. It still needs a lot of work.
committer: Tailor Script <tailor@pidgin.im>
author | Sadrul Habib Chowdhury <imadil@gmail.com> |
---|---|
date | Thu, 22 Jun 2006 08:33:54 +0000 |
parents | |
children | bbf0470cb348 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/console/gntblist.c Thu Jun 22 08:33:54 2006 +0000 @@ -0,0 +1,121 @@ +#include <gaim/account.h> +#include <gaim/blist.h> +#include <signal.h> +#include <gaim/util.h> +#include <gaim/server.h> + +#include "gntgaim.h" +#include "gntbox.h" +#include "gnttree.h" + +#define TAB_SIZE 3 + +/** + * NOTES: + * + * 1. signal-callbacks should check for module_in_focus() before redrawing anything. + * 2. call module_lost_focus() before opening a new window, and module_gained_focus() when + * the new window is closed. This is to make sure the signal callbacks don't screw up + * the display. + */ + +static GaimBlistUiOps blist_ui_ops = +{ + NULL, + NULL, + NULL, + NULL, /* This doesn't do crap */ + NULL, + NULL, + NULL, + NULL, + NULL, + NULL +}; + +typedef struct +{ + GntWidget *window; + GntWidget *tree; +} GGBlist; + +GGBlist *ggblist; + +static gpointer +gg_blist_get_handle() +{ + static int handle; + + return &handle; +} + +static void +add_group(GaimGroup *group, GGBlist *ggblist) +{ + GaimBlistNode *node = (GaimBlistNode *)group; + if (node->ui_data) + return; + gnt_tree_add_row_after(GNT_TREE(ggblist->tree), group, + group->name, NULL, NULL); + node->ui_data = GINT_TO_POINTER(TRUE); +} + +static void +buddy_signed_on(GaimBuddy *buddy, GGBlist *ggblist) +{ + GaimGroup *group = gaim_buddy_get_group(buddy); + char *text; + + add_group(group, ggblist); + + text = g_strdup_printf("%*s%s", TAB_SIZE, "", gaim_buddy_get_alias(buddy)); + gnt_tree_add_row_after(GNT_TREE(ggblist->tree), buddy, text, group, NULL); + g_free(text); +} + +static void +buddy_signed_off(GaimBuddy *buddy, GGBlist *ggblist) +{ + gnt_tree_remove(GNT_TREE(ggblist->tree), buddy); +} + +GaimBlistUiOps *gg_get_blist_ui_ops() +{ + return &blist_ui_ops; +} + +static void +selection_activate(GntWidget *widget, GGBlist *ggblist) +{ + gnt_widget_set_focus(widget, FALSE); +} + +void gg_blist_init() +{ + ggblist = g_new0(GGBlist, 1); + + ggblist->window = gnt_box_new(FALSE, FALSE); + gnt_box_set_title(GNT_BOX(ggblist->window), _("Buddy List")); + + ggblist->tree = gnt_tree_new(); + gnt_widget_set_size(ggblist->tree, 25, getmaxy(stdscr)); + + gnt_box_add_widget(GNT_BOX(ggblist->window), ggblist->tree); + gnt_widget_show(ggblist->window); + + gaim_signal_connect(gaim_blist_get_handle(), "buddy-signed-on", gg_blist_get_handle(), + GAIM_CALLBACK(buddy_signed_on), ggblist); + gaim_signal_connect(gaim_blist_get_handle(), "buddy-signed-off", gg_blist_get_handle(), + GAIM_CALLBACK(buddy_signed_off), ggblist); + + g_signal_connect(G_OBJECT(ggblist->tree), "activate", G_CALLBACK(selection_activate), ggblist); + + /*gaim_signal_connect(gaim_conversations_get_handle(), "received-im-msg", gg_blist_get_handle(),*/ + /*GAIM_CALLBACK(received_im_msg), list);*/ + /*gaim_signal_connect(gaim_conversations_get_handle(), "sent-im-msg", gg_blist_get_handle(),*/ + /*GAIM_CALLBACK(sent_im_msg), NULL);*/ + + /*gaim_signal_connect(gaim_conversations_get_handle(), "received-chat-msg", gg_blist_get_handle(),*/ + /*GAIM_CALLBACK(received_chat_msg), list);*/ +} +