menu_context.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. # -*- coding: utf-8 -*-
  2. """
  3. Menuekontext fuer F-Tasten-Verwaltung.
  4. Verwaltet die Zuordnung von Funktionstasten zu Views
  5. und deren Anzeige in der Footer-Leiste.
  6. """
  7. from dataclasses import dataclass, field
  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. "Health"
  13. view_id: str # ID des zugehoerigen Views
  14. enabled: bool = True
  15. class MenuContext:
  16. """
  17. Verwaltet F-Tasten-Bindungen fuer die TUI.
  18. Wird von TrixyTUI genutzt, um die Footer-Leiste
  19. und View-Umschaltung zu steuern.
  20. """
  21. def __init__(self) -> None:
  22. self._bindings: dict[str, MenuBinding] = {}
  23. def add(self, binding: MenuBinding) -> None:
  24. """Fuegt eine Bindung hinzu."""
  25. self._bindings[binding.key] = binding
  26. def remove(self, key: str) -> None:
  27. """Entfernt eine Bindung."""
  28. self._bindings.pop(key, None)
  29. def get(self, key: str) -> MenuBinding | None:
  30. """Gibt eine Bindung zurueck."""
  31. return self._bindings.get(key)
  32. def get_all(self) -> list[MenuBinding]:
  33. """Gibt alle Bindungen numerisch sortiert zurueck."""
  34. def _sort_key(b: MenuBinding) -> int:
  35. # "f1" -> 1, "f10" -> 10, etc.
  36. try:
  37. return int(b.key[1:])
  38. except (ValueError, IndexError):
  39. return 99
  40. return sorted(self._bindings.values(), key=_sort_key)
  41. def get_view_id(self, key: str) -> str | None:
  42. """Gibt die View-ID fuer eine Taste zurueck."""
  43. binding = self._bindings.get(key)
  44. if binding and binding.enabled:
  45. return binding.view_id
  46. return None