From bce1070cbb4a63707b88c701e8827f4dbb93644f Mon Sep 17 00:00:00 2001 From: jmalonzo Date: Tue, 24 Jul 2007 09:31:34 +0000 Subject: [PATCH] cleanup ErrorPresenter, item selection, removed feedlistview.get_selected_nodes, and fixed itemview git-svn-id: svn+ssh://svn.gnome.org/svn/straw/trunk@311 141a2093-ea25-0410-9ad2-d44d734a8f13 --- src/lib/Application.py | 87 ++++++++++++++----------------------------------- src/lib/FeedListView.py | 10 ------ src/lib/ItemList.py | 14 +++++++- src/lib/ItemView.py | 1 + 4 files changed, 39 insertions(+), 73 deletions(-) diff --git a/src/lib/Application.py b/src/lib/Application.py index 0bafd43..d763f6c 100644 --- a/src/lib/Application.py +++ b/src/lib/Application.py @@ -67,36 +67,29 @@ class ErrorPresenter: self._widget = widget self._tooltips = gtk.Tooltips() self._text = '' - self._curr_feed = None - self._curr_category = None - fclist = FeedCategoryList.get_instance() - fclist.signal_connect(Event.FeedCategoryChangedSignal, - self._category_changed) - - def display_feed_error(self, feed): - if self._curr_feed is not None: - self._curr_feed.signal_disconnect(Event.FeedErrorStatusChangedSignal, - self._error_status_changed) - self._curr_feed = feed - self._curr_feed.signal_connect(Event.FeedErrorStatusChangedSignal, - self._error_status_changed) - self._update_view() - return - - def display_category_error(self, category): - if category: - self._curr_category = category - self._update_view() - return + #self._curr_feed = None + #self._curr_category = None + #fclist = FeedCategoryList.get_instance() + #fclist.connect('category-changed', self._category_changed) + + def feedlist_selection_changed(self, selection, column): + errortexts = None + (model, pathlist) = selection.get_selected_rows() + iters = [model.get_iter(path) for path in pathlist] + if not iters: return + nodes = [model.get_value(treeiter, column) for treeiter in iters] + try: + errorfeeds = [node.feed for node in nodes if node.feed and node.feed.error] + errortexts = [feed.error for feed in errorfeeds] + except TypeError, te: + print te + ### XXX display OPML Category error too - def _update_view(self): text = list() - if self._curr_category and self._curr_category.subscription and self._curr_category.subscription.error: - text.append(_("Category error:")) - text.append(self._curr_category.subscription.error) - if self._curr_feed and self._curr_feed.error: - text.append(_("Feed Error:")) - text.append(self._curr_feed.error) + if errorfeeds: + text.append(_("Error:")) + text += errortexts + if text: t = "\n".join(text) self._tooltips.set_tip(self._widget,t,t) @@ -107,15 +100,6 @@ class ErrorPresenter: self._widget.hide() return - def _category_changed(self, signal): - if signal.sender is self._curr_category: - self.display_category_error(self._curr_category) - - def _error_status_changed(self, signal): - if signal.sender is self._curr_feed: - self.display_feed_error(signal.sender) - return - def hide(self): self._widget.hide() @@ -185,6 +169,7 @@ class ApplicationPresenter(MVP.BasicPresenter): def _init_presenters(self): widget_tree = self._view.get_widget_tree() toolbar_presenter = ToolbarPresenter(view=ToolbarView(widget_tree.get_widget('toolbar_default'))) + self._error_presenter = ErrorPresenter(widget_tree.get_widget('statusbar_error_indicator')) self._item_view = ItemView(widget_tree.get_widget('item_view_container')) @@ -195,11 +180,9 @@ class ApplicationPresenter(MVP.BasicPresenter): view = FeedsView(widget_tree.get_widget('feed_selection_treeview')) self._feed_list_presenter = FeedsPresenter(view=view) view.add_selection_changed_listener(self._itemlist_presenter) + view.add_selection_changed_listener(self._error_presenter) - #self._error_presenter = ErrorPresenter( - # widget_tree.get_widget('statusbar_error_indicator')) - self._offline_presenter = OfflineToggle( - widget_tree.get_widget('offline_toggle')) + self._offline_presenter = OfflineToggle(widget_tree.get_widget('offline_toggle')) self._status_presenter = StatusPresenter(view = widget_tree.get_widget("main_statusbar")) self._menufp_presenter = MenuFeedPropsPresenter( view = widget_tree.get_widget('menu_feed_properties')) @@ -207,23 +190,6 @@ class ApplicationPresenter(MVP.BasicPresenter): # self._find_presenter = FindPresenter(view=FindView(widget_tree.get_widget("find_vbox"))) return - def _display_feed(self, feed, select_first = 1): - if feed and feed.number_of_items < 1: - self._item_view.display_empty_feed() -# self._error_presenter.display_feed_error(feed) - self._feedinfo_presenter.display(feed) - #self._itemlist_presenter.display_feed_items(feed, select_first) - self._menufp_presenter.set_sensitive(True) - return - - def _feeds_empty_cb(self, signal): - #self._itemlist_presenter.display_empty_feed() - self._item_view.display_empty_feed() - self._feedinfo_presenter.hide() -# self._error_presenter.hide() - self._menufp_presenter.set_sensitive(False) - return - def copy_itemview_text_selection(self): utils.set_clipboard_text(self._item_view.get_selected_text()) @@ -293,8 +259,6 @@ class ApplicationPresenter(MVP.BasicPresenter): pass def show_search(self): - self._itemlist_presenter.signal_disconnect(Event.ItemSelectionChangedSignal, - self._item_view.item_selection_changed) # self._find_presenter.item_list.signal_connect(Event.ItemSelectionChangedSignal, # self._item_view.item_selection_changed) self._item_view.display_empty_search() @@ -309,8 +273,7 @@ class ApplicationPresenter(MVP.BasicPresenter): self._feedinfo_presenter.show() # self._find_presenter.item_list.signal_disconnect(Event.ItemSelectionChangedSignal, # self._item_view.item_selection_changed) - self._itemlist_presenter.signal_connect(Event.ItemSelectionChangedSignal, - self._item_view.item_selection_changed) + def _poll_categories(self, fclist): pm = PollManager.get_instance() diff --git a/src/lib/FeedListView.py b/src/lib/FeedListView.py index 013cbcf..57b3618 100644 --- a/src/lib/FeedListView.py +++ b/src/lib/FeedListView.py @@ -257,16 +257,6 @@ class FeedListModel: def model(self): return self.store - ## XXX DEPRECATE - def get_selected_nodes(self, pathlist): - ''' Returns a list of feed objects that live in the pathlist ''' - selected = [] - for path in pathlist: - treeiter = self.store.get_iter(path) - object = self.store.get_value(treeiter, Column.object) - selected.append(object) - return selected - def search(self, rows, func, data): if not rows: return None for row in rows: diff --git a/src/lib/ItemList.py b/src/lib/ItemList.py index 6008064..c9696a9 100644 --- a/src/lib/ItemList.py +++ b/src/lib/ItemList.py @@ -174,6 +174,15 @@ class ItemListView(MVP.WidgetView): utils.url_show(link) return + def select_first_item(self): + selection = self._widget.get_selection() + (model, treeiter) = selection.get_selected() + if not treeiter: return + path = model.get_path(model.get_iter_first()) + self._widget.set_cursor(path) + self._widget.scroll_to_cell(path, column) + self._widget.grab_focus() + def select_previous_item(self): """ Selects the item before the current selection. If there @@ -229,7 +238,7 @@ class ItemListView(MVP.WidgetView): to the next feed with an unread item. """ has_unread = False - selection = self._widget.get_widget_selection() + selection = self._widget.get_selection() (model, treeiter) = selection.get_selected() # check if we have a selection. if none, # start searching from the first item @@ -271,6 +280,9 @@ class ItemListPresenter(MVP.BasicPresenter): try: feeds = [node.feed for node in nodes if node.feed] map(self.model.populate, [feed.items for feed in feeds]) + if not len(self.model.model): return + if not self.view.select_next_unread_item(): + self.view.select_first_item() except TypeError: ## XXX display child items of Category pass diff --git a/src/lib/ItemView.py b/src/lib/ItemView.py index 5bcf595..425cab1 100644 --- a/src/lib/ItemView.py +++ b/src/lib/ItemView.py @@ -560,6 +560,7 @@ class ItemView: def itemlist_selection_changed(self, selection, column): (model, treeiter) = selection.get_selected() + if not treeiter: return # .. or display a template page? item = model.get_value(treeiter, column) self._display_item(item) -- 2.11.4.GIT