summaryrefslogtreecommitdiffstats
path: root/glances/outputs/glances_bars.py
diff options
context:
space:
mode:
Diffstat (limited to 'glances/outputs/glances_bars.py')
-rw-r--r--glances/outputs/glances_bars.py72
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