Initial commit

This commit is contained in:
BarsTiger
2023-05-10 23:51:23 +03:00
commit 9242e5fe6a
36 changed files with 370 additions and 0 deletions

View File

@@ -0,0 +1,65 @@
from cursesmenu.items import MenuItem
from cursesmenu.curses_menu import CursesMenu
from typing import Callable, Any
class DynamicSubmenuItem(MenuItem):
def __init__(
self,
text: str,
generator: Callable[..., CursesMenu],
menu: CursesMenu | None = None,
args: list[Any] | None = None,
kwargs: dict[Any, Any] | None = None,
) -> None:
self._args: list[Any] | None = args
self._kwargs: dict[Any, Any] | None = kwargs
self._generator: Callable[..., CursesMenu] | None = generator
self._menu: CursesMenu | None = menu
self._submenu: CursesMenu | None = None
super().__init__(
text=text,
menu=menu
)
@property
def submenu(self) -> CursesMenu | None:
return self._submenu
@submenu.setter
def submenu(self, submenu: CursesMenu | None) -> None:
self._submenu = submenu
if self._submenu is not None:
self._submenu.parent = self._menu
@property
def menu(self) -> CursesMenu | None:
return self._menu
@menu.setter
def menu(self, menu: CursesMenu | None) -> None:
self._menu = menu
if self._submenu is not None:
self._submenu.parent = menu
def set_up(self) -> None:
assert self.menu is not None
self.menu.pause()
self.menu.clear_screen()
def action(self) -> None:
self.submenu = self._generator(*self._args if self._args else [],
**self._kwargs if self._kwargs else {})
self.submenu.start()
def clean_up(self) -> None:
assert self.menu is not None
assert self.submenu is not None
self.submenu.join()
self.submenu.clear_screen()
self.menu.resume()
def get_return(self) -> Any:
if self.submenu is not None:
return self.submenu.returned_value
return None