Standard- und Mindestbreite der Haupt- und Basemap-Legende ist die Breite des Kartenschilds (180 mm, MIN_SPALTENBREITE_MM) – die zunächst genannten 210 mm sind der gesamte Kartenrand einschließlich Abständen. Die Legenden passen sich weiter ihrem Inhalt an, werden aber nie schmaler (setMinimumSize). QGIS speichert die Mindestgröße nicht im Projekt; nach dem Neuladen schrumpfte die Legende bei der nächsten Größenanpassung wieder (QGIS-Test: 43,7 mm). Deshalb vermerkt das Layout die Mindestbreite (sn_legende_mindestbreite), und ein Listener auf readProject setzt sie beim Laden wieder (setup/teardown_mindestbreiten_listener in main.py, wie der Verfahrensgebiet-Listener). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
71 lines
2.3 KiB
Python
71 lines
2.3 KiB
Python
# sn_basis/main.py
|
||
|
||
from qgis.utils import plugins
|
||
|
||
from sn_basis.functions.qt_wrapper import QCoreApplication
|
||
from sn_basis.functions.sys_wrapper import getattr_safe
|
||
from sn_basis.functions.verfahrensgebiet_manager import (
|
||
setup_verfahrensgebiet_listener,
|
||
teardown_verfahrensgebiet_listener,
|
||
)
|
||
from sn_basis.modules.print_kartenrand import (
|
||
setup_mindestbreiten_listener,
|
||
teardown_mindestbreiten_listener,
|
||
)
|
||
from sn_basis.ui.navigation import Navigation
|
||
|
||
|
||
class BasisPlugin:
|
||
"""
|
||
Einstiegspunkt des sn_basis-Plugins.
|
||
Orchestriert UI und Fachmodule – keine UI-Logik.
|
||
"""
|
||
|
||
def __init__(self, iface):
|
||
# iface wird von QGIS übergeben, aber nicht direkt verwendet
|
||
self.ui = None
|
||
|
||
# QCoreApplication kann im Mock-Modus None sein
|
||
if QCoreApplication is not None:
|
||
app = getattr_safe(QCoreApplication, "instance")
|
||
if callable(app):
|
||
instance = app()
|
||
about_to_quit = getattr_safe(instance, "aboutToQuit")
|
||
connect = getattr_safe(about_to_quit, "connect")
|
||
if callable(connect):
|
||
connect(self.unload)
|
||
|
||
def initGui(self):
|
||
"""
|
||
Initialisiert die Basis-Navigation und triggert initGui
|
||
aller abhängigen sn_-Plugins.
|
||
"""
|
||
self.ui = Navigation()
|
||
self.ui.init_ui()
|
||
|
||
# Zentrale Verwaltung des Verfahrensgebiet-Layers starten
|
||
setup_verfahrensgebiet_listener()
|
||
# Mindestbreite der Drucklegenden nach dem Laden eines Projekts wieder setzen (Basis #96)
|
||
setup_mindestbreiten_listener()
|
||
|
||
for name, plugin in plugins.items():
|
||
if name.startswith("sn_") and name != "sn_basis":
|
||
try:
|
||
init_gui = getattr_safe(plugin, "initGui")
|
||
if callable(init_gui):
|
||
init_gui()
|
||
except Exception as e:
|
||
print(f"Fehler beim Neuinitialisieren von {name}: {e}")
|
||
self.ui.finalize_menu_and_toolbar()
|
||
|
||
def unload(self):
|
||
"""
|
||
Räumt UI-Komponenten sauber auf.
|
||
"""
|
||
teardown_verfahrensgebiet_listener()
|
||
teardown_mindestbreiten_listener()
|
||
|
||
if self.ui:
|
||
self.ui.remove_all()
|
||
self.ui = None
|