# Import grundlegender Qt- und QGIS-Komponenten from qgis.PyQt.QtCore import QSettings, QTranslator, QCoreApplication, Qt from qgis.PyQt.QtGui import QIcon from qgis.PyQt.QtWidgets import QAction, QMessageBox from qgis.utils import plugins # Import der generierten Ressourcen (z. B. Icons) from .resources import * # Import der gemeinsamen UI-Klasse für Menü und Symbolleiste from sn_basis.ui.navigation import Navigation # Import des Dockwidgets, das beim Ausführen des Plugins angezeigt wird from .ui.sn_plan41_dockwidget import Plan41DockWidget import os.path class Plan41: """ Hauptklasse des Plugins. Verwaltet die Initialisierung, GUI-Integration und das Dockwidget. """ def __init__(self, iface): # iface: QGIS-Schnittstelle zur Interaktion mit der Anwendung self.iface = iface self.plugin_dir = os.path.dirname(__file__) # Pfad zum Plugin-Verzeichnis self.actions = [] # Platzhalter für spätere Aktionsverwaltung (optional) self.pluginIsActive = False # Statusflag, ob das Plugin aktiv ist self.dockwidget = None # Referenz auf das Dockwidget def initGui(self): """ Wird beim Laden des Plugins aufgerufen. Fügt Menüeintrag und Symbolleistenaktion hinzu. """ self.action_text = "Plan 41" # Einheitlicher Text für Menü und Toolbar icon = QIcon(":/sn_plugin1/icons/icon.png") # Icon aus Ressourcen laden self.ui = Navigation() # Gemeinsame UI-Instanz für Menü und Toolbar self.ui.add_action(self.action_text, self.run, icon, tooltip="Öffnet Plan41") def onClosePlugin(self): """ Wird aufgerufen, wenn das Dockwidget geschlossen wird. Setzt den Aktivitätsstatus zurück. """ self.dockwidget.closingPlugin.disconnect(self.onClosePlugin) self.pluginIsActive = False def unload(self): """ Wird beim Deaktivieren des Plugins aufgerufen. Entfernt Menü- und Toolbar-Eintrag. """ self.ui.remove_action(self.action_text) def run(self): """ Wird beim Klick auf Menüeintrag oder Symbolleistenaktion ausgeführt. Zeigt das Dockwidget an. """ if 'sn_basis' not in plugins: QMessageBox.warning(None, "Abhängigkeit fehlt", "Das Plugin 'LNO Sachsen | Basisfunktionen' ist nicht installiert oder nicht aktiviert.\nBitte installieren und aktivieren, um fortzufahren.") return # Plugin nicht starten # Prüfen, ob das eigene Dockwidget existiert und aktuell sichtbar ist dock_visible = self.dockwidget is not None and self.dockwidget.isVisible() if not dock_visible: # Pluginstatus setzen, damit z. B. beim Schließen korrekt zurückgesetzt werden kann self.pluginIsActive = True # Falls noch kein Dockwidget existiert, wird es jetzt erzeugt if self.dockwidget is None: self.dockwidget = Plan41DockWidget() self.dockwidget.closingPlugin.connect(self.onClosePlugin) # Dock anzeigen und ggf. andere Docks schließen from sn_basis.ui.dockmanager import DockManager DockManager.show(self.dockwidget) else: # Falls das eigene Dock bereits sichtbar ist, wird keine Aktion ausgeführt pass