atom_window.py 4.14 KB
Newer Older
1 2 3 4 5
##	atom_window.py - a window to display atom entries from pubsub.
##
## For now greatly simplified, supports only simple feeds like the
## one from pubsub.com.
##
Yann Leboulanger's avatar
Yann Leboulanger committed
6
## Copyright (C) 2006-2007 Yann Leboulanger <asterix@lagaule.org>
7 8 9
## Copyright (C) 2007 Nikos Kouremenos <kourem@gmail.com>
## Copyright (C) 2006-2007 Liori (I think) put ur self here please
##
10 11 12
## This file is part of Gajim.
##
## Gajim is free software; you can redistribute it and/or modify
13
## it under the terms of the GNU General Public License as published
14
## by the Free Software Foundation; version 3 only.
15
##
16
## Gajim is distributed in the hope that it will be useful,
17 18 19 20
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
##
21 22 23
## You should have received a copy of the GNU General Public License
## along with Gajim.  If not, see <http://www.gnu.org/licenses/>.
##
24

25 26

import gtk
27
import gobject
28 29 30 31 32 33 34 35

import gtkgui_helpers
from common import helpers

class AtomWindow:
	window = None
	entries = []

36
	@classmethod
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
	def newAtomEntry(cls, entry):
		''' Queue new entry, open window if there's no one opened. '''
		cls.entries.append(entry)

		if cls.window is None:
			cls.window = AtomWindow()
		else:
			cls.window.updateCounter()

	def __init__(self):
		''' Create new window... only if we have anything to show. '''
		assert len(self.__class__.entries)>0

		self.entry = None	# the entry actually displayed

		self.xml = gtkgui_helpers.get_glade('atom_entry_window.glade')
		self.window = self.xml.get_widget('atom_entry_window')
		for name in ('new_entry_label', 'feed_title_label', 'feed_title_eventbox',
			'feed_tagline_label', 'entry_title_label', 'entry_title_eventbox',
			'last_modified_label', 'close_button', 'next_button'):
			self.__dict__[name] = self.xml.get_widget(name)

		self.displayNextEntry()

		self.xml.signal_autoconnect(self)
		self.window.show_all()

		self.entry_title_eventbox.add_events(gtk.gdk.BUTTON_PRESS_MASK)
		self.feed_title_eventbox.add_events(gtk.gdk.BUTTON_PRESS_MASK)

	def displayNextEntry(self):
		''' Get next entry from the queue and display it in the window. '''
		assert len(self.__class__.entries)>0

		newentry = self.__class__.entries.pop(0)
		
		# fill the fields
		if newentry.feed_link is not None:
			self.feed_title_label.set_markup(
				u'<span foreground="blue" underline="single">%s</span>' % \
77
				gobject.markup_escape_text(newentry.feed_title))
78 79
		else:
			self.feed_title_label.set_markup(
80
				gobject.markup_escape_text(newentry.feed_title))
81 82 83

		self.feed_tagline_label.set_markup(
			u'<small>%s</small>' % \
84
			gobject.markup_escape_text(newentry.feed_tagline))
85 86 87 88

		if newentry.uri is not None:
			self.entry_title_label.set_markup(
				u'<span foreground="blue" underline="single">%s</span>' % \
89
				gobject.markup_escape_text(newentry.title))
90 91
		else:
			self.entry_title_label.set_markup(
92
				gobject.markup_escape_text(newentry.title))
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121

		self.last_modified_label.set_text(newentry.updated)

		# update the counters
		self.updateCounter()

		self.entry = newentry

	def updateCounter(self):
		''' We display number of events on the top of window, sometimes it needs to be
		changed...'''
		count = len(self.__class__.entries)
		# TODO: translate
		if count>0:
			self.new_entry_label.set_text( \
				'You have received new entries (and %(count)d not displayed):' % \
				{'count': count})
			self.next_button.set_sensitive(True)
		else:
			self.new_entry_label.set_text('You have received new entry:')
			self.next_button.set_sensitive(False)

	def on_close_button_clicked(self, widget):
		self.window.destroy()

	def on_next_button_clicked(self, widget):
		self.displayNextEntry()

	def on_entry_title_button_press_event(self, widget, event):
122
		#FIXME: make it using special gtk2.10 widget
123 124 125 126 127 128 129
		if event.button == 1:	# left click
			uri = self.entry.uri
			if uri is not None:
				helpers.launch_browser_mailer('url', uri)
		return True

	def on_feed_title_button_press_event(self, widget, event):
130
		#FIXME: make it using special gtk2.10 widget
131 132 133 134 135
		if event.button == 1:	# left click
			uri = self.entry.feed_uri
			if uri is not None:
				helpers.launch_browser_mailer('url', uri)
		return True