Flst_Laden, VerfGebiet bilden
This commit is contained in:
@@ -20,7 +20,7 @@ from .ly_metadata_wrapper import (
|
|||||||
is_layer_editable,
|
is_layer_editable,
|
||||||
)
|
)
|
||||||
from .ly_style_wrapper import apply_style
|
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 (
|
from .message_wrapper import (
|
||||||
_get_message_bar,
|
_get_message_bar,
|
||||||
|
|||||||
@@ -128,6 +128,60 @@ def ask_overwrite_append_cancel_custom(
|
|||||||
return "cancel"
|
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:
|
class ProgressDialog:
|
||||||
def __init__(self, total: int, title: str = "Fortschritt", label: str = "Verarbeite..."):
|
def __init__(self, total: int, title: str = "Fortschritt", label: str = "Verarbeite..."):
|
||||||
self.total = max(total, 1)
|
self.total = max(total, 1)
|
||||||
|
|||||||
+48
-1
@@ -5,7 +5,7 @@ sn_basis/modules/Pruefmanager.py
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
from typing import Optional, Any
|
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.functions.ly_visibility_wrapper import set_layer_visible
|
||||||
from sn_basis.modules.pruef_ergebnis import pruef_ergebnis, PruefAktion
|
from sn_basis.modules.pruef_ergebnis import pruef_ergebnis, PruefAktion
|
||||||
|
|
||||||
@@ -204,6 +204,10 @@ class Pruefmanager:
|
|||||||
if ergebnis.aktion == "datei_existiert":
|
if ergebnis.aktion == "datei_existiert":
|
||||||
return self._handle_datei_existiert(ergebnis)
|
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
|
# 3. Basis interaktive Aktionen
|
||||||
interactive_actions = {
|
interactive_actions = {
|
||||||
"leereingabe_erlaubt",
|
"leereingabe_erlaubt",
|
||||||
@@ -223,6 +227,49 @@ class Pruefmanager:
|
|||||||
)
|
)
|
||||||
return ergebnis
|
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:
|
def _ask_use_or_replace_pufferlayer(self) -> str:
|
||||||
"""
|
"""
|
||||||
Fragt den Nutzer, ob ein vorhandener Pufferlayer verwendet
|
Fragt den Nutzer, ob ein vorhandener Pufferlayer verwendet
|
||||||
|
|||||||
@@ -74,6 +74,13 @@ PruefAktion = Literal[
|
|||||||
"stil_not_implemented",
|
"stil_not_implemented",
|
||||||
"datei_unbekannt",
|
"datei_unbekannt",
|
||||||
"needs_user_action",
|
"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