From 10f881e0cff0d53c6a5bbae6c22cc8949f8eb0b1 Mon Sep 17 00:00:00 2001 From: appleb_m Date: Wed, 5 Nov 2025 13:35:47 +0100 Subject: [PATCH] GUI: fixed bug where the line edits were not updated in the GUI when reloading parameters --- gui/src/aaregui/panels/scan_settings_panel.py | 58 ++++++++++++++----- 1 file changed, 45 insertions(+), 13 deletions(-) diff --git a/gui/src/aaregui/panels/scan_settings_panel.py b/gui/src/aaregui/panels/scan_settings_panel.py index f6428642..c023976d 100644 --- a/gui/src/aaregui/panels/scan_settings_panel.py +++ b/gui/src/aaregui/panels/scan_settings_panel.py @@ -2,9 +2,11 @@ from PySide6.QtCore import Slot, Signal from PySide6.QtWidgets import QWidget, QGridLayout, QLabel, QFrame, QPushButton from aaredaqlib.diffraction_geometry import DiffractionGeometry +from aaredaqlib.logger_config import setup_logger from aaredaqlib.models import DAQStatusModel from aaregui.widgets.number_line_edit import NumberLineEdit +logger = setup_logger("aareGUI") class ScanSettingsPanel(QWidget): dtz_updated = Signal(float) @@ -68,11 +70,23 @@ class ScanSettingsPanel(QWidget): self.__diffraction.resolution_angstrom(s.bl.dtz_max)) self.__diffraction = s.diffraction + can_edit = (not s.busy) and (s.session.session.name == "OwnedByYou") + # Lock/unlock base NumberLineEdits + self.high_res_enter.setReadOnly(not can_edit) + self.dtz_enter.setReadOnly(not can_edit) + self.transmission_enter.setReadOnly(not can_edit) + # If you want a visual cue: + style_ro = "background-color: rgb(240, 240, 240);" # light gray + style_rw = "background-color: rgb(255, 255, 255);" + for w in (self.high_res_enter, self.dtz_enter, self.transmission_enter): + w.setStyleSheet(style_rw if can_edit else style_ro) + + self._can_edit_params = can_edit + # Update sample and parameters if s.sample is not None: self._sample = s.sample self._params = s.sample.aaredb_params if hasattr(s.sample, 'aaredb_params') else None - # Enable reload button only if sample has parameters self.reload_params_button.setEnabled(self._params is not None) @@ -84,6 +98,27 @@ class ScanSettingsPanel(QWidget): self._params = None self.reload_params_button.setEnabled(False) + try: + # Reset high-resolution dependent defaults + self._dtz = float(self.dtz_enter.default) + self._transmission = float(self.transmission_enter.default) + self._high_res = float(self.high_res_enter.default) + except Exception: + pass + + # Force-update to defaults + if hasattr(self.dtz_enter, "saved_value"): + self.dtz_enter.saved_value = float("nan") + if hasattr(self.transmission_enter, "saved_value"): + self.transmission_enter.saved_value = float("nan") + if hasattr(self.high_res_enter, "saved_value"): + self.high_res_enter.saved_value = float("nan") + + # Apply defaults shown in the controls + self.dtz_enter.update_value(self.dtz_enter.default) + self.transmission_enter.update_value(self.transmission_enter.default) + self.high_res_enter.update_value(self.high_res_enter.default) + @Slot(float) def set_dtz(self, v: float): self._dtz = v @@ -106,21 +141,13 @@ class ScanSettingsPanel(QWidget): @Slot() def reload_parameters(self): - """Manually reload data collection parameters from database. - This allows users to reset their changes back to database values.""" - # Temporarily clear the last sample ID to force reload + logger.info("Reloading parameters from spreadsheet") temp_id = self._last_sample_id self._last_sample_id = None self.update_data_collection_parameters() self._last_sample_id = temp_id def update_data_collection_parameters(self): - """Update data collection parameters when a new sample is loaded. - Only updates fields if database parameters exist, otherwise keeps defaults. - This should only be called when a new sample is mounted. - - Child classes can override get_parameter_mappings() to specify which - parameters should be loaded.""" if self._sample is None: return @@ -139,18 +166,23 @@ class ScanSettingsPanel(QWidget): for param_name, widget, converter in param_mappings: value = getattr(self._params, param_name, None) if value is not None: - widget.update_value(converter(value) if converter else value) + if hasattr(widget, "force_update_value"): + widget.force_update_value(converter(value) if converter else value) + else: + widget.update_value(converter(value) if converter else value) # Handle transmission with conversion (common to all panels) if (transmission := getattr(self._params, 'transmission', None)) is not None: transmission_value = transmission / 100.0 if transmission > 1.0 else transmission self._transmission = transmission_value - self.transmission_enter.update_value(transmission_value) + self.transmission_enter.force_update_value(transmission_value) # Handle target resolution (common to all panels) if (target_res := getattr(self._params, 'targetresolution', None)) is not None: + logger.info(f"updatig resolution {target_res}") self._high_res = target_res - self.high_res_enter.update_value(target_res) + self.high_res_enter.force_update_value(self._high_res) + self.set_high_res(self._high_res) # Store metadata (common to all panels) self._sample_space_group = getattr(self._params, 'spacegroupnumber', None)