# sn_basis/ui/dockmanager.py from qgis.PyQt.QtCore import Qt from qgis.PyQt.QtWidgets import QDockWidget from qgis.utils import iface from sn_basis.functions.qgisqt_wrapper import warning, error class DockManager: """ Verwaltet das Anzeigen und Ersetzen von DockWidgets. Stellt sicher, dass immer nur ein LNO-Dock gleichzeitig sichtbar ist. """ default_area = Qt.DockWidgetArea.RightDockWidgetArea dock_prefix = "sn_dock_" @classmethod def show(cls, dock_widget, area=None): """ Zeigt ein DockWidget an und entfernt vorher alle anderen LNO-Docks (erkennbar am Prefix 'sn_dock_'). """ if dock_widget is None: error("Dock konnte nicht angezeigt werden", "Dock-Widget ist None.") return try: area = area or cls.default_area # Prüfen, ob das Dock einen gültigen Namen hat if not dock_widget.objectName(): dock_widget.setObjectName(f"{cls.dock_prefix}{id(dock_widget)}") # Bestehende Plugin-Docks schließen try: for widget in iface.mainWindow().findChildren(QDockWidget): if widget is not dock_widget and widget.objectName().startswith(cls.dock_prefix): iface.removeDockWidget(widget) widget.deleteLater() except Exception as e: warning("Vorherige Docks konnten nicht entfernt werden", str(e)) # Neues Dock anzeigen try: iface.addDockWidget(area, dock_widget) dock_widget.show() except Exception as e: error("Dock konnte nicht angezeigt werden", str(e)) except Exception as e: error("DockManager-Fehler", str(e))