Source code for sec_interp.gui.ui.pages.geology_page

from __future__ import annotations

"""Geology configuration page."""

from qgis.core import QgsMapLayerProxyModel
from qgis.gui import QgsFieldComboBox, QgsMapLayerComboBox
from qgis.PyQt.QtCore import QCoreApplication, pyqtSignal
from qgis.PyQt.QtWidgets import QGridLayout, QLabel

from sec_interp.core.validation.project_validator import (
    ProjectValidator,
    ValidationParams,
)

from .base_page import BasePage


[docs] class GeologyPage(BasePage): """Configuration page for Geology/Outcrop settings.""" dataChanged = pyqtSignal() def __init__(self, parent=None): super().__init__(QCoreApplication.translate("GeologyPage", "Geological Outcrops"), parent) def _setup_ui(self): super()._setup_ui() self.group_layout = QGridLayout(self.group_box) self.group_layout.setSpacing(6) # Row 0: Outcrop Layer self.group_layout.addWidget(QLabel(self.tr("Outcrops Layer")), 0, 0) self.layer_combo = QgsMapLayerComboBox() # Use modern flags if available (QGIS 3.32+) try: from qgis.core import Qgis # noqa: PLC0415 self.layer_combo.setFilters(Qgis.LayerFilters(Qgis.LayerFilter.PolygonLayer)) except (ImportError, AttributeError, TypeError): self.layer_combo.setFilters(QgsMapLayerProxyModel.PolygonLayer) self.layer_combo.setAllowEmptyLayer(True) self.layer_combo.setToolTip(self.tr("Select the polygon layer with geological outcrops")) self.layer_combo.setCurrentIndex(0) self.group_layout.addWidget(self.layer_combo, 0, 1) # Row 1: Name Field self.group_layout.addWidget(QLabel(self.tr("Name Field")), 1, 0) self.field_combo = QgsFieldComboBox() self.field_combo.setToolTip(self.tr("Select the field containing unit names")) self.group_layout.addWidget(self.field_combo, 1, 1) # Connection: update fields when layer changes self.layer_combo.layerChanged.connect(self.field_combo.setLayer) # Emit dataChanged when selections change self.layer_combo.layerChanged.connect(self.dataChanged.emit) self.field_combo.fieldChanged.connect(self.dataChanged.emit)
[docs] def get_data(self) -> dict: """Get geology configuration.""" return { "outcrop_layer": self.layer_combo.currentLayer(), "outcrop_name_field": self.field_combo.currentField(), }
[docs] def is_complete(self) -> bool: """Check if required fields are filled if a layer is selected.""" data = self.get_data() params = ValidationParams( outcrop_layer=data["outcrop_layer"], outcrop_field=data["outcrop_name_field"], ) return ProjectValidator.is_geology_complete(params)