comparison finch/gntblist.c @ 21695:52bbf38a1cd2

Refactor the code a little bit.
author Sadrul Habib Chowdhury <imadil@gmail.com>
date Fri, 30 Nov 2007 18:58:56 +0000
parents 2de3a2de5f13
children e3e64d1e4869
comparison
equal deleted inserted replaced
21694:2de3a2de5f13 21695:52bbf38a1cd2
129 static int color_available; 129 static int color_available;
130 static int color_away; 130 static int color_away;
131 static int color_offline; 131 static int color_offline;
132 static int color_idle; 132 static int color_idle;
133 133
134 static int
135 get_display_color(PurpleBlistNode *node)
136 {
137 PurpleBuddy *buddy;
138 int color = 0;
139
140 if (PURPLE_BLIST_NODE_IS_CONTACT(node))
141 node = (PurpleBlistNode*)purple_contact_get_priority_buddy((PurpleContact*)node);
142 if (!PURPLE_BLIST_NODE_IS_BUDDY(node))
143 return 0;
144
145 buddy = (PurpleBuddy*)node;
146 if (purple_presence_is_idle(purple_buddy_get_presence(buddy))) {
147 color = color_idle;
148 } else if (purple_presence_is_available(purple_buddy_get_presence(buddy))) {
149 color = color_available;
150 } else if (purple_presence_is_online(purple_buddy_get_presence(buddy)) &&
151 !purple_presence_is_available(purple_buddy_get_presence(buddy))) {
152 color = color_away;
153 } else if (!purple_presence_is_online(purple_buddy_get_presence(buddy))) {
154 color = color_offline;
155 }
156
157 return color;
158 }
159
134 static gboolean 160 static gboolean
135 is_contact_online(PurpleContact *contact) 161 is_contact_online(PurpleContact *contact)
136 { 162 {
137 PurpleBlistNode *node; 163 PurpleBlistNode *node;
138 for (node = ((PurpleBlistNode*)contact)->child; node; node = node->next) { 164 for (node = ((PurpleBlistNode*)contact)->child; node; node = node->next) {
233 259
234 if (node->ui_data != NULL) { 260 if (node->ui_data != NULL) {
235 gnt_tree_change_text(GNT_TREE(ggblist->tree), node, 261 gnt_tree_change_text(GNT_TREE(ggblist->tree), node,
236 0, get_display_name(node)); 262 0, get_display_name(node));
237 gnt_tree_sort_row(GNT_TREE(ggblist->tree), node); 263 gnt_tree_sort_row(GNT_TREE(ggblist->tree), node);
264 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), node, get_display_color(node));
238 } 265 }
239 266
240 if (PURPLE_BLIST_NODE_IS_BUDDY(node)) { 267 if (PURPLE_BLIST_NODE_IS_BUDDY(node)) {
241 PurpleBuddy *buddy = (PurpleBuddy*)node; 268 PurpleBuddy *buddy = (PurpleBuddy*)node;
242 if (purple_account_is_connected(buddy->account) && 269 if (purple_account_is_connected(buddy->account) &&
586 PurpleBlistNode *node = (PurpleBlistNode*)contact; 613 PurpleBlistNode *node = (PurpleBlistNode*)contact;
587 const char *name; 614 const char *name;
588 615
589 if (node->ui_data) 616 if (node->ui_data)
590 return; 617 return;
591 618
592 name = get_display_name(node); 619 name = get_display_name(node);
593 if (name == NULL) 620 if (name == NULL)
594 return; 621 return;
595 622
596 group = (PurpleGroup*)node->parent; 623 group = (PurpleGroup*)node->parent;
597 add_node((PurpleBlistNode*)group, ggblist); 624 add_node((PurpleBlistNode*)group, ggblist);
598 625
599 node->ui_data = gnt_tree_add_row_after(GNT_TREE(ggblist->tree), contact, 626 node->ui_data = gnt_tree_add_row_after(GNT_TREE(ggblist->tree), contact,
600 gnt_tree_create_row(GNT_TREE(ggblist->tree), name), 627 gnt_tree_create_row(GNT_TREE(ggblist->tree), name),
606 static void 633 static void
607 add_buddy(PurpleBuddy *buddy, FinchBlist *ggblist) 634 add_buddy(PurpleBuddy *buddy, FinchBlist *ggblist)
608 { 635 {
609 PurpleContact *contact; 636 PurpleContact *contact;
610 PurpleBlistNode *node = (PurpleBlistNode *)buddy; 637 PurpleBlistNode *node = (PurpleBlistNode *)buddy;
638 int color = 0;
611 if (node->ui_data) 639 if (node->ui_data)
612 return; 640 return;
613 641
614 if (!purple_account_is_connected(buddy->account)) 642 if (!purple_account_is_connected(buddy->account))
615 return; 643 return;
621 649
622 node->ui_data = gnt_tree_add_row_after(GNT_TREE(ggblist->tree), buddy, 650 node->ui_data = gnt_tree_add_row_after(GNT_TREE(ggblist->tree), buddy,
623 gnt_tree_create_row(GNT_TREE(ggblist->tree), get_display_name(node)), 651 gnt_tree_create_row(GNT_TREE(ggblist->tree), get_display_name(node)),
624 contact, NULL); 652 contact, NULL);
625 653
626 if (purple_presence_is_idle(purple_buddy_get_presence(buddy))) { 654 color = get_display_color((PurpleBlistNode*)buddy);
627 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), buddy, color_idle); 655 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), buddy, color);
628 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), contact, color_idle); 656 if (buddy == purple_contact_get_priority_buddy(contact))
629 } else if (purple_presence_is_available(purple_buddy_get_presence(buddy)) && color_available) { 657 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), contact, color);
630 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), buddy, color_available);
631 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), contact, color_available);
632 } else if (purple_presence_is_online(purple_buddy_get_presence(buddy)) &&
633 !purple_presence_is_available(purple_buddy_get_presence(buddy)) && color_away) {
634 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), buddy, color_away);
635 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), contact, color_away);
636 } else if (!purple_presence_is_online(purple_buddy_get_presence(buddy)) && color_offline) {
637 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), buddy, color_offline);
638 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), contact, color_offline);
639 }
640 } 658 }
641 659
642 #if 0 660 #if 0
643 static void 661 static void
644 buddy_signed_on(PurpleBuddy *buddy, FinchBlist *ggblist) 662 buddy_signed_on(PurpleBuddy *buddy, FinchBlist *ggblist)
1555 static void 1573 static void
1556 update_buddy_display(PurpleBuddy *buddy, FinchBlist *ggblist) 1574 update_buddy_display(PurpleBuddy *buddy, FinchBlist *ggblist)
1557 { 1575 {
1558 PurpleContact *contact; 1576 PurpleContact *contact;
1559 GntTextFormatFlags bflag = 0, cflag = 0; 1577 GntTextFormatFlags bflag = 0, cflag = 0;
1560 1578 int color = 0;
1579
1561 contact = purple_buddy_get_contact(buddy); 1580 contact = purple_buddy_get_contact(buddy);
1562 1581
1563 gnt_tree_change_text(GNT_TREE(ggblist->tree), buddy, 0, get_display_name((PurpleBlistNode*)buddy)); 1582 gnt_tree_change_text(GNT_TREE(ggblist->tree), buddy, 0, get_display_name((PurpleBlistNode*)buddy));
1564 gnt_tree_change_text(GNT_TREE(ggblist->tree), contact, 0, get_display_name((PurpleBlistNode*)contact)); 1583 gnt_tree_change_text(GNT_TREE(ggblist->tree), contact, 0, get_display_name((PurpleBlistNode*)contact));
1565 1584
1569 cflag |= GNT_TEXT_FLAG_BOLD; 1588 cflag |= GNT_TEXT_FLAG_BOLD;
1570 1589
1571 if (ggblist->tnode == (PurpleBlistNode*)buddy) 1590 if (ggblist->tnode == (PurpleBlistNode*)buddy)
1572 draw_tooltip(ggblist); 1591 draw_tooltip(ggblist);
1573 1592
1574 if (purple_presence_is_idle(purple_buddy_get_presence(buddy))) { 1593 color = get_display_color((PurpleBlistNode*)buddy);
1575 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), buddy, color_idle); 1594 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), buddy, color);
1576 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), contact, color_idle); 1595 if (buddy == purple_contact_get_priority_buddy(contact))
1577 if (buddy == purple_contact_get_priority_buddy(contact)) 1596 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), contact, color);
1578 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), contact, color_idle); 1597
1579 } else if (purple_presence_is_available(purple_buddy_get_presence(buddy)) && color_available) {
1580 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), buddy, color_available);
1581 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), contact, color_available);
1582 if (buddy == purple_contact_get_priority_buddy(contact))
1583 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), contact, color_available);
1584 } else if (purple_presence_is_online(purple_buddy_get_presence(buddy)) &&
1585 !purple_presence_is_available(purple_buddy_get_presence(buddy)) && color_away) {
1586 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), buddy, color_away);
1587 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), contact, color_away);
1588 if (buddy == purple_contact_get_priority_buddy(contact))
1589 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), contact, color_away);
1590 } else if (!purple_presence_is_online(purple_buddy_get_presence(buddy)) && color_offline) {
1591 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), buddy, color_offline);
1592 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), contact, color_offline);
1593 if (buddy == purple_contact_get_priority_buddy(contact))
1594 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), contact, color_offline);
1595 }
1596 gnt_tree_set_row_flags(GNT_TREE(ggblist->tree), buddy, bflag); 1598 gnt_tree_set_row_flags(GNT_TREE(ggblist->tree), buddy, bflag);
1597 if (buddy == purple_contact_get_priority_buddy(contact)) 1599 if (buddy == purple_contact_get_priority_buddy(contact))
1598 gnt_tree_set_row_flags(GNT_TREE(ggblist->tree), contact, cflag); 1600 gnt_tree_set_row_flags(GNT_TREE(ggblist->tree), contact, cflag);
1599 1601
1600 if (buddy != purple_contact_get_priority_buddy(contact)) 1602 if (buddy != purple_contact_get_priority_buddy(contact))