forked from AG_QGIS/Plugin_SN_Basis
54 lines
1.8 KiB
Python
54 lines
1.8 KiB
Python
# 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))
|