""" 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, ) 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) # ----------------------------------------------------- # Dock-Konfiguration (WICHTIG) # ----------------------------------------------------- self.setFeatures( DockWidgetMovable | DockWidgetFloatable | DockWidgetClosable ) self.setAllowedAreas( DockAreaLeft | DockAreaRight ) # ----------------------------------------------------- # 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() 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)