menu_context.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. # -*- coding: utf-8 -*-
  2. """
  3. Menuekontext fuer F-Tasten-Verwaltung (Standalone-Kopie).
  4. Eigenstaendige Implementierung ohne trixy_core-Import,
  5. damit der Installer unabhaengig funktioniert.
  6. """
  7. from dataclasses import dataclass
  8. @dataclass
  9. class MenuBinding:
  10. """Bindung einer Funktionstaste an einen View."""
  11. key: str # z.B. "f1", "f2"
  12. label: str # Anzeigename, z.B. "System"
  13. view_id: str # ID des zugehoerigen Views
  14. enabled: bool = True
  15. class MenuContext:
  16. """
  17. Verwaltet F-Tasten-Bindungen fuer die Installer-TUI.
  18. Steuert die Footer-Leiste und View-Umschaltung.
  19. """
  20. def __init__(self) -> None:
  21. self._bindings: dict[str, MenuBinding] = {}
  22. def add(self, binding: MenuBinding) -> None:
  23. """Fuegt eine Bindung hinzu."""
  24. self._bindings[binding.key] = binding
  25. def remove(self, key: str) -> None:
  26. """Entfernt eine Bindung."""
  27. self._bindings.pop(key, None)
  28. def get(self, key: str) -> MenuBinding | None:
  29. """Gibt eine Bindung zurueck."""
  30. return self._bindings.get(key)
  31. def get_all(self) -> list[MenuBinding]:
  32. """Gibt alle Bindungen numerisch sortiert zurueck."""
  33. def _sort_key(b: MenuBinding) -> int:
  34. try:
  35. return int(b.key[1:])
  36. except (ValueError, IndexError):
  37. return 99
  38. return sorted(self._bindings.values(), key=_sort_key)
  39. def get_view_id(self, key: str) -> str | None:
  40. """Gibt die View-ID fuer eine Taste zurueck."""
  41. binding = self._bindings.get(key)
  42. if binding and binding.enabled:
  43. return binding.view_id
  44. return None