forked from AG_QGIS/Plugin_SN_Basis
Wrappe modular aufgebaut, Tests erfolgreich, Menüleiste und Werzeugleiste werden eingetragen (QT6 und QT5)- (Es fehlen noch Fachplugins, um zu prüfen, ob es auch wirklich in QGIS geht)
This commit is contained in:
@@ -1,53 +1,69 @@
|
||||
# sn_basis/ui/dockmanager.py
|
||||
"""
|
||||
sn_basis/ui/dockmanager.py
|
||||
|
||||
from qgis.PyQt.QtCore import Qt
|
||||
from qgis.PyQt.QtWidgets import QDockWidget
|
||||
from qgis.utils import iface
|
||||
Verwaltet das Anzeigen und Ersetzen von DockWidgets.
|
||||
Stellt sicher, dass immer nur ein sn_basis-Dock gleichzeitig sichtbar ist.
|
||||
"""
|
||||
|
||||
from sn_basis.functions.qgisqt_wrapper import warning, error
|
||||
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.
|
||||
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):
|
||||
def show(cls, dock_widget: Any, area=None) -> None:
|
||||
"""
|
||||
Zeigt ein DockWidget an und entfernt vorher alle anderen
|
||||
LNO-Docks (erkennbar am Prefix 'sn_dock_').
|
||||
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:
|
||||
area = area or cls.default_area
|
||||
|
||||
# Prüfen, ob das Dock einen gültigen Namen hat
|
||||
# Sicherstellen, dass das Dock einen Namen hat
|
||||
if not dock_widget.objectName():
|
||||
dock_widget.setObjectName(f"{cls.dock_prefix}{id(dock_widget)}")
|
||||
|
||||
# Bestehende Plugin-Docks schließen
|
||||
# Vorhandene Plugin-Docks entfernen
|
||||
try:
|
||||
for widget in iface.mainWindow().findChildren(QDockWidget):
|
||||
if widget is not dock_widget and widget.objectName().startswith(cls.dock_prefix):
|
||||
iface.removeDockWidget(widget)
|
||||
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))
|
||||
warning(
|
||||
"Vorherige Docks konnten nicht entfernt werden",
|
||||
str(e),
|
||||
)
|
||||
|
||||
# Neues Dock anzeigen
|
||||
try:
|
||||
iface.addDockWidget(area, dock_widget)
|
||||
add_dock_widget(area, dock_widget)
|
||||
dock_widget.show()
|
||||
except Exception as e:
|
||||
error("Dock konnte nicht angezeigt werden", str(e))
|
||||
error(
|
||||
"Dock konnte nicht angezeigt werden",
|
||||
str(e),
|
||||
)
|
||||
|
||||
except Exception as e:
|
||||
error("DockManager-Fehler", str(e))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user