header.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. # -*- coding: utf-8 -*-
  2. """
  3. Titelleiste fuer die Trixy-TUI.
  4. """
  5. from textual.reactive import reactive
  6. from textual.widget import Widget
  7. from textual.app import RenderResult
  8. from rich.text import Text
  9. class TrixyHeader(Widget):
  10. """
  11. Titelleiste mit Ansichtstitel und Verbindungsinformation.
  12. Zeigt z.B.: "Trixy Config > Health [server@localhost:2105]"
  13. """
  14. DEFAULT_CSS = """
  15. TrixyHeader {
  16. dock: top;
  17. height: 1;
  18. background: $accent;
  19. color: $text;
  20. content-align: center middle;
  21. }
  22. """
  23. subtitle: reactive[str] = reactive("")
  24. connection_info: reactive[str] = reactive("")
  25. def render(self) -> RenderResult:
  26. """Rendert die Titelleiste."""
  27. title = Text("Trixy Config", style="bold")
  28. if self.subtitle:
  29. title.append(" > ", style="dim")
  30. title.append(self.subtitle)
  31. if self.connection_info:
  32. # Rechtsbuendig mit Padding
  33. padding = " " * max(1, self.size.width - len(title.plain) - len(self.connection_info) - 4)
  34. title.append(padding)
  35. title.append(f"[{self.connection_info}]", style="dim italic")
  36. return title