footer.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. # -*- coding: utf-8 -*-
  2. """
  3. Footer-Leiste mit F-Tasten-Bindungen.
  4. """
  5. from __future__ import annotations
  6. from typing import TYPE_CHECKING
  7. from textual.widget import Widget
  8. from textual.app import RenderResult
  9. from rich.text import Text
  10. if TYPE_CHECKING:
  11. from trixy_core.tui.menu_context import MenuContext
  12. class TrixyFooter(Widget):
  13. """
  14. Footer-Leiste die aktive F-Tasten-Bindungen anzeigt.
  15. z.B.: "F1 Health | F2 Config | F9 Log | F10 Zurueck | Q Beenden"
  16. """
  17. DEFAULT_CSS = """
  18. TrixyFooter {
  19. dock: bottom;
  20. height: 1;
  21. background: $accent;
  22. color: $text;
  23. }
  24. """
  25. def __init__(self, menu_context: "MenuContext | None" = None, **kwargs) -> None:
  26. super().__init__(**kwargs)
  27. self._menu_context = menu_context
  28. def update_menu(self, menu_context: "MenuContext") -> None:
  29. """Aktualisiert die angezeigte Menueleiste."""
  30. self._menu_context = menu_context
  31. self.refresh()
  32. def render(self) -> RenderResult:
  33. """Rendert die Footer-Leiste."""
  34. text = Text()
  35. if self._menu_context:
  36. for binding in self._menu_context.get_all():
  37. if binding.enabled:
  38. text.append(f" {binding.key.upper()} ", style="bold reverse")
  39. text.append(f" {binding.label} ", style="")
  40. else:
  41. text.append(f" {binding.key.upper()} ", style="dim")
  42. text.append(f" {binding.label} ", style="dim")
  43. # Immer Q=Beenden anzeigen
  44. text.append(" Q ", style="bold reverse")
  45. text.append(" Beenden ", style="")
  46. return text