Browse Source

Proper sensitivity for the Add button and action

master
Julio Biason 16 years ago
parent
commit
d59c43f041
  1. 85
      mitterlib/ui/ui_pygtk.py

85
mitterlib/ui/ui_pygtk.py

@ -37,6 +37,20 @@ from mitterlib.ui.helpers.image_helpers import find_image
_log = logging.getLogger('ui.pygtk')
# ----------------------------------------------------------------------
# Helper Functions (not related to objects or that don't need direct access to
# the objects contents.)
# ----------------------------------------------------------------------
def _buffer_text(text_buffer):
"""Return the content of a gtk.TextBuffer."""
start = text_buffer.get_start_iter()
end = text_buffer.get_end_iter()
text = text_buffer.get_text(start, end, include_hidden_chars=False)
return text
# ----------------------------------------------------------------------
# Threading related objects.
# These classes are based on the code available at http://gist.github.com/51686
@ -173,28 +187,6 @@ class Interface(object):
about_window.hide()
# ------------------------------------------------------------
# Helper functions
# ------------------------------------------------------------
def _sort_by_time(self, model, iter1, iter2, data=None):
"""The sort function where we sort by the datetime.datetime object"""
d1 = model.get_value(iter1, Columns.DATETIME)
d2 = model.get_value(iter2, Columns.DATETIME)
# Why do we get called with None values?!
if not d1:
return 1
if not d2:
return -1
if d1 < d2:
return -1
elif d1 > d2:
return 1
return 0
# ------------------------------------------------------------
# Widget creation functions
# ------------------------------------------------------------
@ -257,8 +249,8 @@ class Interface(object):
self.grid_store = gtk.ListStore(object)
# Trying to store the NetworkData object only
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_func(0, self._sort_by_time)
# self.grid_store.set_sort_column_id(0, gtk.SORT_DESCENDING)
self.grid = gtk.TreeView(self.grid_store)
self.grid.set_property('headers-visible', False)
@ -311,10 +303,10 @@ class Interface(object):
'Settings', gtk.STOCK_PREFERENCES)
#settings_action.connect('activate', self.show_settings)
update_action = gtk.Action('Update', '_Update', 'Update your status',
gtk.STOCK_ADD)
update_action.set_property('sensitive', False)
update_action.connect('activate', self._update_status)
self._update_action = gtk.Action('Update', '_Update',
'Update your status', gtk.STOCK_ADD)
self._update_action.set_property('sensitive', False)
self._update_action.connect('activate', self._update_status)
delete_action = gtk.Action('Delete', '_Delete', 'Delete a post',
gtk.STOCK_DELETE)
@ -355,7 +347,7 @@ class Interface(object):
self.action_group.add_action(about_action)
#self.action_group.add_action_with_accel(shrink_url_action, '<Ctrl>u')
#self.action_group.add_action_with_accel(mute_action, '<Ctrl>m')
self.action_group.add_action_with_accel(update_action,
self.action_group.add_action_with_accel(self._update_action,
'<Ctrl>Return')
# definition of the UI
@ -404,13 +396,14 @@ class Interface(object):
text_buffer = self._update_text.get_buffer()
text_buffer.connect('changed', self._count_chars)
update_button = gtk.Button(stock=gtk.STOCK_ADD)
update_button.connect('clicked', self._update_status)
self._update_button = gtk.Button(stock=gtk.STOCK_ADD)
self._update_button.connect('clicked', self._update_status)
self._update_button.set_property('sensitive', False)
update_box = gtk.HBox(False, 0)
update_box.pack_start(self._update_text, expand=True, fill=True,
padding=0)
update_box.pack_start(update_button, expand=False, fill=False,
update_box.pack_start(self._update_button, expand=False, fill=False,
padding=0)
info_box = gtk.HBox(False, 0)
@ -480,6 +473,7 @@ class Interface(object):
return
# ------------------------------------------------------------
# Widget callback functions
# ------------------------------------------------------------
@ -487,26 +481,28 @@ class Interface(object):
def _count_chars(self, text_buffer):
"""Count the number of chars in the edit field and update the
label that shows the available space."""
text = _buffer_text(text_buffer)
count = len(text)
start = text_buffer.get_start_iter()
end = text_buffer.get_end_iter()
text = text_buffer.get_text(start, end, include_hidden_chars=False)
self._char_count.set_text('(%d)' % (140 - count))
self._char_count.set_text('(%d)' % (140 - len(text)))
self._update_button.set_property('sensitive', not (count == 0))
self._update_action.set_property('sensitive', not (count == 0))
return True
def _update_status(self):
def _update_status(self, widget):
"""Update your status."""
_log.debug('Updating status.')
status = self._update_text.get_text()
status = _buffer_text(self._update_text.get_buffer())
status = status.strip()
if not str_len(status):
if not status:
return
self.update_text.set_sensitive(False)
self.statusbar.push(self.statusbar_context, 'Updating your status...')
_log.debug('Status: %s', status)
#self._update_text.set_sensitive(False)
#self.statusbar.push(self.statusbar_context, 'Updating your status...')
def quit_app(self, widget=None, user_data=None):
"""Callback when the window is destroyed or the user selects
@ -530,7 +526,9 @@ class Interface(object):
# ------------------------------------------------------------
def __init__(self, connection, options):
"""Class initialization."""
"""Start the interface. `connection` is the :class:`Networks` object
with all the available networks. `options` is the :class:`ConfigOpt`
object with the configuration to run Mitter."""
self._connection = connection
self._options = options
@ -567,6 +565,7 @@ class Interface(object):
# self.set_auto_refresh()
# self.window.set_focus(self.update_text)
return
def __call__(self):

Loading…
Cancel
Save