diff options
author | mathieui <mathieui@mathieui.net> | 2014-05-05 23:16:33 +0200 |
---|---|---|
committer | mathieui <mathieui@mathieui.net> | 2014-05-05 23:16:33 +0200 |
commit | 2f629ee68675c097bf8c8d80f8a2712e6518d1b0 (patch) | |
tree | d3d3a8fdff41a0ec6f9c8d976fea760df6fb4df8 /src/windows/misc.py | |
parent | 109e86cbabf6b294b6b7235dee2aeb8afd582459 (diff) | |
download | poezio-2f629ee68675c097bf8c8d80f8a2712e6518d1b0.tar.gz poezio-2f629ee68675c097bf8c8d80f8a2712e6518d1b0.tar.bz2 poezio-2f629ee68675c097bf8c8d80f8a2712e6518d1b0.tar.xz poezio-2f629ee68675c097bf8c8d80f8a2712e6518d1b0.zip |
Split the windows.py module into a subdirectory
Diffstat (limited to 'src/windows/misc.py')
-rw-r--r-- | src/windows/misc.py | 61 |
1 files changed, 61 insertions, 0 deletions
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() + |