88 lines
3.5 KiB
Python
88 lines
3.5 KiB
Python
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 .groups.AddGroupView import AddGroupView
|
|
from .groups.AddMemberToGroupView import AddMemberToGroupView
|
|
from .groups.GetGroupView import GetGroupView
|
|
from .groups.GetGroupResultView import GetGroupResultView
|
|
from .groups.RemoveMemberFromGroupView import RemoveMemberFromGroupView
|
|
from .members.AddUserView import AddUserView
|
|
from .members.ChangeLoginShellView import ChangeLoginShellView
|
|
from .members.GetUserView import GetUserView
|
|
from .members.GetUserResultView import GetUserResultView
|
|
from .members.RenewUserView import RenewUserView
|
|
from .members.ResetPasswordView import ResetPasswordView
|
|
from .members.ResetPasswordResultView import ResetPasswordResultView
|
|
from .members.SetForwardingAddressesView import SetForwardingAddressesView
|
|
|
|
|
|
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)),
|
|
('ResetPassword', ResetPasswordView(screen, width, height, model)),
|
|
('ResetPasswordResult', ResetPasswordResultView(screen, width, height, model)),
|
|
('ChangeLoginShell', ChangeLoginShellView(screen, width, height, model)),
|
|
('SetForwardingAddresses', SetForwardingAddressesView(screen, width, height, model)),
|
|
('AddGroup', AddGroupView(screen, width, height, model)),
|
|
('GetGroup', GetGroupView(screen, width, height, model)),
|
|
('GetGroupResult', GetGroupResultView(screen, width, height, model)),
|
|
('AddMemberToGroup', AddMemberToGroupView(screen, width, height, model)),
|
|
('RemoveMemberFromGroup', RemoveMemberFromGroupView(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
|