| 6 |
6 |
| 7 #include "gntgaim.h" |
7 #include "gntgaim.h" |
| 8 #include "gntbox.h" |
8 #include "gntbox.h" |
| 9 #include "gnttree.h" |
9 #include "gnttree.h" |
| 10 |
10 |
| |
11 #include "gntblist.h" |
| |
12 |
| 11 #define TAB_SIZE 3 |
13 #define TAB_SIZE 3 |
| 12 |
|
| 13 /** |
|
| 14 * NOTES: |
|
| 15 * |
|
| 16 * 1. signal-callbacks should check for module_in_focus() before redrawing anything. |
|
| 17 * 2. call module_lost_focus() before opening a new window, and module_gained_focus() when |
|
| 18 * the new window is closed. This is to make sure the signal callbacks don't screw up |
|
| 19 * the display. |
|
| 20 */ |
|
| 21 |
|
| 22 static GaimBlistUiOps blist_ui_ops = |
|
| 23 { |
|
| 24 NULL, |
|
| 25 NULL, |
|
| 26 NULL, |
|
| 27 NULL, /* This doesn't do crap */ |
|
| 28 NULL, |
|
| 29 NULL, |
|
| 30 NULL, |
|
| 31 NULL, |
|
| 32 NULL, |
|
| 33 NULL |
|
| 34 }; |
|
| 35 |
14 |
| 36 typedef struct |
15 typedef struct |
| 37 { |
16 { |
| 38 GntWidget *window; |
17 GntWidget *window; |
| 39 GntWidget *tree; |
18 GntWidget *tree; |
| 40 } GGBlist; |
19 } GGBlist; |
| 41 |
20 |
| 42 GGBlist *ggblist; |
21 GGBlist *ggblist; |
| |
22 |
| |
23 static void |
| |
24 new_node(GaimBlistNode *node) |
| |
25 { |
| |
26 } |
| |
27 |
| |
28 static void |
| |
29 node_update(GaimBuddyList *list, GaimBlistNode *node) |
| |
30 { |
| |
31 } |
| |
32 |
| |
33 static void |
| |
34 node_remove(GaimBuddyList *list, GaimBlistNode *node) |
| |
35 { |
| |
36 } |
| |
37 |
| |
38 static void |
| |
39 new_list(GaimBuddyList *list) |
| |
40 { |
| |
41 if (ggblist == NULL) |
| |
42 gg_blist_init(); |
| |
43 list->ui_data = ggblist; |
| |
44 } |
| |
45 |
| |
46 static GaimBlistUiOps blist_ui_ops = |
| |
47 { |
| |
48 new_list, |
| |
49 new_node, |
| |
50 NULL, |
| |
51 node_update, /* This doesn't do crap */ |
| |
52 node_remove, |
| |
53 NULL, |
| |
54 NULL, |
| |
55 NULL, |
| |
56 NULL, |
| |
57 NULL |
| |
58 }; |
| 43 |
59 |
| 44 static gpointer |
60 static gpointer |
| 45 gg_blist_get_handle() |
61 gg_blist_get_handle() |
| 46 { |
62 { |
| 47 static int handle; |
63 static int handle; |
| 59 group->name, NULL, NULL); |
75 group->name, NULL, NULL); |
| 60 node->ui_data = GINT_TO_POINTER(TRUE); |
76 node->ui_data = GINT_TO_POINTER(TRUE); |
| 61 } |
77 } |
| 62 |
78 |
| 63 static void |
79 static void |
| 64 buddy_signed_on(GaimBuddy *buddy, GGBlist *ggblist) |
80 add_buddy(GaimBuddy *buddy, GGBlist *ggblist) |
| 65 { |
81 { |
| 66 GaimGroup *group = gaim_buddy_get_group(buddy); |
|
| 67 char *text; |
82 char *text; |
| |
83 GaimGroup *group; |
| |
84 GaimBlistNode *node = (GaimBlistNode *)buddy; |
| |
85 if (node->ui_data) |
| |
86 return; |
| 68 |
87 |
| |
88 group = gaim_buddy_get_group(buddy); |
| 69 add_group(group, ggblist); |
89 add_group(group, ggblist); |
| 70 |
90 |
| 71 text = g_strdup_printf("%*s%s", TAB_SIZE, "", gaim_buddy_get_alias(buddy)); |
91 text = g_strdup_printf("%*s%s", TAB_SIZE, "", gaim_buddy_get_alias(buddy)); |
| 72 gnt_tree_add_row_after(GNT_TREE(ggblist->tree), buddy, text, group, NULL); |
92 gnt_tree_add_row_after(GNT_TREE(ggblist->tree), buddy, text, group, NULL); |
| 73 g_free(text); |
93 g_free(text); |
| |
94 } |
| |
95 |
| |
96 static void |
| |
97 buddy_signed_on(GaimBuddy *buddy, GGBlist *ggblist) |
| |
98 { |
| |
99 add_buddy(buddy, ggblist); |
| 74 } |
100 } |
| 75 |
101 |
| 76 static void |
102 static void |
| 77 buddy_signed_off(GaimBuddy *buddy, GGBlist *ggblist) |
103 buddy_signed_off(GaimBuddy *buddy, GGBlist *ggblist) |
| 78 { |
104 { |
| 90 gnt_widget_set_focus(widget, FALSE); |
116 gnt_widget_set_focus(widget, FALSE); |
| 91 } |
117 } |
| 92 |
118 |
| 93 void gg_blist_init() |
119 void gg_blist_init() |
| 94 { |
120 { |
| 95 ggblist = g_new0(GGBlist, 1); |
121 if (ggblist == NULL) |
| |
122 ggblist = g_new0(GGBlist, 1); |
| 96 |
123 |
| 97 ggblist->window = gnt_box_new(FALSE, FALSE); |
124 ggblist->window = gnt_box_new(FALSE, FALSE); |
| |
125 GNT_WIDGET_UNSET_FLAGS(ggblist->window, GNT_WIDGET_NO_BORDER | GNT_WIDGET_NO_SHADOW); |
| 98 gnt_box_set_title(GNT_BOX(ggblist->window), _("Buddy List")); |
126 gnt_box_set_title(GNT_BOX(ggblist->window), _("Buddy List")); |
| |
127 gnt_box_set_pad(GNT_BOX(ggblist->window), 0); |
| 99 |
128 |
| 100 ggblist->tree = gnt_tree_new(); |
129 ggblist->tree = gnt_tree_new(); |
| 101 gnt_widget_set_size(ggblist->tree, 25, getmaxy(stdscr)); |
130 GNT_WIDGET_SET_FLAGS(ggblist->tree, GNT_WIDGET_NO_BORDER); |
| |
131 gnt_widget_set_size(ggblist->tree, 25, getmaxy(stdscr) - 2); |
| 102 |
132 |
| 103 gnt_box_add_widget(GNT_BOX(ggblist->window), ggblist->tree); |
133 gnt_box_add_widget(GNT_BOX(ggblist->window), ggblist->tree); |
| 104 gnt_widget_show(ggblist->window); |
134 gnt_widget_show(ggblist->window); |
| 105 |
135 |
| 106 gaim_signal_connect(gaim_blist_get_handle(), "buddy-signed-on", gg_blist_get_handle(), |
136 gaim_signal_connect(gaim_blist_get_handle(), "buddy-signed-on", gg_blist_get_handle(), |