GUI: "safety" added to parameters panels so they cannot be updated unless you re in control of teh GUI

This commit is contained in:
2025-11-05 13:36:19 +01:00
parent 10f881e0cf
commit a08ea4bc5d
2 changed files with 37 additions and 0 deletions
@@ -3,6 +3,7 @@ from PySide6.QtWidgets import QWidget, QGridLayout, QLabel, QSizePolicy, QSpacer
QComboBox, QSlider
from aaredaqlib.diffraction_geometry import DiffractionGeometry
from aaredaqlib.models import DAQStatusModel
from aaregui.panels.scan_settings_panel import ScanSettingsPanel
from aaregui.scan_logic.raster_grid_manager import RasterGridManager, RasterGridMetric
from aaregui.widgets.number_line_edit import NumberLineEdit
@@ -141,6 +142,15 @@ class RasterDataCollectionPanel(ScanSettingsPanel):
self.__n_y = n_y
self.update_grid_scan_size()
@Slot(DAQStatusModel)
def update_daq_status(self, s: DAQStatusModel):
super().update_daq_status(s)
can_edit = getattr(self, "_can_edit_params", False)
for w in (self.width_enter, self.height_enter, self.image_time_enter):
w.setReadOnly(not can_edit)
w.setStyleSheet(
"background-color: rgb(255, 255, 255);" if can_edit else "background-color: rgb(240, 240, 240);")
def update_grid_scan_size(self):
self.width_enter.update_value(self.__size_x)
self.height_enter.update_value(self.__size_y)
@@ -4,11 +4,13 @@ from PySide6.QtCore import Slot, Signal, Qt
from PySide6.QtWidgets import QLabel, QComboBox, QPushButton
from aaredaqlib.diffraction_geometry import DiffractionGeometry
from aaredaqlib.logger_config import setup_logger
from aaredaqlib.models import DAQStatusModel
from aaredaqlib.rotation_scan import RotationScanRequest
from aaregui.panels.scan_settings_panel import ScanSettingsPanel
from aaregui.widgets.number_line_edit import NumberLineEdit
logger = setup_logger("aareGUI")
def add_screening_to_path(path):
p = Path(path)
@@ -159,6 +161,31 @@ class RotationDataCollectionPanel(ScanSettingsPanel):
def update_daq_status(self, s: DAQStatusModel):
super().update_daq_status(s)
self.__omega = s.geom.omega_deg
can_edit = getattr(self, "_can_edit_params", False)
for w in (self.start_angle, self.screening_image_angle, self.screening_image_time_enter,
self.total_angle, self.image_angle, self.image_time_enter):
w.setReadOnly(not can_edit)
w.setStyleSheet("background-color: rgb(255, 255, 255);" if can_edit else "background-color: rgb(240, 240, 240);")
if s.sample is None:
# Reset rotation-specific widgets to their defaults
for w in (self.start_angle, self.screening_image_angle, self.screening_image_time_enter,
self.total_angle, self.image_angle, self.image_time_enter):
try:
if hasattr(w, "saved_value"):
w.saved_value = float("nan")
# NumberLineEdit keeps its default in .default
w.update_value(w.default if hasattr(w, "default") else 0.0)
except Exception:
logger.error(f"Failed to reset {w} to default.", exc_info=True)
pass
# Reset dose label
self.__dose_mgy = 0
self.dose.setText("0.0")
return
lambda_a = s.diffraction.wavelength_angstrom
kdose = 2000 / (lambda_a * lambda_a)
beam_area = s.geom.beam_size_mm.x * s.geom.beam_size_mm.y * 1e6