GUI: added message if session state is vacant or other
This commit is contained in:
@@ -68,6 +68,7 @@ class SampleCameraImageLabel(QGraphicsView):
|
||||
|
||||
self.__raster_mgr = raster
|
||||
self.__state = SampleCameraImageState.IDLE
|
||||
self.__session_state: SessionsStateEnum | None = None
|
||||
self.__sam_cam = SampleCameraSettings(exposure=0.1, gain=100.0)
|
||||
self.__is_daq_busy = False
|
||||
|
||||
@@ -81,6 +82,7 @@ class SampleCameraImageLabel(QGraphicsView):
|
||||
self.__bounding_box = None
|
||||
self.__show_detections = True
|
||||
|
||||
|
||||
self.start_point = None # Starting point of the rectangle
|
||||
self.end_point = None # Ending point of the rectangle
|
||||
|
||||
@@ -129,38 +131,31 @@ class SampleCameraImageLabel(QGraphicsView):
|
||||
self.__detections = []
|
||||
self.update()
|
||||
|
||||
def __draw_busy_overlay(self, painter: QPainter, rect):
|
||||
"""Draw 'BEAMLINE BUSY' text overlay when DAQ is in busy state."""
|
||||
def __draw_busy_overlay(self, painter: QPainter):
|
||||
|
||||
if not self.__is_daq_busy:
|
||||
return
|
||||
|
||||
# Save the current painter state
|
||||
painter.save()
|
||||
|
||||
# Reset the painter to work in device coordinates (viewport coordinates)
|
||||
painter.resetTransform()
|
||||
|
||||
# Set up the text properties with fixed font size
|
||||
font = QFont()
|
||||
font.setPointSize(24) # Fixed size in points
|
||||
font.setBold(True)
|
||||
painter.setFont(font)
|
||||
|
||||
# Create a semi-transparent background
|
||||
painter.setPen(QPen(QColor(255, 255, 255, 200), 2, Qt.PenStyle.SolidLine))
|
||||
painter.setBrush(QColor(255, 0, 0, 150)) # Semi-transparent red background
|
||||
painter.setBrush(QColor(255, 0, 0, 150))
|
||||
|
||||
text = "BEAMLINE BUSY"
|
||||
|
||||
# Calculate text dimensions using the fixed font
|
||||
font_metrics = QFontMetrics(font)
|
||||
text_rect = font_metrics.boundingRect(text)
|
||||
|
||||
# Fixed position in viewport coordinates (50, 50 from top-left corner)
|
||||
position_x = 50 # 50 pixels from left edge
|
||||
position_y = 50 # 50 pixels from top edge
|
||||
|
||||
# Create a rectangle for the background in viewport coordinates
|
||||
padding = 20
|
||||
bg_rect = QRect(
|
||||
position_x - padding,
|
||||
@@ -169,10 +164,8 @@ class SampleCameraImageLabel(QGraphicsView):
|
||||
text_rect.height() + 2 * padding
|
||||
)
|
||||
|
||||
# Draw the background rectangle
|
||||
painter.drawRoundedRect(bg_rect, 10, 10)
|
||||
|
||||
# Draw the text at fixed viewport position
|
||||
painter.setPen(QPen(QColor(255, 255, 255), 2, Qt.PenStyle.SolidLine))
|
||||
text_pos = QPoint(
|
||||
position_x,
|
||||
@@ -180,7 +173,48 @@ class SampleCameraImageLabel(QGraphicsView):
|
||||
)
|
||||
painter.drawText(text_pos, text)
|
||||
|
||||
# Restore the painter state
|
||||
painter.restore()
|
||||
|
||||
def __draw_session_overlay(self, painter: QPainter):
|
||||
if self.__session_state not in (SessionsStateEnum.Vacant, SessionsStateEnum.OwnedByElse):
|
||||
return
|
||||
|
||||
painter.save()
|
||||
painter.resetTransform()
|
||||
|
||||
font = QFont()
|
||||
font.setPointSize(24)
|
||||
font.setBold(True)
|
||||
painter.setFont(font)
|
||||
|
||||
if self.__session_state == SessionsStateEnum.Vacant:
|
||||
bg_color = QColor(255, 215, 0, 180)
|
||||
text = "Session Vacant"
|
||||
else:
|
||||
bg_color = QColor(255, 0, 0, 150)
|
||||
text = "Session Other"
|
||||
|
||||
fm = QFontMetrics(font)
|
||||
text_rect = fm.boundingRect(text)
|
||||
padding = 16
|
||||
|
||||
vw = self.viewport().width()
|
||||
vh = self.viewport().height()
|
||||
|
||||
bg_w = text_rect.width() + 2 * padding
|
||||
bg_h = text_rect.height() + 2 * padding
|
||||
position_x = int((vw - bg_w) / 2)
|
||||
position_y = int((vh - bg_h) / 2)
|
||||
|
||||
bg_rect = QRect(position_x, position_y, bg_w, bg_h)
|
||||
|
||||
painter.setPen(QPen(QColor(255, 255, 255, 220)))
|
||||
painter.setBrush(bg_color)
|
||||
painter.drawRoundedRect(bg_rect, 10, 10)
|
||||
|
||||
painter.setPen(QPen(QColor(255, 255, 255)))
|
||||
painter.drawText(QPoint(position_x + padding, position_y + padding + fm.ascent()), text)
|
||||
|
||||
painter.restore()
|
||||
|
||||
def drawForeground(self, painter, rect):
|
||||
@@ -188,7 +222,8 @@ class SampleCameraImageLabel(QGraphicsView):
|
||||
self.__draw_beam_center(painter)
|
||||
self.__raster_mgr.draw_grid(painter, self.__raster_alpha)
|
||||
self.__draw_helical(painter)
|
||||
self.__draw_busy_overlay(painter, rect)
|
||||
self.__draw_busy_overlay(painter)
|
||||
self.__draw_session_overlay(painter)
|
||||
self.__draw_detections(painter, rect)
|
||||
|
||||
def resizeEvent(self, event):
|
||||
@@ -395,6 +430,11 @@ class SampleCameraImageLabel(QGraphicsView):
|
||||
self.__sam_cam = s.bl.sample_camera
|
||||
self.__bounding_box = s.box
|
||||
|
||||
new_session_state = s.session.session if hasattr(s, 'session') else None
|
||||
if new_session_state != self.__session_state:
|
||||
self.__session_state = new_session_state
|
||||
self.update()
|
||||
|
||||
if s.busy != self.__is_daq_busy:
|
||||
self.__is_daq_busy = s.busy
|
||||
self.update()
|
||||
@@ -405,6 +445,7 @@ class SampleCameraImageLabel(QGraphicsView):
|
||||
self.__state = SampleCameraImageState.IDLE
|
||||
|
||||
|
||||
|
||||
def __left_single_click(self, event):
|
||||
match self.__state:
|
||||
case SampleCameraImageState.BEAM_MARKING:
|
||||
|
||||
Reference in New Issue
Block a user