from qgis.PyQt.QtWidgets import QAction, QMenu, QToolBar, QActionGroup class Navigation: def __init__(self, iface): self.iface = iface self.actions = [] # Menü und Toolbar einmalig anlegen self.menu = QMenu("LNO Sachsen", iface.mainWindow()) iface.mainWindow().menuBar().addMenu(self.menu) self.toolbar = QToolBar("LNO Sachsen") iface.addToolBar(self.toolbar) # Gruppe für exklusive Auswahl (nur ein Plugin aktiv) self.plugin_group = QActionGroup(iface.mainWindow()) self.plugin_group.setExclusive(True) def add_action(self, text, callback, tooltip="", priority=100): action = QAction(text, self.iface.mainWindow()) action.setToolTip(tooltip) action.setCheckable(True) # Button kann aktiv sein action.triggered.connect(callback) # Action in Gruppe aufnehmen self.plugin_group.addAction(action) # Action mit Priority speichern self.actions.append((priority, action)) return action def finalize_menu_and_toolbar(self): # Sortieren nach Priority self.actions.sort(key=lambda x: x[0]) # Menüeinträge self.menu.clear() for _, action in self.actions: self.menu.addAction(action) # Toolbar-Einträge self.toolbar.clear() for _, action in self.actions: self.toolbar.addAction(action) def set_active_plugin(self, active_action): # Alle zurücksetzen, dann aktives Plugin markieren for _, action in self.actions: action.setChecked(False) if active_action: active_action.setChecked(True) def remove_all(self): """Alles entfernen beim Entladen des Basisplugins""" # Menü entfernen if self.menu: self.iface.mainWindow().menuBar().removeAction(self.menu.menuAction()) self.menu = None # Toolbar entfernen if self.toolbar: self.iface.mainWindow().removeToolBar(self.toolbar) self.toolbar = None # Actions zurücksetzen self.actions.clear() # Gruppe leeren self.plugin_group = None def remove_action(self, action): """Entfernt eine einzelne Action aus Menü und Toolbar""" if not action: return # Menüeintrag entfernen if self.menu: self.menu.removeAction(action) # Toolbar-Eintrag entfernen if self.toolbar: self.toolbar.removeAction(action) # Aus der internen Liste löschen self.actions = [(p, a) for p, a in self.actions if a != action]