""" sn_plan41/ui/tab_b_ui.py – UI für Tab B (Druck) """ from __future__ import annotations from typing import Optional from sn_basis.functions.qt_wrapper import ( QWidget, QVBoxLayout, QLabel, QPushButton, QToolButton, QFileDialog, QMessageBox, ToolButtonTextBesideIcon, ArrowDown, ArrowRight, SizePolicyPreferred, SizePolicyMaximum, QComboBox, ) from sn_basis.functions.qgisui_wrapper import QgsFileWidget, QgsMapLayerComboBox from sn_basis.functions.qgiscore_wrapper import QgsProject, QgsMapLayerProxyModel from sn_basis.functions.variable_wrapper import get_variable, set_variable from sn_basis.modules.pruef_ergebnis import pruef_ergebnis # Services (werden von DockWidget injiziert) from sn_basis.modules.Pruefmanager import Pruefmanager from sn_basis.modules.DataGrabber import DataGrabber from sn_basis.modules.Dateipruefer import Dateipruefer from sn_plan41.ui.tab_b_logic import TabBLogic class TabB(QWidget): """ UI-Klasse für Tab B (Druck) des Plan41-Plugins. Zuständig für: - Auswahl des Druckthemas - Auswahl der Druckparameter - Start der Vorlagenanlage (Druck über QGIS-Druckfunktion) Services (Pruefmanager, DataGrabber) werden zur Laufzeit vom DockWidget injiziert. Alle fachlichen Prüfungen laufen über den zentralen Pruefmanager. """ tab_title = "Druck" #: Tab-Titel für BaseDockWidget def __init__(self, parent: Optional[QWidget] = None): """ Initialisiert die UI-Struktur. Services werden später über :meth:`set_services` injiziert. :param parent: Parent-Widget (typischerweise DockWidget) """ super().__init__(parent) # Services (werden von DockWidget gesetzt) self.pruefmanager: Optional[Pruefmanager] = None self.logic: Optional[TabBLogic] = None self._build_ui() self._restore_state() def _build_ui(self) -> None: """Erstellt die komplette UI-Hierarchie mit allen Gruppen.""" main_layout = QVBoxLayout() main_layout.setSpacing(4) main_layout.setContentsMargins(4, 4, 4, 4) # === LAYER-AUSWAHL === layer_label = QLabel("Verfahrensgebiet-Layer auswählen") layer_label.setStyleSheet("font-weight: bold; margin-top: 6px;") main_layout.addWidget(layer_label) self.layer_combo = QgsMapLayerComboBox() self.layer_combo.setFilters(QgsMapLayerProxyModel.VectorLayer) self.layer_combo.layerChanged.connect(self._on_layer_changed) main_layout.addWidget(self.layer_combo) def _restore_state(self) -> None: """Stellt UI-State aus Projektvariablen/Persistenz wieder her.""" # === UI CALLBACKS === def _toggle_group(self, checked: bool) -> None: """Zeigt/verbirgt Verfahrens-DB-Gruppe.""" self.group_button.setArrowType(ArrowDown if checked else ArrowRight) self.group_content.setVisible(checked) def _toggle_optional(self, checked: bool) -> None: """Zeigt/verbirgt optionale Linkliste.""" self.optional_button.setArrowType(ArrowDown if checked else ArrowRight) self.optional_content.setVisible(checked) def _on_layer_changed(self, layer) -> None: """Persistiert Layer-Auswahl und registriert Verfahrensgebiet.""" self._pufferlayer = layer if not layer: return # UI-State speichern set_variable("tab_b_layer_id", layer.id(), scope="project") # 🔹 NEU: Verfahrensgebiet explizit registrieren if self.logic: self.logic.save_verfahrensgebiet_layer(layer)