# HG changeset patch # User Sadrul Habib Chowdhury # Date 1185827138 0 # Node ID 1aeda1e812a8a437a20c67b41ff0d8b486021bd8 # Parent bfa12b00f54b6174a416cc5fa88c636b48c0e7dd Make things look nice in both 80x25 and in large screens. Also, add a 'date' column in the items table. It'd be cool to make it configurable. Some more usability features. diff -r bfa12b00f54b -r 1aeda1e812a8 finch/libgnt/pygnt/example/rss/gntrss-ui.py --- a/finch/libgnt/pygnt/example/rss/gntrss-ui.py Mon Jul 30 20:24:04 2007 +0000 +++ b/finch/libgnt/pygnt/example/rss/gntrss-ui.py Mon Jul 30 20:25:38 2007 +0000 @@ -62,10 +62,16 @@ if self.active == active: return if self.active: - self.set_row_flags(self.active, gnt.TEXT_FLAG_NORMAL) + flag = gnt.TEXT_FLAG_NORMAL + if self.active.unread: + flag = flag | gnt.TEXT_FLAG_BOLD + self.set_row_flags(self.active, flag) old = self.active self.active = active - self.set_row_flags(self.active, gnt.TEXT_FLAG_UNDERLINE) + flag = gnt.TEXT_FLAG_UNDERLINE + if self.active.unread: + flag = flag | gnt.TEXT_FLAG_BOLD + self.set_row_flags(self.active, flag) self.emit('active_changed', old) def do_key_pressed(self, null, text): @@ -100,28 +106,35 @@ def update_feed_item(item, property): if property.name == 'unread': - if feeds.active != item.parent: - return - flag = 0 - if item == items.active: - flag = gnt.TEXT_FLAG_UNDERLINE + if feeds.active == item.parent: + flag = 0 + if item == items.active: + flag = gnt.TEXT_FLAG_UNDERLINE + if item.unread: + flag = flag | gnt.TEXT_FLAG_BOLD + else: + flag = flag | gnt.TEXT_FLAG_NORMAL + items.set_row_flags(item, flag) + + unread = item.parent.unread if item.unread: - item.parent.unread = item.parent.unread + 1 - items.set_row_flags(item, flag | gnt.TEXT_FLAG_BOLD) + unread = unread + 1 else: - item.parent.unread = item.parent.unread - 1 - items.set_row_flags(item, flag | gnt.TEXT_FLAG_NORMAL) - item.parent.notify('unread') + unread = unread - 1 + item.parent.set_property('unread', unread) def add_feed_item(item): currentfeed = feeds.active if item.parent != currentfeed: return - items.add_row_after(item, [str(item.title)], None, None) + months = ["", "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] + dt = str(item.date_parsed[2]) + "." + months[item.date_parsed[1]] + "." + str(item.date_parsed[0]) + items.add_row_after(item, [str(item.title), dt], None, None) if item.unread: items.set_row_flags(item, gnt.TEXT_FLAG_BOLD) if not item.get_data('gntrss-connected'): item.set_data('gntrss-connected', True) + # this needs to happen *without* having to add the item in the tree item.connect('notify', update_feed_item) item.connect('delete', remove_item) @@ -170,6 +183,7 @@ update_items_title() for item in tree.active.items: add_feed_item(item) + win.give_focus_to_child(items) # # Check for the action keys and decide how to deal with them. @@ -185,6 +199,11 @@ feeds = tree.get_rows() for feed in feeds: feed.refresh() + elif text == 'm': + feed = tree.get_selection_data() + if feed: + feed.mark_read() + feed.set_property('unread', 0) elif text == 'a': add_new_feed() else: @@ -194,7 +213,7 @@ feeds = RssTree() feeds.set_property('columns', 2) feeds.set_col_width(0, 20) -feeds.set_col_width(1, 8) +feeds.set_col_width(1, 6) feeds.set_column_resizable(0, False) feeds.set_column_resizable(1, False) feeds.set_column_is_right_aligned(1, True) @@ -241,9 +260,9 @@ return current = tree.get_selection_data() if text == 'M': # Mark all of the items 'read' - all = tree.get_rows() - for item in all: - item.mark_unread(False) + feed = feeds.active + if feed: + feed.mark_read() elif text == 'm': # Mark the current item 'read' current.mark_unread(False) tree.perform_action_key('j') @@ -257,16 +276,16 @@ return True items = RssTree() -items.set_property('columns', 1) +items.set_property('columns', 2) items.set_col_width(0, 40) +items.set_col_width(1, 11) +items.set_column_resizable(1, False) items.set_column_title(0, "Items") +items.set_column_title(1, "Date") items.set_show_title(True) items.connect('key_pressed', item_key_pressed) items.connect('active_changed', item_active_changed) -size = gnt.screen_size() -items.set_size(size[0], size[1]) - #### # ]]] The list of items in the feed #### @@ -290,6 +309,13 @@ details.set_flag(gnt.TEXT_VIEW_TOP_ALIGN) details.attach_scroll_widget(details) +# Make it look nice +s = feeds.get_size() +size = gnt.screen_size() +size[0] = size[0] - s[0] +items.set_size(size[0], size[1] / 2) +details.set_size(size[0], size[1] / 2) + # Category tree cat = gnt.Tree() cat.set_property('columns', 1) @@ -324,14 +350,20 @@ feeds.change_text(feed, 0, feed.title) elif property.name == 'unread': feeds.change_text(feed, 1, str(feed.unread) + "(" + str(len(feed.items)) + ")") + flag = 0 if feeds.active == feed: + flag = gnt.TEXT_FLAG_UNDERLINE update_items_title() + if feed.unread > 0: + flag = flag | gnt.TEXT_FLAG_BOLD + feeds.set_row_flags(feed, flag) # populate everything for feed in gntrss.feeds: feed.refresh() add_feed(feed) +gnt.gnt_register_action("Stuff", add_new_feed) gnt.gnt_main() gnt.gnt_quit() diff -r bfa12b00f54b -r 1aeda1e812a8 finch/libgnt/pygnt/example/rss/gntrss.py --- a/finch/libgnt/pygnt/example/rss/gntrss.py Mon Jul 30 20:24:04 2007 +0000 +++ b/finch/libgnt/pygnt/example/rss/gntrss.py Mon Jul 30 20:25:38 2007 +0000 @@ -173,6 +173,10 @@ if self.timer == 0: self.timer = gobject.timeout_add(1000, self.check_thread_for_death) + def mark_read(self): + for item in self.items: + item.mark_unread(False) + gobject.type_register(Feed) ##