diff --git a/artiq/dashboard/waveform.py b/artiq/dashboard/waveform.py index ded240f8f..ab7f548e5 100644 --- a/artiq/dashboard/waveform.py +++ b/artiq/dashboard/waveform.py @@ -34,11 +34,21 @@ class Model(DictSyncTreeSepModel): def __init__(self, init): DictSyncTreeSepModel.__init__(self, "/", ["Channels"], init) + def clear(self): + for k in self.backing_store: + self._del_item(self, k.split(self.separator)) + self.backing_store.clear() + + def update_from_dict(self, d): + self.clear() + for k, v in d.items(): + self[k] = v + class _AddChannelDialog(QtWidgets.QDialog): accepted = QtCore.pyqtSignal(list) - def __init__(self, parent, channels_mgr): + def __init__(self, parent, channel_model): QtWidgets.QDialog.__init__(self, parent=parent) self.setContextMenuPolicy(Qt.ActionsContextMenu) self.setWindowTitle("Add channels") @@ -46,14 +56,14 @@ class _AddChannelDialog(QtWidgets.QDialog): grid = QtWidgets.QGridLayout() self.setLayout(grid) - self._channels_mgr = channels_mgr + self._channel_model = channel_model self._channels_widget = QtWidgets.QTreeView() self._channels_widget.setHeaderHidden(True) self._channels_widget.setSelectionBehavior( QtWidgets.QAbstractItemView.SelectItems) self._channels_widget.setSelectionMode( QtWidgets.QAbstractItemView.ExtendedSelection) - self._channels_widget.setModel(self._channels_mgr) + self._channels_widget.setModel(self._channel_model) grid.addWidget(self._channels_widget, 0, 0, 1, 2) cancel_btn = QtWidgets.QPushButton("Cancel") cancel_btn.clicked.connect(self.close) @@ -72,9 +82,9 @@ class _AddChannelDialog(QtWidgets.QDialog): selection = self._channels_widget.selectedIndexes() channels = [] for select in selection: - key = self._channels_mgr.index_to_key(select) + key = self._channel_model.index_to_key(select) if key is not None: - width = self._channels_mgr[key].ref + width = self._channel_model[key].ref channels.append((key, width)) self.accepted.emit(channels) self.close() @@ -388,10 +398,10 @@ class AnalogWaveform(Waveform): class WaveformArea(QtWidgets.QWidget): cursorMoved = QtCore.pyqtSignal(float) - def __init__(self, parent, state, channels_mgr): + def __init__(self, parent, state, channel_model): QtWidgets.QWidget.__init__(self, parent=parent) self._state = state - self._channels_mgr = channels_mgr + self._channel_model = channel_model self._cursor_visible = True self._cursor_x_pos = 0 @@ -458,7 +468,7 @@ class WaveformArea(QtWidgets.QWidget): cw.update_x_max() async def _add_waveform_task(self): - dialog = _AddChannelDialog(self, self._channels_mgr) + dialog = _AddChannelDialog(self, self._channel_model) fut = asyncio.Future() def on_accept(s): @@ -663,7 +673,7 @@ class WaveformDock(QtWidgets.QDockWidget): self.setFeatures( QtWidgets.QDockWidget.DockWidgetMovable | QtWidgets.QDockWidget.DockWidgetFloatable) - self._channels_mgr = Model({}) + self._channel_model = Model({}) self._devices = None self._dump = None @@ -704,7 +714,7 @@ class WaveformDock(QtWidgets.QDockWidget): lambda: asyncio.ensure_future(self.proxy_client.trigger_proxy_task())) self._waveform_area = WaveformArea(self, self._state, - self._channels_mgr) + self._channel_model) self.traceDataChanged.connect(self._waveform_area.on_trace_update) self.traceDataChanged.connect(self._update_log_channels) grid.addWidget(self._waveform_area, 2, 0, colspan=12) @@ -739,7 +749,7 @@ class WaveformDock(QtWidgets.QDockWidget): def _update_log_channels(self): for log in self._state['logs']: - self._channels_mgr[log] = (0, "log") + self._channel_model[log] = (0, "log") def on_dump_receive(self, data): decoded_dump = comm_analyzer.decode_dump(data) @@ -840,8 +850,8 @@ class WaveformDock(QtWidgets.QDockWidget): def _process_ddb(self): addr = None - #for k, v in comm_analyzer.get_channel_list(self._ddb).items(): - # self._channel_model[k] = v + channel_list = comm_analyzer.get_channel_list(self._ddb) + self._channel_model.update_from_dict(channel_list) for name, desc in self._ddb.items(): if name == "core_analyzer": logger.info("coreanalyzer exists")