Mehrspaltige Legenden schmaler (#96)

Mit gleichen Spaltenbreiten bestimmte der längste Legendentext die Breite aller Spalten;
die dreispaltige Basemap-Legende wurde 431 mm breit. Jetzt: ungleich breite Spalten,
automatischer Textumbruch nach 60 mm (TEXTUMBRUCH_MM in print_kartenrand, auch für die
Basemap-Legende) und zweizeiliger Titel „Kartengrundlage / (basemap.de)“, der sonst die
Mindestbreite bestimmte. Im QGIS-Test: dreispaltig 226 statt 431 mm, einspaltig 89 statt 163 mm.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-02 13:20:15 +02:00
co-authored by Claude Opus 5.5
parent 463a546f79
commit 9cff75b674
5 changed files with 49 additions and 6 deletions
+7 -3
View File
@@ -40,11 +40,13 @@ from sn_basis.functions.qgiscore_wrapper import (
QgsVectorLayer,
)
from sn_basis.functions.qt_wrapper import QSize
from sn_basis.modules.print_kartenrand import TEXTUMBRUCH_MM
MM = QgsUnitTypes.LayoutMillimeters
LEGENDE_ID = "Legende Basemap"
LEGENDE_TITEL = "Kartengrundlage (basemap.de)"
# Zweizeilig, damit der Titel nicht die Mindestbreite der Legende bestimmt (Basis #96)
LEGENDE_TITEL = "Kartengrundlage\n(basemap.de)"
HAUPTKARTE_ID = "Hauptkarte"
HAUPTLEGENDE_ID = "Legende"
QUELLENANGABE_ID = "Quellenangabe"
@@ -350,7 +352,8 @@ def mindestgroesse(legende: Any, layout: Any, spalten: int) -> tuple[float, floa
return None
einstellungen.setColumnCount(spalten)
einstellungen.setSplitLayer(True)
einstellungen.setEqualColumnWidth(True)
einstellungen.setEqualColumnWidth(False)
einstellungen.setAutoWrapLinesAfter(TEXTUMBRUCH_MM)
try:
groesse = QgsLegendRenderer(legende.model(), einstellungen).minimumSize(kontext)
except Exception:
@@ -399,7 +402,7 @@ def platziere(layout: Any, legende: Any) -> str:
spalten, groesse = spalten + 1, breiter
_aufruf(legende, "setColumnCount", spalten)
_aufruf(legende, "setSplitLayer", True)
_aufruf(legende, "setEqualColumnWidth", True)
_aufruf(legende, "setEqualColumnWidth", False)
unten_links = getattr(getattr(QgsLayoutItem, "ReferencePoint", QgsLayoutItem), "LowerLeft", None)
if unten_links is not None:
@@ -450,6 +453,7 @@ def schreibe_legende(layout: Any, map_item: Any, eintraege: list, symbole: dict[
legende.setAutoUpdateModel(False)
legende.setLegendFilterByMapEnabled(False)
legende.setTitle(LEGENDE_TITEL)
_aufruf(legende, "setAutoWrapLinesAfter", TEXTUMBRUCH_MM)
wurzel = legende.model().rootGroup()
wurzel.removeAllChildren()
for gruppe, layer_liste in gruppen: