""" 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 from sn_basis.functions import ( add_dock_widget, remove_dock_widget, find_dock_widgets, warning, error, ) class DockManager: """ Verwaltet das Anzeigen und Ersetzen von DockWidgets. """ dock_prefix = "sn_dock_" @classmethod def show(cls, dock_widget: Any, area=None) -> None: """ Zeigt ein DockWidget an und entfernt vorher alle anderen sn_basis-Docks (erkennbar am Prefix 'sn_dock_'). """ 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))