import sys from asciimatics.event import KeyboardEvent from asciimatics.exceptions import ResizeScreenError, StopApplication from asciimatics.scene import Scene from asciimatics.screen import Screen from .ConfirmView import ConfirmView from .ErrorView import ErrorView from .Model import Model from .ResultView import ResultView from .TransactionView import TransactionView from .WelcomeView import WelcomeView from .members.AddUserView import AddUserView from .members.GetUserView import GetUserView from .members.GetUserResultView import GetUserResultView from .members.RenewUserView import RenewUserView def unhandled(event): if isinstance(event, KeyboardEvent): c = event.key_code # Stop on 'q' or 'Esc' if c in (113, 27): raise StopApplication("User terminated app") # tuples of (name, view) views = [] def screen_wrapper(screen, last_scene, model): global views # unload the old views for name, view in views: if hasattr(view, '_on_ceoframe_unload'): view._on_ceoframe_unload() width = min(screen.width, 90) height = min(screen.height, 24) views = [ ('Welcome', WelcomeView(screen, width, height, model)), ('Confirm', ConfirmView(screen, width, height, model)), ('Transaction', TransactionView(screen, width, height, model)), ('Result', ResultView(screen, width, height, model)), ('Error', ErrorView(screen, width, height, model)), ('AddUser', AddUserView(screen, width, height, model)), ('RenewUser', RenewUserView(screen, width, height, model)), ('GetUser', GetUserView(screen, width, height, model)), ('GetUserResult', GetUserResultView(screen, width, height, model)), ] scenes = [ Scene([view], -1, name=name) for name, view in views ] model.screen = screen model.views = [view for name, view in views] screen.play( scenes, stop_on_resize=True, start_scene=last_scene, allow_int=True, unhandled_input=unhandled) def main(): last_scene = None model = Model() while True: try: Screen.wrapper(screen_wrapper, arguments=[last_scene, model]) sys.exit(0) except ResizeScreenError as e: last_scene = e.scene