GUI: Added ui_state_manager to handle Qsettings. Trying to resolve beamline busy and baton conflicts... helpppppp

This commit is contained in:
2026-03-27 17:11:11 +01:00
parent 7965960e46
commit ce0fc67867
+8 -17
View File
@@ -19,6 +19,7 @@ from aare.common.diffraction_geometry import DiffractionGeometry
from aare.common.logger_config import setup_logger
from aare.common.models import SampleShortInfoList, TokenData, DAQStatusModel, BeamlineStateEnum
from aare.common.sample_geometry import SampleGeometryModel
from aare.gui.models.gui_state_manager import UIStateManager
from aare.gui.panels.LogPanel import LogDock
from aare.gui.panels.beamline_controls import BeamlineControls
@@ -93,7 +94,7 @@ class MainWindow(QMainWindow):
# Tutorial manager (define tutorials after widgets exist)
self._tutorial_event_bus = TutorialEventBus(self)
self._tutorial_text_resolver = DictionaryTextResolver(MANUAL_MOUNT_TUTORIAL)
self.state_manager = UIStateManager("PSI", "AareGUI")
self.viewer = JFJochDBusClient()
try:
@@ -895,9 +896,10 @@ class MainWindow(QMainWindow):
self._waiting_for_baton_response = True
timeout = result.get("timeout_seconds", 30)
holder = result.get("message", "Waiting for response...")
is_busy = result.get("beamline_busy", False)
if getattr(self, "_baton_pending_dialog", None) is None:
target_user = holder.replace("Request sent to ", "")
target_user = holder.replace("Request sent to ", "").replace(" (Note: beamline is currently busy, transfer will be queued if accepted)", "")
self._baton_pending_dialog = BatonPendingDialog(target_user=target_user, timeout_seconds=timeout,
parent=self)
self._baton_pending_dialog.cancelled_signal.connect(self.daq.cancel_baton_request)
@@ -906,7 +908,7 @@ class MainWindow(QMainWindow):
self._baton_pending_dialog.update_remaining(timeout)
self.alert_banner.show_waiting(f"Requesting control - {holder}", timeout)
logger.info(f"Baton request pending - {timeout}s timeout")
logger.info(f"Baton request pending - {timeout}s timeout (busy={is_busy})")
elif result.get("queued"):
self._waiting_for_baton_response = True
@@ -1008,23 +1010,12 @@ class MainWindow(QMainWindow):
def _restore_window_state(self) -> None:
settings = QSettings()
geometry = settings.value("main_window/geometry")
state = settings.value("main_window/state")
if geometry is not None:
self.restoreGeometry(geometry)
if state is not None:
self.restoreState(state)
if not self.__decoded_token.staff:
self.ref_tools_dock.hide()
self.state_manager.restore_window(self)
def closeEvent(self, event) -> None:
try:
settings = QSettings()
settings.setValue("main_window/geometry", self.saveGeometry())
settings.setValue("main_window/state", self.saveState())
self.state_manager.save_window(self)
except Exception as e:
logger.warning(f"Failed to save main window state: {e}")