diff --git a/src/aare/gui/main_window.py b/src/aare/gui/main_window.py index 0a889d58..f8405460 100644 --- a/src/aare/gui/main_window.py +++ b/src/aare/gui/main_window.py @@ -85,9 +85,9 @@ from aare.gui.widgets.baton_request_dialog import BatonPendingDialog, BatonReque from aare.gui.widgets.busy_overlay import build_busy_overlay_style from aare.gui.widgets.camera_image import SampleCameraImageLabel from aare.gui.widgets.message_box import precondition_check -from aare.gui.widgets.title_label import tighten_column from aare.gui.widgets.no_wheel_scroll_area import NoWheelScrollArea from aare.gui.widgets.status_bar import StatusBar +from aare.gui.widgets.title_label import tighten_column from aare.gui.widgets.video_image import VideoGraphicsView logger = setup_logger(LOGGER_NAME) @@ -543,11 +543,7 @@ class MainWindow(QMainWindow): def _only_current_page_counts(index: int) -> None: for i in range(self.content_stack.count()): page = self.content_stack.widget(i) - policy = ( - QSizePolicy.Policy.Preferred - if i == index - else QSizePolicy.Policy.Ignored - ) + policy = QSizePolicy.Policy.Preferred if i == index else QSizePolicy.Policy.Ignored page.setSizePolicy(policy, policy) self.content_stack.currentChanged.connect(_only_current_page_counts) diff --git a/src/aare/gui/panels/beam_center_panel.py b/src/aare/gui/panels/beam_center_panel.py index 2f5d273b..4140bc9f 100644 --- a/src/aare/gui/panels/beam_center_panel.py +++ b/src/aare/gui/panels/beam_center_panel.py @@ -14,7 +14,9 @@ class BeamCenterWidget(QWidget): grid_layout = QGridLayout(self) - grid_layout.addWidget(TitleLabel("Beam center (detector)", self, collapsible=True), 0, 0, 1, 5) + grid_layout.addWidget( + TitleLabel("Beam center (detector)", self, collapsible=True), 0, 0, 1, 5 + ) self.x = NumberLineEdit(-4000, 4000, 0, parent=self) self.x.newValue.connect(self.beam_center_edited) diff --git a/src/aare/gui/panels/beamline_state_panel.py b/src/aare/gui/panels/beamline_state_panel.py index f9add765..e38b6b93 100644 --- a/src/aare/gui/panels/beamline_state_panel.py +++ b/src/aare/gui/panels/beamline_state_panel.py @@ -2,7 +2,7 @@ from collections import deque from dataclasses import dataclass from aarecommon.models.models import BeamlineStateEnum, DAQStatusModel -from PySide6.QtCore import QPoint, QRect, Qt, Signal, Slot +from PySide6.QtCore import QEvent, QObject, QPoint, QRect, Qt, Signal, Slot from PySide6.QtGui import QColor, QPainter, QPen from PySide6.QtWidgets import QFrame, QLabel, QPushButton @@ -219,17 +219,16 @@ class BeamlineStatePanel(QFrame): self.title.setAlignment(Qt.AlignmentFlag.AlignCenter) self.title.setFixedHeight(self.title_height) self.title.setGeometry(0, PANEL_VMARGIN, self.set_width, self.title_height) - # Whole banner toggles, like TitleLabel; the +/− glyph is the indicator. + # Whole banner toggles via eventFilter, like TitleLabel; the +/- glyph + # is only the indicator. self.title.setCursor(Qt.CursorShape.PointingHandCursor) - self.title.mousePressEvent = lambda _event: self.toggle_collapsed() + self.title.installEventFilter(self) self.toggle_button = QPushButton("−", self) self.toggle_button.setObjectName("beamlineStateToggleButton") self.toggle_button.setToolTip("Minimise beamline state panel") self.toggle_button.setFixedSize(21, 21) - self.toggle_button.move( - self.set_width - 29, PANEL_VMARGIN + (self.title_height - 21) // 2 - ) + self.toggle_button.move(self.set_width - 29, PANEL_VMARGIN + (self.title_height - 21) // 2) self.toggle_button.clicked.connect(self.toggle_collapsed) self.current_label = QLabel("Current: —", self) @@ -355,6 +354,12 @@ class BeamlineStatePanel(QFrame): self._apply_station_highlight() + def eventFilter(self, watched: QObject, event: QEvent) -> bool: + if watched is self.title and event.type() == QEvent.Type.MouseButtonPress: + self.toggle_collapsed() + return True + return super().eventFilter(watched, event) + def toggle_collapsed(self) -> None: self._is_collapsed = not self._is_collapsed self._update_collapsed_state() diff --git a/src/aare/gui/panels/data_collection_settings.py b/src/aare/gui/panels/data_collection_settings.py index 04d7165d..c8cad827 100644 --- a/src/aare/gui/panels/data_collection_settings.py +++ b/src/aare/gui/panels/data_collection_settings.py @@ -5,13 +5,13 @@ from PySide6.QtCore import Signal, Slot from PySide6.QtWidgets import QFrame, QPushButton, QTabWidget, QVBoxLayout, QWidget from aare.gui.panels.file_path_panel import FilePathPanel -from aare.gui.panels.manual_sample_panel import ManualSamplePanel -from aare.gui.widgets.title_label import TitleLabel, tighten_column from aare.gui.panels.fluorescence_data_collection import FluorescenceDataCollectionPanel +from aare.gui.panels.manual_sample_panel import ManualSamplePanel from aare.gui.panels.raster_data_collection import RasterDataCollectionPanel from aare.gui.panels.rotation_data_collection import RotationDataCollectionPanel from aare.gui.panels.smart_rotation_panel import SimpleRotationSettingsPanel from aare.gui.scan_logic.raster_grid_manager import RasterGridManager +from aare.gui.widgets.title_label import TitleLabel, tighten_column class DataCollectionSettings(QFrame): diff --git a/tests/unit/gui/test_title_label.py b/tests/unit/gui/test_title_label.py index cf6d7398..4cad9306 100644 --- a/tests/unit/gui/test_title_label.py +++ b/tests/unit/gui/test_title_label.py @@ -53,7 +53,7 @@ def test_toggle_hides_children_and_persists(qtbot): def test_collapsed_state_restored_on_construction(qtbot): QSettings("PSI", "AareGUI").setValue(KEY, True) try: - panel, title, direct_child, nested_child = _build_panel(qtbot) + _panel, title, direct_child, nested_child = _build_panel(qtbot) # Restore is deferred with a 0 ms timer (siblings don't exist yet at # TitleLabel construction), so let the event loop run once. qtbot.waitUntil(lambda: direct_child.isHidden(), timeout=1000)