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/misc.py | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 src/windows/misc.py (limited to 'src/windows/misc.py') diff --git a/src/windows/misc.py b/src/windows/misc.py new file mode 100644 index 00000000..0f6bce59 --- /dev/null +++ b/src/windows/misc.py @@ -0,0 +1,61 @@ +""" +Wins that don’t fit any category +""" + +import logging +log = logging.getLogger(__name__) + +import curses + +from . import Win, g_lock +from theming import get_theme, to_curses_attr + +class VerticalSeparator(Win): + """ + Just a one-column window, with just a line in it, that is + refreshed only on resize, but never on refresh, for efficiency + """ + def __init__(self): + Win.__init__(self) + + def rewrite_line(self): + with g_lock: + self._win.vline(0, 0, curses.ACS_VLINE, self.height, to_curses_attr(get_theme().COLOR_VERTICAL_SEPARATOR)) + self._refresh() + + def refresh(self): + log.debug('Refresh: %s', self.__class__.__name__) + self.rewrite_line() + + +class SimpleTextWin(Win): + def __init__(self, text): + Win.__init__(self) + self._text = text + self.built_lines = [] + + def rebuild_text(self): + """ + Transform the text in lines than can then be + displayed without any calculation or anything + at refresh() time + It is basically called on each resize + """ + self.built_lines = [] + for line in self._text.split('\n'): + while len(line) >= self.width: + limit = line[:self.width].rfind(' ') + if limit <= 0: + limit = self.width + self.built_lines.append(line[:limit]) + line = line[limit:] + self.built_lines.append(line) + + def refresh(self): + log.debug('Refresh: %s', self.__class__.__name__) + with g_lock: + self._win.erase() + for y, line in enumerate(self.built_lines): + self.addstr_colored(line, y, 0) + self._refresh() + -- cgit v1.2.3