Compare commits
9
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
41b272092e | ||
|
|
5be2d3b4f9 | ||
|
|
62fae1c431 | ||
|
|
5531db9071 | ||
|
|
1796a7d5c0 | ||
|
|
98077e47cf | ||
|
|
df0ebc5543 | ||
|
|
e4de5950a7 | ||
|
|
52cf55d242 |
@@ -1 +1,7 @@
|
|||||||
|
---
|
||||||
|
Version 26.3.3-unstable:
|
||||||
|
---
|
||||||
|
Version 26.3.2-unstable:
|
||||||
|
---
|
||||||
|
Version 26.3.1-unstable:
|
||||||
- erster Test als echtes PlugIn
|
- erster Test als echtes PlugIn
|
||||||
@@ -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
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
[general]
|
[general]
|
||||||
version=
|
version=26.3.3-unstable
|
||||||
name=LNO Sachsen | Verfahrensgebiet
|
name=LNO Sachsen | Verfahrensgebiet
|
||||||
description=Plugin zum Erzeugen eines Objektes "Verfahrensgebiet"
|
description=Plugin zum Erzeugen eines Objektes "Verfahrensgebiet"
|
||||||
author=Daniel Helbig, Michael Otto
|
author=Daniel Helbig, Michael Otto
|
||||||
|
|||||||
+33
-1
@@ -1,7 +1,39 @@
|
|||||||
from sn_basis.ui.tabs.settings_tab import SettingsTab
|
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_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, 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))
|
||||||
|
|||||||
+51
-1
@@ -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,11 +75,15 @@ 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:
|
||||||
layer, status = verfahrensgebiet_alkis(self)
|
layer, status = verfahrensgebiet_alkis(self)
|
||||||
if not layer or not layer.isValid():
|
if not layer or not layer.isValid():
|
||||||
|
set_verfahrensgebiet_layer_id("")
|
||||||
return
|
return
|
||||||
|
|
||||||
if status in (LoadStatus.FIRST, LoadStatus.RELOAD):
|
if status in (LoadStatus.FIRST, LoadStatus.RELOAD):
|
||||||
@@ -69,19 +91,26 @@ class WorkingTab(QWidget):
|
|||||||
QgsProject.instance().addMapLayer(layer)
|
QgsProject.instance().addMapLayer(layer)
|
||||||
iface.mapCanvas().setExtent(layer.extent())
|
iface.mapCanvas().setExtent(layer.extent())
|
||||||
#iface.mapCanvas().refresh()
|
#iface.mapCanvas().refresh()
|
||||||
|
|
||||||
apply_style(layer, "verfahrensgebiet.qml")
|
apply_style(layer, "verfahrensgebiet.qml")
|
||||||
iface.mapCanvas().refresh()
|
iface.mapCanvas().refresh()
|
||||||
self.setze_haken(self.haken_verf, True)
|
self.setze_haken(self.haken_verf, True)
|
||||||
|
|
||||||
|
# Dropdown + Variable explizit synchronisieren.
|
||||||
|
self.verf_layer_combo.setLayer(layer)
|
||||||
|
self._on_verf_layer_changed(layer)
|
||||||
|
|
||||||
# Unterschied nur in der Meldung
|
# Unterschied nur in der Meldung
|
||||||
msg = "erstmalig geladen" if status == LoadStatus.FIRST else "neu geladen"
|
msg = "erstmalig geladen" if status == LoadStatus.FIRST else "neu geladen"
|
||||||
success("Verfahrensgebiet", f"Layer wurde {msg}.", duration=5)
|
success("Verfahrensgebiet", f"Layer wurde {msg}.", duration=5)
|
||||||
|
|
||||||
elif status == LoadStatus.KEEP:
|
elif status == LoadStatus.KEEP:
|
||||||
|
self.verf_layer_combo.setLayer(layer)
|
||||||
|
self._on_verf_layer_changed(layer)
|
||||||
info("Verfahrensgebiet", "Vorhandener Layer wurde behalten.", duration=4)
|
info("Verfahrensgebiet", "Vorhandener Layer wurde behalten.", duration=4)
|
||||||
|
|
||||||
elif status == LoadStatus.NONE:
|
elif status == LoadStatus.NONE:
|
||||||
|
self._on_verf_layer_changed(None)
|
||||||
warning("Verfahrensgebiet", "Layer konnte nicht geladen werden.", duration=None)
|
warning("Verfahrensgebiet", "Layer konnte nicht geladen werden.", duration=None)
|
||||||
|
|
||||||
finally:
|
finally:
|
||||||
@@ -110,3 +139,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
|
||||||
|
|||||||
Reference in New Issue
Block a user