diff --git a/artiq/dashboard/moninj.py b/artiq/dashboard/moninj.py index db8bb78b7..b8e67129f 100644 --- a/artiq/dashboard/moninj.py +++ b/artiq/dashboard/moninj.py @@ -819,6 +819,48 @@ class _DeviceManager: await self.mi_connection.close() +class MoninjTree(QtWidgets.QTreeWidget): + def __init__(self): + QtWidgets.QTreeWidget.__init__(self) + self.setDragDropMode(QtWidgets.QAbstractItemView.InternalMove) + self._groups = dict() + self._widgets = dict() + + def add_widget(self, widget, group=None): + item = QtWidgets.QTreeWidgetItem([widget.to_model_path()]) + self.setItemWidget(item, widget) + self._widgets[widget.to_model_path()] = widget + if group is not None: + self._get_group(group).addChild(item) + else: + self.addTopLevelItem(item) + + def remove_widget(self, item): + widget = self.itemWidget(child, 0) + self.removeItemWidget(child, 0) + del self._widgets[widget.to_model_path()] + widget.deleteLater() + + def add_group(self, group=None): + if group in self._groups: + raise SyntaxError("group name repeated") + group_item = QtWidgets.QTreeWidgetItem([group]) + self.addTopLevelItem(group_item) + self._groups[group] = group_item + return group_item + + def remove_group(self, group): + group_item = self._groups[group] + child_items = group_item.takeChildren() + for child in child_items: + self.remove_widget(child) + self.takeTopLevelItem(self.indexOfTopLevelItem(group_item)) + del self._groups[group] + + def _get_group(self, group): + return self._groups[group] + + class MonInjDock(QtWidgets.QDockWidget): def __init__(self, schedule_ctl): QtWidgets.QDockWidget.__init__(self, "MonInj")