2025-12-18 22:00:31 +01:00
|
|
|
# sn_basis/ui/base_dockwidget.py
|
|
|
|
|
|
2025-11-17 11:29:04 +01:00
|
|
|
from qgis.PyQt.QtWidgets import QDockWidget, QTabWidget
|
2025-12-18 22:00:31 +01:00
|
|
|
from sn_basis.functions.qgisqt_wrapper import warning, error
|
|
|
|
|
|
2025-11-17 11:29:04 +01:00
|
|
|
|
|
|
|
|
class BaseDockWidget(QDockWidget):
|
2025-12-18 22:00:31 +01:00
|
|
|
"""
|
|
|
|
|
Basis-Dockwidget für alle LNO-Module.
|
|
|
|
|
- Titel wird automatisch aus base_title + subtitle erzeugt
|
|
|
|
|
- Tabs werden dynamisch aus der Klassenvariable 'tabs' erzeugt
|
|
|
|
|
- Die zugehörige Toolbar-Action wird beim Schließen zurückgesetzt
|
|
|
|
|
"""
|
|
|
|
|
|
2025-11-17 11:29:04 +01:00
|
|
|
base_title = "LNO Sachsen"
|
2025-12-18 22:00:31 +01:00
|
|
|
tabs = [] # Liste von Tab-Klassen
|
|
|
|
|
action = None # Referenz auf die Toolbar-Action
|
2025-11-17 11:29:04 +01:00
|
|
|
|
|
|
|
|
def __init__(self, parent=None, subtitle=""):
|
|
|
|
|
super().__init__(parent)
|
|
|
|
|
|
2025-12-18 22:00:31 +01:00
|
|
|
# -----------------------------------------------------
|
|
|
|
|
# Titel setzen
|
|
|
|
|
# -----------------------------------------------------
|
|
|
|
|
try:
|
|
|
|
|
title = self.base_title if not subtitle else f"{self.base_title} | {subtitle}"
|
|
|
|
|
self.setWindowTitle(title)
|
|
|
|
|
except Exception as e:
|
|
|
|
|
warning("Titel konnte nicht gesetzt werden", str(e))
|
|
|
|
|
|
|
|
|
|
# -----------------------------------------------------
|
|
|
|
|
# Dock-Features
|
|
|
|
|
# -----------------------------------------------------
|
|
|
|
|
try:
|
|
|
|
|
self.setFeatures(QDockWidget.DockWidgetFeature.DockWidgetClosable)
|
|
|
|
|
except Exception as e:
|
|
|
|
|
warning("Dock-Features konnten nicht gesetzt werden", str(e))
|
2025-11-17 11:29:04 +01:00
|
|
|
|
2025-12-18 22:00:31 +01:00
|
|
|
# -----------------------------------------------------
|
|
|
|
|
# Tabs erzeugen
|
|
|
|
|
# -----------------------------------------------------
|
|
|
|
|
try:
|
|
|
|
|
tab_widget = QTabWidget()
|
2025-11-17 11:29:04 +01:00
|
|
|
|
2025-12-18 22:00:31 +01:00
|
|
|
for tab_class in self.tabs:
|
|
|
|
|
try:
|
|
|
|
|
tab_instance = tab_class()
|
|
|
|
|
tab_title = getattr(tab_class, "tab_title", tab_class.__name__)
|
|
|
|
|
tab_widget.addTab(tab_instance, tab_title)
|
|
|
|
|
except Exception as e:
|
|
|
|
|
error("Tab konnte nicht geladen werden", f"{tab_class}: {e}")
|
|
|
|
|
|
|
|
|
|
self.setWidget(tab_widget)
|
|
|
|
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
error("Tab-Widget konnte nicht initialisiert werden", str(e))
|
|
|
|
|
|
|
|
|
|
# ---------------------------------------------------------
|
|
|
|
|
# Dock schließen
|
|
|
|
|
# ---------------------------------------------------------
|
2025-11-17 12:23:04 +01:00
|
|
|
|
|
|
|
|
def closeEvent(self, event):
|
2025-12-18 22:00:31 +01:00
|
|
|
"""
|
|
|
|
|
Wird aufgerufen, wenn das Dock geschlossen wird.
|
|
|
|
|
Setzt die zugehörige Toolbar-Action zurück.
|
|
|
|
|
"""
|
|
|
|
|
try:
|
|
|
|
|
if self.action:
|
|
|
|
|
self.action.setChecked(False)
|
|
|
|
|
except Exception as e:
|
|
|
|
|
warning("Toolbar-Status konnte nicht zurückgesetzt werden", str(e))
|
|
|
|
|
|
2025-11-17 12:23:04 +01:00
|
|
|
super().closeEvent(event)
|