Files
Plugin_SN_Basis/ui/base_dockwidget.py

112 lines
3.2 KiB
Python
Raw Normal View History

"""
sn_basis/ui/base_dockwidget.py
Basis-Dockwidget für alle LNO-Module.
"""
from sn_basis.functions.qt_wrapper import QDockWidget, QTabWidget
from sn_basis.functions.message_wrapper import warning, error
from sn_basis.functions.qt_wrapper import (
QDockWidget,
QTabWidget,
Qt,
DockWidgetMovable,
DockWidgetFloatable,
DockWidgetClosable,
DockAreaLeft,
DockAreaRight,
)
2025-11-17 11:29:04 +01:00
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
"""
2025-11-17 11:29:04 +01:00
base_title = "LNO Sachsen"
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)
# -----------------------------------------------------
# Dock-Konfiguration (WICHTIG)
# -----------------------------------------------------
self.setFeatures(
DockWidgetMovable
| DockWidgetFloatable
| DockWidgetClosable
)
self.setAllowedAreas(
DockAreaLeft
| DockAreaRight
)
2025-11-17 11:29:04 +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))
# -----------------------------------------------------
# Tabs erzeugen
# -----------------------------------------------------
try:
tab_widget = QTabWidget()
2025-11-17 11:29:04 +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):
"""
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)