#!/usr/bin/python """ Written by Igor Pashev The author has placed this work in the Public Domain, thereby relinquishing all copyrights. Everyone is free to use, modify, republish, sell or give away this work without prior consent from anybody. """ from snack import * import math import os class ProgressMessage(object): _text = None @property def text(self): return self._text @text.setter def text(self, text): self._text = text self._textbox.setText(self._text) self._refresh() def _refresh(self): self._form.draw() self._screen.refresh() def __init__(self, screen, width=60, title=' ', text=' '): self._screen = screen self._textbox = TextboxReflowed(width, text) self._grid = Grid(1, 1) self._grid.setField(self._textbox, 0, 0) self._screen.gridWrappedWindow(self._grid, title) self._form = Form() self._form.add(self._textbox) self._refresh() def __del__(self): self._screen.popWindow() class ProgressBar(object): _progress = 0 _top = 0 _text = None _textbox = None _screen = None _form = None _scale = None _grid = None _allow_back = False @property def text(self): return self._text @text.setter def text(self, text): self._text = text self._textbox.setText(self._text) self._refresh() @property def progress(self): return self._progress @text.setter def progress(self, i): if type(i) == 'str': i = float(i) if type(i) == 'float': i = math.ceil(i) if i > self._top: i = self._top i = int(i) if i > self._progress or self._allow_back: self._progress = int(i) self._scale.set(self._progress) self._refresh() def advance(self, i=1): self.progress = self._progress + i def reset(self): self._progress = 0; self._refresh() def _refresh(self): self._form.draw() self._screen.refresh() def __init__(self, screen, width=60, title='', text=' ', top=100, allow_back=False): self._allow_back = allow_back self._screen = screen self._top = top self._textbox = TextboxReflowed(width, text) self._scale = Scale(width, self._top) self._scale.set(0) self._grid = Grid(1, 2) self._grid.setField(self._textbox, 0, 0) self._grid.setField(self._scale, 0, 1) self._screen.gridWrappedWindow(self._grid, title) self._form = Form() self._form.add(self._textbox) self._form.add(self._scale) self._refresh() def __del__(self): self._screen.popWindow() class BaseProgress(object): _progressbar = None _screen = None _title = None _text = '' def __init__(self, screen, title, text=''): self._screen = screen self._title = title self._text = text def _create_progressbar(self): self._progressbar = ProgressBar(self._screen, title=self._title, text=self._text) def _destroy_progressbar(self): del self._progressbar self._progressbar = None