Files
Plugin_SN_Basis/ui/base_dockwidget.py

74 lines
2.6 KiB
Python

# sn_basis/ui/base_dockwidget.py
from qgis.PyQt.QtWidgets import QDockWidget, QTabWidget
from sn_basis.functions.qgisqt_wrapper import warning, error
class BaseDockWidget(QDockWidget):
"""
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
"""
base_title = "LNO Sachsen"
tabs = [] # Liste von Tab-Klassen
action = None # Referenz auf die Toolbar-Action
def __init__(self, parent=None, subtitle=""):
super().__init__(parent)
# -----------------------------------------------------
# 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))
# -----------------------------------------------------
# Tabs erzeugen
# -----------------------------------------------------
try:
tab_widget = QTabWidget()
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
# ---------------------------------------------------------
def closeEvent(self, event):
"""
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))
super().closeEvent(event)