self.downloadbars.append(weakref.ref (self))
self.set_fraction(0)
self.__class__.update_bars()
- self.show_all()
@classmethod
def downloading(cls):
error_handler=error_handler())
class DisplayFeed(hildon.StackableWindow):
- def __init__(self, listing, feed, title, key, config):
+ def __init__(self, listing, config):
hildon.StackableWindow.__init__(self)
+ self.connect('configure-event', self.on_configure_event)
+ self.connect("delete_event", self.delete_window)
+ self.connect("destroy", self.destroyWindow)
+
self.listing = listing
- self.feed = feed
- self.feedTitle = title
- self.set_title(title)
- self.key=key
+ self.config = config
+
# Articles to show.
#
# If hide read articles is set, this is set to the set of
# but then decides to move back, previous should select the
# just read article.
self.articles = list()
- self.config = config
self.downloadDialog = False
button.set_label("Mark all as read")
button.connect("clicked", self.buttonReadAllClicked)
menu.append(button)
-
- if key=="ArchivedArticles":
- button = hildon.GtkButton(gtk.HILDON_SIZE_AUTO)
- button.set_label("Delete read articles")
- button.connect("clicked", self.buttonPurgeArticles)
- menu.append(button)
+
+ button = hildon.GtkButton(gtk.HILDON_SIZE_AUTO)
+ button.set_label("Delete read articles")
+ button.connect("clicked", self.buttonPurgeArticles)
+ menu.append(button)
+ self.archived_article_buttons = [button]
self.set_app_menu(menu)
menu.show_all()
- self.main_vbox = gtk.VBox(False, 0)
- self.add(self.main_vbox)
+ self.feedItems = gtk.ListStore(str, str)
- self.pannableFeed = None
- self.displayFeed()
+ self.feedList = hildon.GtkTreeView(gtk.HILDON_UI_MODE_NORMAL)
+ self.feedList.set_model(self.feedItems)
+ self.feedList.set_rules_hint(True)
+ self.feedList.set_grid_lines(gtk.TREE_VIEW_GRID_LINES_HORIZONTAL)
+ self.feedList.set_hover_selection(False)
+ self.feedList.connect('hildon-row-tapped',
+ self.on_feedList_row_activated)
+
+ self.markup_renderer = gtk.CellRendererText()
+ self.markup_renderer.set_property('wrap-mode', pango.WRAP_WORD_CHAR)
+ self.markup_renderer.set_property('background', bg_color) #"#333333")
+ (width, height) = self.get_size()
+ self.markup_renderer.set_property('wrap-width', width-20)
+ self.markup_renderer.set_property('ypad', 8)
+ self.markup_renderer.set_property('xpad', 5)
+ markup_column = gtk.TreeViewColumn('', self.markup_renderer, \
+ markup=FEED_COLUMN_MARKUP)
+ self.feedList.append_column(markup_column)
- if DownloadBar.downloading ():
- self.show_download_bar ()
+ vbox = gtk.VBox(False, 10)
+ vbox.pack_start(self.feedList)
- self.connect('configure-event', self.on_configure_event)
- self.connect("destroy", self.destroyWindow)
+ self.pannableFeed = hildon.PannableArea()
+ self.pannableFeed.set_property('hscrollbar-policy', gtk.POLICY_NEVER)
+ self.pannableFeed.add_with_viewport(vbox)
+
+ self.main_vbox = gtk.VBox(False, 0)
+ self.main_vbox.pack_start(self.pannableFeed)
+
+ self.add(self.main_vbox)
+
+ self.main_vbox.show_all()
def on_configure_event(self, window, event):
if getattr(self, 'markup_renderer', None) is None:
self.feedItems.set_value(it, FEED_COLUMN_MARKUP, markup)
it = self.feedItems.iter_next(it)
+ def delete_window(self, *args):
+ """
+ Prevent the window from being deleted.
+ """
+ self.hide()
+
+ try:
+ key = self.key
+ except AttributeError:
+ key = None
+
+ if key is not None:
+ self.listing.updateUnread(key)
+ self.emit("feed-closed", key)
+ self.key = None
+ self.feedItems.clear()
+
+ return True
+
def destroyWindow(self, *args):
- #self.feed.saveUnread(CONFIGDIR)
- self.listing.updateUnread(self.key)
- self.emit("feed-closed", self.key)
+ try:
+ key = self.key
+ except AttributeError:
+ key = None
+
self.destroy()
- #gobject.idle_add(self.feed.saveFeed, CONFIGDIR)
- #self.listing.closeCurrentlyDisplayedFeed()
def fix_title(self, title):
return escape(unescape(title).replace("<em>","").replace("</em>","").replace("<nobr>","").replace("</nobr>","").replace("<wbr>",""))
- def displayFeed(self):
- if self.pannableFeed:
- self.pannableFeed.destroy()
-
- self.pannableFeed = hildon.PannableArea()
+ def displayFeed(self, key=None):
+ """
+ Select and display a feed. If feed, title and key are None,
+ reloads the current feed.
+ """
+ if key:
+ try:
+ old_key = self.key
+ except AttributeError:
+ old_key = None
- self.pannableFeed.set_property('hscrollbar-policy', gtk.POLICY_NEVER)
+ if old_key:
+ self.listing.updateUnread(self.key)
+ self.emit("feed-closed", self.key)
- self.feedItems = gtk.ListStore(str, str)
- #self.feedList = gtk.TreeView(self.feedItems)
- self.feedList = hildon.GtkTreeView(gtk.HILDON_UI_MODE_NORMAL)
- self.feedList.set_rules_hint(True)
+ self.feed = self.listing.getFeed(key)
+ self.feedTitle = self.listing.getFeedTitle(key)
+ self.key = key
- selection = self.feedList.get_selection()
- selection.set_mode(gtk.SELECTION_NONE)
- #selection.connect("changed", lambda w: True)
-
- self.feedList.set_model(self.feedItems)
- self.feedList.set_grid_lines(gtk.TREE_VIEW_GRID_LINES_HORIZONTAL)
+ self.set_title(self.feedTitle)
-
- self.feedList.set_hover_selection(False)
- #self.feedList.set_property('enable-grid-lines', True)
- #self.feedList.set_property('hildon-mode', 1)
- #self.pannableFeed.connect("motion-notify-event", lambda w,ev: True)
-
- #self.feedList.connect('row-activated', self.on_feedList_row_activated)
+ selection = self.feedList.get_selection()
+ if selection is not None:
+ selection.set_mode(gtk.SELECTION_NONE)
- vbox= gtk.VBox(False, 10)
- vbox.pack_start(self.feedList)
+ for b in self.archived_article_buttons:
+ if key == "ArchivedArticles":
+ b.show()
+ else:
+ b.hide()
- self.pannableFeed.add_with_viewport(vbox)
-
- self.markup_renderer = gtk.CellRendererText()
- self.markup_renderer.set_property('wrap-mode', pango.WRAP_WORD_CHAR)
- self.markup_renderer.set_property('background', bg_color) #"#333333")
- (width, height) = self.get_size()
- self.markup_renderer.set_property('wrap-width', width-20)
- self.markup_renderer.set_property('ypad', 8)
- self.markup_renderer.set_property('xpad', 5)
- markup_column = gtk.TreeViewColumn('', self.markup_renderer, \
- markup=FEED_COLUMN_MARKUP)
- self.feedList.append_column(markup_column)
-
#self.pannableFeed.set_property("mov-mode", hildon.MOVEMENT_MODE_BOTH)
hideReadArticles = self.config.getHideReadArticles()
if hideReadArticles:
else:
articles = self.feed.getIds()
- hasArticle = False
self.articles[:] = []
+
+ self.feedItems.clear()
for id in articles:
- isRead = False
try:
isRead = self.feed.isEntryRead(id)
- except:
- pass
+ except Exception:
+ isRead = False
if not ( isRead and hideReadArticles ):
title = self.fix_title(self.feed.getTitle(id))
self.articles.append(id)
markup = ENTRY_TEMPLATE_UNREAD % (self.config.getFontSize(), title)
self.feedItems.append((markup, id))
- hasArticle = True
- if hasArticle:
- self.feedList.connect('hildon-row-tapped', self.on_feedList_row_activated)
- else:
+ if not articles:
+ # No articles.
markup = ENTRY_TEMPLATE % (self.config.getFontSize(), "No Articles To Display")
self.feedItems.append((markup, ""))
- self.main_vbox.pack_start(self.pannableFeed)
- self.show_all()
+ self.show()
def clear(self):
self.pannableFeed.destroy()
#self.remove(self.pannableFeed)
def on_feedList_row_activated(self, treeview, path): #, column):
+ if not self.articles:
+ # There are not actually any articles. Ignore.
+ return False
+
selection = self.feedList.get_selection()
selection.set_mode(gtk.SELECTION_SINGLE)
self.feedList.get_selection().select_path(path)
self.downloadDialog.connect("download-done", self.onDownloadDone)
self.main_vbox.pack_end(self.downloadDialog,
expand=False, fill=False)
- self.show_all()
-
+ self.downloadDialog.show()
+
def onDownloadDone(self, widget, feed):
- if feed == self.feed:
+ if feed is not None and hasattr(self, 'feed') and feed == self.feed:
self.feed = self.listing.getFeed(self.key)
self.displayFeed()
self.downloadDialog = DownloadBar(self.window)
self.downloadDialog.connect("download-done", self.onDownloadDone)
self.mainVbox.pack_end(self.downloadDialog, expand=False, fill=False)
- self.mainVbox.show_all()
+ self.downloadDialog.show()
if self.__dict__.get ('disp', None):
self.disp.show_download_bar ()
dbus_interface='org.marcoz.feedingit',
path='/org/marcoz/feedingit/update')
+ gobject.idle_add(self.build_feed_display)
+
+ def build_feed_display(self):
+ if not hasattr(self, 'disp'):
+ self.disp = DisplayFeed(self.listing, self.config)
+ self.disp.connect("feed-closed", self.onFeedClosed)
+
def button_markAll(self, button):
for key in self.listing.getListOfFeeds():
feed = self.listing.getFeed(key)
def openFeed(self, key):
if key != None:
- self.disp = DisplayFeed(
- self.listing, self.listing.getFeed(key),
- self.listing.getFeedTitle(key), key,
- self.config)
- self.disp.connect("feed-closed", self.onFeedClosed)
+ self.build_feed_display()
+ self.disp.displayFeed(key)
def openArticle(self, key, id):
if key != None:
self.disp.button_clicked(None, id)
def onFeedClosed(self, object, key):
- self.displayListing()
+ gobject.idle_add(self.displayListing)
def quit(self, *args):
self.window.hide()