|
|
|
@ -1,5 +1,3 @@ |
|
|
|
|
import functools |
|
|
|
|
|
|
|
|
|
from asciimatics.widgets import ListBox, Layout, Divider, Button, Label |
|
|
|
|
from asciimatics.exceptions import NextScene, StopApplication |
|
|
|
|
|
|
|
|
@ -23,40 +21,50 @@ class WelcomeView(CeoFrame): |
|
|
|
|
('Change login shell', 'ChangeLoginShell'), |
|
|
|
|
('Set forwarding addresses', 'SetForwardingAddresses'), |
|
|
|
|
] |
|
|
|
|
members_menu = self._create_menu( |
|
|
|
|
members_menu_items, 'members', 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 = self._create_menu(groups_menu_items, 'groups') |
|
|
|
|
db_menu_items = [ |
|
|
|
|
('Create MySQL database', 'CreateMySQL'), |
|
|
|
|
('Reset MySQL password', 'ResetMySQLPassword'), |
|
|
|
|
('Create PostgreSQL database', 'CreatePostgreSQL'), |
|
|
|
|
('Reset PostgreSQL password', 'ResetPostgreSQLPassword'), |
|
|
|
|
] |
|
|
|
|
db_menu = self._create_menu( |
|
|
|
|
db_menu_items, 'databases', self._db_menu_select) |
|
|
|
|
positions_menu_items = [ |
|
|
|
|
('Get positions', 'GetPositions'), |
|
|
|
|
('Set positions', 'SetPositions'), |
|
|
|
|
] |
|
|
|
|
positions_menu = self._create_menu(positions_menu_items, 'positions') |
|
|
|
|
self._menu_groups = { |
|
|
|
|
'members': members_menu_items, |
|
|
|
|
'groups': groups_menu_items, |
|
|
|
|
'databases': db_menu_items, |
|
|
|
|
'positions': positions_menu_items, |
|
|
|
|
} |
|
|
|
|
layout = Layout([1, 4, 1], fill_frame=True) |
|
|
|
|
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(members_menu, 1) |
|
|
|
|
layout.add_widget(groups_menu, 1) |
|
|
|
|
layout.add_widget(db_menu, 1) |
|
|
|
|
layout.add_widget(positions_menu, 1) |
|
|
|
|
layout.add_widget(menu, 2) |
|
|
|
|
for label in labels: |
|
|
|
|
layout.add_widget(label, 0) |
|
|
|
|
|
|
|
|
|
layout = Layout([100]) |
|
|
|
|
self.add_layout(layout) |
|
|
|
@ -68,37 +76,20 @@ class WelcomeView(CeoFrame): |
|
|
|
|
layout.add_widget(Button("Quit", self._quit), 2) |
|
|
|
|
self.fix() |
|
|
|
|
|
|
|
|
|
def _create_menu(self, menu_items, name, on_select=None): |
|
|
|
|
if on_select is None: |
|
|
|
|
on_select = functools.partial(self._generic_menu_select, name) |
|
|
|
|
return ListBox( |
|
|
|
|
len(menu_items), |
|
|
|
|
[ |
|
|
|
|
(desc, i) for i, (desc, view) in |
|
|
|
|
enumerate(menu_items) |
|
|
|
|
], |
|
|
|
|
name=name, |
|
|
|
|
label=name.capitalize(), |
|
|
|
|
on_select=on_select, |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
def _get_menu_item_desc_view(self, menu_name: str): |
|
|
|
|
def _menu_select(self): |
|
|
|
|
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 _db_menu_select(self): |
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
def _generic_menu_select(self, menu_name): |
|
|
|
|
desc, view = self._get_menu_item_desc_view('groups') |
|
|
|
|
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 |
|
|
|
|
self._welcomeview_go_to_next_scene(desc, view) |
|
|
|
|
|
|
|
|
|
def _welcomeview_go_to_next_scene(self, desc, view): |
|
|
|
|