This commit is contained in:
Sam Parkinson 2015-10-31 14:10:33 +11:00
commit ec7f723819

View File

@ -346,9 +346,35 @@ class _TimeoutIcon(Gtk.Alignment):
self._text.set_markup('<b>%s</b>' % GLib.markup_escape_text(str(text))) self._text.set_markup('<b>%s</b>' % GLib.markup_escape_text(str(text)))
class TimeoutAlert(Alert): class _TimeoutAlert(Alert):
def __init__(self, timeout=5, label=_('Ok'), **kwargs):
Alert.__init__(self, **kwargs)
self._timeout = timeout
self._timeout_text = _TimeoutIcon()
self._timeout_text.set_text(self._timeout)
self.add_button(Gtk.ResponseType.OK, label, self._timeout_text)
self._timeout_text.show()
self._timeout_sid = GLib.timeout_add(1000, self.__timeout_cb)
def __timeout_cb(self):
self._timeout -= 1
self._timeout_text.set_text(self._timeout)
if self._timeout == 0:
Alert._response(self, Gtk.ResponseType.OK)
return False
return True
def _response(self, *args):
GLib.source_remove(self._timeout_sid)
Alert._response(self, *args)
class TimeoutAlert(_TimeoutAlert):
""" """
This is a ready-made two button (Cancel, Continue) alert. The continue This is a ready-made two button (Continue, Cancel) alert. The continue
button contains a visual countdown indicating the time remaining to the button contains a visual countdown indicating the time remaining to the
user. If the user does not select a button before the timeout, the user. If the user does not select a button before the timeout, the
response callback is called and the alert is usually removed. response callback is called and the alert is usually removed.
@ -389,35 +415,14 @@ class TimeoutAlert(Alert):
""" """
def __init__(self, timeout=5, **kwargs): def __init__(self, timeout=5, **kwargs):
Alert.__init__(self, **kwargs) _TimeoutAlert.__init__(self, timeout, _('Continue'), **kwargs)
self._timeout = timeout
icon = Icon(icon_name='dialog-cancel') icon = Icon(icon_name='dialog-cancel')
self.add_button(Gtk.ResponseType.CANCEL, _('Cancel'), icon) self.add_button(Gtk.ResponseType.CANCEL, _('Cancel'), icon)
icon.show() icon.show()
self._timeout_text = _TimeoutIcon()
self._timeout_text.set_text(self._timeout)
self.add_button(Gtk.ResponseType.OK, _('Continue'), self._timeout_text)
self._timeout_text.show()
self._timeout_sid = GLib.timeout_add(1000, self.__timeout) class NotifyAlert(_TimeoutAlert):
def __timeout(self):
self._timeout -= 1
self._timeout_text.set_text(self._timeout)
if self._timeout == 0:
Alert._response(self, Gtk.ResponseType.OK)
return False
return True
def _response(self, *args):
GLib.source_remove(self._timeout_sid)
Alert._response(self, *args)
class NotifyAlert(Alert):
""" """
Timeout alert with only an "OK" button. This should be used just for Timeout alert with only an "OK" button. This should be used just for
notifications and not for user interaction. The alert will timeout after notifications and not for user interaction. The alert will timeout after
@ -448,21 +453,4 @@ class NotifyAlert(Alert):
""" """
def __init__(self, timeout=5, **kwargs): def __init__(self, timeout=5, **kwargs):
Alert.__init__(self, **kwargs) _TimeoutAlert.__init__(self, timeout, _('Ok'), **kwargs)
self._timeout = timeout
self._timeout_text = _TimeoutIcon()
self._timeout_text.set_text(self._timeout)
self.add_button(Gtk.ResponseType.OK, _('Ok'), self._timeout_text)
self._timeout_text.show()
GLib.timeout_add(1000, self.__timeout)
def __timeout(self):
self._timeout -= 1
self._timeout_text.set_text(self._timeout)
if self._timeout == 0:
self._response(Gtk.ResponseType.OK)
return False
return True