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/info_bar.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/info_bar.py')
-rw-r--r-- | src/windows/info_bar.py | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/src/windows/info_bar.py b/src/windows/info_bar.py new file mode 100644 index 00000000..9917fa6a --- /dev/null +++ b/src/windows/info_bar.py @@ -0,0 +1,109 @@ +""" +Module defining the global info bar + +This window is the one listing the current opened tabs in poezio. +The GlobalInfoBar can be either horizontal or vertical +(VerticalGlobalInfoBar). +""" +import logging +log = logging.getLogger(__name__) + +import curses + + +from config import config +from . import Win, g_lock +from theming import get_theme, to_curses_attr + +class GlobalInfoBar(Win): + def __init__(self): + Win.__init__(self) + + def refresh(self): + log.debug('Refresh: %s', self.__class__.__name__) + with g_lock: + self._win.erase() + self.addstr(0, 0, "[", to_curses_attr(get_theme().COLOR_INFORMATION_BAR)) + + create_gaps = config.get('create_gaps', False) + show_names = config.get('show_tab_names', False) + show_nums = config.get('show_tab_numbers', True) + use_nicks = config.get('use_tab_nicks', True) + # ignore any remaining gap tabs if the feature is not enabled + if create_gaps: + sorted_tabs = self.core.tabs[:] + else: + sorted_tabs = [tab for tab in self.core.tabs if tab] + + for nb, tab in enumerate(sorted_tabs): + if not tab: continue + color = tab.color + if not config.get('show_inactive_tabs', True) and\ + color is get_theme().COLOR_TAB_NORMAL: + continue + try: + if show_nums or not show_names: + self.addstr("%s" % str(nb), to_curses_attr(color)) + if show_names: + self.addstr(' ', to_curses_attr(color)) + if show_names: + if use_nicks: + self.addstr("%s" % str(tab.get_nick()), to_curses_attr(color)) + else: + self.addstr("%s" % tab.name, to_curses_attr(color)) + self.addstr("|", to_curses_attr(get_theme().COLOR_INFORMATION_BAR)) + except: # end of line + break + (y, x) = self._win.getyx() + self.addstr(y, x-1, '] ', to_curses_attr(get_theme().COLOR_INFORMATION_BAR)) + (y, x) = self._win.getyx() + remaining_size = self.width - x + self.addnstr(' '*remaining_size, remaining_size, + to_curses_attr(get_theme().COLOR_INFORMATION_BAR)) + self._refresh() + +class VerticalGlobalInfoBar(Win): + def __init__(self, scr): + Win.__init__(self) + self._win = scr + + def refresh(self): + with g_lock: + height, width = self._win.getmaxyx() + self._win.erase() + sorted_tabs = [tab for tab in self.core.tabs if tab] + if not config.get('show_inactive_tabs', True): + sorted_tabs = [tab for tab in sorted_tabs if\ + tab.vertical_color != get_theme().COLOR_VERTICAL_TAB_NORMAL] + nb_tabs = len(sorted_tabs) + use_nicks = config.get('use_tab_nicks', True) + if nb_tabs >= height: + for y, tab in enumerate(sorted_tabs): + if tab.vertical_color == get_theme().COLOR_VERTICAL_TAB_CURRENT: + pos = y + break + # center the current tab as much as possible + if pos < height//2: + sorted_tabs = sorted_tabs[:height] + elif nb_tabs - pos <= height//2: + sorted_tabs = sorted_tabs[-height:] + else: + sorted_tabs = sorted_tabs[pos-height//2 : pos+height//2] + for y, tab in enumerate(sorted_tabs): + color = tab.vertical_color + + if not config.get('vertical_tab_list_sort', 'desc') != 'asc': + y = height - y - 1 + self.addstr(y, 0, "%2d" % tab.nb, + to_curses_attr(get_theme().COLOR_VERTICAL_TAB_NUMBER)) + self.addstr('.') + if use_nicks: + self.addnstr("%s" % tab.get_nick(), width - 4, to_curses_attr(color)) + else: + self.addnstr("%s" % tab.name, width - 4, to_curses_attr(color)) + separator = to_curses_attr(get_theme().COLOR_VERTICAL_SEPARATOR) + self._win.attron(separator) + self._win.vline(0, width-1, curses.ACS_VLINE, height) + self._win.attroff(separator) + self._refresh() + |