Druckbereich eingeführt (Verfahrensgebiet, Auswahl, Rechteck)

This commit is contained in:
2026-03-26 21:23:50 +01:00
parent 3d8c0aff5d
commit b014b92c19
3 changed files with 671 additions and 20 deletions
+111
View File
@@ -26,6 +26,12 @@ from sn_basis.modules.print_logic import (
THEMA_WIE_KARTENFENSTER,
DIN_GROESSEN,
DIN_STANDARD,
DRUCKBEREICH_VAR,
DRUCKPUFFER_VAR,
DRUCKPUFFER_STANDARD_CM,
DRUCKBEREICH_VERFAHRENSGEBIET,
DRUCKBEREICH_AKTUELLE_AUSWAHL,
DRUCKBEREICH_RECHTECK,
)
@@ -37,6 +43,11 @@ MASSSTAB_VAR = "tab_b_massstab"
THEMA_VAR = "tab_b_thema"
ZIELGROESSE_UI_VAR = "tab_b_zielgroesse"
FORMFAKTOR_UI_VAR = "tab_b_formfaktor"
DRUCKBEREICH_OPTIONEN = [
DRUCKBEREICH_VERFAHRENSGEBIET,
DRUCKBEREICH_AKTUELLE_AUSWAHL,
DRUCKBEREICH_RECHTECK,
]
class PrintTab(QWidget):
@@ -55,7 +66,9 @@ class PrintTab(QWidget):
self._theme_signal_connected = False
self._connected_theme_collection: object = None
self._zielgroesse_combo: Optional[Any] = None
self._druckbereich_combo: Optional[Any] = None
self._endlosrolle_cb: Optional[Any] = None
self._druckpuffer_button: Optional[Any] = None
self._btn_vorlage_erstellen: Optional[Any] = None
self._build_ui()
@@ -79,6 +92,8 @@ class PrintTab(QWidget):
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._druckbereich_combo:
self.logic.set_druckbereich_for_auswahl(self._druckbereich_combo.currentText())
if self._endlosrolle_cb:
self.logic.set_formfaktor(self._endlosrolle_cb.isChecked())
@@ -141,6 +156,41 @@ class PrintTab(QWidget):
zielgroesse_row.addWidget(endlosrolle_cb)
main_layout.addLayout(zielgroesse_row)
druckbereich_row = QHBoxLayout()
druckbereich_row.setSpacing(6)
druckbereich_column = QVBoxLayout()
druckbereich_column.setSpacing(4)
druckbereich_column.setContentsMargins(0, 0, 0, 0)
druckbereich_label = QLabel("Druckbereich")
druckbereich_label.setStyleSheet("font-weight: bold; margin-top: 6px;")
druckbereich_column.addWidget(druckbereich_label)
druckbereich_combo = QComboBox(self)
druckbereich_combo.addItems(DRUCKBEREICH_OPTIONEN)
druckbereich_combo.currentTextChanged.connect(self._on_druckbereich_changed)
self._druckbereich_combo = druckbereich_combo
druckbereich_column.addWidget(druckbereich_combo)
druckbereich_row.addLayout(druckbereich_column, 1)
druckpuffer_column = QVBoxLayout()
druckpuffer_column.setSpacing(4)
druckpuffer_column.setContentsMargins(0, 0, 0, 0)
druckpuffer_label = QLabel("Kartenpuffer")
druckpuffer_label.setStyleSheet("font-weight: bold; margin-top: 6px;")
druckpuffer_column.addWidget(druckpuffer_label)
druckpuffer_button = QPushButton(self._format_druckpuffer_label(DRUCKPUFFER_STANDARD_CM), self)
druckpuffer_button.setToolTip("Puffer")
druckpuffer_button.clicked.connect(self._on_druckpuffer_clicked)
self._druckpuffer_button = druckpuffer_button
druckpuffer_column.addWidget(druckpuffer_button)
druckbereich_row.addLayout(druckpuffer_column)
main_layout.addLayout(druckbereich_row)
btn_vorlage_erstellen = QPushButton("Vorlage erstellen", self)
btn_vorlage_erstellen.clicked.connect(self._on_vorlage_erstellen)
self._btn_vorlage_erstellen = btn_vorlage_erstellen
@@ -154,6 +204,8 @@ class PrintTab(QWidget):
return
if not self._zielgroesse_combo or not self._endlosrolle_cb:
return
if not self._druckbereich_combo or not self._druckpuffer_button:
return
saved_kartenname = get_variable(KARTENNAME_VAR, scope="project")
if saved_kartenname in (KARTENNAME_38, KARTENNAME_41):
@@ -187,6 +239,19 @@ class PrintTab(QWidget):
saved_formfaktor = get_variable(FORMFAKTOR_UI_VAR, scope="project")
self._endlosrolle_cb.setChecked(saved_formfaktor == "Endlosrolle")
saved_druckbereich = get_variable(DRUCKBEREICH_VAR, scope="project")
if saved_druckbereich in DRUCKBEREICH_OPTIONEN:
self._druckbereich_combo.setCurrentText(saved_druckbereich)
else:
self._druckbereich_combo.setCurrentText(DRUCKBEREICH_VERFAHRENSGEBIET)
saved_druckpuffer = get_variable(DRUCKPUFFER_VAR, scope="project")
try:
druckpuffer_cm = int(str(saved_druckpuffer).strip())
except (TypeError, ValueError):
druckpuffer_cm = DRUCKPUFFER_STANDARD_CM
self._druckpuffer_button.setText(self._format_druckpuffer_label(max(0, druckpuffer_cm)))
def _on_kartenname_changed(self, value: str) -> None:
if value in (KARTENNAME_38, KARTENNAME_41):
set_variable(KARTENNAME_VAR, value, scope="project")
@@ -217,6 +282,51 @@ class PrintTab(QWidget):
if self.logic:
self.logic.set_formfaktor(checked)
def _on_druckbereich_changed(self, value: str) -> None:
if value not in DRUCKBEREICH_OPTIONEN:
value = DRUCKBEREICH_VERFAHRENSGEBIET
set_variable(DRUCKBEREICH_VAR, value, scope="project")
if self.logic:
self.logic.set_druckbereich_for_auswahl(value)
if value == DRUCKBEREICH_RECHTECK:
self.logic.activate_druckrechteck_capture()
def _on_druckpuffer_clicked(self) -> None:
if not self.pruefmanager:
return
current_value = get_variable(DRUCKPUFFER_VAR, scope="project") or str(DRUCKPUFFER_STANDARD_CM)
text_value, bestaetigt = self.pruefmanager.frage_text(
"Puffer um den Druckbereich",
"Puffer um den Druckbereich",
default_text=str(current_value),
)
if not bestaetigt:
return
try:
puffer_value = int(str(text_value).strip())
except (TypeError, ValueError):
self.pruefmanager.zeige_hinweis(
"Puffer um den Druckbereich",
"Der Puffer muss als ganze Zahl eingegeben werden.",
)
return
if puffer_value < 0:
self.pruefmanager.zeige_hinweis(
"Puffer um den Druckbereich",
"Der Puffer darf nicht negativ sein.",
)
return
set_variable(DRUCKPUFFER_VAR, str(puffer_value), scope="project")
if self._druckpuffer_button:
self._druckpuffer_button.setText(self._format_druckpuffer_label(puffer_value))
def _format_druckpuffer_label(self, value_cm: int) -> str:
return f"{value_cm} cm"
def _on_vorlage_erstellen(self) -> None:
if not self.logic or not self.pruefmanager:
return
@@ -227,6 +337,7 @@ class PrintTab(QWidget):
massstab_auswahl=self._massstab_combo.currentText() if self._massstab_combo else "",
zielgroesse=self._zielgroesse_combo.currentText() if self._zielgroesse_combo else DIN_STANDARD,
formfaktor=self._endlosrolle_cb.isChecked() if self._endlosrolle_cb else False,
druckbereich_auswahl=self._druckbereich_combo.currentText() if self._druckbereich_combo else DRUCKBEREICH_VERFAHRENSGEBIET,
)
def _connect_project_signals(self) -> None: