Anzeigefenster immer mit Rahmen, Pfad der Korrektur-Datei im Tab (#56)
Befund aus dem QGIS-Test: Die Bildschirmwahl wirkte nicht, das Fenster erschien immer auf dem Hauptbildschirm. Im Vollbild ließ es sich weder verschieben noch schließen und verdeckte QGIS; nur ein hartes Beenden von QGIS half. Bildschirmwahl und Vollbild entfallen. Das Anzeigefenster öffnet als normales Fenster mit Rahmen; der Bearbeiter schiebt es auf den Bildschirm des Eigentümers und kann es dort maximieren. Größe und Lage werden beim Beenden gemerkt und in der nächsten Sitzung wiederhergestellt (bis zum Neustart von QGIS). Unter den Knöpfen steht jetzt Pfad und Name der Korrektur-Datei, mit Hinweis, solange sie noch nicht angelegt ist oder erst abgefragt wird. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+63
-34
@@ -8,11 +8,13 @@ Zwei Bereiche:
|
||||
- **Eigentümersuche:** Eigentümerdatei (CSV-Layer) wählen, Name und/oder Vorname
|
||||
eingeben, „Suchen“ öffnet die Trefferliste.
|
||||
Logik: :mod:`sn_verfahrensgebiet.functions.eigentuemer_suche`.
|
||||
- **Anzeige für den Eigentümer:** Bildschirm wählen, Sitzung beginnen und
|
||||
beenden, Anzeige leeren, angezeigte Daten korrigieren. „Daten anzeigen“ in
|
||||
der Trefferliste füllt das Anzeigefenster (und beginnt bei Bedarf die
|
||||
Sitzung). Korrekturen landen in einer Korrektur-CSV neben der
|
||||
Eigentümerdatei (:mod:`sn_verfahrensgebiet.functions.eigentuemer_korrektur`).
|
||||
- **Anzeige für den Eigentümer:** Sitzung beginnen und beenden, Anzeige
|
||||
leeren, angezeigte Daten korrigieren. „Daten anzeigen“ in der Trefferliste
|
||||
füllt das Anzeigefenster (und beginnt bei Bedarf die Sitzung). Das Fenster
|
||||
schiebt der Bearbeiter selbst auf den Bildschirm des Eigentümers; Größe und
|
||||
Lage gelten für die nächste Sitzung weiter. Korrekturen landen in einer
|
||||
Korrektur-CSV neben der Eigentümerdatei, deren Pfad unter den Knöpfen steht
|
||||
(:mod:`sn_verfahrensgebiet.functions.eigentuemer_korrektur`).
|
||||
"""
|
||||
|
||||
import os
|
||||
@@ -44,12 +46,7 @@ from sn_verfahrensgebiet.functions.eigentuemer_korrektur import (
|
||||
wende_an,
|
||||
)
|
||||
from sn_verfahrensgebiet.ui.eigentuemer_treffer import EigentuemerTrefferFenster
|
||||
from sn_verfahrensgebiet.ui.eigentuemer_anzeige import (
|
||||
BildschirmAuswahl,
|
||||
EigentuemerAnzeige,
|
||||
qgis_bildschirm,
|
||||
zeige_auf_bildschirm,
|
||||
)
|
||||
from sn_verfahrensgebiet.ui.eigentuemer_anzeige import EigentuemerAnzeige, zeige_anzeigefenster
|
||||
from sn_verfahrensgebiet.ui.eigentuemer_korrektur_dialog import frage_korrektur
|
||||
|
||||
_TITEL_SUCHE = "Flurstückssuche"
|
||||
@@ -158,18 +155,12 @@ class EigentuemerTab(QWidget):
|
||||
titel_anzeige.setStyleSheet("margin-top: 12px;")
|
||||
layout.addWidget(titel_anzeige)
|
||||
|
||||
zeile_bildschirm = QHBoxLayout()
|
||||
zeile_bildschirm.addWidget(QLabel("Bildschirm:"))
|
||||
self.bildschirm_combo = BildschirmAuswahl()
|
||||
self.bildschirm_combo.setToolTip(
|
||||
"Bildschirm, den der Eigentümer sieht. Auf einem anderen Bildschirm als QGIS "
|
||||
"öffnet die Anzeige im Vollbild."
|
||||
)
|
||||
zeile_bildschirm.addWidget(self.bildschirm_combo, 1)
|
||||
layout.addLayout(zeile_bildschirm)
|
||||
|
||||
zeile_sitzung = QHBoxLayout()
|
||||
self.btn_sitzung = QPushButton("Sitzung beginnen")
|
||||
self.btn_sitzung.setToolTip(
|
||||
"Öffnet das Anzeigefenster. Es auf den Bildschirm des Eigentümers schieben; "
|
||||
"Größe und Lage gelten für die nächste Sitzung weiter."
|
||||
)
|
||||
self.btn_anzeige_leeren = QPushButton("Anzeige leeren")
|
||||
self.btn_anzeige_leeren.setToolTip(
|
||||
"Entfernt die Daten aus dem Anzeigefenster, ohne es zu schließen – "
|
||||
@@ -187,19 +178,27 @@ class EigentuemerTab(QWidget):
|
||||
self.sitzung_label.setWordWrap(True)
|
||||
layout.addWidget(self.sitzung_label)
|
||||
|
||||
self.korrektur_label = QLabel()
|
||||
self.korrektur_label.setWordWrap(True)
|
||||
self.korrektur_label.setTextInteractionFlags(Qt.TextInteractionFlag.TextSelectableByMouse)
|
||||
layout.addWidget(self.korrektur_label)
|
||||
|
||||
self.btn_sitzung.clicked.connect(self._on_sitzung_umschalten)
|
||||
self.btn_anzeige_leeren.clicked.connect(self._on_anzeige_leeren)
|
||||
self.btn_korrigieren.clicked.connect(self._on_korrigieren)
|
||||
self.eigentuemer_layer_combo.currentIndexChanged.connect(
|
||||
lambda _index: self._aktualisiere_korrektur_label()
|
||||
)
|
||||
|
||||
self._trefferfenster = None
|
||||
self._treffer_layer_id = None
|
||||
self._anzeige = None
|
||||
self._anzeige_geometrie = None
|
||||
self._sitzung_seit = None
|
||||
self._angezeigt = []
|
||||
self._anzeige_layer_id = None
|
||||
self._korrektur_pfade = {}
|
||||
self.eigentuemer_layer_combo.aktualisieren()
|
||||
self.bildschirm_combo.aktualisieren()
|
||||
self._aktualisiere_sitzungsstatus()
|
||||
|
||||
self.setLayout(layout)
|
||||
@@ -292,12 +291,10 @@ class EigentuemerTab(QWidget):
|
||||
self._sitzung_beenden()
|
||||
|
||||
def _sitzung_beginnen(self) -> None:
|
||||
"""Öffnet das Anzeigefenster leer auf dem gewählten Bildschirm."""
|
||||
bildschirm = self.bildschirm_combo.gewaehlter_bildschirm()
|
||||
"""Öffnet das Anzeigefenster leer, mit Rahmen, an der Stelle der letzten Sitzung."""
|
||||
anzeige = EigentuemerAnzeige(self)
|
||||
anzeige.beim_schliessen = self._anzeige_wurde_geschlossen
|
||||
vollbild = bildschirm is not None and bildschirm is not qgis_bildschirm()
|
||||
zeige_auf_bildschirm(anzeige, bildschirm, vollbild)
|
||||
zeige_anzeigefenster(anzeige, self._anzeige_geometrie)
|
||||
self._anzeige = anzeige
|
||||
self._sitzung_seit = datetime.now()
|
||||
self._angezeigt = []
|
||||
@@ -312,6 +309,11 @@ class EigentuemerTab(QWidget):
|
||||
anzeige.close()
|
||||
|
||||
def _anzeige_wurde_geschlossen(self) -> None:
|
||||
if self._anzeige is not None:
|
||||
try:
|
||||
self._anzeige_geometrie = self._anzeige.saveGeometry()
|
||||
except Exception:
|
||||
pass
|
||||
self._anzeige = None
|
||||
self._sitzung_seit = None
|
||||
self._angezeigt = []
|
||||
@@ -349,6 +351,36 @@ class EigentuemerTab(QWidget):
|
||||
inhalt = "leer" if not anzahl else ("1 Eintrag" if anzahl == 1 else f"{anzahl} Einträge")
|
||||
text = f"Sitzung seit {self._sitzung_seit:%H:%M} Uhr – Anzeige: {inhalt}"
|
||||
self.sitzung_label.setText(text)
|
||||
self._aktualisiere_korrektur_label()
|
||||
|
||||
def _korrektur_layer_id(self):
|
||||
"""Eigentümerdatei, zu der Korrekturen gehören: die angezeigte, sonst die gesuchte, sonst die gewählte."""
|
||||
return self._anzeige_layer_id or self._treffer_layer_id or self.eigentuemer_layer_combo.currentData()
|
||||
|
||||
def _korrektur_vorschau(self):
|
||||
"""Pfad der Korrektur-CSV ohne Rückfrage, oder ``None``, wenn er erst beim Speichern erfragt wird."""
|
||||
layer_id = self._korrektur_layer_id()
|
||||
if layer_id in self._korrektur_pfade:
|
||||
return self._korrektur_pfade[layer_id]
|
||||
layer = hole_layer(layer_id)
|
||||
vorschlag = korrektur_pfad(layer.source()) if layer is not None else None
|
||||
ordner = os.path.dirname(vorschlag) if vorschlag else ""
|
||||
if vorschlag and os.path.isdir(ordner) and os.access(ordner, os.W_OK):
|
||||
return vorschlag
|
||||
return None
|
||||
|
||||
def _aktualisiere_korrektur_label(self) -> None:
|
||||
"""Zeigt unter den Knöpfen, wohin Korrekturen geschrieben werden."""
|
||||
if not self._korrektur_layer_id():
|
||||
text = "Korrektur-Datei: – (keine Eigentümerdatei gewählt)"
|
||||
else:
|
||||
pfad = self._korrektur_vorschau()
|
||||
if pfad is None:
|
||||
text = "Korrektur-Datei: wird beim ersten Speichern abgefragt"
|
||||
else:
|
||||
zusatz = "" if os.path.exists(pfad) else " (wird beim ersten Speichern angelegt)"
|
||||
text = f"Korrektur-Datei: {os.path.normpath(pfad)}{zusatz}"
|
||||
self.korrektur_label.setText(text)
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# Korrekturen
|
||||
@@ -382,6 +414,7 @@ class EigentuemerTab(QWidget):
|
||||
self._angezeigt[index] = wende_an(eintrag, aenderungen)
|
||||
if self._anzeige is not None:
|
||||
self._anzeige.zeige(self._angezeigt)
|
||||
self._aktualisiere_korrektur_label()
|
||||
anzahl = len(aenderungen)
|
||||
text = "1 Änderung" if anzahl == 1 else f"{anzahl} Änderungen"
|
||||
success(_TITEL_ANZEIGE, f"{text} in „{os.path.basename(pfad)}“ festgehalten.")
|
||||
@@ -394,14 +427,10 @@ class EigentuemerTab(QWidget):
|
||||
für die Eigentümerdatei, solange der Tab besteht.
|
||||
"""
|
||||
layer_id = self._anzeige_layer_id
|
||||
if layer_id in self._korrektur_pfade:
|
||||
return self._korrektur_pfade[layer_id]
|
||||
layer = hole_layer(layer_id)
|
||||
vorschlag = korrektur_pfad(layer.source()) if layer is not None else None
|
||||
ordner = os.path.dirname(vorschlag) if vorschlag else ""
|
||||
if vorschlag and os.path.isdir(ordner) and os.access(ordner, os.W_OK):
|
||||
pfad = vorschlag
|
||||
else:
|
||||
pfad = self._korrektur_vorschau() if layer_id == self._korrektur_layer_id() else None
|
||||
if pfad is None:
|
||||
layer = hole_layer(layer_id)
|
||||
vorschlag = korrektur_pfad(layer.source()) if layer is not None else None
|
||||
pfad, _ = QFileDialog.getSaveFileName(
|
||||
self, "Korrektur-CSV wählen", vorschlag or os.path.expanduser("~"), "CSV-Dateien (*.csv)"
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user