GUI: updated CheckedLineEdit to raster, rotation and scansetttings. and corrected functionaility.
This commit is contained in:
@@ -52,7 +52,7 @@ class RasterDataCollectionPanel(ScanSettingsPanel):
|
||||
|
||||
self._layout.addWidget(QLabel("Image time", parent=self), 4, 0)
|
||||
self.image_time_enter = CheckedLineEdit(
|
||||
0.0005, 10.0, raster_mgr.active_grid.exp_time_s, decimals=4, check_box_text='Manual', parent=self
|
||||
0.0005, 10.0, raster_mgr.active_grid.exp_time_s, decimals=4, check_box_text='', parent=self
|
||||
)
|
||||
self._layout.addWidget(self.image_time_enter, 4, 1, 1, 3)
|
||||
self._layout.addWidget(QLabel("s", parent=self), 4, 4)
|
||||
|
||||
@@ -40,7 +40,7 @@ class ScanSettingsPanel(QWidget):
|
||||
self._layout = QGridLayout(self)
|
||||
|
||||
self._layout.addWidget(QLabel("High resolution", parent=self), 0, 0)
|
||||
self.high_res_enter = NumberLineEdit(
|
||||
self.high_res_enter = CheckedLineEdit(
|
||||
1.0, 10, decimals=2, default=self._high_res, parent=self
|
||||
)
|
||||
self._layout.addWidget(self.high_res_enter, 0, 1, 1, 3)
|
||||
@@ -49,16 +49,17 @@ class ScanSettingsPanel(QWidget):
|
||||
self.high_res_enter.newValue.connect(self.set_high_res)
|
||||
|
||||
self._layout.addWidget(QLabel("Detector distance", parent=self), 1, 0)
|
||||
self.dtz_enter = CheckedLineEdit(self.MIN_DTZ, 1000, decimals=2, default=self._dtz, check_box_text="Manual", parent=self)
|
||||
self.dtz_enter = CheckedLineEdit(self.MIN_DTZ, 1000, decimals=2, default=self._dtz, check_box_text="", parent=self)
|
||||
self._layout.addWidget(self.dtz_enter, 1, 1, 1, 3)
|
||||
self._layout.addWidget(QLabel("mm", parent=self), 1, 4)
|
||||
|
||||
self.dtz_enter.newValue.connect(self.set_dtz)
|
||||
self.dtz_enter.readOnlyChanged.connect(self.high_res_enter.setReadOnly)
|
||||
self.dtz_enter.readOnlyChanged.connect(self.high_res_enter.external_read_only)
|
||||
self.high_res_enter.readOnlyChanged.connect(self.dtz_enter.external_read_only)
|
||||
|
||||
self._layout.addWidget(QLabel("Beam transmission", parent=self), 2, 0)
|
||||
self.transmission_enter = CheckedLineEdit(
|
||||
0, 1.0, decimals=4, default=self._transmission, check_box_text="Manual", parent=self
|
||||
0, 1.0, decimals=4, default=self._transmission, check_box_text="", parent=self
|
||||
)
|
||||
self._layout.addWidget(self.transmission_enter, 2, 1, 1, 3)
|
||||
self.transmission_enter.newValue.connect(self.set_transmission)
|
||||
@@ -77,12 +78,11 @@ class ScanSettingsPanel(QWidget):
|
||||
self._ring_current = s.bl.ring_current_mA
|
||||
self._experiment_shutter_state = s.bl.exp_shutter_open
|
||||
can_edit = (not s.busy) and (s.session.session.name == "OwnedByYou")
|
||||
self._can_edit_params = can_edit
|
||||
# Lock/unlock base NumberLineEdits
|
||||
|
||||
for w in (self.dtz_enter, self.transmission_enter):
|
||||
w.set_busy(not can_edit)
|
||||
|
||||
self._can_edit_params = can_edit
|
||||
for w in (self.dtz_enter, self.high_res_enter, self.transmission_enter):
|
||||
w.set_busy(not can_edit)
|
||||
|
||||
# Update sample and parameters
|
||||
if s.sample is not None:
|
||||
@@ -113,18 +113,21 @@ class ScanSettingsPanel(QWidget):
|
||||
|
||||
@Slot(float)
|
||||
def set_dtz(self, v: float):
|
||||
#dtz_enter will only be edited in GUI when manual is checked, otherwise it is updated when high_res changes
|
||||
self._dtz = v
|
||||
self._high_res = self.__diffraction.resolution_angstrom(self._dtz)
|
||||
self.high_res_enter.update_value(self._high_res)
|
||||
self.high_res_enter.force_update_value(self._high_res)
|
||||
self.dtz_updated.emit(self._dtz)
|
||||
|
||||
@Slot(float)
|
||||
def set_high_res(self, v: float):
|
||||
#if updated from spreadsheet should change dtz external
|
||||
#if manually updated from GUI should not change dtz internal
|
||||
self._high_res = v
|
||||
self._dtz = self.__diffraction.calc_dtz_mm(v)
|
||||
if self._dtz < self.MIN_DTZ:
|
||||
self._dtz = self.MIN_DTZ
|
||||
self.dtz_enter.manual_update(self._dtz)
|
||||
self.dtz_enter.force_update_value(self._dtz)
|
||||
self.dtz_updated.emit(self._dtz)
|
||||
|
||||
@Slot(float)
|
||||
|
||||
@@ -118,19 +118,21 @@ class CheckedLineEdit(QWidget):
|
||||
readOnlyChanged = Signal(bool)
|
||||
|
||||
def __init__(self, min_val: float, max_val: float, /, default: float = 0.0, decimals: int = 2,
|
||||
check_box_text: str ="", parent = None):
|
||||
check_box_text: str ="", start_checked: bool = False, parent = None):
|
||||
super().__init__(parent)
|
||||
self._busy = False
|
||||
self._checked = False
|
||||
self._checked = start_checked
|
||||
self._internal_value = default
|
||||
self._external_value = default
|
||||
|
||||
self.check_box = QCheckBox(check_box_text, self)
|
||||
self.check_box.stateChanged.connect(self._on_checked_toggled)
|
||||
self.check_box.setChecked(False)
|
||||
self.check_box.setChecked(self._checked)
|
||||
|
||||
self.editor = NumberLineEdit(min_val, max_val, default, decimals, self)
|
||||
self.editor.newValue.connect(self._on_editor_value_changed)
|
||||
self.editor.newValue.connect(self.newValue.emit)
|
||||
self.editor.setReadOnly(not self._checked)
|
||||
|
||||
self.layout = QHBoxLayout(self)
|
||||
self.layout.setContentsMargins(0, 0, 0, 0)
|
||||
@@ -140,17 +142,16 @@ class CheckedLineEdit(QWidget):
|
||||
def _on_editor_value_changed(self, value_float: float):
|
||||
if self._checked:
|
||||
self._internal_value = value_float
|
||||
self.newValue.emit(value_float)
|
||||
else:
|
||||
self._external_value = value_float
|
||||
|
||||
def _on_checked_toggled(self, checked: bool):
|
||||
#when check box is clicked, change read only state of editor
|
||||
self._checked = checked
|
||||
if checked:
|
||||
self.editor.force_update_value(self._internal_value)
|
||||
self.newValue.emit(self._internal_value)
|
||||
else:
|
||||
self.editor.force_update_value(self._external_value)
|
||||
self.newValue.emit(self._external_value)
|
||||
self.setReadOnly()
|
||||
|
||||
def set_busy(self, busy: bool):
|
||||
@@ -170,18 +171,13 @@ class CheckedLineEdit(QWidget):
|
||||
self._external_value = value
|
||||
if not self._checked:
|
||||
self.editor.update_value(value)
|
||||
self._on_editor_value_changed(value)
|
||||
|
||||
def force_update_value(self, value):
|
||||
#wrapper for NumberLineEdit.force_update_value
|
||||
self._external_value = value
|
||||
if not self._checked:
|
||||
self.editor.force_update_value(value)
|
||||
self.newValue.emit(value)
|
||||
|
||||
def manual_update(self, value):
|
||||
self._internal_value = value
|
||||
self._external_value = value
|
||||
self.editor.update_value(value)
|
||||
#self._external_value = value
|
||||
self.editor.force_update_value(value)
|
||||
self._on_editor_value_changed(value)
|
||||
|
||||
@property
|
||||
def value(self) -> float:
|
||||
@@ -199,16 +195,19 @@ class CheckedLineEdit(QWidget):
|
||||
def isReadOnly(self) -> bool:
|
||||
return self.editor.isReadOnly()
|
||||
|
||||
def external_read_only(self, ro: bool):
|
||||
self.check_box.setChecked(not ro)
|
||||
self.editor.setReadOnly(ro)
|
||||
|
||||
def setReadOnly(self):
|
||||
# Change editor read only state based on self._busy and self._checked
|
||||
should_be_ro = True
|
||||
if not self._busy and self._checked: # Only set editor to writeable if busy is False and the checkbox is checked,
|
||||
should_be_ro = False
|
||||
self.editor.setReadOnly(False)
|
||||
if self.editor.isReadOnly() != should_be_ro:
|
||||
self.editor.setReadOnly(should_be_ro)
|
||||
self.readOnlyChanged.emit(should_be_ro)
|
||||
#state_changed = self.editor.isReadOnly() != should_be_ro
|
||||
self.editor.setReadOnly(should_be_ro)
|
||||
self.readOnlyChanged.emit(should_be_ro)
|
||||
|
||||
def get_default(self) -> float:
|
||||
return float(self._internal_value)
|
||||
@@ -216,4 +215,3 @@ class CheckedLineEdit(QWidget):
|
||||
def reset_to_default(self):
|
||||
# Force set to initial default
|
||||
self.force_update_value(self._internal_value)
|
||||
self.newValue.emit(self._internal_value)
|
||||
|
||||
Reference in New Issue
Block a user