# Copyright (C) 2006 Tomasz Melcer # Copyright (C) 2006-2014 Yann Leboulanger # Copyright (C) 2007 Nikos Kouremenos # Copyright (C) 2008 Jonathan Schleifer # # This file is part of Gajim. # # Gajim is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published # by the Free Software Foundation; version 3 only. # # Gajim is distributed in the hope that it will be useful, # 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. # # You should have received a copy of the GNU General Public License # along with Gajim. If not, see . from typing import List # pylint: disable=unused-import from typing import Any # pylint: disable=unused-import from gi.repository import Gdk from gi.repository import GLib from gajim.common import helpers from gajim.common import i18n from gajim.common.i18n import _ from gajim import gtkgui_helpers class AtomWindow: window = None entries = [] # type: List[Any] @classmethod 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() @classmethod def windowClosed(cls): cls.window = None def __init__(self): """ Create new window... only if we have anything to show """ assert self.__class__.entries self.entry = None # the entry actually displayed self.xml = gtkgui_helpers.get_gtk_builder('atom_entry_window.ui') self.window = self.xml.get_object('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_object(name) self.displayNextEntry() self.xml.connect_signals(self) self.window.show_all() self.entry_title_eventbox.add_events(Gdk.EventMask.BUTTON_PRESS_MASK) self.feed_title_eventbox.add_events(Gdk.EventMask.BUTTON_PRESS_MASK) def displayNextEntry(self): """ Get next entry from the queue and display it in the window """ assert self.__class__.entries newentry = self.__class__.entries.pop(0) # fill the fields if newentry.feed_link is not None: self.feed_title_label.set_markup( '%s' % \ GLib.markup_escape_text(newentry.feed_title)) else: self.feed_title_label.set_markup(GLib.markup_escape_text( newentry.feed_title)) self.feed_tagline_label.set_markup( '%s' % GLib.markup_escape_text( newentry.feed_tagline)) if newentry.title: if newentry.uri is not None: self.entry_title_label.set_markup( '%s' % \ GLib.markup_escape_text(newentry.title)) else: self.entry_title_label.set_markup(GLib.markup_escape_text( newentry.title)) else: self.entry_title_label.set_markup('') self.last_modified_label.set_text(newentry.updated) # update the counters self.updateCounter() self.entry = newentry def updateCounter(self): """ Display number of events on the top of window, sometimes it needs to be changed """ count = len(self.__class__.entries) if count: self.new_entry_label.set_text(i18n.ngettext( 'You have received new entries (and %d not displayed):', 'You have received new entries (and %d not displayed):', count, 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() self.windowClosed() def on_next_button_clicked(self, widget): self.displayNextEntry() def on_entry_title_eventbox_button_press_event(self, widget, event): #FIXME: make it using special gtk2.10 widget 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_eventbox_button_press_event(self, widget, event): #FIXME: make it using special gtk2.10 widget if event.button == 1: # left click uri = self.entry.feed_uri if uri is not None: helpers.launch_browser_mailer('url', uri) return True