# -*- coding: utf-8 -*- """ Menuekontext fuer F-Tasten-Verwaltung. Verwaltet die Zuordnung von Funktionstasten zu Views und deren Anzeige in der Footer-Leiste. """ from dataclasses import dataclass, field @dataclass class MenuBinding: """Bindung einer Funktionstaste an einen View.""" key: str # z.B. "f1", "f2" label: str # Anzeigename, z.B. "Health" view_id: str # ID des zugehoerigen Views enabled: bool = True class MenuContext: """ Verwaltet F-Tasten-Bindungen fuer die TUI. Wird von TrixyTUI genutzt, um die Footer-Leiste und View-Umschaltung zu steuern. """ def __init__(self) -> None: self._bindings: dict[str, MenuBinding] = {} def add(self, binding: MenuBinding) -> None: """Fuegt eine Bindung hinzu.""" self._bindings[binding.key] = binding def remove(self, key: str) -> None: """Entfernt eine Bindung.""" self._bindings.pop(key, None) def get(self, key: str) -> MenuBinding | None: """Gibt eine Bindung zurueck.""" return self._bindings.get(key) def get_all(self) -> list[MenuBinding]: """Gibt alle Bindungen numerisch sortiert zurueck.""" def _sort_key(b: MenuBinding) -> int: # "f1" -> 1, "f10" -> 10, etc. try: return int(b.key[1:]) except (ValueError, IndexError): return 99 return sorted(self._bindings.values(), key=_sort_key) def get_view_id(self, key: str) -> str | None: """Gibt die View-ID fuer eine Taste zurueck.""" binding = self._bindings.get(key) if binding and binding.enabled: return binding.view_id return None