Flst_Laden, VerfGebiet bilden
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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
|
||||
]
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user