summaryrefslogtreecommitdiff
path: root/src/windows/misc.py
diff options
context:
space:
mode:
authormathieui <mathieui@mathieui.net>2014-05-05 23:16:33 +0200
committermathieui <mathieui@mathieui.net>2014-05-05 23:16:33 +0200
commit2f629ee68675c097bf8c8d80f8a2712e6518d1b0 (patch)
treed3d3a8fdff41a0ec6f9c8d976fea760df6fb4df8 /src/windows/misc.py
parent109e86cbabf6b294b6b7235dee2aeb8afd582459 (diff)
downloadpoezio-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.py61
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()
+