from asciimatics.widgets import Frame, ListBox, Layout, Divider, \ Button, Widget from asciimatics.exceptions import NextScene, StopApplication class WelcomeView(Frame): def __init__(self, screen, width, height, model): super().__init__( screen, height, width, can_scroll=False, title='CSC Electronic Office', ) self._model = model self._members_menu_items = [ ('Add member', 'AddUser'), ('Add club rep', 'AddUser'), ('Renew member', 'RenewUser'), ('Renew club rep', 'RenewUser'), ('Get user info', 'GetUserInfo'), ('Reset password', 'ResetPassword'), ('Modify user', 'ModifyUser'), ] self._members_menu = ListBox( Widget.FILL_FRAME, [ (desc, i) for i, (desc, view) in enumerate(self._members_menu_items) ], name='members', label='Members', on_select=self._members_menu_select, ) layout = Layout([100], fill_frame=True) self.add_layout(layout) layout.add_widget(self._members_menu) layout.add_widget(Divider()) layout = Layout([1, 1, 1]) self.add_layout(layout) layout.add_widget(Button("Quit", self._quit), 2) self.fix() def _members_menu_select(self): self.save() item_id = self.data['members'] desc, view = self._members_menu_items[item_id] if desc.endswith('club rep'): self._model.for_member = False self._model.title = desc self._model.scene_stack.append('Welcome') raise NextScene(view) @staticmethod def _quit(): raise StopApplication("User pressed quit")