Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions loopstructural/gui/map2loop_tools/basal_contacts_widget.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ def __init__(self, parent=None, data_manager=None, debug_manager=None):
self._guess_layers()
# Set up field combo boxes
self._setup_field_combo_boxes()
self._restore_selection()

def set_debug_manager(self, debug_manager):
"""Attach a debug manager instance."""
Expand Down Expand Up @@ -145,6 +146,35 @@ def _guess_layers(self):
faults_layer = self.data_manager.find_layer_by_name(fault_layer_match)
self.faultsLayerComboBox.setLayer(faults_layer)

def _restore_selection(self):
"""Restore persisted selections from data manager."""
if not self.data_manager:
return
settings = self.data_manager.get_widget_settings('basal_contacts_widget', {})
if not settings:
return
if layer_name := settings.get('geology_layer'):
layer = self.data_manager.find_layer_by_name(layer_name)
if layer:
self.geologyLayerComboBox.setLayer(layer)
if layer_name := settings.get('faults_layer'):
layer = self.data_manager.find_layer_by_name(layer_name)
if layer:
self.faultsLayerComboBox.setLayer(layer)
if field := settings.get('unit_name_field'):
self.unitNameFieldComboBox.setField(field)

def _persist_selection(self):
"""Persist current selections into data manager."""
if not self.data_manager:
return
settings = {
'geology_layer': self.geologyLayerComboBox.currentLayer().name() if self.geologyLayerComboBox.currentLayer() else None,
'faults_layer': self.faultsLayerComboBox.currentLayer().name() if self.faultsLayerComboBox.currentLayer() else None,
'unit_name_field': self.unitNameFieldComboBox.currentField(),
}
self.data_manager.set_widget_settings('basal_contacts_widget', settings)

def _setup_field_combo_boxes(self):
"""Set up field combo boxes to link to their respective layers."""
geology = self.geologyLayerComboBox.currentLayer()
Expand Down Expand Up @@ -174,6 +204,7 @@ def _run_extractor(self):
"""Run the basal contacts extraction algorithm."""
self._log_params("basal_contacts_widget_run")

self._persist_selection()
# Validate inputs
if not self.geologyLayerComboBox.currentLayer():
QMessageBox.warning(self, "Missing Input", "Please select a geology layer.")
Expand Down
1 change: 1 addition & 0 deletions loopstructural/gui/map2loop_tools/sampler_widget.py
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ def _on_sampler_type_changed(self):

def _run_sampler(self):
"""Run the sampler algorithm using the map2loop API."""

from qgis.core import (
QgsCoordinateReferenceSystem,
QgsFeature,
Expand Down
52 changes: 52 additions & 0 deletions loopstructural/gui/map2loop_tools/sorter_widget.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ def __init__(self, parent=None, data_manager=None, debug_manager=None):

# Set up field combo boxes
self._setup_field_combo_boxes()
self._restore_selection()

# Initial state update
self._on_algorithm_changed()
Expand Down Expand Up @@ -153,6 +154,56 @@ def _guess_layers(self):
dem_layer = self.data_manager.find_layer_by_name(dem_layer_match, layer_type=QgsRasterLayer)
self.dtmLayerComboBox.setLayer(dem_layer)

def _restore_selection(self):
"""Restore persisted selections from data manager."""
if not self.data_manager:
return
settings = self.data_manager.get_widget_settings('sorter_widget', {})
if not settings:
return
for key, combo in (
('geology_layer', self.geologyLayerComboBox),
('structure_layer', self.structureLayerComboBox),
('contacts_layer', self.contactsLayerComboBox),
('dtm_layer', self.dtmLayerComboBox),
):
if layer_name := settings.get(key):
layer = self.data_manager.find_layer_by_name(layer_name)
if layer:
combo.setLayer(layer)
if 'sorting_algorithm' in settings:
self.sortingAlgorithmComboBox.setCurrentIndex(settings['sorting_algorithm'])
if 'orientation_type' in settings:
self.orientationTypeComboBox.setCurrentIndex(settings['orientation_type'])
for key, combo in (
('unit_name_field', self.unitNameFieldComboBox),
('min_age_field', self.minAgeFieldComboBox),
('max_age_field', self.maxAgeFieldComboBox),
('dip_field', self.dipFieldComboBox),
('dipdir_field', self.dipDirFieldComboBox),
):
if field := settings.get(key):
combo.setField(field)

def _persist_selection(self):
"""Persist current selections into data manager."""
if not self.data_manager:
return
settings = {
'geology_layer': self.geologyLayerComboBox.currentLayer().name() if self.geologyLayerComboBox.currentLayer() else None,
'structure_layer': self.structureLayerComboBox.currentLayer().name() if self.structureLayerComboBox.currentLayer() else None,
'contacts_layer': self.contactsLayerComboBox.currentLayer().name() if self.contactsLayerComboBox.currentLayer() else None,
'dtm_layer': self.dtmLayerComboBox.currentLayer().name() if self.dtmLayerComboBox.currentLayer() else None,
'sorting_algorithm': self.sortingAlgorithmComboBox.currentIndex(),
'orientation_type': self.orientationTypeComboBox.currentIndex(),
'unit_name_field': self.unitNameFieldComboBox.currentField(),
'min_age_field': self.minAgeFieldComboBox.currentField(),
'max_age_field': self.maxAgeFieldComboBox.currentField(),
'dip_field': self.dipFieldComboBox.currentField(),
'dipdir_field': self.dipDirFieldComboBox.currentField(),
}
self.data_manager.set_widget_settings('sorter_widget', settings)

def _setup_field_combo_boxes(self):
"""Set up field combo boxes to link to their respective layers."""
self.unitNameFieldComboBox.setLayer(self.geologyLayerComboBox.currentLayer())
Expand Down Expand Up @@ -283,6 +334,7 @@ def _run_sorter(self):
"""Run the stratigraphic sorter algorithm."""
from ...main.m2l_api import sort_stratigraphic_column

self._persist_selection()
self._log_params("sorter_widget_run")

# Validate inputs
Expand Down
Loading