diff --git a/artiq/dashboard/moninj.py b/artiq/dashboard/moninj.py index 94fb2d0bf..e916811b5 100644 --- a/artiq/dashboard/moninj.py +++ b/artiq/dashboard/moninj.py @@ -868,11 +868,22 @@ class MoninjTreeWidget(pg.TreeWidget): return False return True - def add_widget(self, widget): + def _find_group(self, group): + for i in range(self.topLevelItemCount()): + item = self.topLevelItem(i) + if item.text(0) == group: + return item + return self.invisibleRootItem() + + def add_widget(self, widget, group=None): item = pg.TreeWidgetItem() item.setFlags(item.flags() & ~QtCore.Qt.ItemFlag.ItemIsDropEnabled) self._widgets[widget.uid] = widget - self.addTopLevelItem(item) + if group is None: + self.addTopLevelItem(item) + else: + group_item = self._find_group(group) + group_item.addChild(item) self.setItemWidget(item, 0, widget) def _remove_item_action(self): @@ -906,13 +917,30 @@ class MoninjTreeWidget(pg.TreeWidget): self.remove_widget(child) def extend(self, d): - pass - - def clear(self): - pass + for item in d: + if isinstance(item, dict): + self.add_group(item["name"]) + for widget in item["widgets"]: + self.add_widget(widget, group=item["name"]) + else: + self.add_widget(item) def export_list(self): - pass + export_list = list() + for i in range(self.topLevelItemCount()): + item = self.topLevelItem(i) + widget = self.itemWidget(item, 0) + if widget is None: + group = dict() + group["name"] = item.text(0) + group["widgets"] = list() + for j in item.childCount(): + child = item.child(j) + widget = self.itemWidget(child, 0) + group["widgets"].append(widget.uid) + export_list.append(group) + else: + export_list.append(widget.uid) class MonInjDock(QtWidgets.QDockWidget):