GUI: fixed bug where the line edits were not updated in the GUI when reloading parameters
This commit is contained in:
1 parent
3afd05ee3b
commit
10f881e0cf
1 file changed
+45
-13
@@ -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)
|
||||
|
||||
Reference in new issue
Block a user