footer.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. # -*- coding: utf-8 -*-
  2. """
  3. Installer-Footer — F-Tasten-Leiste.
  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 ..menu_context import MenuContext
  12. class InstallerFooter(Widget):
  13. """
  14. Footer-Leiste mit aktiven F-Tasten-Bindungen.
  15. """
  16. DEFAULT_CSS = """
  17. InstallerFooter {
  18. dock: bottom;
  19. height: 1;
  20. background: $accent;
  21. color: $text;
  22. }
  23. """
  24. def __init__(self, menu_context: "MenuContext | None" = None, **kwargs) -> None:
  25. super().__init__(**kwargs)
  26. self._menu_context = menu_context
  27. def update_menu(self, menu_context: "MenuContext") -> None:
  28. """Aktualisiert die angezeigte Menueleiste."""
  29. self._menu_context = menu_context
  30. self.refresh()
  31. def render(self) -> RenderResult:
  32. text = Text()
  33. if self._menu_context:
  34. for binding in self._menu_context.get_all():
  35. if binding.enabled:
  36. text.append(f" {binding.key.upper()} ", style="bold reverse")
  37. text.append(f" {binding.label} ", style="")
  38. else:
  39. text.append(f" {binding.key.upper()} ", style="dim")
  40. text.append(f" {binding.label} ", style="dim")
  41. # Q=Beenden immer anzeigen
  42. text.append(" Q ", style="bold reverse")
  43. text.append(" Beenden ", style="")
  44. return text