Fehlende Umlaute in Drucklayout-Hinweisen und -Beschriftungen behoben (#42)
Weitere Fundstellen aus der gezielten Umlaut-Pruefung: MessageBox-/Label-Texte
in print_logic.py, print_layout.py, print_layout_baufreigabe.py und
print_tab.py, die wortwoertlich als ASCII generiert wurden ('gueltig',
'verfuegbar', 'waehlen', 'Massstab' als Anzeigetext, 'Geprueft: '-Label).
Interne Bezeichner (aktion-Codes, Projektvariablen-Keys, Item-IDs) bewusst
unveraendert gelassen, um bestehende Log-/Vergleichslogik nicht zu brechen.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MneDjzrjmbpQt8udFYxN9e
This commit is contained in:
@@ -340,7 +340,7 @@ class PrintLayout:
|
|||||||
("[% @sn_landkreise_proj %]", 16.0, -48.0, 171.0, 4.0, "Format_1", "Landkreis"),
|
("[% @sn_landkreise_proj %]", 16.0, -48.0, 171.0, 4.0, "Format_1", "Landkreis"),
|
||||||
("[% @sn_kartenname %]", 16.0, -32.0, 137.0, 12.0, "Format_3", "Kartenname"),
|
("[% @sn_kartenname %]", 16.0, -32.0, 137.0, 12.0, "Format_3", "Kartenname"),
|
||||||
("Gefertigt: ", 16.0, -23.0, 81.0, 4.0, "Format_1", "Gefertigt"),
|
("Gefertigt: ", 16.0, -23.0, 81.0, 4.0, "Format_1", "Gefertigt"),
|
||||||
("Geprueft: ", 101.0, -23.0, 81.0, 4.0, "Format_1", "Geprüft"),
|
("Geprüft: ", 101.0, -23.0, 81.0, 4.0, "Format_1", "Geprüft"),
|
||||||
(
|
(
|
||||||
"Maßstab: 1 : [%round(map_get(item_variables('Hauptkarte'),'map_scale'),0)%]",
|
"Maßstab: 1 : [%round(map_get(item_variables('Hauptkarte'),'map_scale'),0)%]",
|
||||||
16.0,
|
16.0,
|
||||||
|
|||||||
@@ -105,19 +105,19 @@ class PrintLayoutBaufreigabe(PrintLayout):
|
|||||||
name: Name des Layouts
|
name: Name des Layouts
|
||||||
din_format: "DIN A3" oder "DIN A4"
|
din_format: "DIN A3" oder "DIN A4"
|
||||||
map_width_mm: Breite der Hauptkarte
|
map_width_mm: Breite der Hauptkarte
|
||||||
map_height_mm: Hoehe der Hauptkarte
|
map_height_mm: Höhe der Hauptkarte
|
||||||
extent: QgsRectangle der Kartenausdehnung
|
extent: QgsRectangle der Kartenausdehnung
|
||||||
plotmassstab: Plotmassstab (z.B. 5000 fuer 1:5000)
|
plotmassstab: Plotmaßstab (z.B. 5000 für 1:5000)
|
||||||
thema: Name des Visibility-Presets (optional)
|
thema: Name des Visibility-Presets (optional)
|
||||||
fit_extent_to_map: Extent bei Bedarf auf das Karten-Seitenverhaeltnis erweitern
|
fit_extent_to_map: Extent bei Bedarf auf das Karten-Seitenverhältnis erweitern
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
QgsPrintLayout objektInstance (wird im Layout-Dialog geoeffnet)
|
QgsPrintLayout objektInstance (wird im Layout-Dialog geöffnet)
|
||||||
|
|
||||||
Raises:
|
Raises:
|
||||||
ValueError: Falls Name bereits existiert oder Format ungueltig ist
|
ValueError: Falls Name bereits existiert oder Format ungültig ist
|
||||||
"""
|
"""
|
||||||
# Seitenformat auswaehlen (nur A3/A4 im Querformat)
|
# Seitenformat auswählen (nur A3/A4 im Querformat)
|
||||||
if din_format == "DIN A3":
|
if din_format == "DIN A3":
|
||||||
page_width_mm, page_height_mm = self._DIN_A3_LANDSCAPE
|
page_width_mm, page_height_mm = self._DIN_A3_LANDSCAPE
|
||||||
elif din_format == "DIN A4":
|
elif din_format == "DIN A4":
|
||||||
|
|||||||
+26
-26
@@ -125,8 +125,8 @@ class PrintLogic:
|
|||||||
|
|
||||||
def _show_target_size_too_small(self) -> dict:
|
def _show_target_size_too_small(self) -> dict:
|
||||||
self.pruefmanager.zeige_hinweis(
|
self.pruefmanager.zeige_hinweis(
|
||||||
"Zielgroesse zu klein",
|
"Zielgröße zu klein",
|
||||||
"Die gewaehlte Zielgroesse reicht fuer den Einzelblatt-Druck nicht aus.",
|
"Die gewählte Zielgröße reicht für den Einzelblatt-Druck nicht aus.",
|
||||||
)
|
)
|
||||||
return self._failed_result()
|
return self._failed_result()
|
||||||
|
|
||||||
@@ -348,7 +348,7 @@ class PrintLogic:
|
|||||||
if int(cast(Any, selected_count())) == 0:
|
if int(cast(Any, selected_count())) == 0:
|
||||||
self.pruefmanager.zeige_hinweis(
|
self.pruefmanager.zeige_hinweis(
|
||||||
"Atlas Layer erstellen",
|
"Atlas Layer erstellen",
|
||||||
"Auf dem Layer sind keine Features ausgewaehlt.",
|
"Auf dem Layer sind keine Features ausgewählt.",
|
||||||
)
|
)
|
||||||
return None, ""
|
return None, ""
|
||||||
except Exception:
|
except Exception:
|
||||||
@@ -367,7 +367,7 @@ class PrintLogic:
|
|||||||
if qgs_vector_layer is None:
|
if qgs_vector_layer is None:
|
||||||
self.pruefmanager.zeige_hinweis(
|
self.pruefmanager.zeige_hinweis(
|
||||||
"Atlas Layer erstellen",
|
"Atlas Layer erstellen",
|
||||||
"QgsVectorLayer ist nicht verfuegbar.",
|
"QgsVectorLayer ist nicht verfügbar.",
|
||||||
)
|
)
|
||||||
return None, ""
|
return None, ""
|
||||||
|
|
||||||
@@ -392,7 +392,7 @@ class PrintLogic:
|
|||||||
)
|
)
|
||||||
return None, ""
|
return None, ""
|
||||||
|
|
||||||
# Ausgewaehlte Features kopieren
|
# Ausgewählte Features kopieren
|
||||||
try:
|
try:
|
||||||
get_selected = getattr(source_layer, "selectedFeatures", None)
|
get_selected = getattr(source_layer, "selectedFeatures", None)
|
||||||
if not callable(get_selected):
|
if not callable(get_selected):
|
||||||
@@ -400,15 +400,15 @@ class PrintLogic:
|
|||||||
|
|
||||||
selected_features = list(cast(Any, get_selected()))
|
selected_features = list(cast(Any, get_selected()))
|
||||||
if not selected_features:
|
if not selected_features:
|
||||||
raise Exception("Keine Features ausgewaehlt")
|
raise Exception("Keine Features ausgewählt")
|
||||||
|
|
||||||
qgs_feature = self._import_qgis_symbol("qgis.core", "QgsFeature")
|
qgs_feature = self._import_qgis_symbol("qgis.core", "QgsFeature")
|
||||||
if qgs_feature is None:
|
if qgs_feature is None:
|
||||||
raise Exception("QgsFeature Symbol nicht verfuegbar")
|
raise Exception("QgsFeature Symbol nicht verfügbar")
|
||||||
|
|
||||||
data_provider = getattr(atlas_layer, "dataProvider", lambda: None)()
|
data_provider = getattr(atlas_layer, "dataProvider", lambda: None)()
|
||||||
if data_provider is None:
|
if data_provider is None:
|
||||||
raise Exception("dataProvider nicht verfuegbar")
|
raise Exception("dataProvider nicht verfügbar")
|
||||||
|
|
||||||
new_features = []
|
new_features = []
|
||||||
for source_feature in selected_features:
|
for source_feature in selected_features:
|
||||||
@@ -483,7 +483,7 @@ class PrintLogic:
|
|||||||
project = QgsProject.instance()
|
project = QgsProject.instance()
|
||||||
layout_manager = getattr(project, "layoutManager", lambda: None)()
|
layout_manager = getattr(project, "layoutManager", lambda: None)()
|
||||||
if layout_manager is None:
|
if layout_manager is None:
|
||||||
self.pruefmanager.zeige_hinweis("Atlas konfigurieren", "Layout Manager nicht verfuegbar.")
|
self.pruefmanager.zeige_hinweis("Atlas konfigurieren", "Layout Manager nicht verfügbar.")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
if not layout_name:
|
if not layout_name:
|
||||||
@@ -672,7 +672,7 @@ class PrintLogic:
|
|||||||
if map_canvas is None:
|
if map_canvas is None:
|
||||||
self.pruefmanager.zeige_hinweis(
|
self.pruefmanager.zeige_hinweis(
|
||||||
"Druckrechteck",
|
"Druckrechteck",
|
||||||
"Das Kartenfenster ist nicht verfuegbar.",
|
"Das Kartenfenster ist nicht verfügbar.",
|
||||||
)
|
)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@@ -684,7 +684,7 @@ class PrintLogic:
|
|||||||
if None in (qgs_geometry, qgs_rectangle, qgs_wkb_types, qgs_map_tool_emit_point, qgs_rubber_band):
|
if None in (qgs_geometry, qgs_rectangle, qgs_wkb_types, qgs_map_tool_emit_point, qgs_rubber_band):
|
||||||
self.pruefmanager.zeige_hinweis(
|
self.pruefmanager.zeige_hinweis(
|
||||||
"Druckrechteck",
|
"Druckrechteck",
|
||||||
"Die Rechteck-Erfassung ist in dieser QGIS-Umgebung nicht verfuegbar.",
|
"Die Rechteck-Erfassung ist in dieser QGIS-Umgebung nicht verfügbar.",
|
||||||
)
|
)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@@ -736,13 +736,13 @@ class PrintLogic:
|
|||||||
if width <= 0 or height <= 0:
|
if width <= 0 or height <= 0:
|
||||||
logic.pruefmanager.zeige_hinweis(
|
logic.pruefmanager.zeige_hinweis(
|
||||||
"Druckrechteck",
|
"Druckrechteck",
|
||||||
"Das gezeichnete Rechteck ist ungueltig.",
|
"Das gezeichnete Rechteck ist ungültig.",
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
if logic._store_druckrechteck(layer, rectangle):
|
if logic._store_druckrechteck(layer, rectangle):
|
||||||
logic.pruefmanager.zeige_hinweis(
|
logic.pruefmanager.zeige_hinweis(
|
||||||
"Druckrechteck",
|
"Druckrechteck",
|
||||||
"Das Druckrechteck wurde uebernommen.",
|
"Das Druckrechteck wurde übernommen.",
|
||||||
)
|
)
|
||||||
try:
|
try:
|
||||||
self.rubber_band.reset(polygon_geometry)
|
self.rubber_band.reset(polygon_geometry)
|
||||||
@@ -920,7 +920,7 @@ class PrintLogic:
|
|||||||
if extent is None:
|
if extent is None:
|
||||||
self.pruefmanager.zeige_hinweis(
|
self.pruefmanager.zeige_hinweis(
|
||||||
"Druckbereich",
|
"Druckbereich",
|
||||||
"Das aktuelle Kartenfenster liefert keine gueltige Ausdehnung.",
|
"Das aktuelle Kartenfenster liefert keine gültige Ausdehnung.",
|
||||||
)
|
)
|
||||||
return None, None
|
return None, None
|
||||||
return extent, None
|
return extent, None
|
||||||
@@ -931,7 +931,7 @@ class PrintLogic:
|
|||||||
if extent is None:
|
if extent is None:
|
||||||
self.pruefmanager.zeige_hinweis(
|
self.pruefmanager.zeige_hinweis(
|
||||||
"Druckbereich",
|
"Druckbereich",
|
||||||
"Auf dem aktuellen Layer sind keine gueltigen Objekte ausgewaehlt.",
|
"Auf dem aktuellen Layer sind keine gültigen Objekte ausgewählt.",
|
||||||
)
|
)
|
||||||
return None, None
|
return None, None
|
||||||
return self._buffer_extent(extent, plotmassstab), None
|
return self._buffer_extent(extent, plotmassstab), None
|
||||||
@@ -948,7 +948,7 @@ class PrintLogic:
|
|||||||
if not ergebnis.ok:
|
if not ergebnis.ok:
|
||||||
self.pruefmanager.zeige_hinweis(
|
self.pruefmanager.zeige_hinweis(
|
||||||
"Verfahrensgebiets-Layer angeben",
|
"Verfahrensgebiets-Layer angeben",
|
||||||
"Kein gueltiger Verfahrensgebiets-Layer gefunden. Bitte Layerauswahl im jeweiligen Plugin setzen.",
|
"Kein gültiger Verfahrensgebiets-Layer gefunden. Bitte Layerauswahl im jeweiligen Plugin setzen.",
|
||||||
)
|
)
|
||||||
return None, None
|
return None, None
|
||||||
|
|
||||||
@@ -1001,12 +1001,12 @@ class PrintLogic:
|
|||||||
required_map_height_mm: float,
|
required_map_height_mm: float,
|
||||||
max_format: str = "DIN A3",
|
max_format: str = "DIN A3",
|
||||||
) -> tuple[str, float, float, float, float, bool]:
|
) -> tuple[str, float, float, float, float, bool]:
|
||||||
"""Waehlt fuer Baufreigabe ein Blatt im Querformat.
|
"""Wählt für Baufreigabe ein Blatt im Querformat.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
required_map_width_mm: benoetigte Breite der Hauptkarte in mm
|
required_map_width_mm: benötigte Breite der Hauptkarte in mm
|
||||||
required_map_height_mm: benoetigte Hoehe der Hauptkarte in mm
|
required_map_height_mm: benötigte Höhe der Hauptkarte in mm
|
||||||
max_format: maximale Blattgroesse, standardmaessig DIN A3
|
max_format: maximale Blattgröße, standardmäßig DIN A3
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
(din_format, page_width_mm, page_height_mm, map_w_mm, map_h_mm, fallback_applied)
|
(din_format, page_width_mm, page_height_mm, map_w_mm, map_h_mm, fallback_applied)
|
||||||
@@ -1029,8 +1029,8 @@ class PrintLogic:
|
|||||||
if map_w >= required_map_width_mm and map_h >= required_map_height_mm:
|
if map_w >= required_map_width_mm and map_h >= required_map_height_mm:
|
||||||
return din_format, page_w, page_h, map_w, map_h, False
|
return din_format, page_w, page_h, map_w, map_h, False
|
||||||
|
|
||||||
# Wenn der gewuenschte Ausschnitt nicht passt, verwende das maximal erlaubte Blatt
|
# Wenn der gewünschte Ausschnitt nicht passt, verwende das maximal erlaubte Blatt
|
||||||
# und erweitere die Hauptkarte auf die verfuegbare Kartenflaeche (zentriert per fit_extent_to_map).
|
# und erweitere die Hauptkarte auf die verfügbare Kartenfläche (zentriert per fit_extent_to_map).
|
||||||
din_format, page_w, page_h = limited_candidates[-1]
|
din_format, page_w, page_h = limited_candidates[-1]
|
||||||
map_w = max(page_w - BAUFREIGABE_LAYOUT_FIXBREITE_MM, 50.0)
|
map_w = max(page_w - BAUFREIGABE_LAYOUT_FIXBREITE_MM, 50.0)
|
||||||
map_h = max(page_h - BAUFREIGABE_LAYOUT_FIXHOEHE_MM, 50.0)
|
map_h = max(page_h - BAUFREIGABE_LAYOUT_FIXHOEHE_MM, 50.0)
|
||||||
@@ -1059,7 +1059,7 @@ class PrintLogic:
|
|||||||
return map_width_mm + fixed_width_mm, map_height_mm + fixed_height_mm
|
return map_width_mm + fixed_width_mm, map_height_mm + fixed_height_mm
|
||||||
|
|
||||||
def _get_required_map_dimensions_mm(self, extent: Any, plotmassstab: float) -> tuple[float, float]:
|
def _get_required_map_dimensions_mm(self, extent: Any, plotmassstab: float) -> tuple[float, float]:
|
||||||
"""Berechnet die benoetigte Kartenfenstergroesse in mm fuer Extent und Massstab."""
|
"""Berechnet die benötigte Kartenfenstergröße in mm für Extent und Maßstab."""
|
||||||
if extent is None or not isinstance(plotmassstab, (int, float)) or plotmassstab <= 0:
|
if extent is None or not isinstance(plotmassstab, (int, float)) or plotmassstab <= 0:
|
||||||
return 0.0, 0.0
|
return 0.0, 0.0
|
||||||
|
|
||||||
@@ -1077,7 +1077,7 @@ class PrintLogic:
|
|||||||
required_map_height_mm: float,
|
required_map_height_mm: float,
|
||||||
max_format: str,
|
max_format: str,
|
||||||
) -> tuple[float, float, float, float] | None:
|
) -> tuple[float, float, float, float] | None:
|
||||||
"""Waehlt das kleinste passende DIN-Blatt fuer das Standardlayout."""
|
"""Wählt das kleinste passende DIN-Blatt für das Standardlayout."""
|
||||||
try:
|
try:
|
||||||
max_index = DIN_AUTO_REIHENFOLGE.index(max_format)
|
max_index = DIN_AUTO_REIHENFOLGE.index(max_format)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
@@ -1170,7 +1170,7 @@ class PrintLogic:
|
|||||||
resolved_layer = layer or self._resolve_layer_from_project()
|
resolved_layer = layer or self._resolve_layer_from_project()
|
||||||
|
|
||||||
if kartenname_auswahl not in (KARTENNAME_38, KARTENNAME_41, KARTENNAME_BAUFREIGABE):
|
if kartenname_auswahl not in (KARTENNAME_38, KARTENNAME_41, KARTENNAME_BAUFREIGABE):
|
||||||
self.pruefmanager.zeige_hinweis("Kartennamen waehlen", "Kartennamen waehlen")
|
self.pruefmanager.zeige_hinweis("Kartennamen wählen", "Kartennamen wählen")
|
||||||
return self._failed_result()
|
return self._failed_result()
|
||||||
|
|
||||||
if massstab_auswahl == MASSSTAB_WIE_KARTENFENSTER:
|
if massstab_auswahl == MASSSTAB_WIE_KARTENFENSTER:
|
||||||
@@ -1191,7 +1191,7 @@ class PrintLogic:
|
|||||||
massstab_zahl = float(PLOTMASSSTAB_BY_AUSWAHL.get(massstab_auswahl, 0))
|
massstab_zahl = float(PLOTMASSSTAB_BY_AUSWAHL.get(massstab_auswahl, 0))
|
||||||
|
|
||||||
if massstab_zahl <= 0:
|
if massstab_zahl <= 0:
|
||||||
self.pruefmanager.zeige_hinweis("Massstab fehlt", "Kein gueltiger Massstab angegeben.")
|
self.pruefmanager.zeige_hinweis("Maßstab fehlt", "Kein gültiger Maßstab angegeben.")
|
||||||
return self._failed_result()
|
return self._failed_result()
|
||||||
|
|
||||||
extent, layer_for_extent = self._resolve_extent(resolved_layer, druckbereich_auswahl, massstab_zahl)
|
extent, layer_for_extent = self._resolve_extent(resolved_layer, druckbereich_auswahl, massstab_zahl)
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ from sn_basis.modules.print_logic import (
|
|||||||
|
|
||||||
|
|
||||||
KARTENNAME_VAR = "tab_b_kartenname"
|
KARTENNAME_VAR = "tab_b_kartenname"
|
||||||
KARTENNAME_PLACEHOLDER = "Kartenname waehlen"
|
KARTENNAME_PLACEHOLDER = "Kartenname wählen"
|
||||||
KARTENNAME_38 = "§38"
|
KARTENNAME_38 = "§38"
|
||||||
KARTENNAME_41 = "§41"
|
KARTENNAME_41 = "§41"
|
||||||
KARTENNAME_BAUFREIGABE = "Anlage zur Baufreigabe"
|
KARTENNAME_BAUFREIGABE = "Anlage zur Baufreigabe"
|
||||||
@@ -130,7 +130,7 @@ class PrintTab(QWidget):
|
|||||||
self._kartenname_combo = kartenname_combo
|
self._kartenname_combo = kartenname_combo
|
||||||
main_layout.addWidget(kartenname_combo)
|
main_layout.addWidget(kartenname_combo)
|
||||||
|
|
||||||
massstab_label = QLabel("Massstab")
|
massstab_label = QLabel("Maßstab")
|
||||||
massstab_label.setStyleSheet("font-weight: bold; margin-top: 6px;")
|
massstab_label.setStyleSheet("font-weight: bold; margin-top: 6px;")
|
||||||
main_layout.addWidget(massstab_label)
|
main_layout.addWidget(massstab_label)
|
||||||
|
|
||||||
@@ -152,7 +152,7 @@ class PrintTab(QWidget):
|
|||||||
self._thema_combo = thema_combo
|
self._thema_combo = thema_combo
|
||||||
main_layout.addWidget(thema_combo)
|
main_layout.addWidget(thema_combo)
|
||||||
|
|
||||||
zielgroesse_label = QLabel("max. Blattgroesse")
|
zielgroesse_label = QLabel("max. Blattgröße")
|
||||||
zielgroesse_label.setStyleSheet("font-weight: bold; margin-top: 6px;")
|
zielgroesse_label.setStyleSheet("font-weight: bold; margin-top: 6px;")
|
||||||
main_layout.addWidget(zielgroesse_label)
|
main_layout.addWidget(zielgroesse_label)
|
||||||
|
|
||||||
@@ -610,7 +610,7 @@ class PrintTab(QWidget):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
def _on_atlas_layer_changed(self, layer_or_name: Any) -> None:
|
def _on_atlas_layer_changed(self, layer_or_name: Any) -> None:
|
||||||
"""Speichert den ausgewaehlten Atlas-Layer als Layer-ID in Projektvariablen."""
|
"""Speichert den ausgewählten Atlas-Layer als Layer-ID in Projektvariablen."""
|
||||||
if layer_or_name is None or layer_or_name == "":
|
if layer_or_name is None or layer_or_name == "":
|
||||||
set_variable("sn_abdeckungslayer", "", scope="project")
|
set_variable("sn_abdeckungslayer", "", scope="project")
|
||||||
return
|
return
|
||||||
@@ -677,7 +677,7 @@ class PrintTab(QWidget):
|
|||||||
self._populate_atlas_layer_combo()
|
self._populate_atlas_layer_combo()
|
||||||
|
|
||||||
def _populate_atlas_layer_combo(self) -> None:
|
def _populate_atlas_layer_combo(self) -> None:
|
||||||
"""Fallback-Befuellung, falls kein echtes QgsMapLayerComboBox Verhalten verfuegbar ist."""
|
"""Fallback-Befüllung, falls kein echtes QgsMapLayerComboBox Verhalten verfügbar ist."""
|
||||||
if not self._atlas_layer_combo:
|
if not self._atlas_layer_combo:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user