GUI: Bottom panels are dockable, can be also turned off
Build and Publish / build (push) Successful in 21s

This commit is contained in:
2025-06-13 12:06:19 +02:00
parent ab0b865066
commit 0af913db13
2 changed files with 48 additions and 23 deletions
+47 -19
View File
@@ -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'
@@ -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)