Files
Plugin_SN_Basis/main.py
T
DanielandClaude Opus 5.5 bf898dcca3 Legenden mindestens so breit wie das Kartenschild (#96)
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>
2026-10-02 13:26:19 +02:00

71 lines
2.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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