Verfahrensgebiet-Layerauswahl nach sn_verfahrensgebiet verschoben

This commit is contained in:
2026-03-27 11:19:07 +01:00
parent 98077e47cf
commit 1796a7d5c0
3 changed files with 83 additions and 1 deletions
+10 -1
View File
@@ -1,10 +1,14 @@
from qgis.utils import plugins from qgis.utils import plugins
from sn_basis.ui.dockmanager import DockManager from sn_basis.ui.dockmanager import DockManager
from .ui.dockwidget import DockWidget from .ui.dockwidget import DockWidget
from sn_basis.modules.DataGrabber import DataGrabber
from sn_basis.modules.Pruefmanager import Pruefmanager
class Verfahrensgebiet: class Verfahrensgebiet:
def __init__(self, iface): def __init__(self, iface):
self.iface = iface self.iface = iface
self.pruefmanager = Pruefmanager(ui_modus="qgis")
self.data_grabber = DataGrabber(pruefmanager=self.pruefmanager)
self.action = None self.action = None
self.dockwidget = None self.dockwidget = None
@@ -50,7 +54,12 @@ class Verfahrensgebiet:
# if basis and basis.ui: # if basis and basis.ui:
# basis.ui.set_active_plugin(self.action) # basis.ui.set_active_plugin(self.action)
def run(self): 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) self.dockwidget.setObjectName(self.dock_name)
# Action-Referenz im Dock speichern # Action-Referenz im Dock speichern
+31
View File
@@ -2,7 +2,38 @@ from sn_basis.ui.tabs.settings_tab import SettingsTab
from sn_basis.ui.tabs.print_tab import PrintTab from sn_basis.ui.tabs.print_tab import PrintTab
from sn_verfahrensgebiet.ui.tabs.working_tab import WorkingTab from sn_verfahrensgebiet.ui.tabs.working_tab import WorkingTab
from sn_basis.ui.base_dockwidget import BaseDockWidget 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): class DockWidget(BaseDockWidget):
tabs = [WorkingTab, PrintTab, SettingsTab] 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))
+42
View File
@@ -1,6 +1,9 @@
from sn_basis.functions.qt_wrapper import QWidget, QVBoxLayout, QHBoxLayout, QLabel, QPushButton, QMessageBox 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.qt_wrapper import Qt
from sn_basis.functions import Qgis, QgsProject #QgsMessageLog 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 qgis.utils import iface
from sn_verfahrensgebiet.functions.verfahrensgebiet_alkis import verfahrensgebiet_alkis, LoadStatus 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) row_verf_buttons.addWidget(self.btn_verf_shape)
layout.addLayout(row_verf_buttons) 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) # Abschnitt 2: Flurstücke (Platzhalter für spätere Implementierung)
row_flurst_header = QHBoxLayout() row_flurst_header = QHBoxLayout()
lbl_flurst = QLabel("<b>Flurstücke</b>") lbl_flurst = QLabel("<b>Flurstücke</b>")
self.haken_flurst = self._haken_label() 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_alkis.clicked.connect(self.handle_flurst_alkis)
# self.btn_flurst_shape.clicked.connect(self.handle_flurst_shape) # 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): def handle_verf_alkis(self):
self._set_busy(self.btn_verf_alkis, True) self._set_busy(self.btn_verf_alkis, True)
try: try:
@@ -110,3 +131,24 @@ class WorkingTab(QWidget):
label.setText("") label.setText("")
label.setStyleSheet("") 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