diff --git a/gui/src/aaregui/main_window.py b/gui/src/aaregui/main_window.py index 5f8b320c..11ff73b4 100644 --- a/gui/src/aaregui/main_window.py +++ b/gui/src/aaregui/main_window.py @@ -8,7 +8,9 @@ from PySide6.QtWidgets import ( QHBoxLayout, QVBoxLayout, QMessageBox, - QApplication, ) + QApplication, + QDockWidget) + from aaredaqlib.coordinate import Coordinate, SmargonCoordinate from aaredaqlib.diffraction_geometry import DiffractionGeometry from aaredaqlib.models import SampleShortInfoList, TokenData @@ -16,7 +18,6 @@ from aaredaqlib.sample_geometry import SampleGeometryModel from aaregui.panels.beamline_controls import BeamlineControls from aaregui.panels.data_collection_settings import DataCollectionSettings -from aaregui.panels.raster_data_collection import RasterDataCollectionPanel from aaregui.panels.sample_queue_panel import SampleQueuePanel from aaregui.panels.status_panel import StatusPanel from aaregui.panels.tell_sample_panel import TellSamplePanel @@ -28,7 +29,6 @@ from aaregui.widgets.no_wheel_scroll_area import NoWheelScrollArea from aaregui.widgets.status_bar import StatusBar -# Subclass QMainWindow to define the behavior of your application class MainWindow(QMainWindow): sample_geometry = Signal(SampleGeometryModel) @@ -98,27 +98,27 @@ class MainWindow(QMainWindow): Qt.ScrollBarPolicy.ScrollBarAlwaysOff ) beamline_controls_scroll.setFixedWidth(self.beamline.set_width + 10) - bottom_widget_splitter = QSplitter(Qt.Orientation.Horizontal, parent=self) - bottom_widget = QWidget(self) + self.tell_samples = TellSamplePanel(samples=SampleShortInfoList(s = [])) + self.job_list_panel = SampleQueuePanel() + self.status_panel = StatusPanel() - self.tell_samples = TellSamplePanel(parent=bottom_widget, samples=SampleShortInfoList(s = [])) - bottom_widget_splitter.addWidget(self.tell_samples) - self.job_list_panel = SampleQueuePanel(parent=bottom_widget) - bottom_widget_splitter.addWidget(self.job_list_panel) + self.tell_samples_dock = QDockWidget("Sample List", self) + self.tell_samples_dock.setWidget(self.tell_samples) + self.tell_samples_dock.setAllowedAreas(Qt.DockWidgetArea.BottomDockWidgetArea) + self.addDockWidget(Qt.DockWidgetArea.BottomDockWidgetArea, self.tell_samples_dock) - self.status_panel = StatusPanel(parent=bottom_widget) - bottom_widget_splitter.addWidget(self.status_panel) + self.job_list_dock = QDockWidget("Automation list", self) + self.job_list_dock.setWidget(self.job_list_panel) + self.job_list_dock.setAllowedAreas(Qt.DockWidgetArea.BottomDockWidgetArea) + self.addDockWidget(Qt.DockWidgetArea.BottomDockWidgetArea, self.job_list_dock) - bottom_widget_layout = QVBoxLayout(bottom_widget) - bottom_widget.setLayout(bottom_widget_layout) - bottom_widget_layout.addWidget(bottom_widget_splitter) + self.status_panel_dock = QDockWidget("Beamline status", self) + self.status_panel_dock.setWidget(self.status_panel) + self.status_panel_dock.setAllowedAreas(Qt.DockWidgetArea.BottomDockWidgetArea) + self.addDockWidget(Qt.DockWidgetArea.BottomDockWidgetArea, self.status_panel_dock) - splitter = QSplitter(Qt.Orientation.Vertical, parent=self) - splitter.addWidget(top_widget) - splitter.addWidget(bottom_widget) - - self.setCentralWidget(splitter) + self.setCentralWidget(top_widget) self.setWindowTitle("AareGUI") self.create_menu_bar() @@ -217,6 +217,34 @@ class MainWindow(QMainWindow): quit_action.triggered.connect(self.close) # Connect to window's `close` method 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 + self.tell_samples_dock.visibilityChanged.connect(show_samples_action.setChecked) + view_menu.addAction(show_samples_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())) + view_menu.addAction(show_job_list_action) + + show_beamline_status_action = QAction("Show beamline status", self) + show_beamline_status_action.setCheckable(True) + show_beamline_status_action.setChecked(True) + show_beamline_status_action.triggered.connect(self.status_panel_dock.setVisible) + # When dock visibility changes, update the action's checked state + show_beamline_status_action.triggered.connect(lambda: self.status_panel_dock.setVisible(show_beamline_status_action.isChecked())) + self.status_panel_dock.visibilityChanged.connect(show_beamline_status_action.setChecked) + + view_menu.addAction(show_beamline_status_action) + # Help menu help_menu = menu_bar.addMenu("Help") about_action = QAction("About", self) # Action for 'About' diff --git a/gui/src/aaregui/scan_logic/raster_grid_manager.py b/gui/src/aaregui/scan_logic/raster_grid_manager.py index 505b7173..3a0c9181 100644 --- a/gui/src/aaregui/scan_logic/raster_grid_manager.py +++ b/gui/src/aaregui/scan_logic/raster_grid_manager.py @@ -211,10 +211,7 @@ class RasterGridManager(QObject): painter.setBrush(Qt.BrushStyle.NoBrush) else: painter.setBrush(QBrush(float_to_viridis_brush((values[pxl] - min_value) / (max_value - min_value), alpha=127))) - c = self.__geom.sample_to_picture( - c0 + Coordinate(x=x * grid.grid_size_mm.x, - y=y * grid.grid_size_mm.y) - ) + c = self.__geom.sample_to_picture(c0 + Coordinate(x=x * grid.grid_size_mm.x, y=y * grid.grid_size_mm.y)) painter.drawRect(QRect(int(c.x), int(c.y), int(g.x), int(g.y))) painter.setBrush(Qt.BrushStyle.NoBrush)