forked from Daniel/Plugin_SN_Plan41
Comboboxen Thema und Massstab hinzugefügt
This commit is contained in:
139
ui/tab_b_ui.py
139
ui/tab_b_ui.py
@@ -9,27 +9,26 @@ 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.qgisui_wrapper import iface
|
||||
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
|
||||
from sn_plan41.ui.tab_b_logic import (
|
||||
TabBLogic,
|
||||
MASSSTAB_WIE_KARTENFENSTER,
|
||||
PLOTMASSSTAB_BY_AUSWAHL,
|
||||
)
|
||||
|
||||
|
||||
THEMA_VAR = "tab_b_thema"
|
||||
THEMA_PLACEHOLDER = "Thema wählen"
|
||||
THEMA_38 = "§38"
|
||||
THEMA_41 = "§41"
|
||||
MASSSTAB_VAR = "tab_b_massstab"
|
||||
|
||||
class TabB(QWidget):
|
||||
"""
|
||||
@@ -60,54 +59,100 @@ class TabB(QWidget):
|
||||
self.pruefmanager: Optional[Pruefmanager] = None
|
||||
|
||||
self.logic: Optional[TabBLogic] = None
|
||||
|
||||
self._thema_combo: Optional[QComboBox] = None
|
||||
self._massstab_combo: Optional[QComboBox] = None
|
||||
|
||||
|
||||
self._build_ui()
|
||||
self._restore_state()
|
||||
|
||||
def set_services(self, pruefmanager: Pruefmanager, data_grabber: DataGrabber) -> None:
|
||||
"""Injiziert Services vom übergeordneten DockWidget."""
|
||||
_ = data_grabber
|
||||
self.pruefmanager = pruefmanager
|
||||
self.logic = TabBLogic(pruefmanager=self.pruefmanager)
|
||||
|
||||
if self._thema_combo:
|
||||
self.logic.set_kartenname_for_thema(self._thema_combo.currentText())
|
||||
if self._massstab_combo:
|
||||
self.logic.set_plotmassstab_for_auswahl(
|
||||
self._massstab_combo.currentText(),
|
||||
self._get_current_canvas_scale(),
|
||||
)
|
||||
|
||||
def _build_ui(self) -> None:
|
||||
"""Erstellt die komplette UI-Hierarchie mit allen Gruppen."""
|
||||
"""Erstellt die reduzierte UI für die Themenauswahl."""
|
||||
main_layout = QVBoxLayout()
|
||||
main_layout.setSpacing(4)
|
||||
main_layout.setContentsMargins(4, 4, 4, 4)
|
||||
|
||||
thema_label = QLabel("Thema")
|
||||
thema_label.setStyleSheet("font-weight: bold; margin-top: 6px;")
|
||||
main_layout.addWidget(thema_label)
|
||||
|
||||
# === 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)
|
||||
self._thema_combo = QComboBox(self)
|
||||
self._thema_combo.addItem(THEMA_PLACEHOLDER)
|
||||
self._thema_combo.addItem(THEMA_38)
|
||||
self._thema_combo.addItem(THEMA_41)
|
||||
self._thema_combo.currentTextChanged.connect(self._on_thema_changed)
|
||||
main_layout.addWidget(self._thema_combo)
|
||||
|
||||
massstab_label = QLabel("Massstab")
|
||||
massstab_label.setStyleSheet("font-weight: bold; margin-top: 6px;")
|
||||
main_layout.addWidget(massstab_label)
|
||||
|
||||
self._massstab_combo = QComboBox(self)
|
||||
self._massstab_combo.addItem(MASSSTAB_WIE_KARTENFENSTER)
|
||||
self._massstab_combo.addItems(list(PLOTMASSSTAB_BY_AUSWAHL.keys()))
|
||||
self._massstab_combo.currentTextChanged.connect(self._on_massstab_changed)
|
||||
main_layout.addWidget(self._massstab_combo)
|
||||
|
||||
main_layout.addStretch(1)
|
||||
self.setLayout(main_layout)
|
||||
|
||||
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:
|
||||
"""Stellt die gespeicherten Combobox-Zustände wieder her."""
|
||||
if not self._thema_combo or not self._massstab_combo:
|
||||
return
|
||||
|
||||
# UI-State speichern
|
||||
set_variable("tab_b_layer_id", layer.id(), scope="project")
|
||||
saved_thema = get_variable(THEMA_VAR, scope="project")
|
||||
if saved_thema in (THEMA_38, THEMA_41):
|
||||
self._thema_combo.setCurrentText(saved_thema)
|
||||
else:
|
||||
self._thema_combo.setCurrentText(THEMA_PLACEHOLDER)
|
||||
|
||||
saved_massstab = get_variable(MASSSTAB_VAR, scope="project")
|
||||
valid_massstaebe = [MASSSTAB_WIE_KARTENFENSTER, *PLOTMASSSTAB_BY_AUSWAHL.keys()]
|
||||
if saved_massstab in valid_massstaebe:
|
||||
self._massstab_combo.setCurrentText(saved_massstab)
|
||||
else:
|
||||
self._massstab_combo.setCurrentText(MASSSTAB_WIE_KARTENFENSTER)
|
||||
|
||||
def _on_thema_changed(self, value: str) -> None:
|
||||
"""Persistiert die Themenauswahl und setzt den Kartennamen."""
|
||||
if value in (THEMA_38, THEMA_41):
|
||||
set_variable(THEMA_VAR, value, scope="project")
|
||||
else:
|
||||
set_variable(THEMA_VAR, "", scope="project")
|
||||
|
||||
# 🔹 NEU: Verfahrensgebiet explizit registrieren
|
||||
if self.logic:
|
||||
self.logic.save_verfahrensgebiet_layer(layer)
|
||||
self.logic.set_kartenname_for_thema(value)
|
||||
|
||||
def _on_massstab_changed(self, value: str) -> None:
|
||||
"""Persistiert Maßstabsauswahl und setzt ``sn_plotmassstab``."""
|
||||
set_variable(MASSSTAB_VAR, value, scope="project")
|
||||
|
||||
if self.logic:
|
||||
self.logic.set_plotmassstab_for_auswahl(value, self._get_current_canvas_scale())
|
||||
|
||||
def _get_current_canvas_scale(self) -> float | None:
|
||||
"""Liest den aktuellen Maßstab aus der Kartensicht."""
|
||||
try:
|
||||
canvas = iface.mapCanvas()
|
||||
if canvas is None:
|
||||
return None
|
||||
scale = canvas.scale()
|
||||
return float(scale) if scale else None
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
|
||||
Reference in New Issue
Block a user