From ce0fc6786706aa4a22b2c44e4bc4bc63c2113569 Mon Sep 17 00:00:00 2001 From: appleb_m Date: Fri, 27 Mar 2026 17:11:11 +0100 Subject: [PATCH] GUI: Added ui_state_manager to handle Qsettings. Trying to resolve beamline busy and baton conflicts... helpppppp --- src/aare/gui/main_window.py | 25 ++++++++----------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/src/aare/gui/main_window.py b/src/aare/gui/main_window.py index 9ec75126..6624a84f 100644 --- a/src/aare/gui/main_window.py +++ b/src/aare/gui/main_window.py @@ -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}")