Flst_Laden, VerfGebiet bilden

This commit is contained in:
2026-04-21 21:50:33 +02:00
parent 91669b34d6
commit 34e2ff4f66
4 changed files with 110 additions and 2 deletions
+1 -1
View File
@@ -20,7 +20,7 @@ from .ly_metadata_wrapper import (
is_layer_editable,
)
from .ly_style_wrapper import apply_style
from .dialog_wrapper import ask_yes_no, ask_overwrite_append_cancel_custom
from .dialog_wrapper import ask_yes_no, ask_overwrite_append_cancel_custom, ask_ergaenzen_entfernen_ersetzen_abbrechen
from .message_wrapper import (
_get_message_bar,
+54
View File
@@ -128,6 +128,60 @@ def ask_overwrite_append_cancel_custom(
return "cancel"
def ask_ergaenzen_entfernen_ersetzen_abbrechen(
parent: Any,
title: str,
message: str,
) -> Literal["ergaenzen", "entfernen", "ersetzen", "abbrechen"]:
"""Zeigt Dialog mit vier Optionen für Verfahrensgebiet-Editoperationen.
Optionen:
- **Ergänzen**: ausgewählte Flurstücke zum Verfahrensgebiet hinzufügen
- **Entfernen**: ausgewählte Flurstücke aus dem Verfahrensgebiet entfernen
- **Ersetzen**: Verfahrensgebiet vollständig durch Auswahl ersetzen
- **Abbrechen**: Vorgang beenden ohne Änderung
Parameters
----------
parent :
Eltern-Widget oder None.
title : str
Dialog-Titel.
message : str
Hauptmeldung mit Erklärung.
Returns
-------
Literal["ergaenzen", "entfernen", "ersetzen", "abbrechen"]
Genaue Entscheidung des Nutzers.
"""
if QT_VERSION == 0: # Mock-Modus
print(f"Mock-Modus: ask_ergaenzen_entfernen_ersetzen_abbrechen('{title}') → abbrechen")
return "abbrechen"
msg = QMessageBox(parent)
msg.setIcon(ICON_QUESTION)
msg.setWindowTitle(title)
msg.setText(message)
ergaenzen_btn = msg.addButton("Ergänzen", QMessageBox.ButtonRole.ActionRole)
entfernen_btn = msg.addButton("Entfernen", QMessageBox.ButtonRole.ActionRole)
ersetzen_btn = msg.addButton("Ersetzen", QMessageBox.ButtonRole.AcceptRole)
msg.addButton("Abbrechen", QMessageBox.ButtonRole.RejectRole)
exec_dialog(msg)
clicked = msg.clickedButton()
if clicked == ergaenzen_btn:
return "ergaenzen"
elif clicked == entfernen_btn:
return "entfernen"
elif clicked == ersetzen_btn:
return "ersetzen"
else:
return "abbrechen"
class ProgressDialog:
def __init__(self, total: int, title: str = "Fortschritt", label: str = "Verarbeite..."):
self.total = max(total, 1)
+48 -1
View File
@@ -5,7 +5,7 @@ sn_basis/modules/Pruefmanager.py
from __future__ import annotations
from typing import Optional, Any
from sn_basis.functions import ask_yes_no, info, warning, error, ask_overwrite_append_cancel_custom
from sn_basis.functions import ask_yes_no, info, warning, error, ask_overwrite_append_cancel_custom, ask_ergaenzen_entfernen_ersetzen_abbrechen
from sn_basis.functions.ly_visibility_wrapper import set_layer_visible
from sn_basis.modules.pruef_ergebnis import pruef_ergebnis, PruefAktion
@@ -204,6 +204,10 @@ class Pruefmanager:
if ergebnis.aktion == "datei_existiert":
return self._handle_datei_existiert(ergebnis)
# 3. Verfahrensgebiet-Editentscheidung
if ergebnis.aktion == "verfahrensgebiet_layer_existiert":
return self._handle_verfahrensgebiet_layer_existiert(ergebnis)
# 3. Basis interaktive Aktionen
interactive_actions = {
"leereingabe_erlaubt",
@@ -223,6 +227,49 @@ class Pruefmanager:
)
return ergebnis
def _handle_verfahrensgebiet_layer_existiert(self, ergebnis: pruef_ergebnis) -> pruef_ergebnis:
"""Fragt Nutzer, was mit dem bestehenden Verfahrensgebiet-Layer geschehen soll.
Zeigt einen Dialog mit vier Optionen:
- **Ergänzen**: neue Flurstücke hinzufügen
- **Entfernen**: ausgewählte Flurstücke entfernen
- **Ersetzen**: Verfahrensgebiet vollständig ersetzen
- **Abbrechen**: Vorgang beenden
Returns
-------
pruef_ergebnis
ok=True mit aktion ``verfahrensgebiet_ergaenzen`` / ``verfahrensgebiet_entfernen`` /
``verfahrensgebiet_ersetzen``, oder ok=False mit ``verfahrensgebiet_abbrechen``.
"""
if self.ui_modus != "qgis":
return ergebnis
titel = "Verfahrensgebiet bereits vorhanden"
meldung = (
ergebnis.meldung
or "Ein Verfahrensgebiet-Layer existiert bereits.\nWas soll geschehen?"
)
entscheidung = ask_ergaenzen_entfernen_ersetzen_abbrechen(
parent=self.parent,
title=titel,
message=meldung,
)
aktion_map = {
"ergaenzen": "verfahrensgebiet_ergaenzen",
"entfernen": "verfahrensgebiet_entfernen",
"ersetzen": "verfahrensgebiet_ersetzen",
"abbrechen": "verfahrensgebiet_abbrechen",
}
return pruef_ergebnis(
ok=(entscheidung != "abbrechen"),
aktion=aktion_map[entscheidung],
kontext=ergebnis.kontext,
)
def _ask_use_or_replace_pufferlayer(self) -> str:
"""
Fragt den Nutzer, ob ein vorhandener Pufferlayer verwendet
+7
View File
@@ -74,6 +74,13 @@ PruefAktion = Literal[
"stil_not_implemented",
"datei_unbekannt",
"needs_user_action",
# Verfahrensgebiet-Editoperationen
"verfahrensgebiet_layer_existiert", # bestehender Layer → Nutzerentscheidung
"verfahrensgebiet_ergaenzen", # Flurstücke hinzufügen
"verfahrensgebiet_entfernen", # Flurstücke entfernen
"verfahrensgebiet_ersetzen", # Verfahrensgebiet vollständig ersetzen
"verfahrensgebiet_abbrechen", # Nutzer hat abgebrochen
]