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:
+47
-2
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user