Linkliste: Kartenwahl hakt die passenden Dienste vor

Erik, 06.10.2026: neben dem Thema eine zweite Gliederung — für welche Karten ein Dienst gedacht
ist (Wege- und Gewässerplan, Neugestaltungsgrundsätze, Wertermittlung; mehrfach). Der Manager
liefert dafür je Eintrag `karten` und den Katalog unter GET /linkliste/karten.

Über der Dienstliste steht jetzt je Karte ein Häkchen (Katalog vom Server, Rückfall auf die drei
Karten bei älterem Server). Eine oder mehrere Karten gewählt: angehakt sind die Dienste mit
mindestens einer passenden Karte (linkliste.vorhaken), ohne Wahl alle wie bisher; von Hand
nachjustieren bleibt möglich, eine neu geholte Liste übernimmt die Wahl. Karten im Tooltip.
Fassung bleibt 0.7.0 (noch nicht ausgeliefert). Tests ohne Netz erweitert, beide grün.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
KAI
2026-10-06 23:19:47 +02:00
co-authored by Claude Opus 5.5
parent a56bf7c397
commit c3386dc454
7 changed files with 139 additions and 3 deletions
+47 -2
View File
@@ -260,6 +260,16 @@ class VlnPanel(QDockWidget):
lage.setSpacing(6)
lage.addWidget(_klein(QLabel("WMS-, WFS- und ArcGIS-Dienste für dieses Verfahren "
"oder den gewählten Landkreis.")))
# Kartenwahl (Erik, 06.10.2026): hakt vor, was für die gewählte Karte gedacht ist.
# Die Häkchen entstehen erst mit dem Katalog vom Server (set_karten).
self.karten_haken = {}
self._karten_namen = {}
self.karten_zeile = QHBoxLayout()
self.karten_zeile.setSpacing(10)
self.karten_beschriftung = _klein(QLabel("Für Karte:"))
self.karten_beschriftung.setVisible(False)
self.karten_zeile.addWidget(self.karten_beschriftung)
lage.addLayout(self.karten_zeile)
self.dienste_liste = QListWidget()
# Bewusst niedrig: die Mindesthoehe aller Kaesten zusammen ist die Mindesthoehe des
# Docks (s. Rollflaeche im Konstruktor). 140 px hier machten die Seitenleiste auf
@@ -289,6 +299,37 @@ class VlnPanel(QDockWidget):
for i in range(self.dienste_liste.count()):
self.dienste_liste.item(i).setCheckState(ziel)
def set_karten(self, katalog):
"""Die Kartenwahl aufbauen: je Karte ein Häkchen; eine Wahl hakt die passenden Dienste vor.
:param katalog: ``[{schluessel, name}]`` vom Server (``GET /linkliste/karten``).
"""
for haken in self.karten_haken.values():
self.karten_zeile.removeWidget(haken)
haken.deleteLater()
self.karten_haken = {}
self._karten_namen = {}
for k in katalog or []:
haken = QCheckBox(str(k.get("name") or k.get("schluessel")))
haken.setToolTip("Dienste für diese Karte vorhaken")
haken.stateChanged.connect(lambda _zustand: self._karten_anwenden())
self.karten_zeile.addWidget(haken)
self.karten_haken[str(k.get("schluessel"))] = haken
self._karten_namen[str(k.get("schluessel"))] = str(k.get("name") or k.get("schluessel"))
self.karten_beschriftung.setVisible(bool(self.karten_haken))
def gewaehlte_karten(self):
"""Schlüssel der angehakten Karten."""
return [k for k, haken in self.karten_haken.items() if haken.isChecked()]
def _karten_anwenden(self):
"""Die Dienste nach der Kartenwahl vorhaken (ohne Wahl: alle)."""
from .linkliste import vorhaken
eintraege = [self.dienste_liste.item(i) for i in range(self.dienste_liste.count())]
daten = [e.data(Qt.ItemDataRole.UserRole) or {} for e in eintraege]
for eintrag, an in zip(eintraege, vorhaken(daten, self.gewaehlte_karten())):
eintrag.setCheckState(Qt.CheckState.Checked if an else Qt.CheckState.Unchecked)
def set_dienste(self, dienste):
"""Die geholte Liste anzeigen: Name, Gruppe › Untergruppe und Herkunft, alle zunächst
angehakt."""
@@ -304,8 +345,12 @@ class VlnPanel(QDockWidget):
eintrag.setFlags(eintrag.flags() | Qt.ItemFlag.ItemIsUserCheckable)
eintrag.setCheckState(Qt.CheckState.Checked)
eintrag.setData(Qt.ItemDataRole.UserRole, d)
eintrag.setToolTip("%s\n%s" % (d.get("url"), d.get("beschreibung") or ""))
karten = ", ".join(self._karten_namen.get(k, k) for k in (d.get("karten") or []))
eintrag.setToolTip("%s\n%s%s" % (d.get("url"), d.get("beschreibung") or "",
("\nKarten: " + karten) if karten else ""))
self.dienste_liste.addItem(eintrag)
if self.gewaehlte_karten():
self._karten_anwenden()
def gewaehlte_dienste(self):
"""Die angehakten Einträge als Liste der Server-Datensätze."""
@@ -350,7 +395,7 @@ class VlnPanel(QDockWidget):
self.schild_knopf, self.zusatz_knopf, self.palette, self.blatt_combo,
self.stil_knopf, self.vorlage_haken, self.dienste_holen_knopf,
self.dienste_laden_knopf, self.dienste_alle, self.dienste_liste,
*self.gruppen_haken.values()):
*self.gruppen_haken.values(), *self.karten_haken.values()):
widget.setEnabled(angemeldet)
if not angemeldet:
self._stumm = True