diff --git a/kiauh/components/klipper_firmware/menus/klipper_flash_menu.py b/kiauh/components/klipper_firmware/menus/klipper_flash_menu.py index adc3f3c..4c20f2d 100644 --- a/kiauh/components/klipper_firmware/menus/klipper_flash_menu.py +++ b/kiauh/components/klipper_firmware/menus/klipper_flash_menu.py @@ -39,7 +39,7 @@ class KlipperFlashMethodMenu(BaseMenu): self.options = { "1": self.select_regular, "2": self.select_sdcard, - "h": lambda: KlipperFlashMethodHelpMenu(self).run(), + "h": self.help_menu, } self.input_label_txt = "Select flash method" self.footer_type = FooterType.BACK_HELP @@ -78,6 +78,9 @@ class KlipperFlashMethodMenu(BaseMenu): def goto_next_menu(self, **kwargs): KlipperFlashCommandMenu(previous_menu=self).run() + def help_menu(self, **kwargs): + KlipperFlashMethodHelpMenu(previous_menu=self).run() + # noinspection PyUnusedLocal # noinspection PyMethodMayBeStatic @@ -89,7 +92,7 @@ class KlipperFlashCommandMenu(BaseMenu): self.options = { "1": self.select_flash, "2": self.select_serialflash, - "h": lambda: KlipperFlashCommandHelpMenu(previous_menu=self).run(), + "h": self.help_menu, } self.default_option = self.select_flash self.input_label_txt = "Select flash command" @@ -121,6 +124,9 @@ class KlipperFlashCommandMenu(BaseMenu): def goto_next_menu(self, **kwargs): KlipperSelectMcuConnectionMenu(previous_menu=self).run() + def help_menu(self, **kwargs): + KlipperFlashCommandHelpMenu(previous_menu=self).run() + # noinspection PyUnusedLocal # noinspection PyMethodMayBeStatic @@ -133,7 +139,7 @@ class KlipperSelectMcuConnectionMenu(BaseMenu): "1": self.select_usb, "2": self.select_dfu, "3": self.select_usb_dfu, - "h": lambda: KlipperMcuConnectionHelpMenu(previous_menu=self).run(), + "h": self.help_menu, } self.input_label_txt = "Select connection type" self.footer_type = FooterType.BACK_HELP @@ -193,6 +199,9 @@ class KlipperSelectMcuConnectionMenu(BaseMenu): def goto_next_menu(self, **kwargs): KlipperSelectMcuIdMenu(previous_menu=self).run() + def help_menu(self, **kwargs): + KlipperMcuConnectionHelpMenu(previous_menu=self).run() + # noinspection PyUnusedLocal # noinspection PyMethodMayBeStatic diff --git a/kiauh/core/menus/advanced_menu.py b/kiauh/core/menus/advanced_menu.py index 293a62e..3c07497 100644 --- a/kiauh/core/menus/advanced_menu.py +++ b/kiauh/core/menus/advanced_menu.py @@ -17,6 +17,7 @@ from core.menus.base_menu import BaseMenu from utils.constants import COLOR_YELLOW, RESET_FORMAT +# noinspection PyUnusedLocal class AdvancedMenu(BaseMenu): def __init__(self, previous_menu: BaseMenu): super().__init__() @@ -26,9 +27,9 @@ class AdvancedMenu(BaseMenu): "1": None, "2": None, "3": None, - "4": lambda: KlipperFlashMethodMenu(previous_menu=self).run(), + "4": self.flash, "5": None, - "6": lambda: KlipperSelectMcuConnectionMenu(previous_menu=self).run(), + "6": self.get_id, } def print_menu(self): @@ -52,3 +53,9 @@ class AdvancedMenu(BaseMenu): """ )[1:] print(menu, end="") + + def flash(self, **kwargs): + KlipperFlashMethodMenu(previous_menu=self).run() + + def get_id(self, **kwargs): + KlipperSelectMcuConnectionMenu(previous_menu=self).run() diff --git a/kiauh/core/menus/base_menu.py b/kiauh/core/menus/base_menu.py index a8cfb8f..509b46f 100644 --- a/kiauh/core/menus/base_menu.py +++ b/kiauh/core/menus/base_menu.py @@ -13,7 +13,7 @@ import subprocess import sys import textwrap from abc import abstractmethod, ABC -from typing import Dict, Union, Callable, Type +from typing import Dict, Union, Callable, Type, Tuple from core.menus import FooterType, NAVI_OPTIONS, ExitAppException, GoBackException from utils.constants import ( @@ -129,7 +129,7 @@ class BaseMenu(ABC): self.print_menu() self.print_footer() - def validate_user_input(self, usr_input: str) -> Callable: + def validate_user_input(self, usr_input: str) -> Tuple[Callable, str]: """ Validate the user input and either return an Option, a string or None :param usr_input: The user input in form of a string @@ -148,16 +148,16 @@ class BaseMenu(ABC): elif usr_input == "b": raise GoBackException() elif usr_input == "h": - return option + return option, usr_input # if usr_input is None or an empty string, we execute the menues default option if specified if usr_input == "" and self.default_option is not None: - return self.default_option + return self.default_option, usr_input # user selected a regular option - return option + return option, usr_input - def handle_user_input(self) -> Callable: + def handle_user_input(self) -> Tuple[Callable, str]: """Handle the user input, return the validated input or print an error.""" while True: print(f"{COLOR_CYAN}###### {self.input_label_txt}: {RESET_FORMAT}", end="") @@ -173,7 +173,8 @@ class BaseMenu(ABC): while True: try: self.display_menu() - self.handle_user_input()() + option = self.handle_user_input() + option[0](opt_index=option[1]) except GoBackException: return except ExitAppException: diff --git a/kiauh/core/menus/main_menu.py b/kiauh/core/menus/main_menu.py index 300412e..66d4cfd 100644 --- a/kiauh/core/menus/main_menu.py +++ b/kiauh/core/menus/main_menu.py @@ -36,21 +36,21 @@ from utils.constants import ( ) +# noinspection PyUnusedLocal # noinspection PyMethodMayBeStatic class MainMenu(BaseMenu): def __init__(self): super().__init__() self.options = { - "0": lambda: LogUploadMenu(previous_menu=self).run(), - "1": lambda: InstallMenu(previous_menu=self).run(), - "2": lambda: UpdateMenu(previous_menu=self).run(), - "3": lambda: RemoveMenu(previous_menu=self).run(), - "4": lambda: AdvancedMenu(previous_menu=self).run(), - "5": lambda: BackupMenu(previous_menu=self).run(), - "6": None, - "e": lambda: ExtensionsMenu(previous_menu=self).run(), - "s": lambda: SettingsMenu(previous_menu=self).run(), + "0": self.log_upload_menu, + "1": self.install_menu, + "2": self.update_menu, + "3": self.remove_menu, + "4": self.advanced_menu, + "5": self.backup_menu, + "e": self.extension_menu, + "s": self.settings_menu, } self.header = True self.footer_type = FooterType.QUIT @@ -141,3 +141,27 @@ class MainMenu(BaseMenu): """ )[1:] print(menu, end="") + + def log_upload_menu(self, **kwargs): + LogUploadMenu(previous_menu=self).run() + + def install_menu(self, **kwargs): + InstallMenu(previous_menu=self).run() + + def update_menu(self, **kwargs): + UpdateMenu(previous_menu=self).run() + + def remove_menu(self, **kwargs): + RemoveMenu(previous_menu=self).run() + + def advanced_menu(self, **kwargs): + AdvancedMenu(previous_menu=self).run() + + def backup_menu(self, **kwargs): + BackupMenu(previous_menu=self).run() + + def settings_menu(self, **kwargs): + SettingsMenu(previous_menu=self).run() + + def extension_menu(self, **kwargs): + ExtensionsMenu(previous_menu=self).run() diff --git a/kiauh/core/menus/remove_menu.py b/kiauh/core/menus/remove_menu.py index 8e1e93c..16d1c42 100644 --- a/kiauh/core/menus/remove_menu.py +++ b/kiauh/core/menus/remove_menu.py @@ -27,14 +27,10 @@ class RemoveMenu(BaseMenu): self.previous_menu: BaseMenu = previous_menu self.options = { - "1": lambda: KlipperRemoveMenu(previous_menu=self).run(), - "2": lambda: MoonrakerRemoveMenu(previous_menu=self).run(), - "3": lambda: ClientRemoveMenu( - previous_menu=self, client=load_client_data("mainsail") - ).run(), - "4": lambda: ClientRemoveMenu( - previous_menu=self, client=load_client_data("fluidd") - ).run(), + "1": self.remove_klipper, + "2": self.remove_moonraker, + "3": self.remove_mainsail, + "4": self.remove_fluidd, "5": None, "6": None, "7": None, @@ -72,3 +68,15 @@ class RemoveMenu(BaseMenu): """ )[1:] print(menu, end="") + + def remove_klipper(self, **kwargs): + KlipperRemoveMenu(previous_menu=self).run() + + def remove_moonraker(self, **kwargs): + MoonrakerRemoveMenu(previous_menu=self).run() + + def remove_mainsail(self, **kwargs): + ClientRemoveMenu(previous_menu=self, client=load_client_data("mainsail")).run() + + def remove_fluidd(self, **kwargs): + ClientRemoveMenu(previous_menu=self, client=load_client_data("fluidd")).run()