""" sn_basis/ui/dockmanager.py Verwaltet das Anzeigen und Ersetzen von DockWidgets. Stellt sicher, dass immer nur ein sn_basis-Dock gleichzeitig sichtbar ist. """ from typing import Any, Optional from sn_basis.functions import ( add_dock_widget, remove_dock_widget, find_dock_widgets, warning, error, ) from sn_basis.functions.qt_wrapper import ( DockAreaRight, ) class DockManager: """ Verwaltet das Anzeigen und Ersetzen von DockWidgets. """ dock_prefix = "sn_dock_" @classmethod def show(cls, dock_widget: Any, area: Optional[Any] = None) -> None: """ Zeigt ein DockWidget an und entfernt vorher alle anderen sn_basis-Docks (erkennbar am Prefix 'sn_dock_'). """ # ----------------------------------------------------- # Default-Dock-Area (wrapper-konform) # ----------------------------------------------------- if area is None: area = DockAreaRight if dock_widget is None: error("Dock konnte nicht angezeigt werden", "Dock-Widget ist None.") return try: # ------------------------------------------------- # Sicherstellen, dass das Dock einen Namen hat # ------------------------------------------------- if not dock_widget.objectName(): dock_widget.setObjectName( f"{cls.dock_prefix}{id(dock_widget)}" ) # ------------------------------------------------- # Vorhandene Plugin-Docks entfernen # ------------------------------------------------- try: for widget in find_dock_widgets(): if ( widget is not dock_widget and widget.objectName().startswith(cls.dock_prefix) ): remove_dock_widget(widget) widget.deleteLater() except Exception as e: warning( "Vorherige Docks konnten nicht entfernt werden", str(e), ) # ------------------------------------------------- # Neues Dock anzeigen # ------------------------------------------------- try: add_dock_widget(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))