From b26e329e8323f1e033b6cf540949f592576c0f23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-Elliott=20B=C3=A9cue?= Date: Thu, 8 May 2014 22:42:11 +0200 Subject: [PATCH] =?UTF-8?q?[affichage]=20Ajout=20d'une=20fonction=20de=20s?= =?UTF-8?q?tyle=20d=C3=A9di=C3=A9e=20pour=20dialog?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gestion/affichage.py | 77 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 70 insertions(+), 7 deletions(-) diff --git a/gestion/affichage.py b/gestion/affichage.py index 57c8dfde..199ed149 100755 --- a/gestion/affichage.py +++ b/gestion/affichage.py @@ -1,5 +1,36 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +# +# Vrac d'outils pour avoir un affichage sympathique. +# Auteur : Pierre-Elliott Bécue +# Licence : GPLv3 +# +# Contenu : +# --------- +# +# Décorateur : +# static_var(name, val), un décorateur pour créer une variable +# statique dans une fonction +# +# Fonctions : +# getTerminalSize(), une fonction qui récupère le couple +# largeur, hauteur du terminal courant. +# cap_text(text, length), un raccourci pour couper un texte +# trop long en mettant … +# format_percent(percent), un raccourci qui fait en sorte +# qu'un pourcentage prenne toujours autant de caractères +# en ajoutant des espaces (c'est pour les prints dynamiques) +# rojv(percent, seuils, couls), une méthode qui affiche une couleur +# pour un pourcentage en fonction de la valeur de celui-ci, des +# seuils définis, et des couleurs disponibles. +# style(texte, what), une méthode qui applique un ensemble de styles +# contenus dans what au texte texte. +# dialogStyle(texte, what), pareil, mais dans dialog +# prettyDoin(what, status), une méthode qui affiche des messages "service"- +# like, en mettant le status en fonction de l'accomplissement de la tâche. +# +# Classes : +# Animation, une classe générant les animations type "progress bar". import sys import os @@ -7,6 +38,7 @@ import fcntl import termios import struct import functools +import time def static_var(name, val): """Decorator setting static variable @@ -53,10 +85,10 @@ def getTerminalSize(): return int(cr[1]), int(cr[0]) def cap_text(text, length): - """Cap text length to length + """Cap text length to length-1 """ - if len(text) > length: + if len(text) >= length: return text[0:length-1] + "…" else: return text @@ -105,7 +137,7 @@ class Animation(object): """ - def __init__(self, texte, nb_cycles=0, couleur=True, kikoo=True): + def __init__(self, texte, nb_cycles=0, couleur=True, kikoo=True, timer=True): """__init__ """ @@ -114,6 +146,8 @@ class Animation(object): self.kikoo = kikoo self.step = 0 self.couleur = couleur + self.timer = timer + self.beginTime = 0 def kikoo(self, kikoo): """Switch pour la valeur kikoo""" @@ -123,6 +157,8 @@ class Animation(object): """Effectue une étape dans l'affichage """ + if self.step == 0 and self.timer: + self.beginTime = time.time() cols, _ = getTerminalSize() if not self.nb_cycles > 0: @@ -136,8 +172,8 @@ class Animation(object): percent = "%s %%" % (format_percent(percent),) sys.stdout.write("\r%s : %s" % (cap_text(self.texte, cols - 10), percent)) else: - # La kikoo bar est une barre de la forme [###### ] - # Nombre de # + # La kikoo bar est une barre de la forme [======> ] + # Nombre de = amount = percent/4 # On remplit le reste avec des espaces. if self.couleur: @@ -155,6 +191,10 @@ class Animation(object): format_percent(percent)) sys.stdout.write("\r%s %s" % (cap_text(self.texte, cols - 45), kikoo_print)) + + if self.timer: + self.elapsedTime = time.time() - self.beginTime + sys.stdout.write(" (temps écoulé : %ds)" % (self.elapsedTime)) sys.stdout.flush() self.step += 1 @@ -190,8 +230,6 @@ def style(texte, what=[]): """ if isinstance(what, str): what = [what] - # Pour l'éventuelle coloration du fond. - add = 0 if not what: return texte @@ -235,6 +273,31 @@ OK = style('Ok', 'vert') WARNING = style('Warning', 'jaune') ERREUR = style('Erreur', 'rouge') +def dialogStyle(texte, what): + """Fournit du texte coloré pour dialog. + + Séparé volontairement de style pour une meilleure + utilisation. + + """ + + if isinstance(what, str): + what = [what] + + dialog_styles = { + 'rouge': 1, + 'vert': 2, + 'jaune': 3, + 'bleu': 4, + 'violet': 5, + 'cyan': 6, + 'gris': 0, + 'gras': 'b' } + + for elem in what: + texte = "\Z%s%s\Zn" % (dialog_styles[elem], texte) + return texte + def prettyDoin(what, status): """Affiche une opération en cours et met son statut à jour