|
@ -1,35 +1,36 @@ |
|
|
import os |
|
|
import os |
|
|
|
|
|
import platform |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Colors: |
|
|
""" ANSI color codes """ |
|
|
def __init__(self): |
|
|
colors = { |
|
|
""" ANSI color codes """ |
|
|
'BLACK' : "\033[0;30m", |
|
|
self.BLACK = "\033[0;30m" |
|
|
'RED' : "\033[0;31m", |
|
|
self.RED = "\033[0;31m" |
|
|
'GREEN' : "\033[0;32m", |
|
|
self.GREEN = "\033[0;32m" |
|
|
'BROWN' : "\033[0;33m", |
|
|
self.BROWN = "\033[0;33m" |
|
|
'BLUE' : "\033[0;34m", |
|
|
self.BLUE = "\033[0;34m" |
|
|
'PURPLE' : "\033[0;35m", |
|
|
self.PURPLE = "\033[0;35m" |
|
|
'CYAN' : "\033[0;36m", |
|
|
self.CYAN = "\033[0;36m" |
|
|
'LIGHT_GRAY' : "\033[0;37m", |
|
|
self.LIGHT_GRAY = "\033[0;37m" |
|
|
'DARK_GRAY' : "\033[1;30m", |
|
|
self.DARK_GRAY = "\033[1;30m" |
|
|
'LIGHT_RED' : "\033[1;31m", |
|
|
self.LIGHT_RED = "\033[1;31m" |
|
|
'LIGHT_GREEN' : "\033[1;32m", |
|
|
self.LIGHT_GREEN = "\033[1;32m" |
|
|
'YELLOW' : "\033[1;33m", |
|
|
self.YELLOW = "\033[1;33m" |
|
|
'LIGHT_BLUE' : "\033[1;34m", |
|
|
self.LIGHT_BLUE = "\033[1;34m" |
|
|
'LIGHT_PURPLE' : "\033[1;35m", |
|
|
self.LIGHT_PURPLE = "\033[1;35m" |
|
|
'LIGHT_CYAN' : "\033[1;36m", |
|
|
self.LIGHT_CYAN = "\033[1;36m" |
|
|
'LIGHT_WHITE' : "\033[1;37m", |
|
|
self.LIGHT_WHITE = "\033[1;37m" |
|
|
'BOLD' : "\033[1m", |
|
|
self.BOLD = "\033[1m" |
|
|
'FAINT' : "\033[2m", |
|
|
self.FAINT = "\033[2m" |
|
|
'ITALIC' : "\033[3m", |
|
|
self.ITALIC = "\033[3m" |
|
|
'UNDERLINE' : "\033[4m", |
|
|
self.UNDERLINE = "\033[4m" |
|
|
'END' : "\033[0m" |
|
|
self.END = "\033[0m" |
|
|
} |
|
|
|
|
|
|
|
|
class Cli(Colors): |
|
|
|
|
|
|
|
|
class Cli(): |
|
|
"""Classe gérant l'interface graphique""" |
|
|
"""Classe gérant l'interface graphique""" |
|
|
def __init__(self, **kwargs): |
|
|
def __init__(self, **kwargs): |
|
|
super().__init__() |
|
|
|
|
|
self.width = os.get_terminal_size().columns |
|
|
self.width = os.get_terminal_size().columns |
|
|
self.height = os.get_terminal_size().lines -1 |
|
|
self.height = os.get_terminal_size().lines -1 |
|
|
for key, value in kwargs.items(): |
|
|
for key, value in kwargs.items(): |
|
@ -41,10 +42,20 @@ class Cli(Colors): |
|
|
|
|
|
|
|
|
self.screen = [[' ' for i in range(self.width)] for j in range(self.height)] |
|
|
self.screen = [[' ' for i in range(self.width)] for j in range(self.height)] |
|
|
|
|
|
|
|
|
|
|
|
def __clear(self): |
|
|
|
|
|
if platform.system() == 'Linux': |
|
|
|
|
|
os.system('clear') |
|
|
|
|
|
else: |
|
|
|
|
|
os.system('cls') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def __set_dimensions(self): |
|
|
def __set_dimensions(self): |
|
|
""" Défini les dimensions du terminal """ |
|
|
""" Défini les dimensions du terminal """ |
|
|
|
|
|
if platform.system() == 'Linux': |
|
|
os.system('resize -s {} {}'.format(self.height + 1, self.width)) |
|
|
os.system('resize -s {} {}'.format(self.height + 1, self.width)) |
|
|
os.system('clear') |
|
|
else: |
|
|
|
|
|
os.system('mode con: cols={} lines={}'.format(self.width, self.height + 1)) |
|
|
|
|
|
self.__clear() |
|
|
|
|
|
|
|
|
def display(self): |
|
|
def display(self): |
|
|
"""affiche le contenu de self.screen""" |
|
|
"""affiche le contenu de self.screen""" |
|
@ -53,8 +64,15 @@ class Cli(Colors): |
|
|
print(''.join(line)) |
|
|
print(''.join(line)) |
|
|
self.screen = [[' ' for i in range(self.width)] for j in range(self.height)] |
|
|
self.screen = [[' ' for i in range(self.width)] for j in range(self.height)] |
|
|
|
|
|
|
|
|
def draw(self, content, x, y): |
|
|
def draw(self, content, x, y, **kwargs): |
|
|
"""dessine aux coordonées""" |
|
|
"""dessine aux coordonées""" |
|
|
|
|
|
for key, value in kwargs.items(): |
|
|
|
|
|
if key == 'color': |
|
|
|
|
|
try: |
|
|
|
|
|
self.screen[y][x-1] = colors[value] |
|
|
|
|
|
self.screen[y][x+len(str(content))] = colors['END'] |
|
|
|
|
|
except: |
|
|
|
|
|
pass |
|
|
for i in range(len(str(content))): |
|
|
for i in range(len(str(content))): |
|
|
try: |
|
|
try: |
|
|
if content[i] != ' ': |
|
|
if content[i] != ' ': |
|
@ -69,7 +87,22 @@ class Cli(Colors): |
|
|
if percent > 25: |
|
|
if percent > 25: |
|
|
self.draw('|{}{}|'.format(''.join(['█' for i in range(part_to_draw)]), ''.join([' ' for i in range(length - part_to_draw)])), x, y) |
|
|
self.draw('|{}{}|'.format(''.join(['█' for i in range(part_to_draw)]), ''.join([' ' for i in range(length - part_to_draw)])), x, y) |
|
|
else: |
|
|
else: |
|
|
self.draw('{}|{}{}|{}'.format(self.RED, ''.join(['█' for i in range(part_to_draw)]), ''.join([' ' for i in range(length - part_to_draw)]), self.END), x, y) |
|
|
self.draw('{}|{}{}|{}'.format(colors['RED'], ''.join(['█' for i in range(part_to_draw)]), ''.join([' ' for i in range(length - part_to_draw)]), colors['END']), x, y) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Layer(Cli): |
|
|
|
|
|
"""defini une zone indépendante dans l'écran pour ne pas tout recharger""" |
|
|
|
|
|
def __init__(self, x, y, shape): |
|
|
|
|
|
"""shape doit être fournis sous forme de tableau""" |
|
|
|
|
|
super().__init__() |
|
|
|
|
|
|
|
|
|
|
|
self.x = x |
|
|
|
|
|
self.y = y |
|
|
|
|
|
self.width = max(map(len, shape)) |
|
|
|
|
|
self.height = len(shape) |
|
|
|
|
|
|
|
|
|
|
|
def refresh(self): |
|
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print(platform.system()) |