From 20e9a4d5ed399fb39af7ac031bf4955f8bc63558 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Tue, 30 Sep 2025 10:25:41 +0200 Subject: [PATCH] GUI: Show only available transitions --- gui/src/aaregui/widgets/status_bar.py | 44 ++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 8 deletions(-) diff --git a/gui/src/aaregui/widgets/status_bar.py b/gui/src/aaregui/widgets/status_bar.py index c8fc69e8..5cc581e8 100644 --- a/gui/src/aaregui/widgets/status_bar.py +++ b/gui/src/aaregui/widgets/status_bar.py @@ -1,4 +1,5 @@ from PySide6.QtCore import Signal, Slot, QPoint +from PySide6.QtGui import QFont from PySide6.QtWidgets import QStatusBar, QDialog, QMenu, QLabel from aaredaqlib.models import TokenData, BeamlineStateEnum, DAQStatusModel, SessionsStateEnum @@ -22,6 +23,7 @@ class StatusBar(QStatusBar): def __init__(self, token: TokenData, parent=None): super().__init__(parent) self.__decoded_token = token + self.__status = None self.flux = ValueLabel("Flux", "x 109 ph/s", self) self.transmission = ValueLabel("Transmission", "", self) @@ -57,6 +59,7 @@ class StatusBar(QStatusBar): @Slot(DAQStatusModel) def update_daq_status(self, status: DAQStatusModel): + self.__status = status if status.bl.flux_ph_s is None: self.flux.set_value(f"0") else: @@ -178,16 +181,41 @@ class StatusBar(QStatusBar): menu.exec() def show_state_menu(self): + if self.__status is None: + return + + print(self.__status.state) menu = QMenu(self) - action_2 = menu.addAction("Sample exchange") - action_2.triggered.connect(self.se) - action_1 = menu.addAction("Sample alignment") - action_1.triggered.connect(self.sa) - action_3 = menu.addAction("Dewar transfer") - action_3.triggered.connect(self.dl) - action_4 = menu.addAction("Beam location") - action_4.triggered.connect(self.beam_location) + if self.__status.busy or self.__status.state in [BeamlineStateEnum.Moving]: + return + + action_0 = menu.addAction("Available transitions") + font = QFont() + font.setBold(True) + action_0.setFont(font) + # Optionally make it non-clickable since it's a header + action_0.setEnabled(False) + menu.addSeparator() + + if self.__status.state in [BeamlineStateEnum.RobotSampleExchange, + BeamlineStateEnum.SampleExchange, + BeamlineStateEnum.DewarTransfer, + BeamlineStateEnum.BeamLocation, + BeamlineStateEnum.DataCollection, + BeamlineStateEnum.XrayFluorescence]: + action_1 = menu.addAction("Sample alignment") + action_1.triggered.connect(self.sa) + elif self.__status.state in [BeamlineStateEnum.SampleAlignment, ]: + action_2 = menu.addAction("Manual sample exchange") + action_2.triggered.connect(self.se) + action_3 = menu.addAction("Dewar transfer") + action_3.triggered.connect(self.dl) + action_4 = menu.addAction("Beam location") + action_4.triggered.connect(self.beam_location) + elif self.__status.state in [BeamlineStateEnum.Maintenance, ]: + action_2 = menu.addAction("Manual sample exchange") + action_2.triggered.connect(self.se) label_geometry = self.state_label.geometry() menu.move(self.mapToGlobal(label_geometry.topLeft()) - QPoint(0, menu.sizeHint().height()))