agreement_view.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. # -*- coding: utf-8 -*-
  2. """
  3. F5: Nutzungsvereinbarung — Markdown-Anzeige + Akzeptieren-Checkbox.
  4. """
  5. from __future__ import annotations
  6. from pathlib import Path
  7. from textual.widgets import Checkbox, Label, Markdown, Static
  8. from .base import InstallerView
  9. class AgreementView(InstallerView):
  10. """Nutzungsvereinbarung (F5)."""
  11. TITLE = "Vereinbarung"
  12. VIEW_ID = "agreement"
  13. MODES = ["server", "client", "standalone", "config"]
  14. def compose(self):
  15. yield Static("── Nutzungsvereinbarung ──", classes="section-header")
  16. # Markdown laden
  17. agreement_path = Path(__file__).parent.parent / "agreement.md"
  18. if agreement_path.is_file():
  19. content = agreement_path.read_text(encoding="utf-8")
  20. else:
  21. content = "*Vereinbarungstext nicht gefunden.*"
  22. yield Markdown(content, id="agreement-text")
  23. yield Label("")
  24. yield Checkbox(
  25. "Ich akzeptiere die Nutzungsbedingungen",
  26. value=self._config.agreement_accepted,
  27. id="cb-agreement",
  28. )
  29. def on_checkbox_changed(self, event: Checkbox.Changed) -> None:
  30. if event.checkbox.id == "cb-agreement":
  31. self._config.agreement_accepted = event.value
  32. def validate(self) -> str | None:
  33. if not self._config.agreement_accepted:
  34. return "Nutzungsbedingungen muessen akzeptiert werden"
  35. return None