# -*- coding: utf-8 -*- """ F5: Nutzungsvereinbarung — Markdown-Anzeige + Akzeptieren-Checkbox. """ from __future__ import annotations from pathlib import Path from textual.widgets import Checkbox, Label, Markdown, Static from .base import InstallerView class AgreementView(InstallerView): """Nutzungsvereinbarung (F5).""" TITLE = "Vereinbarung" VIEW_ID = "agreement" MODES = ["server", "client", "standalone", "config"] def compose(self): yield Static("── Nutzungsvereinbarung ──", classes="section-header") # Markdown laden agreement_path = Path(__file__).parent.parent / "agreement.md" if agreement_path.is_file(): content = agreement_path.read_text(encoding="utf-8") else: content = "*Vereinbarungstext nicht gefunden.*" yield Markdown(content, id="agreement-text") yield Label("") yield Checkbox( "Ich akzeptiere die Nutzungsbedingungen", value=self._config.agreement_accepted, id="cb-agreement", ) def on_checkbox_changed(self, event: Checkbox.Changed) -> None: if event.checkbox.id == "cb-agreement": self._config.agreement_accepted = event.value def validate(self) -> str | None: if not self._config.agreement_accepted: return "Nutzungsbedingungen muessen akzeptiert werden" return None