From 39cdd989f01365c59becde259aa551a02ada04cd Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Tue, 23 Nov 2021 11:48:33 +0100 Subject: [PATCH] Improved menu --- src/multi_install.sh | 1 + src/multi_install/service/menu_service.py | 55 ++++++++++++++++------- 2 files changed, 39 insertions(+), 17 deletions(-) diff --git a/src/multi_install.sh b/src/multi_install.sh index 7225f9d..16fcea7 100755 --- a/src/multi_install.sh +++ b/src/multi_install.sh @@ -1,5 +1,6 @@ #!/bin/bash # -*- coding: utf-8 -*- +source ../venv/bin/activate export PYTHONPATH=./:$PYTHONPATH python3.9 multi_install_cli/main.py \ No newline at end of file diff --git a/src/multi_install/service/menu_service.py b/src/multi_install/service/menu_service.py index 09dc5c7..f94a636 100644 --- a/src/multi_install/service/menu_service.py +++ b/src/multi_install/service/menu_service.py @@ -1,4 +1,7 @@ +from typing import Optional + from cpl_core.console import Console +from cpl_query.extension import List from multi_install.abc.menu_service_abc import MenuServiceABC from multi_install.config.os_settings import OSSettings @@ -8,38 +11,56 @@ class MenuService(MenuServiceABC): def __init__(self, os_settings: OSSettings): self._os_settings = os_settings - self._is_running = True + self._os: Optional[str] = None def run(self): - while self._is_running: - os = self.select_os() - if os == 'Exit': - self._is_running = False - break - + is_end = False + while not is_end: + self.select_os() main_menu = self.main_menu() + if main_menu == 'Exit': - self._is_running = False + is_end = True + + elif main_menu == 'Back': break - - def select_os(self) -> str: - options = self._os_settings.operating_systems + + def select_os(self): + Console.clear() + options = List(str, self._os_settings.operating_systems.copy()) options.append('Exit') - return Console.select('>', 'Select OS:', options) + Console.write_line('Select option:') + options.for_each(lambda o: Console.write_line(f'[{options.index(o)}] {o}')) + os = int(Console.read('\n:')) + if os == options.index('Exit'): + exit() + + self._os = os def main_menu(self) -> str: - options = [ + Console.clear() + options = List(str, [ 'Install collection', + 'Uninstall collection', 'Add collection', 'Remove collection', 'Install application', + 'Uninstall application', 'Add application', 'Remove application', - 'Add application' - ] - options.append('Exit') - return Console.select('>', 'Select option:', options) + 'Add application', + + 'Back', + 'Exit' + ]) + Console.write_line('Select option:') + options.for_each(lambda o: Console.write_line(f'[{options.index(o)}] {o}')) + selected = int(Console.read('\n:')) + if selected == options.index('Exit'): + exit() + + return selected def select_collection(self) -> str: options = []