2025-12-19 14:29:52 +01:00
|
|
|
"""
|
|
|
|
|
sn_basis/ui/dockmanager.py
|
2025-12-18 22:00:31 +01:00
|
|
|
|
2025-12-19 14:29:52 +01:00
|
|
|
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
|
|
|
|
2025-12-19 14:29:52 +01:00
|
|
|
from typing import Any
|
|
|
|
|
|
|
|
|
|
from sn_basis.functions import (
|
|
|
|
|
add_dock_widget,
|
|
|
|
|
remove_dock_widget,
|
|
|
|
|
find_dock_widgets,
|
|
|
|
|
warning,
|
|
|
|
|
error,
|
|
|
|
|
)
|
2025-12-18 22:00:31 +01:00
|
|
|
|
2025-11-17 11:29:04 +01:00
|
|
|
|
2025-10-09 12:51:36 +02:00
|
|
|
class DockManager:
|
2025-12-18 22:00:31 +01:00
|
|
|
"""
|
|
|
|
|
Verwaltet das Anzeigen und Ersetzen von DockWidgets.
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
dock_prefix = "sn_dock_"
|
2025-10-09 12:51:36 +02:00
|
|
|
|
|
|
|
|
@classmethod
|
2025-12-19 14:29:52 +01:00
|
|
|
def show(cls, dock_widget: Any, area=None) -> None:
|
2025-12-18 22:00:31 +01:00
|
|
|
"""
|
|
|
|
|
Zeigt ein DockWidget an und entfernt vorher alle anderen
|
2025-12-19 14:29:52 +01:00
|
|
|
sn_basis-Docks (erkennbar am Prefix 'sn_dock_').
|
2025-12-18 22:00:31 +01:00
|
|
|
"""
|
2025-12-19 14:29:52 +01:00
|
|
|
|
2025-12-18 22:00:31 +01:00
|
|
|
if dock_widget is None:
|
|
|
|
|
error("Dock konnte nicht angezeigt werden", "Dock-Widget ist None.")
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
try:
|
2025-12-19 14:29:52 +01:00
|
|
|
# Sicherstellen, dass das Dock einen Namen hat
|
2025-12-18 22:00:31 +01:00
|
|
|
if not dock_widget.objectName():
|
|
|
|
|
dock_widget.setObjectName(f"{cls.dock_prefix}{id(dock_widget)}")
|
|
|
|
|
|
2025-12-19 14:29:52 +01:00
|
|
|
# Vorhandene Plugin-Docks entfernen
|
2025-12-18 22:00:31 +01:00
|
|
|
try:
|
2025-12-19 14:29:52 +01:00
|
|
|
for widget in find_dock_widgets():
|
|
|
|
|
if (
|
|
|
|
|
widget is not dock_widget
|
|
|
|
|
and widget.objectName().startswith(cls.dock_prefix)
|
|
|
|
|
):
|
|
|
|
|
remove_dock_widget(widget)
|
2025-12-18 22:00:31 +01:00
|
|
|
widget.deleteLater()
|
|
|
|
|
except Exception as e:
|
2025-12-19 14:29:52 +01:00
|
|
|
warning(
|
|
|
|
|
"Vorherige Docks konnten nicht entfernt werden",
|
|
|
|
|
str(e),
|
|
|
|
|
)
|
2025-10-09 12:51:36 +02:00
|
|
|
|
2025-12-18 22:00:31 +01:00
|
|
|
# Neues Dock anzeigen
|
|
|
|
|
try:
|
2025-12-19 14:29:52 +01:00
|
|
|
add_dock_widget(area, dock_widget)
|
2025-12-18 22:00:31 +01:00
|
|
|
dock_widget.show()
|
|
|
|
|
except Exception as e:
|
2025-12-19 14:29:52 +01:00
|
|
|
error(
|
|
|
|
|
"Dock konnte nicht angezeigt werden",
|
|
|
|
|
str(e),
|
|
|
|
|
)
|
2025-10-09 12:51:36 +02:00
|
|
|
|
2025-12-18 22:00:31 +01:00
|
|
|
except Exception as e:
|
|
|
|
|
error("DockManager-Fehler", str(e))
|
2025-12-19 14:29:52 +01:00
|
|
|
|