from qgis.PyQt.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QLabel, QPushButton, QMessageBox from qgis.PyQt.QtCore import Qt from qgis.core import Qgis, QgsProject, QgsMessageLog from qgis.utils import iface from sn_verfahrensgebiet.functions.verfahrensgebiet_alkis import verfahrensgebiet_alkis, LoadStatus from sn_basis.functions.messages import success, info, warning, error from sn_basis.functions.styles import apply_style class WorkingTab(QWidget): tab_title = "Bearbeitung" def __init__(self, parent=None): super().__init__(parent) layout = QVBoxLayout() layout.setAlignment(Qt.AlignmentFlag.AlignTop) # Abschnitt 1: Verfahrensgebiet row_verf_header = QHBoxLayout() lbl_verf = QLabel("Verfahrensgebiet") self.haken_verf = self._haken_label() row_verf_header.addWidget(lbl_verf) row_verf_header.addWidget(self.haken_verf) row_verf_header.addStretch() layout.addLayout(row_verf_header) row_verf_buttons = QHBoxLayout() self.btn_verf_alkis = QPushButton("Aus ALKIS laden") self.btn_verf_shape = QPushButton("Aus Shape laden") row_verf_buttons.addWidget(self.btn_verf_alkis) row_verf_buttons.addWidget(self.btn_verf_shape) layout.addLayout(row_verf_buttons) # Abschnitt 2: Flurstücke (Platzhalter für spätere Implementierung) row_flurst_header = QHBoxLayout() lbl_flurst = QLabel("Flurstücke") self.haken_flurst = self._haken_label() row_flurst_header.addWidget(lbl_flurst) row_flurst_header.addWidget(self.haken_flurst) row_flurst_header.addStretch() layout.addLayout(row_flurst_header) row_flurst_buttons = QHBoxLayout() self.btn_flurst_alkis = QPushButton("Aus ALKIS laden") self.btn_flurst_shape = QPushButton("Aus Shape laden") row_flurst_buttons.addWidget(self.btn_flurst_alkis) row_flurst_buttons.addWidget(self.btn_flurst_shape) layout.addLayout(row_flurst_buttons) layout.addStretch() self.setLayout(layout) # Signale verbinden self.btn_verf_alkis.clicked.connect(self.handle_verf_alkis) # self.btn_verf_shape.clicked.connect(self.handle_verf_shape) # self.btn_flurst_alkis.clicked.connect(self.handle_flurst_alkis) # self.btn_flurst_shape.clicked.connect(self.handle_flurst_shape) def handle_verf_alkis(self): self._set_busy(self.btn_verf_alkis, True) try: layer, status = verfahrensgebiet_alkis(self) if not layer or not layer.isValid(): return if status in (LoadStatus.FIRST, LoadStatus.RELOAD): # Gemeinsame Logik für erstmaliges und erneutes Laden QgsProject.instance().addMapLayer(layer) iface.mapCanvas().setExtent(layer.extent()) iface.mapCanvas().refresh() apply_style(layer, "verfahrensgebiet.qml") self.setze_haken(self.haken_verf, True) # Unterschied nur in der Meldung msg = "erstmalig geladen" if status == LoadStatus.FIRST else "neu geladen" success("Verfahrensgebiet", f"Layer wurde {msg}.", duration=5) elif status == LoadStatus.KEEP: info("Verfahrensgebiet", "Vorhandener Layer wurde behalten.", duration=4) elif status == LoadStatus.NONE: warning("Verfahrensgebiet", "Layer konnte nicht geladen werden.", duration=None) finally: self._set_busy(self.btn_verf_alkis, False) def _set_busy(self, button: QPushButton, busy: bool): button.setEnabled(not busy) if busy: button.setText("Lade ...") else: button.setText("Aus ALKIS laden") def _haken_label(self) -> QLabel: label = QLabel() label.setFixedSize(20, 20) label.setAlignment(Qt.AlignmentFlag.AlignCenter) label.setText("") # Start ohne Haken return label def setze_haken(self, label: QLabel, aktiv: bool): """Zeigt oder entfernt den grünen Haken (Unicode), ohne Theme-Icons.""" if aktiv: label.setText("✓") label.setStyleSheet("color: #2ea043; font-weight: bold;") else: label.setText("") label.setStyleSheet("")