diff --git a/functions/verfahrensgebiet_alkis.py b/functions/verfahrensgebiet_alkis.py index 1ba8d9d..2731491 100644 --- a/functions/verfahrensgebiet_alkis.py +++ b/functions/verfahrensgebiet_alkis.py @@ -261,12 +261,12 @@ def _baue_layer_aus_landkreis_auswahl(tab_widget, kombinationen: dict, crs: str, """Auswahl + Bau für den Landkreis-Fallback. Zeigt :func:`~sn_verfahrensgebiet.functions.verfahrensgebiet_dialoge.ask_landkreis_objekte` - (Mehrfachauswahl inkl. "Alle auswählen" und "Nur laden"-Checkbox). Die - ausgewählten Kombinationen werden anhand der ersten 5 Zeichen von - ``bezeichnung`` (= die eigentliche VKZ) gruppiert; je Gruppe wird EIN - Feature erzeugt (Geometrien der Gruppe verschmolzen). Damit entsteht bei - Auswahl mehrerer/aller Objekte eines Landkreises ein Layer mit mehreren - Features – einem je tatsächlichem Verfahren, nicht ein Gesamt-Blob. + (Mehrfachauswahl inkl. "Alle auswählen"). Die ausgewählten Kombinationen + werden anhand der ersten 5 Zeichen von ``bezeichnung`` (= die eigentliche + VKZ) gruppiert; je Gruppe wird EIN Feature erzeugt (Geometrien der + Gruppe verschmolzen). Damit entsteht bei Auswahl mehrerer/aller Objekte + eines Landkreises ein Layer mit mehreren Features – einem je + tatsächlichem Verfahren, nicht ein Gesamt-Blob. Args: tab_widget: Parent-Widget für Dialoge und Meldungen @@ -275,13 +275,12 @@ def _baue_layer_aus_landkreis_auswahl(tab_widget, kombinationen: dict, crs: str, status: Lade-Status aus Phase 1 (FIRST/RELOAD), wird durchgereicht Returns: - Tuple[Optional[QgsVectorLayer], LoadStatus, bool]: - ``(layer, status, nur_laden)``. + Tuple[Optional[QgsVectorLayer], LoadStatus]: ``(layer, status)``. """ key_list = sorted(kombinationen.keys()) - selected_keys, nur_laden = ask_landkreis_objekte(tab_widget, key_list) + selected_keys = ask_landkreis_objekte(tab_widget, key_list) if not selected_keys: - return None, LoadStatus.NONE, False + return None, LoadStatus.NONE # Nach VKZ (erste 5 Zeichen der bezeichnung) gruppieren vkz_gruppen: dict[str, list] = {} @@ -322,12 +321,12 @@ def _baue_layer_aus_landkreis_auswahl(tab_widget, kombinationen: dict, crs: str, if not neue_features: QMessageBox.critical(tab_widget, "Fehler", "Keine Geometrien zum Verschmelzen gefunden.") - return None, LoadStatus.NONE, False + return None, LoadStatus.NONE pr.addFeatures(neue_features) memory_layer.updateExtents() - return memory_layer, status, nur_laden + return memory_layer, status def verfahrensgebiet_alkis(tab_widget, skip_existing_check: bool = False): diff --git a/functions/verfahrensgebiet_alkis_komplett.py b/functions/verfahrensgebiet_alkis_komplett.py index 15fb092..77caea2 100644 --- a/functions/verfahrensgebiet_alkis_komplett.py +++ b/functions/verfahrensgebiet_alkis_komplett.py @@ -51,6 +51,7 @@ from sn_basis.functions.dialog_wrapper import ( create_progress_dialog, show_info_dialog, ask_detailpruefung_oder_vg_laden, + ask_yes_no, ) from sn_basis.functions.landkreise import LANDKREISE, ALLE_LANDKREISE from sn_basis.functions.ly_style_wrapper import apply_style @@ -273,9 +274,13 @@ def verfahrensgebiet_alkis_komplett( durchsuchen) und wird danach immer geschlossen – auch wenn anschließend der BROR-Auswahldialog erscheint (kein Fortschrittsdialog läuft währenddessen parallel zum Auswahldialog). + - **STOP** (Zwischenabfrage "Weiter?"): erscheint nach dem Laden/Übernehmen + des BROR-Objekts, bevor Dialog 2 startet. Bei "Nein" bricht der Ablauf + ab, das BROR-Objekt bleibt aber im Projekt (ersetzt die frühere + "Nur Objekte laden"-Option des Landkreis-Auswahldialogs). - **Dialog 2** (eigentlicher Workflow, 6 Schritte): startet erst, nachdem - das Verfahrensgebiet feststeht (direkt nach Dialog 1 bei eindeutigem - Treffer/KEEP, oder erst nach Bestätigung des Auswahldialogs mit OK). + das Verfahrensgebiet feststeht und die Stop-Abfrage mit "Ja" bestätigt + wurde. Schrittfolge in Dialog 2: @@ -351,8 +356,6 @@ def verfahrensgebiet_alkis_komplett( # Dialog 1 schließt hier immer – egal ob eine Auswahl folgt oder nicht. progress_suche.close() - nur_laden = False - try: if vorab_layer is not None or not kombinationen: # KEEP oder Fehler/Abbruch bereits in Phase 1 entschieden @@ -364,7 +367,7 @@ def verfahrensgebiet_alkis_komplett( # Objekt(e) des Landkreises auswählen – kein eigener Fortschritts- # dialog währenddessen, nur der Auswahldialog selbst. # ------------------------------------------------------------------ - alkis_vg_layer, vg_status, nur_laden = _baue_layer_aus_landkreis_auswahl( + alkis_vg_layer, vg_status = _baue_layer_aus_landkreis_auswahl( tab_widget, kombinationen, crs, vg_status ) if vg_status == LoadStatus.NONE or not alkis_vg_layer: @@ -387,12 +390,21 @@ def verfahrensgebiet_alkis_komplett( project.addMapLayer(alkis_vg_layer) bror_was_added_by_us = True # Style direkt nach dem Laden anwenden – unabhängig vom weiteren - # Ablauf, damit auch "Nur Objekte laden" den Style erhält. + # Ablauf, damit auch bei "Nein" auf die Stop-Abfrage der Style + # gesetzt ist. apply_style(alkis_vg_layer, BROR_STYLE_QML) - if nur_laden: - # Nutzer hat "Nur laden" angehakt – kein Dialog 2, kein weiterer - # Workflow (Gemarkung/Flurstücke/Vergleich). + # ------------------------------------------------------------------ + # STOP: Zwischenabfrage nach dem Laden des BROR-Objekts, bevor mit + # Gemarkung/Flurstücke/Flächenvergleich fortgefahren wird (ersetzt + # die frühere "Nur Objekte laden"-Option). + # ------------------------------------------------------------------ + if not ask_yes_no( + "Verfahrensgebiet laden", + f"Layer '{alkis_vg_layer.name()}' wurde geladen. Weiter?", + default=True, + parent=tab_widget, + ): abgeschlossen = True return alkis_vg_layer, None, None, vg_status diff --git a/functions/verfahrensgebiet_dialoge.py b/functions/verfahrensgebiet_dialoge.py index d4c6eef..e561885 100644 --- a/functions/verfahrensgebiet_dialoge.py +++ b/functions/verfahrensgebiet_dialoge.py @@ -101,15 +101,15 @@ def ask_bror_kombinationen( def ask_landkreis_objekte( parent: Any, kombinationen: list[tuple[str, str]], -) -> tuple[list[tuple[str, str]], bool]: +) -> list[tuple[str, str]]: """Zeigt Dialog zur Auswahl eines, mehrerer oder aller BROR-Objekte eines Landkreises (Fallback, wenn keine Verfahrensnummer gesetzt ist). Wie :func:`ask_bror_kombinationen`, zusätzlich mit einer "Alle auswählen"-Checkbox (da hier potenziell deutlich mehr Treffer als bei der - VKZ-Suche auftreten) und einer "Nur laden"-Checkbox, mit der gesteuert - wird, ob nach dem Laden der weitere Workflow (Gemarkung/Flurstücke/ - Flächenvergleich) fortgesetzt werden soll. + VKZ-Suche auftreten). Ob nach dem Laden der weitere Workflow + (Gemarkung/Flurstücke/Flächenvergleich) fortgesetzt wird, klärt eine + separate Stop-Abfrage nach dem Laden – nicht mehr dieser Dialog. Parameters ---------- @@ -120,16 +120,16 @@ def ask_landkreis_objekte( Returns ------- - tuple[list[tuple[str, str]], bool] - ``(ausgewaehlte_kombinationen, nur_laden)``. ``([], False)`` bei + list[tuple[str, str]] + Die gewählten ``(adv_name, bezeichnung)``-Tupel. Leere Liste bei Abbruch oder wenn nichts ausgewählt wurde. """ if not kombinationen: - return [], False + return [] if QT_VERSION == 0: # Mock-Modus print(f"Mock-Modus: ask_landkreis_objekte → {kombinationen[:1]}") - return kombinationen[:1], False + return kombinationen[:1] dialog = QDialog(parent) dialog.setWindowTitle("Verfahrensgebiete aus Landkreis laden") @@ -204,9 +204,6 @@ def ask_landkreis_objekte( mehrfachauswahl_hinweis = QLabel("Mehrfachauswahl mit Strg + Umschalt") layout.addWidget(mehrfachauswahl_hinweis) - nur_laden_checkbox = QCheckBox("Nur Objekte laden (ohne weitere Prüfungen)") - layout.addWidget(nur_laden_checkbox) - buttons = QDialogButtonBox(QDialogButtonBox.StandardButton.Ok | QDialogButtonBox.StandardButton.Cancel) buttons.accepted.connect(dialog.accept) buttons.rejected.connect(dialog.reject) @@ -235,11 +232,11 @@ def ask_landkreis_objekte( dialog.resize(breite, dialog.sizeHint().height()) if exec_dialog(dialog) != DialogAccepted: - return [], False + return [] ausgewaehlte_zeilen = sorted(set(item.row() for item in table.selectedItems())) ausgewaehlt = [(table.item(row, 1).text(), table.item(row, 0).text()) for row in ausgewaehlte_zeilen] - return ausgewaehlt, nur_laden_checkbox.isChecked() + return ausgewaehlt def ask_landkreis_auswahl(