diff --git a/src/aare/gui/panels/local_contact_panel.py b/src/aare/gui/panels/local_contact_panel.py index 409e76f0..83a79717 100644 --- a/src/aare/gui/panels/local_contact_panel.py +++ b/src/aare/gui/panels/local_contact_panel.py @@ -20,6 +20,7 @@ from PySide6.QtWidgets import ( QLabel, QMessageBox, QPushButton, + QScrollArea, QTabWidget, QTextEdit, QVBoxLayout, @@ -128,13 +129,16 @@ class LocalContactPanel(QFrame): self._tabs = QTabWidget(self) layout.addWidget(self._tabs, 1) - self._tabs.addTab(self._build_status_tab(), self.TAB_STATUS) - self._tabs.addTab(self._build_recovery_tab(), self.TAB_RECOVERY) - self._tabs.addTab(self._build_tell_tab(), self.TAB_TELL) - self._tabs.addTab(self._build_bec_tab(), self.TAB_BEC) - self._tabs.addTab(self._build_hardware_tab(), self.TAB_HARDWARE) - self._tabs.addTab(self._build_detector_tab(), self.TAB_DETECTOR) - self._tabs.addTab(self._build_config_tab(), self.TAB_CONFIG) + # Every tab scrolls: the dialog's explicit minimum size is smaller + # than some tabs' content, and without a scroll area Qt squeezes the + # rows below text height (clipped labels on the Hardware tab). + self._tabs.addTab(self._scrolled(self._build_status_tab()), self.TAB_STATUS) + self._tabs.addTab(self._scrolled(self._build_recovery_tab()), self.TAB_RECOVERY) + self._tabs.addTab(self._scrolled(self._build_tell_tab()), self.TAB_TELL) + self._tabs.addTab(self._scrolled(self._build_bec_tab()), self.TAB_BEC) + self._tabs.addTab(self._scrolled(self._build_hardware_tab()), self.TAB_HARDWARE) + self._tabs.addTab(self._scrolled(self._build_detector_tab()), self.TAB_DETECTOR) + self._tabs.addTab(self._scrolled(self._build_config_tab()), self.TAB_CONFIG) self._daq.local_contact_simulation_state_loaded.connect(self._apply_simulation_state) self._daq.local_contact_device_state_loaded.connect(self._apply_device_state) @@ -174,6 +178,14 @@ class LocalContactPanel(QFrame): ) return self._register_status_widget(widget) + @staticmethod + def _scrolled(widget: QWidget) -> QScrollArea: + area = QScrollArea() + area.setWidgetResizable(True) + area.setFrameShape(QFrame.Shape.NoFrame) + area.setWidget(widget) + return area + def _build_status_tab(self) -> QWidget: tab = QWidget(self) layout = QVBoxLayout(tab)