waveform: working new without cursor

This commit is contained in:
Simon Renblad 2024-01-23 13:37:39 +08:00
parent ea0cbefa67
commit 53cbd62aa0
2 changed files with 25 additions and 30 deletions

View File

@ -114,7 +114,7 @@ class _AddChannelDialog(QtWidgets.QDialog):
key = self._channel_model.index_to_key(select)
if key is not None:
width, ty = self._channel_model[key].ref
channels.append((key, ty, width, []))
channels.append([key, ty, width, []])
self.accepted.emit(channels)
self.close()
@ -153,10 +153,6 @@ class Waveform(pg.PlotWidget):
self.name = name
self.width = width
#self.state = state
#self.x_data = []
#self.y_data = []
self.plot_item = self.getPlotItem()
self.plot_item.hideButtons()
self.plot_item.getAxis("bottom").setStyle(showValues=False, tickLength=0)
@ -275,7 +271,7 @@ class LogWaveform(Waveform):
self.addItem(lbl)
lbl.setPos(old_x, DISPLAY_HIGH)
except:
logger.debug('Error caught when displaying waveform: {}'.format(self.name), exc_info=True)
logger.error('Error caught when displaying waveform: {}'.format(self.name), exc_info=True)
self.plot_data_item.setData(x=[], y=[])
def format_cursor_label(self):
@ -289,8 +285,6 @@ class BitWaveform(Waveform):
#self.plot_data_item.setDownsampling(ds=1000, method="peak", auto=False)
def onDataChange(self, data):
logger.info("bit waveform ondatachanged triggered")
logger.info(str(len(data)))
try:
display_y = []
display_x = []
@ -312,7 +306,7 @@ class BitWaveform(Waveform):
previous_y = y
self.plot_data_item.setData(x=display_x, y=display_y)
except:
logger.debug('Error caught when displaying waveform: {}'.format(self.name), exc_info=True)
logger.error('Error caught when displaying waveform: {}'.format(self.name), exc_info=True)
for arw in self._arrows:
self.removeItem(arw)
self.plot_data_item.setData(x=[], y=[])
@ -364,7 +358,7 @@ class BitVectorWaveform(Waveform):
self._labels.append(lbl)
self.plot_data_item.setData(x=display_x, y=display_y)
except:
logger.debug('Error caught when displaying waveform: {}'.format(self.name), exc_info=True)
logger.error('Error caught when displaying waveform: {}'.format(self.name), exc_info=True)
for lbl in self._labels:
self.plot_item.removeItem(lbl)
self.plot_data_item.setData(x=[], y=[])
@ -393,7 +387,7 @@ class AnalogWaveform(Waveform):
min_y = min(y_data)
self.plot_item.setRange(yRange=(min_y, max_y), padding=0.1)
except:
logger.debug('Error caught when displaying waveform: {}'.format(self.name), exc_info=True)
logger.error('Error caught when displaying waveform: {}'.format(self.name), exc_info=True)
self.plot_data_item.setData(x=[], y=[])
# TODO: can also just leave it as None -> simpler
@ -447,12 +441,11 @@ class _WaveformView(QtWidgets.QWidget):
self._model.rowsInserted.connect(self.onInsert)
self._model.rowsRemoved.connect(self.onRemove)
self._model.rowsMoved.connect(self.onMove)
self._splitter.dropped.connect(self._model.move)
def onDataChange(self, top, bottom, roles):
first = top.row()
logger.info(str(first))
last = bottom.row()
logger.info(str(last))
for i in range(first, last + 1):
data = self._model.data(self._model.index(i, 3))
self._splitter.widget(i).onDataChange(data)
@ -523,19 +516,24 @@ class _WaveformModel(QtCore.QAbstractTableModel):
self.endRemoveRows()
def move(self, src, dest):
if src == dest:
return
if dest == src + 1:
dest, src = src, dest
self.beginMoveRows(QtCore.QModelIndex(), src, src, QtCore.QModelIndex(), dest)
self.backing_struct.insert(dest, self.backing_struct.pop(src))
self.endMoveRows()
def get_channels(self):
return [row[0] for row in self.backing_struct]
def update_data(self, waveform_data):
for i in range(self.rowCount()):
logger.info(str(i))
name = self.data(self.index(i, 0))
if name in waveform_data:
logger.info(name)
self.backing_struct[i] = waveform_data[name]
self.dataChanged.emit(self.index(0, 0),
self.index(self.rowCount()-1, self.columnCount()-1))
self.backing_struct[i][3] = waveform_data[name]
self.dataChanged.emit(self.index(0, 0),
self.index(self.rowCount()-1, self.columnCount()-1))
class WaveformArea(QtWidgets.QWidget):
@ -913,10 +911,8 @@ class WaveformDock(QtWidgets.QDockWidget):
with open(filename, 'w') as f:
decoded_dump = comm_analyzer.decode_dump(dump)
comm_analyzer.decoded_dump_to_vcd(f, ddb, decoded_dump)
except Exception as e:
logger.error("Failed to save as VCD: %s", e)
finally:
logger.info("Finished writing to VCD.")
except:
logger.error("Failed to save as VCD.", exc_info=True)
async def load_channels(self):
try:
@ -958,19 +954,16 @@ class WaveformDock(QtWidgets.QDockWidget):
self._channel_model.update(channel_list)
desc = self._ddb.get("core_analyzer")
if desc is not None:
logger.info("desc found")
addr = desc["host"]
port = desc.get("port_proxy", 1385)
port_control = desc.get("port_proxy_control", 1386)
self.rpc_client.update_address(addr, port_control)
self.receiver_client.update_address(addr, port)
port = desc.get("port", 1386)
port_proxy = desc.get("port_proxy", 1385)
self.rpc_client.update_address(addr, port)
self.receiver_client.update_address(addr, port_proxy)
def init_ddb(self, ddb):
logger.info("init ddb")
self._ddb = ddb
self._process_ddb()
return ddb
def update_ddb(self, mod):
logger.info("update ddb")
self._process_ddb()

View File

@ -2,6 +2,8 @@ from PyQt5 import QtCore, QtWidgets
class VDragDropSplitter(QtWidgets.QSplitter):
dropped = QtCore.pyqtSignal(int, int)
def __init__(self, parent):
QtWidgets.QSplitter.__init__(self, parent=parent)
self.setAcceptDrops(True)
@ -50,7 +52,7 @@ class VDragDropSplitter(QtWidgets.QSplitter):
for n in range(self.count()):
w = self.widget(n)
if pos.y() < w.y() + w.size().height():
self.insertWidget(n, src)
self.dropped.emit(src_i, n)
break
e.accept()