feat: group beam mark/center/size under one Beam Config banner
The three small beam panels shared a column with three collapsible banners; BeamConfigPanel puts them under a single collapsible 'Beam Config.' TitleLabel with section_title() sub-headings. beam_mark/beam_center/beam_size stay as aliases on BeamlineControls so main_window signal wiring is untouched. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user