summaryrefslogtreecommitdiff
path: root/src/windows/info_bar.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/info_bar.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/info_bar.py')
-rw-r--r--src/windows/info_bar.py109
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()
+