diff options
Diffstat (limited to 'glances/outputs/glances_bars.py')
-rw-r--r-- | glances/outputs/glances_bars.py | 72 |
1 files changed, 48 insertions, 24 deletions
diff --git a/glances/outputs/glances_bars.py b/glances/outputs/glances_bars.py index 729e4a63..c25924f1 100644 --- a/glances/outputs/glances_bars.py +++ b/glances/outputs/glances_bars.py @@ -20,54 +20,78 @@ """Manage bars for Glances output.""" # Import system lib +import locale from math import modf -# Global vars -curses_bars = [" ", "▏", "▎", "▍", "▌", "▋", "▊", "▉", "█"] - class Bar(object): - """Manage bar (progression or status) + + r"""Manage bar (progression or status). import sys import time b = Bar(10) for p in range(0, 100): - b.set_percent(p) + b.percent = p print("\r%s" % b), time.sleep(0.1) sys.stdout.flush() - """ - def __init__(self, size): + def __init__(self, size, + pre_char='[', + post_char=']', + empty_char='_', + with_text=True): # Bar size self.__size = size # Bar current percent self.__percent = 0 + # Char used for the decoration + self.__pre_char = pre_char + self.__post_char = post_char + self.__empty_char = empty_char + self.__with_text = with_text + # Char used for the bar + self.curses_bars = self.__get_curses_bars() - def get_size(self): - return self.__size + def __get_curses_bars(self): + # Return the chars used to display the bar + if locale.getdefaultlocale()[1] == 'UTF-8': + return [" ", "▏", "▎", "▍", "▌", "▋", "▊", "▉", "█"] + else: + return [" ", " ", " ", " ", "|", "|", "|", "|", "|"] - def set_size(self, size): - self.__size = size - return self.__size + @property + def size(self, with_decoration=False): + # Return the bar size, with or without decoration + if with_decoration: + return self.__size + if self.__with_text: + return self.__size - 6 - def get_percent(self): - return self.__percent + # @size.setter + # def size(self, value): + # self.__size = value - def set_percent(self, percent): - assert percent >= 0 - assert percent <= 100 - self.__percent = percent + @property + def percent(self): return self.__percent + @percent.setter + def percent(self, value): + assert value >= 0 + assert value <= 100 + self.__percent = value + def __str__(self): - """Return the bars""" - frac, whole = modf(self.get_size() * self.get_percent() / 100.0) - ret = curses_bars[8] * int(whole) + """Return the bars.""" + frac, whole = modf(self.size * self.percent / 100.0) + ret = self.curses_bars[8] * int(whole) if frac > 0: - ret += curses_bars[int(frac * 8)] + ret += self.curses_bars[int(frac * 8)] whole += 1 - ret += '_' * int(self.get_size() - whole) - return ret + ret += self.__empty_char * int(self.size - whole) + if self.__with_text: + ret = '{0}{1:>5}%'.format(ret, self.percent) + return self.__pre_char + ret + self.__post_char |