pyceo/ceo/tui/WelcomeView.py

95 lines
3.1 KiB
Python

import functools
from asciimatics.widgets import Frame, ListBox, Layout, Divider, Button, Label
from asciimatics.exceptions import NextScene, StopApplication
class WelcomeView(Frame):
def __init__(self, screen, width, height, model):
super().__init__(
screen,
height,
width,
title='CSC Electronic Office',
)
self._model = model
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'),
]
members_menu = ListBox(
len(members_menu_items),
[
(desc, i) for i, (desc, view) in
enumerate(members_menu_items)
],
name='members',
label='Members',
on_select=self._members_menu_select,
)
groups_menu_items = [
('Add group', 'AddGroup'),
('Get group members', 'GetGroup'),
('Add member to group', 'AddMemberToGroup'),
('Remove member from group', 'RemoveMemberFromGroup'),
]
groups_menu = ListBox(
len(groups_menu_items),
[
(desc, i) for i, (desc, view) in
enumerate(groups_menu_items)
],
name='groups',
label='Groups',
on_select=functools.partial(self._generic_menu_select, 'groups'),
)
self._menu_groups = {
'members': members_menu_items,
'groups': groups_menu_items,
}
layout = Layout([100], fill_frame=True)
self.add_layout(layout)
layout.add_widget(members_menu)
layout.add_widget(groups_menu)
layout = Layout([100])
self.add_layout(layout)
layout.add_widget(Label('Press <TAB> 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 _get_menu_item_desc_view(self, menu_name: str):
self.save()
item_id = self.data[menu_name]
menu_items = self._menu_groups[menu_name]
return menu_items[item_id]
def _members_menu_select(self):
desc, view = self._get_menu_item_desc_view('members')
if desc.endswith('club rep'):
self._model.is_club_rep = True
self._welcomeview_go_to_next_scene(desc, view)
def _generic_menu_select(self, menu_name):
desc, view = self._get_menu_item_desc_view('groups')
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")