From 4fda072f0f07005be7712b0bb724e2e85036d412 Mon Sep 17 00:00:00 2001
From: Nikos Kouremenos <kourem@gmail.com>
Date: Thu, 5 Oct 2006 00:06:57 +0000
Subject: [PATCH] make tooltip work for the new api too

---
 src/common/helpers.py | 83 ++++++++++++++++++++++++++++++++++++++
 src/tooltips.py       | 92 +++++--------------------------------------
 2 files changed, 92 insertions(+), 83 deletions(-)

diff --git a/src/common/helpers.py b/src/common/helpers.py
index 96a1b790ec..61235c1a0a 100644
--- a/src/common/helpers.py
+++ b/src/common/helpers.py
@@ -28,8 +28,10 @@ from encodings.punycode import punycode_encode
 
 import gajim
 from i18n import Q_
+from i18n import ngettext
 from xmpp_stringprep import nodeprep, resourceprep, nameprep
 
+
 try:
 	import winsound # windows-only built-in module for playing wav
 	import win32api
@@ -814,3 +816,84 @@ def get_chat_control(account, contact):
 	highest_contact.resource:
 		return None
 	return gajim.interface.msg_win_mgr.get_control(contact.jid, account)
+
+def get_notification_icon_tooltip_text():
+	text = None
+	unread_chat = gajim.events.get_nb_events(types = ['printed_chat',
+		'chat'])
+	unread_single_chat = gajim.events.get_nb_events(types = ['normal'])
+	unread_gc = gajim.events.get_nb_events(types = ['printed_gc_msg',
+		'gc_msg'])
+	unread_pm = gajim.events.get_nb_events(types = ['printed_pm', 'pm'])
+
+	accounts = get_accounts_info()
+
+	if unread_chat or unread_single_chat or unread_gc or unread_pm:
+		text = 'Gajim '
+		awaiting_events = unread_chat + unread_single_chat + unread_gc + unread_pm
+		if awaiting_events == unread_chat or awaiting_events == unread_single_chat \
+			or awaiting_events == unread_gc or awaiting_events == unread_pm:
+			# This condition is like previous if but with xor... 
+			# Print in one line
+			text += '-'
+		else:
+			# Print in multiple lines
+			text += '\n   '
+		if unread_chat:
+			text += ngettext(
+				' %d unread message',
+				' %d unread messages',
+				unread_chat, unread_chat, unread_chat)
+			text += '\n   '
+		if unread_single_chat:
+			text += ngettext(
+				' %d unread single message',
+				' %d unread single messages',
+				unread_single_chat, unread_single_chat, unread_single_chat)
+			text += '\n   '
+		if unread_gc:
+			text += ngettext(
+				' %d unread group chat message',
+				' %d unread group chat messages',
+				unread_gc, unread_gc, unread_gc)
+			text += '\n   '
+		if unread_pm:
+			text += ngettext(
+				' %d unread private message',
+				' %d unread private messages',
+				unread_pm, unread_pm, unread_pm)
+			text += '\n   '
+		text = text[:-4] # remove latest '\n   '
+	elif len(accounts) > 1:
+		text = _('Gajim')
+	elif len(accounts) == 1:
+		message = accounts[0]['status_line']
+		message = gtkgui_helpers.reduce_chars_newlines(message, 100, 1)
+		message = gtkgui_helpers.escape_for_pango_markup(message)
+		text = _('Gajim - %s') % message
+	else:
+		text = _('Gajim - %s') % get_uf_show('offline')
+		
+	return text
+
+def get_accounts_info():
+	'''helper for notification icon tooltip'''
+	accounts = []
+	accounts_list = gajim.contacts.get_accounts()
+	accounts_list.sort()
+	for account in accounts_list:
+		status_idx = gajim.connections[account].connected
+		# uncomment the following to hide offline accounts
+		# if status_idx == 0: continue
+		status = gajim.SHOW_LIST[status_idx]
+		message = gajim.connections[account].status
+		single_line = get_uf_show(status)
+		if message is None:
+			message = ''
+		else:
+			message = message.strip()
+		if message != '':
+			single_line += ': ' + message
+		accounts.append({'name': account, 'status_line': single_line, 
+				'show': status, 'message': message})
+	return accounts
diff --git a/src/tooltips.py b/src/tooltips.py
index 574e94249d..8beebd8434 100644
--- a/src/tooltips.py
+++ b/src/tooltips.py
@@ -38,7 +38,7 @@ class BaseTooltip:
 				tooltip.hide_tooltip()
 		
 		* data - the text to be displayed  (extenders override this argument and 
-			dislpay more complex contents)
+			display more complex contents)
 		* widget_height  - the height of the widget on which we want to show tooltip
 		* widget_y_position - the vertical position of the widget on the screen
 		
