new option to be able to sort contacts by show

This commit is contained in:
Yann Leboulanger 2005-05-29 18:41:13 +00:00
parent 127142c1fe
commit 560f0665f8
4 changed files with 57 additions and 5 deletions

View File

@ -72,6 +72,7 @@ class Config:
'userfont': [ opt_str, 'Sans 10' ], 'userfont': [ opt_str, 'Sans 10' ],
'saveposition': [ opt_bool, True ], 'saveposition': [ opt_bool, True ],
'mergeaccounts': [ opt_bool, False ], 'mergeaccounts': [ opt_bool, False ],
'sort_by_show': [ opt_bool, True ],
'usetabbedchat': [ opt_bool, True ], 'usetabbedchat': [ opt_bool, True ],
'use_speller': [ opt_bool, False ], 'use_speller': [ opt_bool, False ],
'print_time': [ opt_str, 'always' ], 'print_time': [ opt_str, 'always' ],

View File

@ -106,6 +106,10 @@ class Preferences_window:
st = gajim.config.get('mergeaccounts') st = gajim.config.get('mergeaccounts')
self.xml.get_widget('merge_checkbutton').set_active(st) 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 #Use emoticons
st = gajim.config.get('useemoticons') st = gajim.config.get('useemoticons')
self.xml.get_widget('use_emoticons_checkbutton').set_active(st) 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.regroup = gajim.config.get('mergeaccounts')
self.plugin.roster.draw_roster() 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): def on_use_emoticons_checkbutton_toggled(self, widget):
self.on_checkbutton_toggled(widget, 'useemoticons', self.on_checkbutton_toggled(widget, 'useemoticons',
[self.xml.get_widget('add_remove_emoticons_button')]) [self.xml.get_widget('add_remove_emoticons_button')])

View File

@ -2968,7 +2968,6 @@
<child> <child>
<widget class="GtkCheckButton" id="trayicon_checkbutton"> <widget class="GtkCheckButton" id="trayicon_checkbutton">
<property name="visible">False</property>
<property name="tooltip" translatable="yes">If checked, Gajim will also have a trayicon</property> <property name="tooltip" translatable="yes">If checked, Gajim will also have a trayicon</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="label" translatable="yes">_Icon in systray (aka. notification area)</property> <property name="label" translatable="yes">_Icon in systray (aka. notification area)</property>
@ -3029,6 +3028,26 @@
</packing> </packing>
</child> </child>
<child>
<widget class="GtkCheckButton" id="sort_by_show_checkbutton">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">Sort contacts by status</property>
<property name="use_underline">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<property name="active">False</property>
<property name="inconsistent">False</property>
<property name="draw_indicator">True</property>
<signal name="toggled" handler="on_sort_by_show_checkbutton_toggled" last_modification_time="Sun, 29 May 2005 18:26:18 GMT"/>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
<child> <child>
<widget class="GtkHBox" id="hbox2947"> <widget class="GtkHBox" id="hbox2947">
<property name="visible">True</property> <property name="visible">True</property>
@ -4629,7 +4648,6 @@
<child> <child>
<widget class="GtkHBox" id="soundplayer_hbox"> <widget class="GtkHBox" id="soundplayer_hbox">
<property name="visible">False</property>
<property name="homogeneous">False</property> <property name="homogeneous">False</property>
<property name="spacing">5</property> <property name="spacing">5</property>
@ -5372,7 +5390,6 @@
<child> <child>
<widget class="GtkFrame" id="links_frame"> <widget class="GtkFrame" id="links_frame">
<property name="visible">False</property>
<property name="label_xalign">0</property> <property name="label_xalign">0</property>
<property name="label_yalign">0.5</property> <property name="label_yalign">0.5</property>
<property name="shadow_type">GTK_SHADOW_ETCHED_IN</property> <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>

View File

@ -1310,18 +1310,44 @@ class Roster_window:
renderer.set_property('font', gajim.config.get('userfont')) renderer.set_property('font', gajim.config.get('userfont'))
renderer.set_property('xpad', 8) 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): def compareIters(self, model, iter1, iter2, data = None):
'''Compare two iters to sort them''' '''Compare two iters to sort them'''
name1 = model.get_value(iter1, 1) name1 = model.get_value(iter1, 1)
name2 = model.get_value(iter2, 1) name2 = model.get_value(iter2, 1)
if not name1 or not name2: if not name1 or not name2:
return 0 return 0
type = model.get_value(iter1, 2) type1 = model.get_value(iter1, 2)
if type == 'group': type2 = model.get_value(iter2, 2)
if type1 == 'group':
if name1 == 'Transports': if name1 == 'Transports':
return 1 return 1
if name2 == 'Transports': if name2 == 'Transports':
return -1 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(): if name1.lower() < name2.lower():
return -1 return -1
if name2.lower < name1.lower(): if name2.lower < name1.lower():