Status bar message expiry based on signals and Urwid main loop

This commit is contained in:
Aldo Cortesi
2015-03-21 12:37:00 +13:00
parent 8725d50d03
commit 381a563067
4 changed files with 23 additions and 9 deletions

View File

@@ -212,6 +212,12 @@ class ConsoleMaster(flow.FlowMaster):
if options.app:
self.start_app(self.options.app_host, self.options.app_port)
signals.call_in.connect(self.sig_call_in)
def sig_call_in(self, sender, seconds, callback, args=()):
def cb(*_):
return callback(*args)
self.loop.set_alarm_in(seconds, cb)
def start_stream_to_path(self, path, mode="wb"):
path = os.path.expanduser(path)
@@ -576,7 +582,7 @@ class ConsoleMaster(flow.FlowMaster):
self.prompt_done()
msg = p(txt, *args)
if msg:
signals.status_message.send(message=msg, expire=1000)
signals.status_message.send(message=msg, expire=1)
def prompt_cancel(self):
self.prompt_done()

View File

@@ -132,7 +132,7 @@ class GridWalker(urwid.ListWalker):
errors = self.lst[self.focus][1]
emsg = self.editor.is_error(self.focus_col, val)
if emsg:
signals.status_message.send(message = emsg, expire = 1000)
signals.status_message.send(message = emsg, expire = 1)
errors.add(self.focus_col)
else:
errors.discard(self.focus_col)

View File

@@ -2,3 +2,4 @@
import blinker
status_message = blinker.Signal()
call_in = blinker.Signal()

View File

@@ -1,4 +1,3 @@
import time
import urwid
@@ -7,11 +6,14 @@ from . import pathedit, signals
from .. import utils
class ActionBar(urwid.WidgetWrap):
def __init__(self):
urwid.WidgetWrap.__init__(self, urwid.Text(""))
signals.status_message.connect(self.message)
urwid.WidgetWrap.__init__(self, None)
self.clear()
signals.status_message.connect(self.sig_message)
def clear(self):
self._w = urwid.Text("")
def selectable(self):
return True
@@ -22,9 +24,14 @@ class ActionBar(urwid.WidgetWrap):
def prompt(self, prompt, text = ""):
self._w = urwid.Edit(prompt, text or "")
def message(self, sender, message, expire=None):
self.expire = expire
self._w = urwid.Text(message)
def sig_message(self, sender, message, expire=None):
w = urwid.Text(message)
self._w = w
if expire:
def cb(*args):
if w == self._w:
self.clear()
signals.call_in.send(seconds=expire, callback=cb)
class StatusBar(urwid.WidgetWrap):