GUI: main window add restore default view and way to recover refernece samples panel, also capture default window state.

This commit is contained in:
appleb_m committed 2026-03-20 16:57:32 +01:00
1 parent 9db0e45f8b
commit c25e20a10c
1 file changed
+60 -10
+60 -10
View File
@@ -47,6 +47,7 @@ from aare.gui.threads.camera_thread import SampleCameraThread
from aare.gui.threads.prediction_subscriber import PredictionSubscriber
from aare.gui.threads.daq_worker import DAQWorker
from aare.gui.threads.jfjoch_viewer import JFJochDBusClient
from aare.gui.tutorials.tutorial_registration import register_tutorials
from aare.gui.widgets.alert_banner import AlertBanner
from aare.gui.widgets.camera_image import SampleCameraImageLabel
from aare.gui.widgets.no_wheel_scroll_area import NoWheelScrollArea
@@ -76,6 +77,7 @@ class MainWindow(QMainWindow):
self._beamline_recovery_dialog = None
self._controls_help_dialog = None
self._cleanup_done = False
self._default_window_state = None
# Tutorial manager (define tutorials after widgets exist)
self._tutorial_event_bus = TutorialEventBus(self)
@@ -221,6 +223,11 @@ class MainWindow(QMainWindow):
self.ref_tools_dock.setAllowedAreas(Qt.DockWidgetArea.BottomDockWidgetArea)
self.addDockWidget(Qt.DockWidgetArea.BottomDockWidgetArea, self.ref_tools_dock)
self.tabifyDockWidget(self.ref_tools_dock, self.tell_samples_dock)
if self.__decoded_token.staff:
self.ref_tools_dock.show()
self.ref_tools_dock.raise_()
else:
self.ref_tools_dock.hide()
self.sample_logic = SampleMountLogic()
@@ -282,6 +289,7 @@ class MainWindow(QMainWindow):
self.setWindowTitle("AareGUI")
self.create_menu_bar()
self._capture_default_window_state()
self._restore_window_state()
# Define tutorials now that the UI exists
@@ -522,35 +530,41 @@ class MainWindow(QMainWindow):
file_menu.addAction(quit_action)
view_menu = menu_bar.addMenu("View")
show_samples_action = QAction("Show Sample List", self)
show_samples_action.setCheckable(True)
show_samples_action.setChecked(True)
show_samples_action.triggered.connect(lambda: self.tell_samples_dock.setVisible(show_samples_action.isChecked()))
# When dock visibility changes, update the action's checked state
show_samples_action.triggered.connect(lambda checked: self.tell_samples_dock.setVisible(checked))
self.tell_samples_dock.visibilityChanged.connect(show_samples_action.setChecked)
view_menu.addAction(show_samples_action)
if self.__decoded_token.staff:
show_reference_tools_action = QAction("Show Reference Tools", self)
show_reference_tools_action.setCheckable(True)
show_reference_tools_action.setChecked(True)
show_reference_tools_action.triggered.connect(
lambda checked: self.ref_tools_dock.setVisible(checked)
)
self.ref_tools_dock.visibilityChanged.connect(show_reference_tools_action.setChecked)
view_menu.addAction(show_reference_tools_action)
show_job_list_action = QAction("Show job List", self)
show_job_list_action.setCheckable(True)
show_job_list_action.setChecked(True)
show_job_list_action.triggered.connect(self.job_list_dock.setVisible)
# When dock visibility changes, update the action's checked state
show_job_list_action.triggered.connect(lambda: self.job_list_dock.setVisible(show_job_list_action.isChecked()))
show_job_list_action.triggered.connect(lambda checked: self.job_list_dock.setVisible(checked))
self.job_list_dock.visibilityChanged.connect(show_job_list_action.setChecked)
view_menu.addAction(show_job_list_action)
show_manual_sample_action = QAction("Show manual sample", self)
show_manual_sample_action.setCheckable(True)
show_manual_sample_action.setChecked(True)
show_manual_sample_action.triggered.connect(self.manual_sample_dock.setVisible)
# When dock visibility changes, update the action's checked state
show_manual_sample_action.triggered.connect(lambda: self.manual_sample_dock.setVisible(show_manual_sample_action.isChecked()))
show_manual_sample_action.triggered.connect(lambda checked: self.manual_sample_dock.setVisible(checked))
self.manual_sample_dock.visibilityChanged.connect(show_manual_sample_action.setChecked)
view_menu.addAction(show_manual_sample_action)
show_face_panel_action = QAction("Show face detection", self)
show_face_panel_action.setCheckable(True)
show_face_panel_action.setChecked(False)
#show_face_panel_action.triggered.connect(self.face_panel_dock.setVisible)
show_face_panel_action.triggered.connect(lambda checked: self.face_panel_dock.setVisible(checked))
self.face_panel_dock.visibilityChanged.connect(show_face_panel_action.setChecked)
view_menu.addAction(show_face_panel_action)
@@ -566,6 +580,7 @@ class MainWindow(QMainWindow):
show_smargon_trace_action.setCheckable(True)
show_smargon_trace_action.setChecked(False)
show_smargon_trace_action.triggered.connect(lambda checked: self.smargon_trace_dock.setVisible(checked))
self.smargon_trace_dock.visibilityChanged.connect(show_smargon_trace_action.setChecked)
self.smargon_trace_dock.visibilityChanged.connect(
lambda visible: self.smargon_trace_panel.refresh_plot(force=True) if visible else None
)
@@ -578,6 +593,12 @@ class MainWindow(QMainWindow):
self.log_dock.visibilityChanged.connect(show_log_action.setChecked)
view_menu.addAction(show_log_action)
view_menu.addSeparator()
restore_default_view_action = QAction("Restore Default View", self)
restore_default_view_action.triggered.connect(self.restore_default_view)
view_menu.addAction(restore_default_view_action)
help_menu = menu_bar.addMenu("Help")
about_action = QAction("About", self) # Action for 'About'
about_action.triggered.connect(self.show_about_dialog)
@@ -606,6 +627,32 @@ class MainWindow(QMainWindow):
start_interactive_tutorial_action.triggered.connect(self.start_interactive_tutorial)
help_menu.addAction(start_interactive_tutorial_action)
def _capture_default_window_state(self) -> None:
self._default_window_state = self.saveState()
@Slot()
def restore_default_view(self) -> None:
if self._default_window_state is not None:
self.restoreState(self._default_window_state)
self.tell_samples_dock.setVisible(True)
self.job_list_dock.setVisible(True)
self.manual_sample_dock.setVisible(True)
self.face_panel_dock.setVisible(False)
self.fluor_panel_dock.setVisible(False)
self.smargon_trace_dock.setVisible(False)
self.log_dock.setVisible(False)
if self.__decoded_token.staff:
self.ref_tools_dock.setVisible(True)
self.ref_tools_dock.raise_()
else:
self.ref_tools_dock.setVisible(False)
self.tell_samples_dock.raise_()
self.video_tab.setCurrentIndex(0)
def show_about_dialog(self):
QMessageBox.about(
self,
@@ -684,6 +731,9 @@ class MainWindow(QMainWindow):
if state is not None:
self.restoreState(state)
if not self.__decoded_token.staff:
self.ref_tools_dock.hide()
def closeEvent(self, event) -> None:
try:
settings = QSettings()