Blattgrößen-Auswahl und Endlosrollen-Checkbox ergänzt
This commit is contained in:
@@ -9,6 +9,8 @@ from sn_basis.modules.Pruefmanager import Pruefmanager
|
|||||||
KARTENNAME_VAR = "sn_kartenname"
|
KARTENNAME_VAR = "sn_kartenname"
|
||||||
PLOTMASSSTAB_VAR = "sn_plotmassstab"
|
PLOTMASSSTAB_VAR = "sn_plotmassstab"
|
||||||
VIEW_VAR = "sn_view"
|
VIEW_VAR = "sn_view"
|
||||||
|
ZIELGROESSE_VAR = "sn_zielgroesse"
|
||||||
|
FORMFAKTOR_VAR = "sn_formfaktor"
|
||||||
KARTENNAME_38 = "§38"
|
KARTENNAME_38 = "§38"
|
||||||
KARTENNAME_41 = "§41"
|
KARTENNAME_41 = "§41"
|
||||||
MASSSTAB_WIE_KARTENFENSTER = "Wie Kartenfenster"
|
MASSSTAB_WIE_KARTENFENSTER = "Wie Kartenfenster"
|
||||||
@@ -29,6 +31,16 @@ PLOTMASSSTAB_BY_AUSWAHL = {
|
|||||||
"1:100.000": "100000",
|
"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:
|
class TabBLogic:
|
||||||
"""
|
"""
|
||||||
Kapselt die Fachlogik von Tab B.
|
Kapselt die Fachlogik von Tab B.
|
||||||
@@ -62,3 +74,11 @@ class TabBLogic:
|
|||||||
|
|
||||||
set_variable(VIEW_VAR, auswahl or "", scope="project")
|
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")
|
||||||
|
|
||||||
@@ -10,6 +10,8 @@ from sn_basis.functions.qt_wrapper import (
|
|||||||
QVBoxLayout,
|
QVBoxLayout,
|
||||||
QLabel,
|
QLabel,
|
||||||
QComboBox,
|
QComboBox,
|
||||||
|
QCheckBox,
|
||||||
|
QHBoxLayout,
|
||||||
)
|
)
|
||||||
from sn_basis.functions.qgiscore_wrapper import QgsProject
|
from sn_basis.functions.qgiscore_wrapper import QgsProject
|
||||||
from sn_basis.functions.qgisui_wrapper import iface
|
from sn_basis.functions.qgisui_wrapper import iface
|
||||||
@@ -23,6 +25,10 @@ from sn_plan41.ui.tab_b_logic import (
|
|||||||
MASSSTAB_WIE_KARTENFENSTER,
|
MASSSTAB_WIE_KARTENFENSTER,
|
||||||
PLOTMASSSTAB_BY_AUSWAHL,
|
PLOTMASSSTAB_BY_AUSWAHL,
|
||||||
THEMA_WIE_KARTENFENSTER,
|
THEMA_WIE_KARTENFENSTER,
|
||||||
|
DIN_GROESSEN,
|
||||||
|
DIN_STANDARD,
|
||||||
|
ZIELGROESSE_VAR,
|
||||||
|
FORMFAKTOR_VAR,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -32,6 +38,8 @@ KARTENNAME_38 = "§38"
|
|||||||
KARTENNAME_41 = "§41"
|
KARTENNAME_41 = "§41"
|
||||||
MASSSTAB_VAR = "tab_b_massstab"
|
MASSSTAB_VAR = "tab_b_massstab"
|
||||||
THEMA_VAR = "tab_b_thema"
|
THEMA_VAR = "tab_b_thema"
|
||||||
|
ZIELGROESSE_UI_VAR = "tab_b_zielgroesse"
|
||||||
|
FORMFAKTOR_UI_VAR = "tab_b_formfaktor"
|
||||||
|
|
||||||
class TabB(QWidget):
|
class TabB(QWidget):
|
||||||
"""
|
"""
|
||||||
@@ -67,6 +75,8 @@ class TabB(QWidget):
|
|||||||
self._thema_combo: Optional[QComboBox] = None
|
self._thema_combo: Optional[QComboBox] = None
|
||||||
self._theme_signal_connected = False
|
self._theme_signal_connected = False
|
||||||
self._connected_theme_collection: object = None # Referenz für sauberes Trennen
|
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()
|
self._build_ui()
|
||||||
@@ -89,6 +99,10 @@ class TabB(QWidget):
|
|||||||
)
|
)
|
||||||
if self._thema_combo:
|
if self._thema_combo:
|
||||||
self.logic.set_view_for_auswahl(self._thema_combo.currentText())
|
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:
|
def _build_ui(self) -> None:
|
||||||
"""Erstellt die reduzierte UI für die Themenauswahl."""
|
"""Erstellt die reduzierte UI für die Themenauswahl."""
|
||||||
@@ -127,6 +141,23 @@ class TabB(QWidget):
|
|||||||
self._thema_combo.currentTextChanged.connect(self._on_thema_changed)
|
self._thema_combo.currentTextChanged.connect(self._on_thema_changed)
|
||||||
main_layout.addWidget(self._thema_combo)
|
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)
|
main_layout.addStretch(1)
|
||||||
self.setLayout(main_layout)
|
self.setLayout(main_layout)
|
||||||
|
|
||||||
@@ -134,6 +165,8 @@ class TabB(QWidget):
|
|||||||
"""Stellt die gespeicherten Combobox-Zustände wieder her."""
|
"""Stellt die gespeicherten Combobox-Zustände wieder her."""
|
||||||
if not self._kartenname_combo or not self._massstab_combo or not self._thema_combo:
|
if not self._kartenname_combo or not self._massstab_combo or not self._thema_combo:
|
||||||
return
|
return
|
||||||
|
if not self._zielgroesse_combo or not self._endlosrolle_cb:
|
||||||
|
return
|
||||||
|
|
||||||
saved_kartenname = get_variable(KARTENNAME_VAR, scope="project")
|
saved_kartenname = get_variable(KARTENNAME_VAR, scope="project")
|
||||||
if saved_kartenname in (KARTENNAME_38, KARTENNAME_41):
|
if saved_kartenname in (KARTENNAME_38, KARTENNAME_41):
|
||||||
@@ -158,6 +191,15 @@ class TabB(QWidget):
|
|||||||
else:
|
else:
|
||||||
self._thema_combo.setCurrentText(THEMA_WIE_KARTENFENSTER)
|
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:
|
def _on_kartenname_changed(self, value: str) -> None:
|
||||||
"""Persistiert die Kartennamen-Auswahl und setzt ``sn_kartenname``."""
|
"""Persistiert die Kartennamen-Auswahl und setzt ``sn_kartenname``."""
|
||||||
if value in (KARTENNAME_38, KARTENNAME_41):
|
if value in (KARTENNAME_38, KARTENNAME_41):
|
||||||
@@ -181,6 +223,19 @@ class TabB(QWidget):
|
|||||||
if self.logic:
|
if self.logic:
|
||||||
self.logic.set_view_for_auswahl(value)
|
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:
|
def _connect_project_signals(self) -> None:
|
||||||
"""Verbindet QgsProject-Signale für Projektwechsel/-neuladen."""
|
"""Verbindet QgsProject-Signale für Projektwechsel/-neuladen."""
|
||||||
project = QgsProject.instance()
|
project = QgsProject.instance()
|
||||||
|
|||||||
Reference in New Issue
Block a user