2021-09-08 00:10:21 -04:00
|
|
|
from asciimatics.widgets import ListBox, Layout, Divider, Button, Label
|
2021-08-28 23:09:02 -04:00
|
|
|
from asciimatics.exceptions import NextScene, StopApplication
|
|
|
|
|
2021-09-08 00:10:21 -04:00
|
|
|
from .CeoFrame import CeoFrame
|
2021-08-28 23:09:02 -04:00
|
|
|
|
2021-09-08 00:10:21 -04:00
|
|
|
|
|
|
|
class WelcomeView(CeoFrame):
|
2021-08-28 23:09:02 -04:00
|
|
|
def __init__(self, screen, width, height, model):
|
|
|
|
super().__init__(
|
2021-09-08 00:10:21 -04:00
|
|
|
screen, height, width, model, 'Welcome',
|
2021-08-28 23:09:02 -04:00
|
|
|
title='CSC Electronic Office',
|
2021-09-08 00:11:03 -04:00
|
|
|
escape_on_q=True,
|
2021-08-28 23:09:02 -04:00
|
|
|
)
|
2021-09-07 01:02:34 -04:00
|
|
|
members_menu_items = [
|
2021-08-28 23:09:02 -04:00
|
|
|
('Add member', 'AddUser'),
|
|
|
|
('Add club rep', 'AddUser'),
|
|
|
|
('Renew member', 'RenewUser'),
|
|
|
|
('Renew club rep', 'RenewUser'),
|
2021-09-06 16:16:45 -04:00
|
|
|
('Get user info', 'GetUser'),
|
2021-08-28 23:09:02 -04:00
|
|
|
('Reset password', 'ResetPassword'),
|
2021-09-07 00:16:29 -04:00
|
|
|
('Change login shell', 'ChangeLoginShell'),
|
|
|
|
('Set forwarding addresses', 'SetForwardingAddresses'),
|
2021-08-28 23:09:02 -04:00
|
|
|
]
|
2021-09-07 01:02:34 -04:00
|
|
|
groups_menu_items = [
|
|
|
|
('Add group', 'AddGroup'),
|
|
|
|
('Get group members', 'GetGroup'),
|
|
|
|
('Add member to group', 'AddMemberToGroup'),
|
|
|
|
('Remove member from group', 'RemoveMemberFromGroup'),
|
|
|
|
]
|
2021-09-07 23:38:12 -04:00
|
|
|
db_menu_items = [
|
2021-09-12 02:08:15 -04:00
|
|
|
('Create MySQL database', 'CreateDatabase'),
|
|
|
|
('Reset MySQL password', 'ResetDatabasePassword'),
|
|
|
|
('Create PostgreSQL database', 'CreateDatabase'),
|
|
|
|
('Reset PostgreSQL password', 'ResetDatabasePassword'),
|
2021-09-07 23:38:12 -04:00
|
|
|
]
|
|
|
|
positions_menu_items = [
|
|
|
|
('Get positions', 'GetPositions'),
|
|
|
|
('Set positions', 'SetPositions'),
|
|
|
|
]
|
2021-09-11 17:24:23 -04:00
|
|
|
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)
|
2021-08-28 23:09:02 -04:00
|
|
|
self.add_layout(layout)
|
2021-09-11 17:24:23 -04:00
|
|
|
layout.add_widget(menu, 2)
|
|
|
|
for label in labels:
|
|
|
|
layout.add_widget(label, 0)
|
2021-09-07 01:02:34 -04:00
|
|
|
|
|
|
|
layout = Layout([100])
|
|
|
|
self.add_layout(layout)
|
2021-09-07 22:59:56 -04:00
|
|
|
layout.add_widget(Label('Press <TAB> to switch widgets'))
|
2021-08-28 23:09:02 -04:00
|
|
|
layout.add_widget(Divider())
|
|
|
|
|
|
|
|
layout = Layout([1, 1, 1])
|
|
|
|
self.add_layout(layout)
|
|
|
|
layout.add_widget(Button("Quit", self._quit), 2)
|
|
|
|
self.fix()
|
|
|
|
|
2021-09-11 17:24:23 -04:00
|
|
|
def _menu_select(self):
|
2021-08-28 23:09:02 -04:00
|
|
|
self.save()
|
2021-09-11 17:24:23 -04:00
|
|
|
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
|
2021-09-12 02:08:15 -04:00
|
|
|
elif name == 'databases':
|
|
|
|
if 'MySQL' in desc:
|
|
|
|
self._model.db_type = 'mysql'
|
|
|
|
else:
|
|
|
|
self._model.db_type = 'postgresql'
|
2021-09-07 01:02:34 -04:00
|
|
|
self._welcomeview_go_to_next_scene(desc, view)
|
|
|
|
|
|
|
|
def _welcomeview_go_to_next_scene(self, desc, view):
|
2021-08-28 23:09:02 -04:00
|
|
|
self._model.title = desc
|
|
|
|
self._model.scene_stack.append('Welcome')
|
|
|
|
raise NextScene(view)
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
def _quit():
|
|
|
|
raise StopApplication("User pressed quit")
|