From 1796a7d5c0b3617e7bef3f336126b78e042dd301 Mon Sep 17 00:00:00 2001 From: daniel Date: Fri, 27 Mar 2026 11:19:07 +0100 Subject: [PATCH] Verfahrensgebiet-Layerauswahl nach sn_verfahrensgebiet verschoben --- main.py | 11 ++++++++++- ui/dockwidget.py | 31 +++++++++++++++++++++++++++++++ ui/tabs/working_tab.py | 42 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 83 insertions(+), 1 deletion(-) diff --git a/main.py b/main.py index ee6305d..a573ceb 100644 --- a/main.py +++ b/main.py @@ -1,10 +1,14 @@ from qgis.utils import plugins from sn_basis.ui.dockmanager import DockManager from .ui.dockwidget import DockWidget +from sn_basis.modules.DataGrabber import DataGrabber +from sn_basis.modules.Pruefmanager import Pruefmanager class Verfahrensgebiet: def __init__(self, iface): self.iface = iface + self.pruefmanager = Pruefmanager(ui_modus="qgis") + self.data_grabber = DataGrabber(pruefmanager=self.pruefmanager) self.action = None self.dockwidget = None @@ -50,7 +54,12 @@ class Verfahrensgebiet: # if basis and basis.ui: # basis.ui.set_active_plugin(self.action) def run(self): - self.dockwidget = DockWidget(self.iface.mainWindow(), subtitle=self.plugin_name) + self.dockwidget = DockWidget( + self.iface.mainWindow(), + subtitle=self.plugin_name, + pruefmanager=self.pruefmanager, + data_grabber=self.data_grabber, + ) self.dockwidget.setObjectName(self.dock_name) # Action-Referenz im Dock speichern diff --git a/ui/dockwidget.py b/ui/dockwidget.py index 04a64df..7e09d45 100644 --- a/ui/dockwidget.py +++ b/ui/dockwidget.py @@ -2,7 +2,38 @@ from sn_basis.ui.tabs.settings_tab import SettingsTab from sn_basis.ui.tabs.print_tab import PrintTab from sn_verfahrensgebiet.ui.tabs.working_tab import WorkingTab from sn_basis.ui.base_dockwidget import BaseDockWidget +from sn_basis.functions.qt_wrapper import QTabWidget +from sn_basis.functions.message_wrapper import error class DockWidget(BaseDockWidget): tabs = [WorkingTab, PrintTab, SettingsTab] + + def __init__(self, parent=None, subtitle="", pruefmanager=None, data_grabber=None): + super().__init__(parent, subtitle) + + self.pruefmanager = pruefmanager + self.data_grabber = data_grabber + + self._init_tabs_with_services() + + def _init_tabs_with_services(self): + """Tabs neu aufbauen und Services (z.B. fuer PrintTab) injizieren.""" + try: + self.setWidget(None) + + tab_widget = QTabWidget() + for tab_class in self.tabs: + tab_instance = tab_class(self) + tab_title = getattr(tab_class, "tab_title", tab_class.__name__) + tab_widget.addTab(tab_instance, tab_title) + + if hasattr(tab_instance, "set_services"): + tab_instance.set_services( + pruefmanager=self.pruefmanager, + data_grabber=self.data_grabber, + ) + + self.setWidget(tab_widget) + except Exception as e: + error("Services-Tabs konnten nicht initialisiert werden", str(e)) diff --git a/ui/tabs/working_tab.py b/ui/tabs/working_tab.py index 8090d9c..3714588 100644 --- a/ui/tabs/working_tab.py +++ b/ui/tabs/working_tab.py @@ -1,6 +1,9 @@ from sn_basis.functions.qt_wrapper import QWidget, QVBoxLayout, QHBoxLayout, QLabel, QPushButton, QMessageBox from sn_basis.functions.qt_wrapper import Qt from sn_basis.functions import Qgis, QgsProject #QgsMessageLog +from sn_basis.functions.qgisui_wrapper import QgsMapLayerComboBox +from sn_basis.functions.qgiscore_wrapper import QgsMapLayerProxyModel +from sn_basis.functions.verfahrensgebiet_manager import get_verfahrensgebiet_layer_id, set_verfahrensgebiet_layer_id from qgis.utils import iface from sn_verfahrensgebiet.functions.verfahrensgebiet_alkis import verfahrensgebiet_alkis, LoadStatus @@ -32,7 +35,22 @@ class WorkingTab(QWidget): row_verf_buttons.addWidget(self.btn_verf_shape) layout.addLayout(row_verf_buttons) + # Abschnitt 1b: Verfahrensgebiet-Layer auswählen + row_layer_label = QHBoxLayout() + lbl_layer = QLabel("Oder: Verfahrensgebiet-Layer auswählen") + lbl_layer.setStyleSheet("font-style: italic; color: gray; margin-top: 8px;") + row_layer_label.addWidget(lbl_layer) + row_layer_label.addStretch() + layout.addLayout(row_layer_label) + + self.verf_layer_combo = QgsMapLayerComboBox(self) + self.verf_layer_combo.setFilters(QgsMapLayerProxyModel.VectorLayer) + self.verf_layer_combo.setToolTip("Wähle den Verfahrensgebiet-Layer, oder lasse es leer für Automatik") + self.verf_layer_combo.layerChanged.connect(self._on_verf_layer_changed) + layout.addWidget(self.verf_layer_combo) + # Abschnitt 2: Flurstücke (Platzhalter für spätere Implementierung) + row_flurst_header = QHBoxLayout() lbl_flurst = QLabel("Flurstücke") self.haken_flurst = self._haken_label() @@ -57,6 +75,9 @@ class WorkingTab(QWidget): # self.btn_flurst_alkis.clicked.connect(self.handle_flurst_alkis) # self.btn_flurst_shape.clicked.connect(self.handle_flurst_shape) + # Beim Init: aktuelle Verfahrensgebiet-Layer-ID laden und im Dropdown anzeigen + self._restore_verf_layer_selection() + def handle_verf_alkis(self): self._set_busy(self.btn_verf_alkis, True) try: @@ -110,3 +131,24 @@ class WorkingTab(QWidget): label.setText("") label.setStyleSheet("") + def _on_verf_layer_changed(self, layer) -> None: + """Callback: Nutzer hat einen anderen Layer im Dropdown gewählt.""" + if layer and layer.isValid(): + # Speichere die Layer-ID in der zentralen Variable + set_verfahrensgebiet_layer_id(layer.id()) + else: + # Layer is None oder invalid; leere die Variable + set_verfahrensgebiet_layer_id("") + + def _restore_verf_layer_selection(self) -> None: + """Beim Tab-Init: Lade die zuletzt gespeicherte Verfahrensgebiet-Layer-ID.""" + layer_id = get_verfahrensgebiet_layer_id() + if layer_id: + # Versuche, den Layer im Projekt zu finden + try: + project = QgsProject.instance() + layer = project.mapLayer(layer_id) + if layer and layer.isValid(): + self.verf_layer_combo.setLayer(layer) + except Exception: + pass