Skip to content

Commit 3525a8d

Browse files
committed
fix(lmfit_dialog): dialog compact adjustment with splitter logic
1 parent 28e5dfd commit 3525a8d

3 files changed

Lines changed: 86 additions & 11 deletions

File tree

bec_widgets/widgets/dap/lmfit_dialog/lmfit_dialog.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from bec_lib.logger import bec_logger
44
from qtpy.QtCore import Signal
5-
from qtpy.QtWidgets import QPushButton, QTreeWidgetItem, QVBoxLayout, QWidget
5+
from qtpy.QtWidgets import QPushButton, QSplitter, QTreeWidgetItem, QVBoxLayout, QWidget
66

77
from bec_widgets.utils import UILoader
88
from bec_widgets.utils.bec_widget import BECWidget
@@ -68,6 +68,19 @@ def __init__(
6868
self._hide_curve_selection = False
6969
self._hide_summary = False
7070
self._hide_parameters = False
71+
self._configure_layout()
72+
73+
def _configure_layout(self):
74+
"""Apply view-specific splitter defaults."""
75+
outer_splitter = self.ui.findChild(QSplitter, "splitter_2")
76+
if outer_splitter is not None:
77+
outer_splitter.setStretchFactor(0, 0)
78+
outer_splitter.setStretchFactor(1, 1)
79+
80+
inner_splitter = self.ui.findChild(QSplitter, "splitter")
81+
if inner_splitter is not None:
82+
inner_splitter.setStretchFactor(0, 1)
83+
inner_splitter.setStretchFactor(1, 1)
7184

7285
@property
7386
def enable_actions(self) -> bool:
@@ -122,6 +135,12 @@ def hide_curve_selection(self, show: bool):
122135
"""
123136
self._hide_curve_selection = show
124137
self.ui.group_curve_selection.setVisible(not show)
138+
outer_splitter = self.ui.findChild(QSplitter, "splitter_2")
139+
if outer_splitter is not None:
140+
if show:
141+
outer_splitter.setSizes([0, 1])
142+
else:
143+
outer_splitter.setSizes([1, 3])
125144

126145
@SafeProperty(bool)
127146
def hide_summary(self) -> bool:

bec_widgets/widgets/dap/lmfit_dialog/lmfit_dialog_compact.ui

Lines changed: 51 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,18 @@
1414
<string>Form</string>
1515
</property>
1616
<layout class="QGridLayout" name="gridLayout">
17+
<property name="leftMargin">
18+
<number>0</number>
19+
</property>
20+
<property name="topMargin">
21+
<number>0</number>
22+
</property>
23+
<property name="rightMargin">
24+
<number>0</number>
25+
</property>
26+
<property name="bottomMargin">
27+
<number>0</number>
28+
</property>
1729
<item row="0" column="0">
1830
<widget class="QSplitter" name="splitter_2">
1931
<property name="sizePolicy">
@@ -22,15 +34,6 @@
2234
<verstretch>0</verstretch>
2335
</sizepolicy>
2436
</property>
25-
<property name="frameShape">
26-
<enum>QFrame::Shape::VLine</enum>
27-
</property>
28-
<property name="frameShadow">
29-
<enum>QFrame::Shadow::Plain</enum>
30-
</property>
31-
<property name="lineWidth">
32-
<number>1</number>
33-
</property>
3437
<property name="orientation">
3538
<enum>Qt::Orientation::Horizontal</enum>
3639
</property>
@@ -41,6 +44,12 @@
4144
<bool>true</bool>
4245
</property>
4346
<widget class="QGroupBox" name="group_curve_selection">
47+
<property name="minimumSize">
48+
<size>
49+
<width>120</width>
50+
<height>0</height>
51+
</size>
52+
</property>
4453
<property name="title">
4554
<string>Select Curve</string>
4655
</property>
@@ -58,18 +67,30 @@
5867
</sizepolicy>
5968
</property>
6069
<property name="orientation">
61-
<enum>Qt::Orientation::Vertical</enum>
70+
<enum>Qt::Orientation::Horizontal</enum>
6271
</property>
6372
<widget class="QGroupBox" name="group_summary">
73+
<property name="minimumSize">
74+
<size>
75+
<width>180</width>
76+
<height>0</height>
77+
</size>
78+
</property>
6479
<property name="title">
6580
<string>Fit Summary</string>
6681
</property>
6782
<layout class="QVBoxLayout" name="verticalLayout_2">
6883
<item>
6984
<widget class="QTreeWidget" name="summary_tree">
85+
<property name="alternatingRowColors">
86+
<bool>true</bool>
87+
</property>
7088
<property name="uniformRowHeights">
7189
<bool>false</bool>
7290
</property>
91+
<attribute name="headerDefaultSectionSize">
92+
<number>90</number>
93+
</attribute>
7394
<column>
7495
<property name="text">
7596
<string>Property</string>
@@ -85,12 +106,27 @@
85106
</layout>
86107
</widget>
87108
<widget class="QGroupBox" name="group_parameters">
109+
<property name="minimumSize">
110+
<size>
111+
<width>240</width>
112+
<height>0</height>
113+
</size>
114+
</property>
88115
<property name="title">
89116
<string>Parameter Details</string>
90117
</property>
91118
<layout class="QVBoxLayout" name="verticalLayout_3">
92119
<item>
93120
<widget class="QTreeWidget" name="param_tree">
121+
<property name="alternatingRowColors">
122+
<bool>true</bool>
123+
</property>
124+
<property name="columnCount">
125+
<number>4</number>
126+
</property>
127+
<attribute name="headerDefaultSectionSize">
128+
<number>80</number>
129+
</attribute>
94130
<column>
95131
<property name="text">
96132
<string>Parameter</string>
@@ -106,6 +142,11 @@
106142
<string>Std</string>
107143
</property>
108144
</column>
145+
<column>
146+
<property name="text">
147+
<string>Action</string>
148+
</property>
149+
</column>
109150
</widget>
110151
</item>
111152
</layout>

tests/unit_tests/test_lmfit_dialog.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,3 +182,18 @@ def test_update_summary_tree(lmfit_dialog, lmfit_message):
182182
assert lmfit_dialog.ui.param_tree.topLevelItemCount() == 4
183183
assert lmfit_dialog.ui.param_tree.topLevelItem(0).text(0) == "amplitude"
184184
assert lmfit_dialog.ui.param_tree.topLevelItem(0).text(1) == "1.582"
185+
186+
187+
def test_compact_ui_hides_curve_selection_and_keeps_action_column(
188+
qtbot, mocked_client, lmfit_message
189+
):
190+
dialog = create_widget(
191+
qtbot, LMFitDialog, client=mocked_client, ui_file="lmfit_dialog_compact.ui"
192+
)
193+
dialog.hide_curve_selection = True
194+
dialog.active_action_list = ["center"]
195+
dialog.update_summary_tree(data=lmfit_message, metadata={"curve_id": "test_curve_id"})
196+
197+
assert dialog.ui.group_curve_selection.isVisible() is False
198+
assert dialog.ui.param_tree.columnCount() == 4
199+
assert "center" in dialog.action_buttons

0 commit comments

Comments
 (0)