forked from M-Labs/artiq
gui: fix layout and scan disable bugs with argument recomputation
This commit is contained in:
parent
ef2195fe68
commit
dbc08bde8a
|
@ -48,7 +48,7 @@ class _ArgumentEditor(QtWidgets.QTreeWidget):
|
||||||
self.viewport().installEventFilter(_WheelFilter(self.viewport()))
|
self.viewport().installEventFilter(_WheelFilter(self.viewport()))
|
||||||
|
|
||||||
self._groups = dict()
|
self._groups = dict()
|
||||||
self._arg_to_entry_widgetitem = dict()
|
self._arg_to_widgets = dict()
|
||||||
self._dock = dock
|
self._dock = dock
|
||||||
|
|
||||||
if not self._dock.arguments:
|
if not self._dock.arguments:
|
||||||
|
@ -59,12 +59,13 @@ class _ArgumentEditor(QtWidgets.QTreeWidget):
|
||||||
gradient.setColorAt(1, self.palette().midlight().color())
|
gradient.setColorAt(1, self.palette().midlight().color())
|
||||||
|
|
||||||
for name, argument in self._dock.arguments.items():
|
for name, argument in self._dock.arguments.items():
|
||||||
try:
|
widgets = dict()
|
||||||
entry = argty_to_entry[argument["desc"]["ty"]](argument)
|
self._arg_to_widgets[name] = widgets
|
||||||
except:
|
|
||||||
print(name, argument)
|
entry = argty_to_entry[argument["desc"]["ty"]](argument)
|
||||||
widget_item = QtWidgets.QTreeWidgetItem([name])
|
widget_item = QtWidgets.QTreeWidgetItem([name])
|
||||||
self._arg_to_entry_widgetitem[name] = entry, widget_item
|
widgets["entry"] = entry
|
||||||
|
widgets["widget_item"] = widget_item
|
||||||
|
|
||||||
for col in range(3):
|
for col in range(3):
|
||||||
widget_item.setBackground(col, gradient)
|
widget_item.setBackground(col, gradient)
|
||||||
|
@ -77,6 +78,7 @@ class _ArgumentEditor(QtWidgets.QTreeWidget):
|
||||||
else:
|
else:
|
||||||
self._get_group(argument["group"]).addChild(widget_item)
|
self._get_group(argument["group"]).addChild(widget_item)
|
||||||
fix_layout = LayoutWidget()
|
fix_layout = LayoutWidget()
|
||||||
|
widgets["fix_layout"] = fix_layout
|
||||||
fix_layout.addWidget(entry)
|
fix_layout.addWidget(entry)
|
||||||
self.setItemWidget(widget_item, 1, fix_layout)
|
self.setItemWidget(widget_item, 1, fix_layout)
|
||||||
|
|
||||||
|
@ -150,12 +152,14 @@ class _ArgumentEditor(QtWidgets.QTreeWidget):
|
||||||
argument["desc"] = procdesc
|
argument["desc"] = procdesc
|
||||||
argument["state"] = state
|
argument["state"] = state
|
||||||
|
|
||||||
old_entry, widget_item = self._arg_to_entry_widgetitem[name]
|
widgets = self._arg_to_widgets[name]
|
||||||
old_entry.deleteLater()
|
|
||||||
|
|
||||||
entry = argty_to_entry[procdesc["ty"]](argument)
|
widgets["entry"].deleteLater()
|
||||||
self._arg_to_entry_widgetitem[name] = entry, widget_item
|
widgets["entry"] = argty_to_entry[procdesc["ty"]](argument)
|
||||||
self.setItemWidget(widget_item, 1, entry)
|
widgets["fix_layout"] = LayoutWidget()
|
||||||
|
widgets["fix_layout"].addWidget(widgets["entry"])
|
||||||
|
self.setItemWidget(widgets["widget_item"], 1, widgets["fix_layout"])
|
||||||
|
self.updateGeometries()
|
||||||
|
|
||||||
def save_state(self):
|
def save_state(self):
|
||||||
expanded = []
|
expanded = []
|
||||||
|
|
|
@ -56,7 +56,7 @@ class _ArgumentEditor(QtWidgets.QTreeWidget):
|
||||||
self.viewport().installEventFilter(_WheelFilter(self.viewport()))
|
self.viewport().installEventFilter(_WheelFilter(self.viewport()))
|
||||||
|
|
||||||
self._groups = dict()
|
self._groups = dict()
|
||||||
self._arg_to_entry_widgetitem = dict()
|
self._arg_to_widgets = dict()
|
||||||
|
|
||||||
arguments = self.manager.get_submission_arguments(self.expurl)
|
arguments = self.manager.get_submission_arguments(self.expurl)
|
||||||
|
|
||||||
|
@ -68,9 +68,13 @@ class _ArgumentEditor(QtWidgets.QTreeWidget):
|
||||||
gradient.setColorAt(0, self.palette().base().color())
|
gradient.setColorAt(0, self.palette().base().color())
|
||||||
gradient.setColorAt(1, self.palette().midlight().color())
|
gradient.setColorAt(1, self.palette().midlight().color())
|
||||||
for name, argument in arguments.items():
|
for name, argument in arguments.items():
|
||||||
|
widgets = dict()
|
||||||
|
self._arg_to_widgets[name] = widgets
|
||||||
|
|
||||||
entry = argty_to_entry[argument["desc"]["ty"]](argument)
|
entry = argty_to_entry[argument["desc"]["ty"]](argument)
|
||||||
widget_item = QtWidgets.QTreeWidgetItem([name])
|
widget_item = QtWidgets.QTreeWidgetItem([name])
|
||||||
self._arg_to_entry_widgetitem[name] = entry, widget_item
|
widgets["entry"] = entry
|
||||||
|
widgets["widget_item"] = widget_item
|
||||||
|
|
||||||
for col in range(3):
|
for col in range(3):
|
||||||
widget_item.setBackground(col, gradient)
|
widget_item.setBackground(col, gradient)
|
||||||
|
@ -83,6 +87,7 @@ class _ArgumentEditor(QtWidgets.QTreeWidget):
|
||||||
else:
|
else:
|
||||||
self._get_group(argument["group"]).addChild(widget_item)
|
self._get_group(argument["group"]).addChild(widget_item)
|
||||||
fix_layout = LayoutWidget()
|
fix_layout = LayoutWidget()
|
||||||
|
widgets["fix_layout"] = fix_layout
|
||||||
fix_layout.addWidget(entry)
|
fix_layout.addWidget(entry)
|
||||||
self.setItemWidget(widget_item, 1, fix_layout)
|
self.setItemWidget(widget_item, 1, fix_layout)
|
||||||
recompute_argument = QtWidgets.QToolButton()
|
recompute_argument = QtWidgets.QToolButton()
|
||||||
|
@ -97,18 +102,20 @@ class _ArgumentEditor(QtWidgets.QTreeWidget):
|
||||||
tool_buttons = LayoutWidget()
|
tool_buttons = LayoutWidget()
|
||||||
tool_buttons.addWidget(recompute_argument, 1)
|
tool_buttons.addWidget(recompute_argument, 1)
|
||||||
|
|
||||||
if isinstance(entry, ScanEntry):
|
disable_other_scans = QtWidgets.QToolButton()
|
||||||
disable_other_scans = QtWidgets.QToolButton()
|
widgets["disable_other_scans"] = disable_other_scans
|
||||||
disable_other_scans.setIcon(
|
disable_other_scans.setIcon(
|
||||||
QtWidgets.QApplication.style().standardIcon(
|
QtWidgets.QApplication.style().standardIcon(
|
||||||
QtWidgets.QStyle.SP_DialogResetButton))
|
QtWidgets.QStyle.SP_DialogResetButton))
|
||||||
disable_other_scans.setToolTip("Disable all other scans in "
|
disable_other_scans.setToolTip("Disable all other scans in "
|
||||||
"this experiment")
|
"this experiment")
|
||||||
disable_other_scans.clicked.connect(
|
disable_other_scans.clicked.connect(
|
||||||
partial(self._disable_other_scans, name))
|
partial(self._disable_other_scans, name))
|
||||||
tool_buttons.layout.setRowStretch(0, 1)
|
tool_buttons.layout.setRowStretch(0, 1)
|
||||||
tool_buttons.layout.setRowStretch(3, 1)
|
tool_buttons.layout.setRowStretch(3, 1)
|
||||||
tool_buttons.addWidget(disable_other_scans, 2)
|
tool_buttons.addWidget(disable_other_scans, 2)
|
||||||
|
if not isinstance(entry, ScanEntry):
|
||||||
|
disable_other_scans.setVisible(False)
|
||||||
|
|
||||||
self.setItemWidget(widget_item, 2, tool_buttons)
|
self.setItemWidget(widget_item, 2, tool_buttons)
|
||||||
|
|
||||||
|
@ -165,16 +172,26 @@ class _ArgumentEditor(QtWidgets.QTreeWidget):
|
||||||
argument["desc"] = procdesc
|
argument["desc"] = procdesc
|
||||||
argument["state"] = state
|
argument["state"] = state
|
||||||
|
|
||||||
old_entry, widget_item = self._arg_to_entry_widgetitem[name]
|
# Qt needs a setItemWidget() to handle layout correctly,
|
||||||
old_entry.deleteLater()
|
# simply replacing the entry inside the LayoutWidget
|
||||||
|
# results in a bug.
|
||||||
|
|
||||||
entry = argty_to_entry[procdesc["ty"]](argument)
|
widgets = self._arg_to_widgets[name]
|
||||||
self._arg_to_entry_widgetitem[name] = entry, widget_item
|
|
||||||
self.setItemWidget(widget_item, 1, entry)
|
widgets["entry"].deleteLater()
|
||||||
|
widgets["entry"] = argty_to_entry[procdesc["ty"]](argument)
|
||||||
|
widgets["disable_other_scans"].setVisible(
|
||||||
|
isinstance(widgets["entry"], ScanEntry))
|
||||||
|
widgets["fix_layout"].deleteLater()
|
||||||
|
widgets["fix_layout"] = LayoutWidget()
|
||||||
|
widgets["fix_layout"].addWidget(widgets["entry"])
|
||||||
|
self.setItemWidget(widgets["widget_item"], 1, widgets["fix_layout"])
|
||||||
|
self.updateGeometries()
|
||||||
|
|
||||||
def _disable_other_scans(self, current_name):
|
def _disable_other_scans(self, current_name):
|
||||||
for name, (entry, _) in self._arg_to_entry_widgetitem.items():
|
for name, widgets in self._arg_to_widgets.items():
|
||||||
if name != current_name and isinstance(entry, ScanEntry):
|
if (name != current_name
|
||||||
|
and isinstance(widgets["entry"], ScanEntry)):
|
||||||
entry.disable()
|
entry.disable()
|
||||||
|
|
||||||
def save_state(self):
|
def save_state(self):
|
||||||
|
|
Loading…
Reference in New Issue