Files

127 lines
3.3 KiB
Python
Raw Permalink Normal View History

"""
sn_basis/ui/navigation.py
Zentrale Navigation (Menü + Toolbar) für sn_basis.
"""
from typing import Any, List, Tuple
from sn_basis.functions.qt_wrapper import (
QAction,
QMenu,
QToolBar,
QActionGroup,
)
from sn_basis.functions import (
get_main_window,
add_toolbar,
remove_toolbar,
add_menu,
remove_menu,
)
2025-10-09 13:56:13 +02:00
class Navigation:
def __init__(self):
self.actions = []
self.menu = None
self.toolbar = None
self.plugin_group = None
def init_ui(self):
print(">>> Navigation.init_ui() CALLED")
main_window = get_main_window()
if not main_window:
return
# -----------------------------------------
# Vorherige Toolbars entfernen
# -----------------------------------------
for tb in main_window.findChildren(QToolBar):
if tb.objectName() == "LnoSachsenToolbar":
remove_toolbar(tb)
tb.deleteLater()
# -----------------------------------------
# Menü und Toolbar neu erzeugen
# -----------------------------------------
self.menu = QMenu("LNO Sachsen", main_window)
add_menu(self.menu)
self.toolbar = QToolBar("LNO Sachsen", main_window)
2025-11-18 12:17:15 +01:00
self.toolbar.setObjectName("LnoSachsenToolbar")
add_toolbar(self.toolbar)
test_action = QAction("TEST ACTION", main_window)
self.menu.addAction(test_action)
self.toolbar.addAction(test_action)
self.plugin_group = QActionGroup(main_window)
self.plugin_group.setExclusive(True)
# -----------------------------------------------------
# Actions
# -----------------------------------------------------
2025-11-17 12:23:04 +01:00
def add_action(self, text, callback, tooltip="", priority=100):
if not self.plugin_group:
return None
action = QAction(text, get_main_window())
2025-11-17 12:23:04 +01:00
action.setToolTip(tooltip)
action.setCheckable(True)
action.triggered.connect(callback)
2025-11-17 12:23:04 +01:00
self.plugin_group.addAction(action)
self.actions.append((priority, action))
return action
def finalize_menu_and_toolbar(self):
if not self.menu or not self.toolbar:
return
2025-11-17 12:23:04 +01:00
self.actions.sort(key=lambda x: x[0])
2025-11-17 11:29:04 +01:00
2025-11-17 12:23:04 +01:00
self.menu.clear()
self.toolbar.clear()
2025-11-17 12:23:04 +01:00
for _, action in self.actions:
self.menu.addAction(action)
2025-10-09 13:56:13 +02:00
self.toolbar.addAction(action)
2025-11-17 12:23:04 +01:00
def set_active_plugin(self, active_action):
for _, action in self.actions:
action.setChecked(False)
2025-11-17 12:48:16 +01:00
if active_action:
active_action.setChecked(True)
# -----------------------------------------------------
# Cleanup
# -----------------------------------------------------
2025-11-17 12:48:16 +01:00
def remove_action(self, action):
if not action:
return
2025-11-17 12:48:16 +01:00
if self.menu:
self.menu.removeAction(action)
if self.toolbar:
self.toolbar.removeAction(action)
2025-11-17 12:48:16 +01:00
self.actions = [(p, a) for p, a in self.actions if a != action]
def remove_all(self):
if self.menu:
remove_menu(self.menu)
self.menu = None
if self.toolbar:
remove_toolbar(self.toolbar)
self.toolbar = None
self.actions.clear()
self.plugin_group = None