Feat/screening and gui polish #191

Merged
duan_j merged 4 commits from feat/screening-and-gui-polish into main 2026-09-02 09:17:17 +02:00
6 changed files with 28 additions and 29 deletions
+20 -19
View File
@@ -65,7 +65,7 @@ class RotationDataCollectionPanel(ScanSettingsPanel):
self._layout.addWidget(QLabel("°", parent=self), 3, 3)
self.omega_button = QPushButton("Ω")
self.omega_button.setFixedWidth(20)
self.omega_button.setFixedWidth(30)
self.omega_button.clicked.connect(self.update_omega_start)
self._layout.addWidget(self.omega_button, 3, 4)
@@ -73,23 +73,6 @@ class RotationDataCollectionPanel(ScanSettingsPanel):
QLabel("<center><B><u>Screening</u></B></center>", parent=self), 4, 0, 1, 6
)
self._layout.addWidget(QLabel("Image angle", parent=self), 5, 0)
self.screening_image_angle = NumberLineEdit(
0, 90.0, 0.5, decimals=3, parent=self, track_pending=True
)
self._layout.addWidget(self.screening_image_angle, 5, 1, 1, 3)
self._layout.addWidget(QLabel("°", parent=self), 5, 4)
self._layout.addWidget(QLabel("Image time", parent=self), 6, 0)
default_screening_exp_time = cfg_get(
"daq.data_collection_settings.default_screening_settings.exp_time_s", 0.1
)
self.screening_image_time_enter = NumberLineEdit(
0.0005, 10.0, default_screening_exp_time, decimals=4, parent=self, track_pending=True
)
self._layout.addWidget(self.screening_image_time_enter, 6, 1, 1, 3)
self._layout.addWidget(QLabel("s", parent=self), 6, 4)
self.screening_type = QComboBox(parent=self)
self.screening_type.addItem("1 image", {"steps": 1, "omega_step_deg": 0})
self.screening_type.addItem("2 images every 90°", {"steps": 2, "omega_step_deg": 90})
@@ -100,7 +83,24 @@ class RotationDataCollectionPanel(ScanSettingsPanel):
self.screening_type.addItem("4 images every 45°", {"steps": 4, "omega_step_deg": 45})
self.screening_type.addItem("5 images every 45°", {"steps": 5, "omega_step_deg": 45})
self._layout.addWidget(self.screening_type, 7, 0, 1, 6)
self._layout.addWidget(self.screening_type, 5, 0, 1, 6)
self._layout.addWidget(QLabel("Image angle", parent=self), 6, 0)
self.screening_image_angle = NumberLineEdit(
0, 90.0, 0.5, decimals=3, parent=self, track_pending=True
)
self._layout.addWidget(self.screening_image_angle, 6, 1, 1, 3)
self._layout.addWidget(QLabel("°", parent=self), 6, 4)
self._layout.addWidget(QLabel("Image time", parent=self), 7, 0)
default_screening_exp_time = cfg_get(
"daq.data_collection_settings.default_screening_settings.exp_time_s", 0.1
)
self.screening_image_time_enter = NumberLineEdit(
0.0005, 10.0, default_screening_exp_time, decimals=4, parent=self, track_pending=True
)
self._layout.addWidget(self.screening_image_time_enter, 7, 1, 1, 3)
self._layout.addWidget(QLabel("s", parent=self), 7, 4)
self._layout.addWidget(QLabel("Screening transmission", parent=self), 8, 0)
self.screening_transmission_enter = DbOverrideLineEdit(
@@ -108,6 +108,7 @@ class RotationDataCollectionPanel(ScanSettingsPanel):
)
self._layout.addWidget(self.screening_transmission_enter, 8, 1, 1, 3)
self.screening_transmission_enter.valueChanged.connect(self.set_screening_transmission)
self.screening_button = QPushButton("Run screening")
self.screening_button.setStyleSheet(f"color: {GO_TEXT};")
self.screening_button.clicked.connect(self.run_screening)
+1 -1
View File
@@ -66,7 +66,7 @@ class SimpleRotationSettingsPanel(QWidget):
self._layout.addWidget(QLabel("°", parent=self), 1, 4)
self.omega_button = QPushButton("Ω")
self.omega_button.setFixedWidth(20)
self.omega_button.setFixedWidth(30)
self.omega_button.clicked.connect(self.update_omega_start)
self._layout.addWidget(self.omega_button, 1, 5)
@@ -645,7 +645,7 @@ class RasterGridManager(QObject):
painter.setOpacity(1.0)
painter.setPen(
QPen(qcolor(RASTER_GRID_LINE, min(255, alpha + 40)), 1, Qt.PenStyle.SolidLine)
QPen(qcolor(RASTER_GRID_LINE, min(255, alpha + 88)), 2, Qt.PenStyle.SolidLine)
)
painter.setBrush(Qt.BrushStyle.NoBrush)
painter.drawRect(bounds)
@@ -700,7 +700,7 @@ class RasterGridManager(QObject):
max_value = max((x for x in values if x is not None and not math.isnan(x)), default=1)
diff = 1 if min_value == max_value else (max_value - min_value)
else:
painter.setPen(QPen(qcolor(RASTER_GRID_LINE), 1, Qt.PenStyle.SolidLine))
painter.setPen(QPen(qcolor(RASTER_GRID_LINE), 2, Qt.PenStyle.SolidLine))
min_value = 0
diff = 1
@@ -735,7 +735,7 @@ class RasterGridManager(QObject):
painter.setBrush(Qt.BrushStyle.NoBrush)
else:
painter.setPen(
QPen(qcolor(RASTER_GRID_LINE, min(255, alpha + 40)), 1, Qt.PenStyle.SolidLine)
QPen(qcolor(RASTER_GRID_LINE, min(255, alpha + 88)), 2, Qt.PenStyle.SolidLine)
)
painter.setBrush(Qt.BrushStyle.NoBrush)
painter.drawRect(bounds)
@@ -763,7 +763,7 @@ class RasterGridManager(QObject):
painter.save()
painter.setRenderHint(QPainter.RenderHint.Antialiasing, False)
painter.setPen(QPen(qcolor(RASTER_GRID_LINE), 1, Qt.PenStyle.SolidLine))
painter.setPen(QPen(qcolor(RASTER_GRID_LINE), 2, Qt.PenStyle.SolidLine))
painter.setBrush(Qt.BrushStyle.NoBrush)
painter.drawRect(bounds)
@@ -858,7 +858,7 @@ class RasterGridManager(QObject):
painter.fillRect(QRectF(px, py, draw_w, draw_h), brush)
painter.setPen(
QPen(qcolor(RASTER_GRID_LINE, min(255, alpha + 40)), 1, Qt.PenStyle.SolidLine)
QPen(qcolor(RASTER_GRID_LINE, min(255, alpha + 88)), 2, Qt.PenStyle.SolidLine)
)
painter.setBrush(Qt.BrushStyle.NoBrush)
painter.drawRect(bounds)
+2 -2
View File
@@ -181,14 +181,14 @@ def build_busy_overlay_style(
SessionsStateEnum.Vacant,
}:
return BusyOverlayStyle(
text="In viewing mode",
text="Viewing mode, Click here to grab the baton",
badge_bg=BUSY_YELLOW,
badge_fg=WHITE,
overlay_fill=qcolor(BUSY_YELLOW, 195),
overlay_border=qcolor(BUSY_YELLOW_BORDER, 235),
overlay_text=qcolor(WHITE),
accent_dot=BUSY_YELLOW_DOT,
subtext="Click here to grab the baton if you need to interact with GUI",
subtext="Grab the baton if you need to interact with GUI",
)
if not is_busy:
return None
-1
View File
@@ -29,7 +29,6 @@ def test_badge_drawn_once_and_hint_stripped(qtbot):
panel.set_busy_style(style)
applied = first._busy_overlay_style
assert applied is not None
assert applied.text == "In viewing mode"
assert applied.subtext == "" # not clickable here, hint stripped
assert second._busy_overlay_style is None # one badge, not one per view
-1
View File
@@ -175,7 +175,6 @@ def test_vacant_badge_hover_click_and_theme(camera, qtbot):
camera.update_daq_status(_status(busy=False, session=SessionsStateEnum.Vacant))
style = camera._busy_overlay_style
assert style is not None
assert style.text == "In viewing mode"
assert style.subtext # the grab-baton hint line
camera.grab() # paint records the badge rect