Files
Plugin_SN_Basis/ui/dockmanager.py

70 lines
1.9 KiB
Python
Raw Normal View History

"""
sn_basis/ui/dockmanager.py
Verwaltet das Anzeigen und Ersetzen von DockWidgets.
Stellt sicher, dass immer nur ein sn_basis-Dock gleichzeitig sichtbar ist.
"""
2025-10-09 12:51:36 +02:00
from typing import Any
from sn_basis.functions import (
add_dock_widget,
remove_dock_widget,
find_dock_widgets,
warning,
error,
)
2025-11-17 11:29:04 +01:00
2025-10-09 12:51:36 +02:00
class DockManager:
"""
Verwaltet das Anzeigen und Ersetzen von DockWidgets.
"""
dock_prefix = "sn_dock_"
2025-10-09 12:51:36 +02:00
@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),
)
2025-10-09 12:51:36 +02:00
# 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),
)
2025-10-09 12:51:36 +02:00
except Exception as e:
error("DockManager-Fehler", str(e))