Auf Wrapper umgestellt, Prüfarchitektur QT6-kompatibel gemacht (Nicht lauffähig)

This commit is contained in:
2025-12-18 22:00:31 +01:00
parent f64d56d4bc
commit e8fea163b5
31 changed files with 2791 additions and 889 deletions

View File

@@ -1,52 +1,138 @@
#Pruefmanager.py
from modules.qt_compat import QMessageBox, QFileDialog, YES, NO, CANCEL, ICON_QUESTION, exec_dialog
from modules.Dateipruefer import DateiEntscheidung
"""
sn_basis/modules/pruefmanager.py zentrale Verarbeitung von pruef_ergebnis-Objekten.
Steuert die Nutzerinteraktion über qgisqt_wrapper.
"""
class PruefManager:
from sn_basis.functions.qgisqt_wrapper import (
ask_yes_no,
info,
warning,
error,
set_layer_visible, # optional, falls implementiert
)
def __init__(self, iface=None, plugin_pfad=None):
self.iface = iface
self.plugin_pfad = plugin_pfad
from sn_basis.modules.pruef_ergebnis import pruef_ergebnis
def frage_datei_ersetzen_oder_anhaengen(self, pfad: str) -> DateiEntscheidung:
msg = QMessageBox()
msg.setIcon(ICON_QUESTION)
msg.setWindowTitle("Datei existiert")
msg.setText(f"Die Datei '{pfad}' existiert bereits.\nWas möchtest du tun?")
msg.setStandardButtons(YES | NO | CANCEL)
msg.setDefaultButton(YES)
class Pruefmanager:
"""
Verarbeitet pruef_ergebnis-Objekte und steuert die Nutzerinteraktion.
"""
msg.button(YES).setText("Ersetzen")
msg.button(NO).setText("Anhängen")
msg.button(CANCEL).setText("Abbrechen")
def __init__(self, ui_modus: str = "qgis"):
self.ui_modus = ui_modus
result = exec_dialog(msg)
# ---------------------------------------------------------
# Hauptfunktion
# ---------------------------------------------------------
if result == YES:
return DateiEntscheidung.ERSETZEN
elif result == NO:
return DateiEntscheidung.ANHAENGEN
else:
return DateiEntscheidung.ABBRECHEN
def verarbeite(self, ergebnis: pruef_ergebnis) -> pruef_ergebnis:
"""
Verarbeitet ein pruef_ergebnis und führt ggf. Nutzerinteraktion durch.
Rückgabe: neues oder unverändertes pruef_ergebnis.
"""
def frage_temporär_verwenden(self) -> bool:
msg = QMessageBox()
msg.setIcon(ICON_QUESTION)
msg.setWindowTitle("Temporäre Layer")
msg.setText("Kein Speicherpfad wurde angegeben.\nMit temporären Layern fortfahren?")
if ergebnis.ok:
return ergebnis
msg.setStandardButtons(YES | NO)
msg.setDefaultButton(YES)
aktion = ergebnis.aktion
result = exec_dialog(msg)
return result == YES
# -----------------------------------------------------
# Allgemeine Aktionen
# -----------------------------------------------------
def waehle_dateipfad(self, titel="Speicherort wählen", filter="GeoPackage (*.gpkg)") -> str:
pfad, _ = QFileDialog.getSaveFileName(
parent=None,
caption=titel,
directory=self.plugin_pfad or "",
filter=filter
)
return pfad
if aktion == "leer":
warning("Eingabe fehlt", ergebnis.meldung)
return ergebnis
if aktion == "leereingabe_erlaubt":
if ask_yes_no("Ohne Eingabe fortfahren", ergebnis.meldung):
return pruef_ergebnis(True, "Ohne Eingabe fortgefahren.", "ok", None)
return ergebnis
if aktion == "leereingabe_nicht_erlaubt":
warning("Eingabe erforderlich", ergebnis.meldung)
return ergebnis
if aktion == "standarddatei_vorschlagen":
if ask_yes_no("Standarddatei verwenden", ergebnis.meldung):
return pruef_ergebnis(True, "Standarddatei wird verwendet.", "ok", ergebnis.pfad)
return ergebnis
if aktion == "temporaer_erlaubt":
if ask_yes_no("Temporäre Datei erzeugen", ergebnis.meldung):
return pruef_ergebnis(True, "Temporäre Datei soll erzeugt werden.", "temporaer_erzeugen", None)
return ergebnis
if aktion == "datei_nicht_gefunden":
warning("Datei nicht gefunden", ergebnis.meldung)
return ergebnis
if aktion == "kein_dateipfad":
warning("Ungültiger Pfad", ergebnis.meldung)
return ergebnis
if aktion == "pfad_nicht_gefunden":
warning("Pfad nicht gefunden", ergebnis.meldung)
return ergebnis
if aktion == "url_nicht_erreichbar":
warning("URL nicht erreichbar", ergebnis.meldung)
return ergebnis
if aktion == "netzwerkfehler":
error("Netzwerkfehler", ergebnis.meldung)
return ergebnis
# -----------------------------------------------------
# Layer-Aktionen
# -----------------------------------------------------
if aktion == "layer_nicht_gefunden":
error("Layer fehlt", ergebnis.meldung)
return ergebnis
if aktion == "layer_unsichtbar":
if ask_yes_no("Layer einblenden", ergebnis.meldung):
# Falls set_layer_visible implementiert ist
try:
set_layer_visible(ergebnis.pfad, True)
except Exception:
pass
return pruef_ergebnis(True, "Layer wurde eingeblendet.", "ok", ergebnis.pfad)
return ergebnis
if aktion == "falscher_geotyp":
warning("Falscher Geometrietyp", ergebnis.meldung)
return ergebnis
if aktion == "layer_leer":
warning("Layer enthält keine Objekte", ergebnis.meldung)
return ergebnis
if aktion == "falscher_layertyp":
warning("Falscher Layertyp", ergebnis.meldung)
return ergebnis
if aktion == "falsches_crs":
warning("Falsches CRS", ergebnis.meldung)
return ergebnis
if aktion == "felder_fehlen":
warning("Fehlende Felder", ergebnis.meldung)
return ergebnis
if aktion == "datenquelle_unerwartet":
warning("Unerwartete Datenquelle", ergebnis.meldung)
return ergebnis
if aktion == "layer_nicht_editierbar":
warning("Layer nicht editierbar", ergebnis.meldung)
return ergebnis
# -----------------------------------------------------
# Fallback
# -----------------------------------------------------
warning("Unbekannte Aktion", f"Unbekannte Aktion: {aktion}")
return ergebnis