Auf Wrapper umgestellt, Prüfarchitektur QT6-kompatibel gemacht (Nicht lauffähig)

This commit is contained in:
2025-12-18 22:00:31 +01:00
parent f64d56d4bc
commit e8fea163b5
31 changed files with 2791 additions and 889 deletions

View File

@@ -1,21 +1,53 @@
# 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):
area = area or cls.default_area
"""
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
# Bestehende Plugin-Docks mit Präfix schließen
for widget in iface.mainWindow().findChildren(QDockWidget):
if widget is not dock_widget and widget.objectName().startswith("sn_dock_"):
iface.removeDockWidget(widget)
widget.deleteLater()
try:
area = area or cls.default_area
# Neues Dock anzeigen
iface.addDockWidget(area, dock_widget)
dock_widget.show()
# 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))