new option to be able to sort contacts by show
This commit is contained in:
		
							parent
							
								
									127142c1fe
								
							
						
					
					
						commit
						560f0665f8
					
				
					 4 changed files with 57 additions and 5 deletions
				
			
		| 
						 | 
					@ -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' ],
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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')])
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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():
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue