diff --git a/ui/tab_b_logic.py b/ui/tab_b_logic.py index f927251..495fb52 100644 --- a/ui/tab_b_logic.py +++ b/ui/tab_b_logic.py @@ -9,6 +9,8 @@ from sn_basis.modules.Pruefmanager import Pruefmanager KARTENNAME_VAR = "sn_kartenname" PLOTMASSSTAB_VAR = "sn_plotmassstab" VIEW_VAR = "sn_view" +ZIELGROESSE_VAR = "sn_zielgroesse" +FORMFAKTOR_VAR = "sn_formfaktor" KARTENNAME_38 = "§38" KARTENNAME_41 = "§41" MASSSTAB_WIE_KARTENFENSTER = "Wie Kartenfenster" @@ -29,6 +31,16 @@ PLOTMASSSTAB_BY_AUSWAHL = { "1:100.000": "100000", } +# Breite x Höhe in mm (Hochformat, DIN-Standard) +DIN_GROESSEN: dict[str, tuple[int, int]] = { + "DIN A0": (841, 1189), + "DIN A1": (594, 841), + "DIN A2": (420, 594), + "DIN A3": (297, 420), + "DIN A4": (210, 297), +} +DIN_STANDARD = "DIN A0" + class TabBLogic: """ Kapselt die Fachlogik von Tab B. @@ -61,4 +73,12 @@ class TabBLogic: return set_variable(VIEW_VAR, auswahl or "", scope="project") + + def set_zielgroesse_for_auswahl(self, auswahl: str) -> None: + """Setzt ``sn_zielgroesse`` auf den gewählten DIN-Namen.""" + set_variable(ZIELGROESSE_VAR, auswahl if auswahl in DIN_GROESSEN else DIN_STANDARD, scope="project") + + def set_formfaktor(self, endlosrolle: bool) -> None: + """Setzt ``sn_formfaktor`` auf ``Endlosrolle`` oder ``Blatt``.""" + set_variable(FORMFAKTOR_VAR, "Endlosrolle" if endlosrolle else "Blatt", scope="project") \ No newline at end of file diff --git a/ui/tab_b_ui.py b/ui/tab_b_ui.py index c434b3c..4260cd3 100644 --- a/ui/tab_b_ui.py +++ b/ui/tab_b_ui.py @@ -10,6 +10,8 @@ from sn_basis.functions.qt_wrapper import ( QVBoxLayout, QLabel, QComboBox, + QCheckBox, + QHBoxLayout, ) from sn_basis.functions.qgiscore_wrapper import QgsProject from sn_basis.functions.qgisui_wrapper import iface @@ -23,6 +25,10 @@ from sn_plan41.ui.tab_b_logic import ( MASSSTAB_WIE_KARTENFENSTER, PLOTMASSSTAB_BY_AUSWAHL, THEMA_WIE_KARTENFENSTER, + DIN_GROESSEN, + DIN_STANDARD, + ZIELGROESSE_VAR, + FORMFAKTOR_VAR, ) @@ -32,6 +38,8 @@ KARTENNAME_38 = "§38" KARTENNAME_41 = "§41" MASSSTAB_VAR = "tab_b_massstab" THEMA_VAR = "tab_b_thema" +ZIELGROESSE_UI_VAR = "tab_b_zielgroesse" +FORMFAKTOR_UI_VAR = "tab_b_formfaktor" class TabB(QWidget): """ @@ -67,6 +75,8 @@ class TabB(QWidget): self._thema_combo: Optional[QComboBox] = None self._theme_signal_connected = False self._connected_theme_collection: object = None # Referenz für sauberes Trennen + self._zielgroesse_combo: Optional[QComboBox] = None + self._endlosrolle_cb: Optional[QCheckBox] = None self._build_ui() @@ -89,6 +99,10 @@ class TabB(QWidget): ) if self._thema_combo: self.logic.set_view_for_auswahl(self._thema_combo.currentText()) + if self._zielgroesse_combo: + self.logic.set_zielgroesse_for_auswahl(self._zielgroesse_combo.currentText()) + if self._endlosrolle_cb: + self.logic.set_formfaktor(self._endlosrolle_cb.isChecked()) def _build_ui(self) -> None: """Erstellt die reduzierte UI für die Themenauswahl.""" @@ -127,6 +141,23 @@ class TabB(QWidget): self._thema_combo.currentTextChanged.connect(self._on_thema_changed) main_layout.addWidget(self._thema_combo) + zielgroesse_label = QLabel("max. Blattgröße") + zielgroesse_label.setStyleSheet("font-weight: bold; margin-top: 6px;") + main_layout.addWidget(zielgroesse_label) + + zielgroesse_row = QHBoxLayout() + zielgroesse_row.setSpacing(6) + self._zielgroesse_combo = QComboBox(self) + self._zielgroesse_combo.addItems(list(DIN_GROESSEN.keys())) + self._zielgroesse_combo.setCurrentText(DIN_STANDARD) + self._zielgroesse_combo.currentTextChanged.connect(self._on_zielgroesse_changed) + zielgroesse_row.addWidget(self._zielgroesse_combo) + self._endlosrolle_cb = QCheckBox("Endlosrolle", self) + self._endlosrolle_cb.setChecked(False) + self._endlosrolle_cb.stateChanged.connect(self._on_formfaktor_changed) + zielgroesse_row.addWidget(self._endlosrolle_cb) + main_layout.addLayout(zielgroesse_row) + main_layout.addStretch(1) self.setLayout(main_layout) @@ -134,6 +165,8 @@ class TabB(QWidget): """Stellt die gespeicherten Combobox-Zustände wieder her.""" if not self._kartenname_combo or not self._massstab_combo or not self._thema_combo: return + if not self._zielgroesse_combo or not self._endlosrolle_cb: + return saved_kartenname = get_variable(KARTENNAME_VAR, scope="project") if saved_kartenname in (KARTENNAME_38, KARTENNAME_41): @@ -158,6 +191,15 @@ class TabB(QWidget): else: self._thema_combo.setCurrentText(THEMA_WIE_KARTENFENSTER) + saved_zielgroesse = get_variable(ZIELGROESSE_UI_VAR, scope="project") + if saved_zielgroesse in DIN_GROESSEN: + self._zielgroesse_combo.setCurrentText(saved_zielgroesse) + else: + self._zielgroesse_combo.setCurrentText(DIN_STANDARD) + + saved_formfaktor = get_variable(FORMFAKTOR_UI_VAR, scope="project") + self._endlosrolle_cb.setChecked(saved_formfaktor == "Endlosrolle") + def _on_kartenname_changed(self, value: str) -> None: """Persistiert die Kartennamen-Auswahl und setzt ``sn_kartenname``.""" if value in (KARTENNAME_38, KARTENNAME_41): @@ -181,6 +223,19 @@ class TabB(QWidget): if self.logic: self.logic.set_view_for_auswahl(value) + def _on_zielgroesse_changed(self, value: str) -> None: + """Persistiert Blattgröße und setzt ``sn_zielgroesse``.""" + set_variable(ZIELGROESSE_UI_VAR, value, scope="project") + if self.logic: + self.logic.set_zielgroesse_for_auswahl(value) + + def _on_formfaktor_changed(self, state: int) -> None: + """Persistiert Endlosrolle-Zustand und setzt ``sn_formfaktor``.""" + checked = bool(state) + set_variable(FORMFAKTOR_UI_VAR, "Endlosrolle" if checked else "Blatt", scope="project") + if self.logic: + self.logic.set_formfaktor(checked) + def _connect_project_signals(self) -> None: """Verbindet QgsProject-Signale für Projektwechsel/-neuladen.""" project = QgsProject.instance()