mirror of https://github.com/m-labs/artiq.git
dashboard: add button to disable other scans
This commit is contained in:
parent
490bb6ef2d
commit
60657c30b0
|
@ -8,7 +8,7 @@ from PyQt5 import QtCore, QtGui, QtWidgets
|
||||||
import h5py
|
import h5py
|
||||||
|
|
||||||
from artiq.gui.tools import LayoutWidget, log_level_to_name, get_open_file_name
|
from artiq.gui.tools import LayoutWidget, log_level_to_name, get_open_file_name
|
||||||
from artiq.gui.entries import argty_to_entry
|
from artiq.gui.entries import argty_to_entry, ScanEntry
|
||||||
from artiq.protocols import pyon
|
from artiq.protocols import pyon
|
||||||
|
|
||||||
|
|
||||||
|
@ -78,9 +78,24 @@ class _ArgumentEditor(QtWidgets.QTreeWidget):
|
||||||
QtWidgets.QStyle.SP_BrowserReload))
|
QtWidgets.QStyle.SP_BrowserReload))
|
||||||
recompute_argument.clicked.connect(
|
recompute_argument.clicked.connect(
|
||||||
partial(self._recompute_argument_clicked, name))
|
partial(self._recompute_argument_clicked, name))
|
||||||
fix_layout = LayoutWidget()
|
|
||||||
fix_layout.addWidget(recompute_argument)
|
tool_buttons = LayoutWidget()
|
||||||
self.setItemWidget(widget_item, 2, fix_layout)
|
tool_buttons.addWidget(recompute_argument, 1)
|
||||||
|
|
||||||
|
if isinstance(entry, ScanEntry):
|
||||||
|
disable_other_scans = QtWidgets.QToolButton()
|
||||||
|
disable_other_scans.setIcon(
|
||||||
|
QtWidgets.QApplication.style().standardIcon(
|
||||||
|
QtWidgets.QStyle.SP_DialogResetButton))
|
||||||
|
disable_other_scans.setToolTip("Disable all other scans in "
|
||||||
|
"this experiment")
|
||||||
|
disable_other_scans.clicked.connect(
|
||||||
|
partial(self._disable_other_scans, name))
|
||||||
|
tool_buttons.layout.setRowStretch(0, 1)
|
||||||
|
tool_buttons.layout.setRowStretch(3, 1)
|
||||||
|
tool_buttons.addWidget(disable_other_scans, 2)
|
||||||
|
|
||||||
|
self.setItemWidget(widget_item, 2, tool_buttons)
|
||||||
|
|
||||||
widget_item = QtWidgets.QTreeWidgetItem()
|
widget_item = QtWidgets.QTreeWidgetItem()
|
||||||
self.addTopLevelItem(widget_item)
|
self.addTopLevelItem(widget_item)
|
||||||
|
@ -142,6 +157,11 @@ class _ArgumentEditor(QtWidgets.QTreeWidget):
|
||||||
self._arg_to_entry_widgetitem[name] = entry, widget_item
|
self._arg_to_entry_widgetitem[name] = entry, widget_item
|
||||||
self.setItemWidget(widget_item, 1, entry)
|
self.setItemWidget(widget_item, 1, entry)
|
||||||
|
|
||||||
|
def _disable_other_scans(self, current_name):
|
||||||
|
for name, (entry, _) in self._arg_to_entry_widgetitem.items():
|
||||||
|
if name != current_name and isinstance(entry, ScanEntry):
|
||||||
|
entry.disable()
|
||||||
|
|
||||||
def save_state(self):
|
def save_state(self):
|
||||||
expanded = []
|
expanded = []
|
||||||
for k, v in self._groups.items():
|
for k, v in self._groups.items():
|
||||||
|
|
|
@ -44,7 +44,7 @@ class ShortcutsDock(QtWidgets.QDockWidget):
|
||||||
|
|
||||||
clear = QtWidgets.QToolButton()
|
clear = QtWidgets.QToolButton()
|
||||||
clear.setIcon(QtWidgets.QApplication.style().standardIcon(
|
clear.setIcon(QtWidgets.QApplication.style().standardIcon(
|
||||||
QtWidgets.QStyle.SP_DialogResetButton))
|
QtWidgets.QStyle.SP_DialogDiscardButton))
|
||||||
layout.addWidget(clear, row, 2)
|
layout.addWidget(clear, row, 2)
|
||||||
clear.clicked.connect(partial(self.set_shortcut, i, ""))
|
clear.clicked.connect(partial(self.set_shortcut, i, ""))
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@ from artiq.gui.scientific_spinbox import ScientificSpinBox
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class _StringEntry(QtWidgets.QLineEdit):
|
class StringEntry(QtWidgets.QLineEdit):
|
||||||
def __init__(self, argument):
|
def __init__(self, argument):
|
||||||
QtWidgets.QLineEdit.__init__(self)
|
QtWidgets.QLineEdit.__init__(self)
|
||||||
self.setText(argument["state"])
|
self.setText(argument["state"])
|
||||||
|
@ -28,7 +28,7 @@ class _StringEntry(QtWidgets.QLineEdit):
|
||||||
return procdesc.get("default", "")
|
return procdesc.get("default", "")
|
||||||
|
|
||||||
|
|
||||||
class _BooleanEntry(QtWidgets.QCheckBox):
|
class BooleanEntry(QtWidgets.QCheckBox):
|
||||||
def __init__(self, argument):
|
def __init__(self, argument):
|
||||||
QtWidgets.QCheckBox.__init__(self)
|
QtWidgets.QCheckBox.__init__(self)
|
||||||
self.setChecked(argument["state"])
|
self.setChecked(argument["state"])
|
||||||
|
@ -45,7 +45,7 @@ class _BooleanEntry(QtWidgets.QCheckBox):
|
||||||
return procdesc.get("default", False)
|
return procdesc.get("default", False)
|
||||||
|
|
||||||
|
|
||||||
class _EnumerationEntry(QtWidgets.QComboBox):
|
class EnumerationEntry(QtWidgets.QComboBox):
|
||||||
def __init__(self, argument):
|
def __init__(self, argument):
|
||||||
QtWidgets.QComboBox.__init__(self)
|
QtWidgets.QComboBox.__init__(self)
|
||||||
disable_scroll_wheel(self)
|
disable_scroll_wheel(self)
|
||||||
|
@ -69,7 +69,7 @@ class _EnumerationEntry(QtWidgets.QComboBox):
|
||||||
return procdesc["choices"][0]
|
return procdesc["choices"][0]
|
||||||
|
|
||||||
|
|
||||||
class _NumberEntry(QtWidgets.QDoubleSpinBox):
|
class NumberEntry(QtWidgets.QDoubleSpinBox):
|
||||||
def __init__(self, argument):
|
def __init__(self, argument):
|
||||||
QtWidgets.QDoubleSpinBox.__init__(self)
|
QtWidgets.QDoubleSpinBox.__init__(self)
|
||||||
disable_scroll_wheel(self)
|
disable_scroll_wheel(self)
|
||||||
|
@ -224,7 +224,7 @@ class _ExplicitScan(LayoutWidget):
|
||||||
self.value.textEdited.connect(update)
|
self.value.textEdited.connect(update)
|
||||||
|
|
||||||
|
|
||||||
class _ScanEntry(LayoutWidget):
|
class ScanEntry(LayoutWidget):
|
||||||
def __init__(self, argument):
|
def __init__(self, argument):
|
||||||
LayoutWidget.__init__(self)
|
LayoutWidget.__init__(self)
|
||||||
self.argument = argument
|
self.argument = argument
|
||||||
|
@ -256,6 +256,9 @@ class _ScanEntry(LayoutWidget):
|
||||||
selected = argument["state"]["selected"]
|
selected = argument["state"]["selected"]
|
||||||
self.radiobuttons[selected].setChecked(True)
|
self.radiobuttons[selected].setChecked(True)
|
||||||
|
|
||||||
|
def disable(self):
|
||||||
|
self.radiobuttons["NoScan"].setChecked(True)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def state_to_value(state):
|
def state_to_value(state):
|
||||||
selected = state["selected"]
|
selected = state["selected"]
|
||||||
|
@ -301,10 +304,10 @@ class _ScanEntry(LayoutWidget):
|
||||||
|
|
||||||
|
|
||||||
argty_to_entry = {
|
argty_to_entry = {
|
||||||
"PYONValue": _StringEntry,
|
"PYONValue": StringEntry,
|
||||||
"BooleanValue": _BooleanEntry,
|
"BooleanValue": BooleanEntry,
|
||||||
"EnumerationValue": _EnumerationEntry,
|
"EnumerationValue": EnumerationEntry,
|
||||||
"NumberValue": _NumberEntry,
|
"NumberValue": NumberEntry,
|
||||||
"StringValue": _StringEntry,
|
"StringValue": StringEntry,
|
||||||
"Scannable": _ScanEntry
|
"Scannable": ScanEntry
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue