diff --git a/src/aare/gui/panels/beam_center_panel.py b/src/aare/gui/panels/beam_center_panel.py index 4140bc9f..45236fbb 100644 --- a/src/aare/gui/panels/beam_center_panel.py +++ b/src/aare/gui/panels/beam_center_panel.py @@ -3,7 +3,7 @@ from PySide6.QtCore import Signal, Slot from PySide6.QtWidgets import QGridLayout, QLabel, QWidget from aare.gui.widgets.number_line_edit import NumberLineEdit -from aare.gui.widgets.title_label import TitleLabel +from aare.gui.widgets.title_label import section_title class BeamCenterWidget(QWidget): @@ -14,9 +14,7 @@ class BeamCenterWidget(QWidget): grid_layout = QGridLayout(self) - grid_layout.addWidget( - TitleLabel("Beam center (detector)", self, collapsible=True), 0, 0, 1, 5 - ) + grid_layout.addWidget(section_title("Beam center (detector)", self), 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/beam_mark_panel.py b/src/aare/gui/panels/beam_mark_panel.py index 2842f70e..3a74895a 100644 --- a/src/aare/gui/panels/beam_mark_panel.py +++ b/src/aare/gui/panels/beam_mark_panel.py @@ -2,7 +2,7 @@ from aarecommon.models.models import DAQStatusModel from PySide6.QtCore import Signal, Slot from PySide6.QtWidgets import QGridLayout, QLabel, QPushButton, QWidget -from aare.gui.widgets.title_label import TitleLabel +from aare.gui.widgets.title_label import section_title class BeamMarkWidget(QWidget): @@ -13,7 +13,7 @@ class BeamMarkWidget(QWidget): grid_layout = QGridLayout(self) - grid_layout.addWidget(TitleLabel("Beam mark (image)", self, collapsible=True), 0, 0, 1, 5) + grid_layout.addWidget(section_title("Beam mark (image)", self), 0, 0, 1, 5) self.x = QLabel("0") self.y = QLabel("0") diff --git a/src/aare/gui/panels/beam_size_panel.py b/src/aare/gui/panels/beam_size_panel.py index 56fb765f..83aa4afd 100644 --- a/src/aare/gui/panels/beam_size_panel.py +++ b/src/aare/gui/panels/beam_size_panel.py @@ -3,7 +3,7 @@ from PySide6.QtCore import Signal, Slot from PySide6.QtWidgets import QGridLayout, QLabel, QWidget from aare.gui.widgets.number_line_edit import NumberLineEdit -from aare.gui.widgets.title_label import TitleLabel +from aare.gui.widgets.title_label import section_title class BeamSizeWidget(QWidget): @@ -14,7 +14,7 @@ class BeamSizeWidget(QWidget): grid_layout = QGridLayout(self) - grid_layout.addWidget(TitleLabel("Beam size", self, collapsible=True), 0, 0, 1, 5) + grid_layout.addWidget(section_title("Beam size", self), 0, 0, 1, 5) self.x = NumberLineEdit(1, 400.0, 10, parent=self) self.x.newValue.connect(self.beam_size_edited) diff --git a/src/aare/gui/panels/beamline_controls.py b/src/aare/gui/panels/beamline_controls.py index 771c9845..f98070de 100644 --- a/src/aare/gui/panels/beamline_controls.py +++ b/src/aare/gui/panels/beamline_controls.py @@ -1,4 +1,4 @@ -from PySide6.QtWidgets import QFrame, QVBoxLayout +from PySide6.QtWidgets import QFrame, QVBoxLayout, QWidget from aare.gui.panels.abr_tweak_panel import AbrTweakWidget from aare.gui.panels.beam_center_panel import BeamCenterWidget @@ -10,7 +10,30 @@ from aare.gui.panels.omega_panel import OmegaPanel from aare.gui.panels.samcam_panel import SamcamPanel from aare.gui.panels.smargon_panel import SmargonPanel from aare.gui.panels.zoom_panel import ZoomPanel -from aare.gui.widgets.title_label import tighten_column +from aare.gui.widgets.title_label import TitleLabel, tighten_column + + +class BeamConfigPanel(QWidget): + """Beam mark / center / size grouped under one collapsible banner; the + sub-widgets keep their own signals and small section titles.""" + + def __init__(self, parent=None): + super().__init__(parent) + # Default layout margins so the banner aligns with the sibling + # panels' banners in the column. + layout = QVBoxLayout(self) + layout.setSpacing(0) + layout.addWidget(TitleLabel("Beam Config.", self, collapsible=True)) + self.beam_mark = BeamMarkWidget(self) + self.beam_center = BeamCenterWidget(self) + self.beam_size = BeamSizeWidget(self) + for sub in (self.beam_mark, self.beam_center, self.beam_size): + sub_layout = sub.layout() + assert sub_layout is not None # each sub-widget builds its grid in __init__ + # The outer layout already indents; zero the sub-grids' side + # margins so section content isn't double-inset. + sub_layout.setContentsMargins(0, 4, 0, 4) + layout.addWidget(sub) class BeamlineControls(QFrame): @@ -42,15 +65,15 @@ class BeamlineControls(QFrame): if staff: self.monochromator_panel = MonochromatorPanel(self) self.abr_tweak = AbrTweakWidget(self) - self.beam_mark = BeamMarkWidget(self) - self.beam_center = BeamCenterWidget(self) - self.beam_size = BeamSizeWidget(self) + self.beam_config = BeamConfigPanel(self) + # Aliases: main_window wires signals via beamline.beam_mark etc. + self.beam_mark = self.beam_config.beam_mark + self.beam_center = self.beam_config.beam_center + self.beam_size = self.beam_config.beam_size self.v_layout.addWidget(self.monochromator_panel) self.v_layout.addWidget(self.abr_tweak) - self.v_layout.addWidget(self.beam_mark) - self.v_layout.addWidget(self.beam_center) - self.v_layout.addWidget(self.beam_size) + self.v_layout.addWidget(self.beam_config) self.v_layout.addStretch() tighten_column(self.v_layout)