From 560f0665f86234203d86068ae07a0689ed166484 Mon Sep 17 00:00:00 2001 From: Yann Leboulanger Date: Sun, 29 May 2005 18:41:13 +0000 Subject: [PATCH] new option to be able to sort contacts by show --- src/common/config.py | 1 + src/config.py | 8 ++++++++ src/gtkgui.glade | 23 ++++++++++++++++++++--- src/roster_window.py | 30 ++++++++++++++++++++++++++++-- 4 files changed, 57 insertions(+), 5 deletions(-) diff --git a/src/common/config.py b/src/common/config.py index dbbac1e43..ace80e013 100644 --- a/src/common/config.py +++ b/src/common/config.py @@ -72,6 +72,7 @@ class Config: 'userfont': [ opt_str, 'Sans 10' ], 'saveposition': [ opt_bool, True ], 'mergeaccounts': [ opt_bool, False ], + 'sort_by_show': [ opt_bool, True ], 'usetabbedchat': [ opt_bool, True ], 'use_speller': [ opt_bool, False ], 'print_time': [ opt_str, 'always' ], diff --git a/src/config.py b/src/config.py index 427bd6a50..f2a417369 100644 --- a/src/config.py +++ b/src/config.py @@ -106,6 +106,10 @@ class Preferences_window: st = gajim.config.get('mergeaccounts') self.xml.get_widget('merge_checkbutton').set_active(st) + # Sort contacts by show + st = gajim.config.get('sort_by_show') + self.xml.get_widget('sort_by_show_checkbutton').set_active(st) + #Use emoticons st = gajim.config.get('useemoticons') self.xml.get_widget('use_emoticons_checkbutton').set_active(st) @@ -422,6 +426,10 @@ class Preferences_window: self.plugin.roster.regroup = gajim.config.get('mergeaccounts') self.plugin.roster.draw_roster() + def on_sort_by_show_checkbutton_toggled(self, widget): + self.on_checkbutton_toggled(widget, 'sort_by_show') + self.plugin.roster.draw_roster() + def on_use_emoticons_checkbutton_toggled(self, widget): self.on_checkbutton_toggled(widget, 'useemoticons', [self.xml.get_widget('add_remove_emoticons_button')]) diff --git a/src/gtkgui.glade b/src/gtkgui.glade index 200d1538b..1190241fe 100644 --- a/src/gtkgui.glade +++ b/src/gtkgui.glade @@ -2968,7 +2968,6 @@ - False If checked, Gajim will also have a trayicon True _Icon in systray (aka. notification area) @@ -3029,6 +3028,26 @@ + + + True + True + Sort contacts by status + True + GTK_RELIEF_NORMAL + True + False + False + True + + + + 0 + False + False + + + True @@ -4629,7 +4648,6 @@ - False False 5 @@ -5372,7 +5390,6 @@ - False 0 0.5 GTK_SHADOW_ETCHED_IN diff --git a/src/roster_window.py b/src/roster_window.py index 5f8c7ef0a..8ecfa59b9 100644 --- a/src/roster_window.py +++ b/src/roster_window.py @@ -1310,18 +1310,44 @@ class Roster_window: renderer.set_property('font', gajim.config.get('userfont')) renderer.set_property('xpad', 8) + def get_show(self, luser): + prio = luser[0].priority + show = luser[0].show + for u in luser: + if u.priority > prio: + prio = u.priority + show = u.show + return show + def compareIters(self, model, iter1, iter2, data = None): '''Compare two iters to sort them''' name1 = model.get_value(iter1, 1) name2 = model.get_value(iter2, 1) if not name1 or not name2: return 0 - type = model.get_value(iter1, 2) - if type == 'group': + type1 = model.get_value(iter1, 2) + type2 = model.get_value(iter2, 2) + if type1 == 'group': if name1 == 'Transports': return 1 if name2 == 'Transports': return -1 + if type1 == 'user' and type2 == 'user' and \ + gajim.config.get('sort_by_show'): + account = model.get_value(iter1, 4) + if account and model.get_value(iter2, 4) == account: + jid1 = model.get_value(iter1, 3) + jid2 = model.get_value(iter2, 3) + luser1 = self.contacts[account][jid1] + luser2 = self.contacts[account][jid2] + cshow = {'online':0, 'free': 1, 'away':2, 'xa':3, 'dnd':4, + 'invisible':5, 'offline':6, 'error':7} + show1 = cshow[self.get_show(luser1)] + show2 = cshow[self.get_show(luser2)] + if show1 < show2: + return -1 + elif show1 > show2: + return 1 if name1.lower() < name2.lower(): return -1 if name2.lower < name1.lower():