|
|
@ -255,8 +255,9 @@ class Interface(object): |
|
|
|
if self._app_icon: |
|
|
|
if self._app_icon: |
|
|
|
main_window.set_icon_from_file(self._app_icon) |
|
|
|
main_window.set_icon_from_file(self._app_icon) |
|
|
|
|
|
|
|
|
|
|
|
main_window.connect('destroy', self.quit_app) |
|
|
|
main_window.connect('destroy', self._quit_app) |
|
|
|
main_window.connect('delete-event', self.quit_app) |
|
|
|
main_window.connect('delete-event', self._quit_app) |
|
|
|
|
|
|
|
main_window.connect('size-request', self._window_resize) |
|
|
|
|
|
|
|
|
|
|
|
grid = self._create_grid() |
|
|
|
grid = self._create_grid() |
|
|
|
(menu, toolbar, accelerators) = self._create_menu_and_toolbar() |
|
|
|
(menu, toolbar, accelerators) = self._create_menu_and_toolbar() |
|
|
@ -278,21 +279,21 @@ class Interface(object): |
|
|
|
|
|
|
|
|
|
|
|
def _create_grid(self): |
|
|
|
def _create_grid(self): |
|
|
|
"""Add the displaying grid.""" |
|
|
|
"""Add the displaying grid.""" |
|
|
|
self._grid_store = gtk.ListStore(object) |
|
|
|
grid_store = gtk.ListStore(object) |
|
|
|
# Trying to store the NetworkData object only |
|
|
|
# Trying to store the NetworkData object only |
|
|
|
|
|
|
|
|
|
|
|
# self.grid_store.set_sort_func(0, self._sort_by_time) |
|
|
|
# self.grid_store.set_sort_func(0, self._sort_by_time) |
|
|
|
# self.grid_store.set_sort_column_id(0, gtk.SORT_DESCENDING) |
|
|
|
# self.grid_store.set_sort_column_id(0, gtk.SORT_DESCENDING) |
|
|
|
|
|
|
|
|
|
|
|
self.grid = gtk.TreeView(self._grid_store) |
|
|
|
self._grid = gtk.TreeView(grid_store) |
|
|
|
self.grid.set_property('headers-visible', False) |
|
|
|
self._grid.set_property('headers-visible', False) |
|
|
|
self.grid.set_rules_hint(True) # change color for each row |
|
|
|
self._grid.set_rules_hint(True) # change color for each row |
|
|
|
|
|
|
|
|
|
|
|
user_renderer = gtk.CellRendererPixbuf() |
|
|
|
user_renderer = gtk.CellRendererPixbuf() |
|
|
|
user_column = gtk.TreeViewColumn('User', user_renderer) |
|
|
|
user_column = gtk.TreeViewColumn('User', user_renderer) |
|
|
|
user_column.set_cell_data_func(user_renderer, |
|
|
|
user_column.set_cell_data_func(user_renderer, |
|
|
|
self._cell_renderer_user) |
|
|
|
self._cell_renderer_user) |
|
|
|
self.grid.append_column(user_column) |
|
|
|
self._grid.append_column(user_column) |
|
|
|
|
|
|
|
|
|
|
|
message_renderer = gtk.CellRendererText() |
|
|
|
message_renderer = gtk.CellRendererText() |
|
|
|
message_renderer.set_property('wrap-mode', gtk.WRAP_WORD) |
|
|
|
message_renderer.set_property('wrap-mode', gtk.WRAP_WORD) |
|
|
@ -303,9 +304,9 @@ class Interface(object): |
|
|
|
message_renderer) |
|
|
|
message_renderer) |
|
|
|
message_column.set_cell_data_func(message_renderer, |
|
|
|
message_column.set_cell_data_func(message_renderer, |
|
|
|
self._cell_renderer_message) |
|
|
|
self._cell_renderer_message) |
|
|
|
self.grid.append_column(message_column) |
|
|
|
self._grid.append_column(message_column) |
|
|
|
|
|
|
|
|
|
|
|
self.grid.set_resize_mode(gtk.RESIZE_IMMEDIATE) |
|
|
|
self._grid.set_resize_mode(gtk.RESIZE_IMMEDIATE) |
|
|
|
#self.grid.connect('cursor-changed', self.check_post) |
|
|
|
#self.grid.connect('cursor-changed', self.check_post) |
|
|
|
#self.grid.connect('row-activated', self.open_post) |
|
|
|
#self.grid.connect('row-activated', self.open_post) |
|
|
|
#self.grid.connect('button-press-event', self.click_post) |
|
|
|
#self.grid.connect('button-press-event', self.click_post) |
|
|
@ -314,7 +315,7 @@ class Interface(object): |
|
|
|
|
|
|
|
|
|
|
|
scrolled_window = gtk.ScrolledWindow() |
|
|
|
scrolled_window = gtk.ScrolledWindow() |
|
|
|
scrolled_window.set_policy(gtk.POLICY_NEVER, gtk.POLICY_ALWAYS) |
|
|
|
scrolled_window.set_policy(gtk.POLICY_NEVER, gtk.POLICY_ALWAYS) |
|
|
|
scrolled_window.add(self.grid) |
|
|
|
scrolled_window.add(self._grid) |
|
|
|
|
|
|
|
|
|
|
|
return scrolled_window |
|
|
|
return scrolled_window |
|
|
|
|
|
|
|
|
|
|
@ -329,7 +330,7 @@ class Interface(object): |
|
|
|
|
|
|
|
|
|
|
|
quit_action = gtk.Action('Quit', '_Quit', |
|
|
|
quit_action = gtk.Action('Quit', '_Quit', |
|
|
|
'Exit Mitter', gtk.STOCK_QUIT) |
|
|
|
'Exit Mitter', gtk.STOCK_QUIT) |
|
|
|
quit_action.connect('activate', self.quit_app) |
|
|
|
quit_action.connect('activate', self._quit_app) |
|
|
|
|
|
|
|
|
|
|
|
settings_action = gtk.Action('Settings', '_Settings', |
|
|
|
settings_action = gtk.Action('Settings', '_Settings', |
|
|
|
'Settings', gtk.STOCK_PREFERENCES) |
|
|
|
'Settings', gtk.STOCK_PREFERENCES) |
|
|
@ -491,8 +492,9 @@ class Interface(object): |
|
|
|
message = re.sub(r'&(?!(amp;|gt;|lt;|quot;|apos;))', r'&', message) |
|
|
|
message = re.sub(r'&(?!(amp;|gt;|lt;|quot;|apos;))', r'&', message) |
|
|
|
|
|
|
|
|
|
|
|
# highlight URLs |
|
|
|
# highlight URLs |
|
|
|
message = URL_RE.sub(r'<span foreground="blue">\1</span>', |
|
|
|
mask = r'<span foreground="%s">\1</span>' % ( |
|
|
|
message) |
|
|
|
self._options[self.NAMESPACE]['link_colour']) |
|
|
|
|
|
|
|
message = URL_RE.sub(mask, message) |
|
|
|
|
|
|
|
|
|
|
|
# use a different highlight for the current user |
|
|
|
# use a different highlight for the current user |
|
|
|
#message = re.sub(r'(@'+self.twitter.username+')', |
|
|
|
#message = re.sub(r'(@'+self.twitter.username+')', |
|
|
@ -536,7 +538,7 @@ class Interface(object): |
|
|
|
#self._update_text.set_sensitive(False) |
|
|
|
#self._update_text.set_sensitive(False) |
|
|
|
#self.statusbar.push(self.statusbar_context, 'Updating your status...') |
|
|
|
#self.statusbar.push(self.statusbar_context, 'Updating your status...') |
|
|
|
|
|
|
|
|
|
|
|
def quit_app(self, widget=None, user_data=None): |
|
|
|
def _quit_app(self, widget=None, user_data=None): |
|
|
|
"""Callback when the window is destroyed or the user selects |
|
|
|
"""Callback when the window is destroyed or the user selects |
|
|
|
"Quit".""" |
|
|
|
"Quit".""" |
|
|
|
|
|
|
|
|
|
|
@ -553,6 +555,34 @@ class Interface(object): |
|
|
|
gtk.main_quit() |
|
|
|
gtk.main_quit() |
|
|
|
return |
|
|
|
return |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _window_resize(self, widget, request, data=None): |
|
|
|
|
|
|
|
"""Called when the window is resized. We use it to set the proper |
|
|
|
|
|
|
|
word-wrapping in the message column.""" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(width, height) = widget.get_size() |
|
|
|
|
|
|
|
model = self._grid.get_model() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if len(model) == 0: |
|
|
|
|
|
|
|
# nothing in the list, so we don't have what to set proper word |
|
|
|
|
|
|
|
# wrapping |
|
|
|
|
|
|
|
return |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
column = self._grid.get_column(1) |
|
|
|
|
|
|
|
iter = model.get_iter_first() |
|
|
|
|
|
|
|
path = model.get_path(iter) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
column_rectangle = self._grid.get_cell_area(path, column) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for renderer in column.get_cell_renderers(): |
|
|
|
|
|
|
|
renderer.set_property('wrap-width', column_rectangle.width) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
while iter: |
|
|
|
|
|
|
|
path = model.get_path(iter) |
|
|
|
|
|
|
|
model.row_changed(path, iter) |
|
|
|
|
|
|
|
iter = model.iter_next(iter) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return |
|
|
|
|
|
|
|
|
|
|
|
# ------------------------------------------------------------ |
|
|
|
# ------------------------------------------------------------ |
|
|
|
# Network related functions |
|
|
|
# Network related functions |
|
|
|
# ------------------------------------------------------------ |
|
|
|
# ------------------------------------------------------------ |
|
|
@ -562,9 +592,10 @@ class Interface(object): |
|
|
|
"""Function called after the data from the messages list is |
|
|
|
"""Function called after the data from the messages list is |
|
|
|
retrieved.""" |
|
|
|
retrieved.""" |
|
|
|
_log.debug('%d new tweets', len(results)) |
|
|
|
_log.debug('%d new tweets', len(results)) |
|
|
|
|
|
|
|
store = self._grid.get_model() |
|
|
|
for message in results: |
|
|
|
for message in results: |
|
|
|
_log.debug('Data: %s', str(message)) |
|
|
|
_log.debug('Data: %s', str(message)) |
|
|
|
self._grid_store.prepend([message]) |
|
|
|
store.prepend([message]) |
|
|
|
return |
|
|
|
return |
|
|
|
|
|
|
|
|
|
|
|
def _exception_get_messages(self, widget, exception): |
|
|
|
def _exception_get_messages(self, widget, exception): |
|
|
@ -692,4 +723,13 @@ class Interface(object): |
|
|
|
default=60, |
|
|
|
default=60, |
|
|
|
conflict_group='interface', |
|
|
|
conflict_group='interface', |
|
|
|
is_cmd_option=False) # TODO: Should it be config only? |
|
|
|
is_cmd_option=False) # TODO: Should it be config only? |
|
|
|
|
|
|
|
options.add_option( |
|
|
|
|
|
|
|
group=self.NAMESPACE, |
|
|
|
|
|
|
|
option='link_colour', |
|
|
|
|
|
|
|
help='Color of links in the interface', |
|
|
|
|
|
|
|
type='str', |
|
|
|
|
|
|
|
metavar='COLOR', |
|
|
|
|
|
|
|
default='blue', |
|
|
|
|
|
|
|
conflict_group='interface', |
|
|
|
|
|
|
|
is_cmd_option=False) |
|
|
|
|
|
|
|
|
|
|
|