294 |
|
|
295 |
def __init__(self, widget): |
def __init__(self, widget): |
296 |
self._widget = widget |
self._widget = widget |
297 |
|
|
298 |
model = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_OBJECT, |
model = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_OBJECT, |
299 |
gobject.TYPE_PYOBJECT, gobject.TYPE_INT, |
gobject.TYPE_PYOBJECT, gobject.TYPE_INT, |
300 |
gobject.TYPE_BOOLEAN) |
gobject.TYPE_BOOLEAN) |
301 |
|
|
302 |
widget.set_model(model) |
widget.set_model(model) |
303 |
widget.set_rules_hint(gtk.TRUE) |
widget.set_rules_hint(gtk.TRUE) |
304 |
|
|
305 |
self.create_item_selection_columns(self._widget) |
self.create_item_selection_columns(self._widget) |
306 |
|
|
307 |
|
#model.set_sort_column_id(5, straw.config.item_order) |
308 |
widget.get_selection().connect("changed", self.item_selection_changed) |
widget.get_selection().connect("changed", self.item_selection_changed) |
309 |
|
|
310 |
self._feed = None |
self._feed = None |
311 |
return |
return |
312 |
|
|
313 |
def create_item_selection_columns(self, item_list_view): |
def create_item_selection_columns(self, item_list_view): |
314 |
|
renderer = gtk.CellRendererToggle() |
315 |
|
column = gtk.TreeViewColumn(_('Keep'), renderer, |
316 |
|
active=self.COLUMN_STICKY_FLAG) |
317 |
|
column.set_resizable(gtk.TRUE) |
318 |
|
column.set_reorderable(gtk.TRUE) |
319 |
|
item_list_view.append_column(column) |
320 |
|
renderer.connect('toggled', self.sticky_toggled) |
321 |
|
|
322 |
renderer = gtk.CellRendererText() |
renderer = gtk.CellRendererText() |
323 |
column = gtk.TreeViewColumn(_('Title'), renderer, |
column = gtk.TreeViewColumn(_('Title'), renderer, |
324 |
text=self.COLUMN_TITLE, |
text=self.COLUMN_TITLE, |
325 |
weight=self.COLUMN_BOLD) |
weight=self.COLUMN_BOLD) |
326 |
column.set_min_width(int(550)) |
column.set_resizable(gtk.TRUE) |
327 |
|
column.set_reorderable(gtk.TRUE) |
328 |
|
#column.set_sort_column_id(0) |
329 |
|
#column.set_sort_order('ascending') |
330 |
|
#column.set_sort_indicator(gtk.TRUE) |
331 |
|
#column.clicked() |
332 |
item_list_view.append_column(column) |
item_list_view.append_column(column) |
333 |
|
|
|
renderer = gtk.CellRendererToggle() |
|
|
column = gtk.TreeViewColumn(_('Keep'), renderer, |
|
|
active=self.COLUMN_STICKY_FLAG) |
|
|
column.set_max_width(int(50)) |
|
|
item_list_view.append_column(column) |
|
|
renderer.connect('toggled', self.sticky_toggled) |
|
334 |
return |
return |
335 |
|
|
336 |
def sticky_toggled(self, cell, path): |
def sticky_toggled(self, cell, path): |
347 |
model.clear() |
model.clear() |
348 |
count = 0 |
count = 0 |
349 |
for item in feed.items: |
for item in feed.items: |
350 |
|
|
351 |
title = "" |
title = "" |
352 |
|
|
353 |
if item.title is not None and item.title != "": |
if item.title is not None and item.title != "": |
354 |
title = convert_entities(item.title) |
title = convert_entities(item.title) |
355 |
elif item.description is not None and item.description != "": |
elif item.description is not None and item.description != "": |
359 |
else: |
else: |
360 |
# empty title, empty description, let's not show it |
# empty title, empty description, let's not show it |
361 |
continue |
continue |
362 |
|
|
363 |
count += 1 |
count += 1 |
364 |
|
|
365 |
if item.seen: |
if item.seen: |
366 |
bold = pango.WEIGHT_NORMAL |
bold = pango.WEIGHT_NORMAL |
367 |
else: |
else: |
368 |
bold = pango.WEIGHT_BOLD |
bold = pango.WEIGHT_BOLD |
369 |
|
|
370 |
iter = model.append() |
iter = model.append() |
371 |
model.set(iter, self.COLUMN_TITLE, title, self.COLUMN_ITEM, item, |
model.set(iter, self.COLUMN_TITLE, title, self.COLUMN_ITEM, item, |
372 |
self.COLUMN_BOLD, bold, |
self.COLUMN_BOLD, bold, self.COLUMN_STICKY_FLAG, item.sticky) |
|
self.COLUMN_STICKY_FLAG, item.sticky) |
|
373 |
|
|
|
self._widget.columns_autosize() |
|
374 |
return count |
return count |
375 |
|
|
376 |
def display_feed(self, feed, select_first = 1): |
def display_feed(self, feed, select_first = 1): |
487 |
def mode_changed(self, signal): |
def mode_changed(self, signal): |
488 |
self.show() |
self.show() |
489 |
|
|
|
class StatusTime: |
|
|
def __init__(self, widget): |
|
|
self.time_label = widget |
|
|
straw.config.signal_connect(straw.LastPollChangedSignal, self.next_poll) |
|
|
|
|
|
def next_poll(self, *args): |
|
|
now = time.localtime() |
|
|
npoll = time.localtime(straw.config.last_poll + straw.config.poll_frequency) |
|
|
x = now[3] |
|
|
a = now[2] |
|
|
y = npoll[3] |
|
|
b = npoll[2] |
|
|
if straw.config.last_poll is None or x > y and a == b: |
|
|
self.hide() |
|
|
return |
|
|
elif x > y and a != b: |
|
|
format = '%d %b %H:%M' |
|
|
else: |
|
|
format = '%H:%M' |
|
|
npoll_sane = _("Next poll: <b>%s</b>" % time.strftime(format,npoll)) |
|
|
self.time_label.set_text(npoll_sane) |
|
|
self.time_label.set_property("use_markup", True) |
|
|
self.time_label.show() |
|
|
|
|
|
return |
|
|
|
|
|
def show(self): |
|
|
self.next_poll() |
|
|
return |
|
|
|
|
|
def hide(self): |
|
|
self.time_label.hide() |
|
|
return |
|
|
|
|
490 |
class Toolbar: |
class Toolbar: |
491 |
def __init__(self,widget): |
def __init__(self,widget): |
492 |
# set toolbar tooltips |
# set toolbar tooltips |
519 |
self._widget = widget |
self._widget = widget |
520 |
self._state_indicator = widget_tree.get_widget('feed_info_arrow') |
self._state_indicator = widget_tree.get_widget('feed_info_arrow') |
521 |
self._drawer = widget_tree.get_widget('feed_info_drawer') |
self._drawer = widget_tree.get_widget('feed_info_drawer') |
522 |
self._switch_button = widget_tree.get_widget( |
self._switch_button = widget_tree.get_widget('feed_info_visibility_button') |
|
'feed_info_visibility_button') |
|
523 |
self._title_display = widget_tree.get_widget('feed_info_title') |
self._title_display = widget_tree.get_widget('feed_info_title') |
524 |
self._link_display = widget_tree.get_widget('feed_info_link') |
self._url_hbox = widget_tree.get_widget('feed_info_hbox') |
525 |
self._description_display = widget_tree.get_widget( |
self._link_display = gnome.ui.HRef(url='', text='') |
526 |
'feed_info_description') |
self._description_display = widget_tree.get_widget('feed_info_description') |
527 |
self._copyright_display = widget_tree.get_widget('feed_info_copyright') |
self._copyright_display = widget_tree.get_widget('feed_info_copyright') |
528 |
|
|
529 |
self._tooltips = gtk.Tooltips() |
self._tooltips = gtk.Tooltips() |
530 |
|
self._url_hbox.pack_start(self._link_display,expand=gtk.FALSE,fill=gtk.FALSE, padding=6) |
531 |
|
|
532 |
self._visible = 0 |
self._visible = 0 |
533 |
self.set_indicator(self._visible) |
self.set_indicator(self._visible) |
534 |
|
|
580 |
|
|
581 |
link = feed.channel_link |
link = feed.channel_link |
582 |
self._link_display.set_url(link) |
self._link_display.set_url(link) |
583 |
self._link_display.set_property("label", link) |
self._link_display.set_text(link) |
584 |
if len(link): |
if len(link): |
585 |
self._link_display.show() |
self._link_display.show() |
586 |
else: |
else: |
677 |
xml.get_widget('offline_toggle')) |
xml.get_widget('offline_toggle')) |
678 |
self._toolbar = Toolbar( |
self._toolbar = Toolbar( |
679 |
xml.get_widget('toolbar_default')) |
xml.get_widget('toolbar_default')) |
|
self._timestats = StatusTime( |
|
|
xml.get_widget('status_next_poll')) |
|
680 |
self._offline_toggle.show() |
self._offline_toggle.show() |
681 |
self._toolbar.show_tips() |
self._toolbar.show_tips() |
|
self._timestats.show() |
|
682 |
self.create_ui(xml) |
self.create_ui(xml) |
683 |
# status messages are queued and displayed with a half a second |
# status messages are queued and displayed with a half a second |
684 |
# timeout, so the user can see what's happening. the timeout is only |
# timeout, so the user can see what's happening. the timeout is only |
766 |
straw.main.show_preferences_dialog() |
straw.main.show_preferences_dialog() |
767 |
return |
return |
768 |
|
|
|
def on_menu_subscriptions_activate(self, *args): |
|
|
straw.main.show_subscriptions_dialog() |
|
|
return |
|
|
|
|
769 |
def on_menu_poll_all_activate(self, *args): |
def on_menu_poll_all_activate(self, *args): |
770 |
straw.poll_manager.poll() |
straw.poll_manager.poll() |
771 |
|
|