@@ -135,7 +135,7 @@ class BaseTooltip:
 		preferred_y = widget_y_position + widget_height + 4
 		
 		self.preferred_position = [pointer_x, preferred_y]
-		self.widget_height =widget_height
+		self.widget_height = widget_height
 		self.win.ensure_style()
 		self.win.show_all()
 
@@ -222,27 +222,6 @@ class NotificationAreaTooltip(BaseTooltip, StatusTable):
 		BaseTooltip.__init__(self)
 		StatusTable.__init__(self)
 
-	def get_accounts_info(self):
-		accounts = []
-		accounts_list = gajim.contacts.get_accounts()
-		accounts_list.sort()
-		for account in accounts_list:
-			status_idx = gajim.connections[account].connected
-			# uncomment the following to hide offline accounts
-			# if status_idx == 0: continue
-			status = gajim.SHOW_LIST[status_idx]
-			message = gajim.connections[account].status
-			single_line = helpers.get_uf_show(status)
-			if message is None:
-				message = ''
-			else:
-				message = message.strip()
-			if message != '':
-				single_line += ': ' + message
-			accounts.append({'name': account, 'status_line': single_line, 
-					'show': status, 'message': message})
-		return accounts
-
 	def fill_table_with_accounts(self, accounts):
 		iconset = gajim.config.get('iconset')
 		if not iconset:
@@ -273,67 +252,15 @@ class NotificationAreaTooltip(BaseTooltip, StatusTable):
 	def populate(self, data):
 		self.create_window()
 		self.create_table()
-		self.hbox = gtk.HBox()
-		self.table.set_property('column-spacing', 1)
-		text, single_line = '', ''
-
-		unread_chat = gajim.events.get_nb_events(types = ['printed_chat', 'chat'])
-		unread_single_chat = gajim.events.get_nb_events(types = ['normal'])
-		unread_gc = gajim.events.get_nb_events(types = ['printed_gc_msg',
-			'gc_msg'])
-		unread_pm = gajim.events.get_nb_events(types = ['printed_pm', 'pm'])
-
-		accounts = self.get_accounts_info()
-
-		if unread_chat or unread_single_chat or unread_gc or unread_pm:
-			text = 'Gajim '
-			awaiting_events = unread_chat + unread_single_chat + unread_gc + unread_pm
-			if awaiting_events == unread_chat or awaiting_events == unread_single_chat \
-				or awaiting_events == unread_gc or awaiting_events == unread_pm:
-				# This condition is like previous if but with xor... 
-				# Print in one line
-				text += '-'
-			else:
-				# Print in multiple lines
-				text += '\n   '
-			if unread_chat:
-				text += i18n.ngettext(
-					' %d unread message',
-					' %d unread messages',
-					unread_chat, unread_chat, unread_chat)
-				text += '\n   '
-			if unread_single_chat:
-				text += i18n.ngettext(
-					' %d unread single message',
-					' %d unread single messages',
-					unread_single_chat, unread_single_chat, unread_single_chat)
-				text += '\n   '
-			if unread_gc:
-				text += i18n.ngettext(
-					' %d unread group chat message',
-					' %d unread group chat messages',
-					unread_gc, unread_gc, unread_gc)
-				text += '\n   '
-			if unread_pm:
-				text += i18n.ngettext(
-					' %d unread private message',
-					' %d unread private messages',
-					unread_pm, unread_pm, unread_pm)
-				text += '\n   '
-			text = text[:-4] # remove latest '\n   '
-		elif len(accounts) > 1:
-			text = _('Gajim')
-			self.current_current_row = 1
+		accounts = helpers.get_accounts_info()
+		if len(accounts) > 1:
 			self.table.resize(2, 1)
 			self.fill_table_with_accounts(accounts)
+		self.hbox = gtk.HBox()
+		self.table.set_property('column-spacing', 1)
 
-		elif len(accounts) == 1:
-			message = accounts[0]['status_line']
-			message = gtkgui_helpers.reduce_chars_newlines(message, 100, 1)
-			message = gtkgui_helpers.escape_for_pango_markup(message)
-			text = _('Gajim - %s') % message
-		else:
-			text = _('Gajim - %s') % helpers.get_uf_show('offline')
+		text = helpers.get_notification_icon_tooltip_text()
+		
 		self.add_text_row(text)
 		self.hbox.add(self.table)
 		self.win.add(self.hbox)
@@ -449,8 +376,7 @@ class RosterTooltip(NotificationAreaTooltip):
 		self.create_table()
 		if not contacts or len(contacts) == 0:
 			# Tooltip for merged accounts row
-			accounts = self.get_accounts_info()
-			self.current_current_row = 0
+			accounts = helpers.get_accounts_info()
 			self.table.resize(2, 1)
 			self.spacer_label = ''
 			self.fill_table_with_accounts(accounts)
-- 
GitLab