from asciimatics.widgets import ListBox, Layout, Divider, Button, Label from asciimatics.exceptions import NextScene, StopApplication from .CeoFrame import CeoFrame class WelcomeView(CeoFrame): def __init__(self, screen, width, height, model): super().__init__( screen, height, width, model, 'Welcome', title='CSC Electronic Office', escape_on_q=True, ) members_menu_items = [ ('Add member', 'AddUser'), ('Add club rep', 'AddUser'), ('Renew member', 'RenewUser'), ('Renew club rep', 'RenewUser'), ('Get user info', 'GetUser'), ('Reset password', 'ResetPassword'), ('Change login shell', 'ChangeLoginShell'), ('Set forwarding addresses', 'SetForwardingAddresses'), ] groups_menu_items = [ ('Add group', 'AddGroup'), ('Get group members', 'GetGroup'), ('Add member to group', 'AddMemberToGroup'), ('Remove member from group', 'RemoveMemberFromGroup'), ] db_menu_items = [ ('Create MySQL database', 'CreateDatabase'), ('Reset MySQL password', 'ResetDatabasePassword'), ('Create PostgreSQL database', 'CreateDatabase'), ('Reset PostgreSQL password', 'ResetDatabasePassword'), ] positions_menu_items = [ ('Get positions', 'GetPositions'), ('Set positions', 'SetPositions'), ] self.menu_items = [ ('members', members_menu_items), ('groups', groups_menu_items), ('databases', db_menu_items), ('positions', positions_menu_items), ] self.menu_items_dict = dict(self.menu_items) flat_menu_items = [item for name, items in self.menu_items for item in items] menu = ListBox( len(flat_menu_items), [ (desc, i) for i, (desc, view) in enumerate(flat_menu_items) ], name='menu', on_select=self._menu_select, ) labels = [] for name, items in self.menu_items: labels.append(Label(name.capitalize(), align='>')) for _ in range(len(items) - 1): labels.append(Label('')) layout = Layout([5, 1, 8], fill_frame=True) self.add_layout(layout) layout.add_widget(menu, 2) for label in labels: layout.add_widget(label, 0) layout = Layout([100]) self.add_layout(layout) layout.add_widget(Label('Press to switch widgets')) layout.add_widget(Divider()) layout = Layout([1, 1, 1]) self.add_layout(layout) layout.add_widget(Button("Quit", self._quit), 2) self.fix() def _menu_select(self): self.save() item_id = self.data['menu'] # find which submenu the item belongs to counter = 0 for name, items in self.menu_items: if item_id < counter + len(items): break counter += len(items) submenu_idx = item_id - counter desc, view = items[submenu_idx] if name == 'members': if desc.endswith('club rep'): self._model.is_club_rep = True elif name == 'databases': if 'MySQL' in desc: self._model.db_type = 'mysql' else: self._model.db_type = 'postgresql' self._welcomeview_go_to_next_scene(desc, view) def _welcomeview_go_to_next_scene(self, desc, view): self._model.title = desc self._model.scene_stack.append('Welcome') raise NextScene(view) @staticmethod def _quit(): raise StopApplication("User pressed quit")