From 8ac1ae07f4ca226993cd4bbd18a77b82a40c68c6 Mon Sep 17 00:00:00 2001 From: Michael Otto Date: Thu, 9 Oct 2025 12:52:06 +0200 Subject: [PATCH] Dockmanager in sn_basis ausgelagert --- main.py | 4 +-- shared/__init__.py | 3 +-- shared/dockmanager.py | 60 ------------------------------------------- 3 files changed, 3 insertions(+), 64 deletions(-) delete mode 100644 shared/dockmanager.py diff --git a/main.py b/main.py index bb9e81f..e90866e 100644 --- a/main.py +++ b/main.py @@ -9,7 +9,7 @@ from .resources import * # Import der gemeinsamen UI-Klasse für Menü und Symbolleiste from .shared import UI -from .shared import DockManager +#from .shared import DockManager # Import des Dockwidgets, das beim Ausführen des Plugins angezeigt wird from .ui.sn_plan41_dockwidget import Plan41DockWidget @@ -74,7 +74,7 @@ class Plan41: self.dockwidget.closingPlugin.connect(self.onClosePlugin) # Dock anzeigen und ggf. andere Docks schließen - from .shared.dockmanager import DockManager + from sn_basis.ui.dockmanager import DockManager DockManager.show(self.dockwidget) else: # Falls das eigene Dock bereits sichtbar ist, wird keine Aktion ausgeführt diff --git a/shared/__init__.py b/shared/__init__.py index 5c187ed..0273bb6 100644 --- a/shared/__init__.py +++ b/shared/__init__.py @@ -1,2 +1 @@ -from .ui import UI -from .dockmanager import DockManager \ No newline at end of file +from .ui import UI \ No newline at end of file diff --git a/shared/dockmanager.py b/shared/dockmanager.py deleted file mode 100644 index 04812be..0000000 --- a/shared/dockmanager.py +++ /dev/null @@ -1,60 +0,0 @@ -from qgis.PyQt.QtCore import Qt -from qgis.PyQt.QtWidgets import QDockWidget -from qgis.utils import iface -import inspect - -class DockManager: - """ - Zeigt ein Dockwidget an und schließt alle anderen mit dem Namensschema 'sn_dock_'. - Der Dockname wird automatisch aus dem Pluginmodul abgeleitet. - """ - - # Standard-Dockbereich: Rechts (wie die Verarbeitungswerkzeuge) - default_area = Qt.RightDockWidgetArea - - @classmethod - def show(cls, dock_widget, area=None): - # Falls kein Bereich übergeben wurde, verwende den Standardwert - if area is None: - area = cls.default_area - - # Pluginname automatisch aus dem Modulpfad ableiten (z. B. 'sn_plugin1' → 'plugin1') - caller_module = inspect.getmodule(inspect.stack()[1][0]) - full_module_name = caller_module.__name__ # z. B. 'sn_plugin1.main' - plugin_name = full_module_name.split('.')[0] # → 'sn_plugin1' - dock_name = f"sn_dock_{plugin_name.replace('sn_', '')}" # → 'sn_dock_plugin1' - - # Objektname für das Dock setzen, damit es eindeutig identifizierbar ist - dock_widget.setObjectName(dock_name) - - # Nur rechts andocken erlauben, wie bei der Toolbox - dock_widget.setAllowedAreas(Qt.RightDockWidgetArea) - - # Dock-Features setzen: schließbar und verschiebbar - dock_widget.setFeatures(QDockWidget.DockWidgetClosable | QDockWidget.DockWidgetMovable) - - # Alle vorhandenen Dockwidgets im Hauptfenster durchsuchen - # und solche mit dem Namensschema 'sn_dock_' schließen – außer dem aktuellen - all_docks = iface.mainWindow().findChildren(QDockWidget) - for widget in all_docks: - if widget.objectName().startswith("sn_dock_") and widget != dock_widget: - try: - iface.removeDockWidget(widget) - widget.close() - except Exception: - pass # Fehler beim Schließen ignorieren (z. B. falls bereits entfernt) - - # Neues Dock anzeigen - iface.addDockWidget(area, dock_widget) - - # Tabifizierung verhindern – andere Docks im selben Bereich entfernen - for widget in iface.mainWindow().findChildren(QDockWidget): - if widget != dock_widget and iface.mainWindow().dockWidgetArea(widget) == area: - iface.mainWindow().removeDockWidget(widget) - - # Breite setzen wie bei der Toolbox (optional, anpassbar) - dock_widget.setMinimumWidth(300) - dock_widget.setMaximumWidth(400) - - # Höhe nicht erzwingen – Qt passt sie automatisch an - dock_widget.show()