From 2f629ee68675c097bf8c8d80f8a2712e6518d1b0 Mon Sep 17 00:00:00 2001 From: mathieui Date: Mon, 5 May 2014 23:16:33 +0200 Subject: Split the windows.py module into a subdirectory --- src/windows/input_placeholders.py | 78 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 src/windows/input_placeholders.py (limited to 'src/windows/input_placeholders.py') diff --git a/src/windows/input_placeholders.py b/src/windows/input_placeholders.py new file mode 100644 index 00000000..796cf0ad --- /dev/null +++ b/src/windows/input_placeholders.py @@ -0,0 +1,78 @@ +""" +Classes used to replace the input in some tabs or special situations, +but which are not inputs. +""" + +import logging +log = logging.getLogger(__name__) + + +from . import Win, g_lock +from theming import get_theme, to_curses_attr + + +class HelpText(Win): + """ + A Window just displaying a read-only message. + Usually used to replace an Input when the tab is in + command mode. + """ + def __init__(self, text=''): + Win.__init__(self) + self.txt = text + + def refresh(self, txt=None): + log.debug('Refresh: %s', self.__class__.__name__) + if txt: + self.txt = txt + with g_lock: + self._win.erase() + self.addstr(0, 0, self.txt[:self.width-1], to_curses_attr(get_theme().COLOR_INFORMATION_BAR)) + self.finish_line(get_theme().COLOR_INFORMATION_BAR) + self._refresh() + + def do_command(self, key, raw=False): + return False + +class YesNoInput(Win): + """ + A Window just displaying a Yes/No input + Used to ask a confirmation + """ + def __init__(self, text=''): + Win.__init__(self) + self.key_func = { + 'y' : self.on_yes, + 'n' : self.on_no, + } + self.txt = text + self.value = None + + def on_yes(self): + self.value = True + + def on_no(self): + self.value = False + + def refresh(self, txt=None): + log.debug('Refresh: %s', self.__class__.__name__) + if txt: + self.txt = txt + with g_lock: + self._win.erase() + self.addstr(0, 0, self.txt[:self.width-1], to_curses_attr(get_theme().COLOR_WARNING_PROMPT)) + self.finish_line(get_theme().COLOR_WARNING_PROMPT) + self._refresh() + + def do_command(self, key, raw=False): + if key.lower() in self.key_func: + self.key_func[key]() + + def prompt(self): + """Monopolizes the input while waiting for a recognized keypress""" + cl = [] + while self.value is None: + if len(cl) == 1 and cl[0] in self.key_func: + self.key_func[cl[0]]() + cl = self.core.read_keyboard() + -- cgit v1.2.3