use single ListBox in WelcomeView
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
This commit is contained in:
parent
33323fd112
commit
ad38588141
|
@ -110,7 +110,10 @@ class CeoFrame(Frame):
|
||||||
layout.add_widget(Divider())
|
layout.add_widget(Divider())
|
||||||
|
|
||||||
def _back():
|
def _back():
|
||||||
raise NextScene(self._model.scene_stack.pop())
|
last_scene = self._model.scene_stack.pop()
|
||||||
|
if last_scene == 'Welcome':
|
||||||
|
self._model.reset()
|
||||||
|
raise NextScene(last_scene)
|
||||||
|
|
||||||
def _next():
|
def _next():
|
||||||
if on_next_excl is not None:
|
if on_next_excl is not None:
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
import functools
|
|
||||||
|
|
||||||
from asciimatics.widgets import ListBox, Layout, Divider, Button, Label
|
from asciimatics.widgets import ListBox, Layout, Divider, Button, Label
|
||||||
from asciimatics.exceptions import NextScene, StopApplication
|
from asciimatics.exceptions import NextScene, StopApplication
|
||||||
|
|
||||||
|
@ -23,40 +21,50 @@ class WelcomeView(CeoFrame):
|
||||||
('Change login shell', 'ChangeLoginShell'),
|
('Change login shell', 'ChangeLoginShell'),
|
||||||
('Set forwarding addresses', 'SetForwardingAddresses'),
|
('Set forwarding addresses', 'SetForwardingAddresses'),
|
||||||
]
|
]
|
||||||
members_menu = self._create_menu(
|
|
||||||
members_menu_items, 'members', self._members_menu_select)
|
|
||||||
groups_menu_items = [
|
groups_menu_items = [
|
||||||
('Add group', 'AddGroup'),
|
('Add group', 'AddGroup'),
|
||||||
('Get group members', 'GetGroup'),
|
('Get group members', 'GetGroup'),
|
||||||
('Add member to group', 'AddMemberToGroup'),
|
('Add member to group', 'AddMemberToGroup'),
|
||||||
('Remove member from group', 'RemoveMemberFromGroup'),
|
('Remove member from group', 'RemoveMemberFromGroup'),
|
||||||
]
|
]
|
||||||
groups_menu = self._create_menu(groups_menu_items, 'groups')
|
|
||||||
db_menu_items = [
|
db_menu_items = [
|
||||||
('Create MySQL database', 'CreateMySQL'),
|
('Create MySQL database', 'CreateMySQL'),
|
||||||
('Reset MySQL password', 'ResetMySQLPassword'),
|
('Reset MySQL password', 'ResetMySQLPassword'),
|
||||||
('Create PostgreSQL database', 'CreatePostgreSQL'),
|
('Create PostgreSQL database', 'CreatePostgreSQL'),
|
||||||
('Reset PostgreSQL password', 'ResetPostgreSQLPassword'),
|
('Reset PostgreSQL password', 'ResetPostgreSQLPassword'),
|
||||||
]
|
]
|
||||||
db_menu = self._create_menu(
|
|
||||||
db_menu_items, 'databases', self._db_menu_select)
|
|
||||||
positions_menu_items = [
|
positions_menu_items = [
|
||||||
('Get positions', 'GetPositions'),
|
('Get positions', 'GetPositions'),
|
||||||
('Set positions', 'SetPositions'),
|
('Set positions', 'SetPositions'),
|
||||||
]
|
]
|
||||||
positions_menu = self._create_menu(positions_menu_items, 'positions')
|
self.menu_items = [
|
||||||
self._menu_groups = {
|
('members', members_menu_items),
|
||||||
'members': members_menu_items,
|
('groups', groups_menu_items),
|
||||||
'groups': groups_menu_items,
|
('databases', db_menu_items),
|
||||||
'databases': db_menu_items,
|
('positions', positions_menu_items),
|
||||||
'positions': positions_menu_items,
|
]
|
||||||
}
|
self.menu_items_dict = dict(self.menu_items)
|
||||||
layout = Layout([1, 4, 1], fill_frame=True)
|
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)
|
self.add_layout(layout)
|
||||||
layout.add_widget(members_menu, 1)
|
layout.add_widget(menu, 2)
|
||||||
layout.add_widget(groups_menu, 1)
|
for label in labels:
|
||||||
layout.add_widget(db_menu, 1)
|
layout.add_widget(label, 0)
|
||||||
layout.add_widget(positions_menu, 1)
|
|
||||||
|
|
||||||
layout = Layout([100])
|
layout = Layout([100])
|
||||||
self.add_layout(layout)
|
self.add_layout(layout)
|
||||||
|
@ -68,37 +76,20 @@ class WelcomeView(CeoFrame):
|
||||||
layout.add_widget(Button("Quit", self._quit), 2)
|
layout.add_widget(Button("Quit", self._quit), 2)
|
||||||
self.fix()
|
self.fix()
|
||||||
|
|
||||||
def _create_menu(self, menu_items, name, on_select=None):
|
def _menu_select(self):
|
||||||
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):
|
|
||||||
self.save()
|
self.save()
|
||||||
item_id = self.data[menu_name]
|
item_id = self.data['menu']
|
||||||
menu_items = self._menu_groups[menu_name]
|
# find which submenu the item belongs to
|
||||||
return menu_items[item_id]
|
counter = 0
|
||||||
|
for name, items in self.menu_items:
|
||||||
def _members_menu_select(self):
|
if item_id < counter + len(items):
|
||||||
desc, view = self._get_menu_item_desc_view('members')
|
break
|
||||||
if desc.endswith('club rep'):
|
counter += len(items)
|
||||||
self._model.is_club_rep = True
|
submenu_idx = item_id - counter
|
||||||
self._welcomeview_go_to_next_scene(desc, view)
|
desc, view = items[submenu_idx]
|
||||||
|
if name == 'members':
|
||||||
def _db_menu_select(self):
|
if desc.endswith('club rep'):
|
||||||
pass
|
self._model.is_club_rep = True
|
||||||
|
|
||||||
def _generic_menu_select(self, menu_name):
|
|
||||||
desc, view = self._get_menu_item_desc_view('groups')
|
|
||||||
self._welcomeview_go_to_next_scene(desc, view)
|
self._welcomeview_go_to_next_scene(desc, view)
|
||||||
|
|
||||||
def _welcomeview_go_to_next_scene(self, desc, view):
|
def _welcomeview_go_to_next_scene(self, desc, view):
|
||||||
|
|
Loading…
Reference in New Issue