Added combobox for nodes so msg combobox isnt so long
Added disabled filenames in node combobox so you can understand what is what Added node column to table Made table columns sortable so you can sort by node name or message name Want to make table fixed width font capable Want to make table rearrangable Want to make table rows shorter to fix more info in a window Want to make it possible to have multiple signal viewer windows Want to add ability to click on signals and add them to graphs like the main window
This commit is contained in:
+63
-10
@@ -4,6 +4,9 @@
|
|||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
|
#define MSG_COL 1
|
||||||
|
#define VALUE_COL 2
|
||||||
|
|
||||||
SignalViewerWindow::SignalViewerWindow(const QVector<CANFrame> *frames, QWidget *parent) :
|
SignalViewerWindow::SignalViewerWindow(const QVector<CANFrame> *frames, QWidget *parent) :
|
||||||
QDialog(parent),
|
QDialog(parent),
|
||||||
ui(new Ui::SignalViewerWindow)
|
ui(new Ui::SignalViewerWindow)
|
||||||
@@ -14,15 +17,16 @@ SignalViewerWindow::SignalViewerWindow(const QVector<CANFrame> *frames, QWidget
|
|||||||
modelFrames = frames;
|
modelFrames = frames;
|
||||||
|
|
||||||
QStringList headers;
|
QStringList headers;
|
||||||
headers << "Signal" << "Value";
|
headers << "Node" << "Signal" << "Value";
|
||||||
ui->tableViewer->setHorizontalHeaderLabels(headers);
|
ui->tableViewer->setHorizontalHeaderLabels(headers);
|
||||||
ui->tableViewer->setColumnWidth(0, 150);
|
ui->tableViewer->setColumnWidth(0, 100);
|
||||||
ui->tableViewer->setColumnWidth(1, 300);
|
ui->tableViewer->setColumnWidth(1, 150);
|
||||||
QHeaderView *HorzHdr = ui->tableViewer->horizontalHeader();
|
QHeaderView *HorzHdr = ui->tableViewer->horizontalHeader();
|
||||||
HorzHdr->setStretchLastSection(true); //causes the data column to automatically fill the tableview
|
HorzHdr->setStretchLastSection(true); //causes the data column to automatically fill the tableview
|
||||||
|
|
||||||
dbcHandler = DBCHandler::getReference();
|
dbcHandler = DBCHandler::getReference();
|
||||||
|
|
||||||
|
connect(ui->cbNodes, SIGNAL(currentIndexChanged(int)), this, SLOT(loadMessages(int)));
|
||||||
connect(ui->cbMessages, SIGNAL(currentIndexChanged(int)), this, SLOT(loadSignals(int)));
|
connect(ui->cbMessages, SIGNAL(currentIndexChanged(int)), this, SLOT(loadSignals(int)));
|
||||||
connect(ui->btnAdd, SIGNAL(clicked(bool)), this, SLOT(addSignal()));
|
connect(ui->btnAdd, SIGNAL(clicked(bool)), this, SLOT(addSignal()));
|
||||||
connect(MainWindow::getReference(), SIGNAL(framesUpdated(int)), this, SLOT(updatedFrames(int)));
|
connect(MainWindow::getReference(), SIGNAL(framesUpdated(int)), this, SLOT(updatedFrames(int)));
|
||||||
@@ -32,7 +36,7 @@ SignalViewerWindow::SignalViewerWindow(const QVector<CANFrame> *frames, QWidget
|
|||||||
connect(ui->btnAppend, SIGNAL(clicked(bool)), this, SLOT(appendSignalsFile()));
|
connect(ui->btnAppend, SIGNAL(clicked(bool)), this, SLOT(appendSignalsFile()));
|
||||||
connect(ui->btnClear, SIGNAL(clicked(bool)), this, SLOT(clearSignalsTable()));
|
connect(ui->btnClear, SIGNAL(clicked(bool)), this, SLOT(clearSignalsTable()));
|
||||||
|
|
||||||
loadMessages();
|
loadNodes();
|
||||||
}
|
}
|
||||||
|
|
||||||
SignalViewerWindow::~SignalViewerWindow()
|
SignalViewerWindow::~SignalViewerWindow()
|
||||||
@@ -79,11 +83,11 @@ void SignalViewerWindow::processFrame(CANFrame &frame)
|
|||||||
{
|
{
|
||||||
if (sig->processAsText(frame, sigString, false)) //if true we could interpret the signal so update it in the list
|
if (sig->processAsText(frame, sigString, false)) //if true we could interpret the signal so update it in the list
|
||||||
{
|
{
|
||||||
QTableWidgetItem *item = ui->tableViewer->item(i, 1);
|
QTableWidgetItem *item = ui->tableViewer->item(i, VALUE_COL);
|
||||||
if (!item)
|
if (!item)
|
||||||
{
|
{
|
||||||
item = new QTableWidgetItem(sigString);
|
item = new QTableWidgetItem(sigString);
|
||||||
ui->tableViewer->setItem(i, 1, item);
|
ui->tableViewer->setItem(i, VALUE_COL, item);
|
||||||
}
|
}
|
||||||
else item->setText(sigString);
|
else item->setText(sigString);
|
||||||
}
|
}
|
||||||
@@ -99,19 +103,66 @@ void SignalViewerWindow::removeSelectedSignal()
|
|||||||
ui->tableViewer->removeRow(selRow);
|
ui->tableViewer->removeRow(selRow);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SignalViewerWindow::loadMessages()
|
void SetComboBoxItemEnabled(QComboBox * comboBox, int index, bool enabled)
|
||||||
|
{
|
||||||
|
auto * model = qobject_cast<QStandardItemModel*>(comboBox->model());
|
||||||
|
assert(model);
|
||||||
|
if(!model) return;
|
||||||
|
|
||||||
|
auto * item = model->item(index);
|
||||||
|
assert(item);
|
||||||
|
if(!item) return;
|
||||||
|
item->setEnabled(enabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SignalViewerWindow::loadNodes()
|
||||||
{
|
{
|
||||||
int numFiles;
|
int numFiles;
|
||||||
ui->cbMessages->clear();
|
ui->cbNodes->clear();
|
||||||
if (dbcHandler == nullptr) return;
|
if (dbcHandler == nullptr) return;
|
||||||
if ((numFiles = dbcHandler->getFileCount()) == 0) return;
|
if ((numFiles = dbcHandler->getFileCount()) == 0) return;
|
||||||
qDebug() << numFiles;
|
qDebug() << numFiles;
|
||||||
|
for (int f = 0; f < numFiles; f++)
|
||||||
|
{
|
||||||
|
qDebug() << dbcHandler->getFileByIdx(f)->messageHandler->getCount();
|
||||||
|
|
||||||
|
QList<QString> names;
|
||||||
|
|
||||||
|
for (int x = 0; x < dbcHandler->getFileByIdx(f)->dbc_nodes.count(); x++)
|
||||||
|
{
|
||||||
|
QString name = dbcHandler->getFileByIdx(f)->dbc_nodes[x].name;
|
||||||
|
if(name != "Vector__XXX")
|
||||||
|
names.append(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(names.count() > 0)
|
||||||
|
{
|
||||||
|
names.sort();
|
||||||
|
ui->cbNodes->addItem("----" + dbcHandler->getFileByIdx(f)->getFilename());
|
||||||
|
SetComboBoxItemEnabled(ui->cbNodes, ui->cbNodes->count() -1, false);
|
||||||
|
for(int i=0; i<names.count(); i++)
|
||||||
|
ui->cbNodes->addItem(names[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SignalViewerWindow::loadMessages(int idx)
|
||||||
|
{
|
||||||
|
int numFiles;
|
||||||
|
ui->cbMessages->clear();
|
||||||
|
if (dbcHandler == nullptr) return;
|
||||||
|
if ((numFiles = dbcHandler->getFileCount()) == 0) return;
|
||||||
|
qDebug() << numFiles;
|
||||||
|
|
||||||
|
QString nodeName = ui->cbNodes->itemText(idx);
|
||||||
|
|
||||||
for (int f = 0; f < numFiles; f++)
|
for (int f = 0; f < numFiles; f++)
|
||||||
{
|
{
|
||||||
qDebug() << dbcHandler->getFileByIdx(f)->messageHandler->getCount();
|
qDebug() << dbcHandler->getFileByIdx(f)->messageHandler->getCount();
|
||||||
|
|
||||||
for (int x = 0; x < dbcHandler->getFileByIdx(f)->messageHandler->getCount(); x++)
|
for (int x = 0; x < dbcHandler->getFileByIdx(f)->messageHandler->getCount(); x++)
|
||||||
{
|
{
|
||||||
|
if(dbcHandler->getFileByIdx(f)->messageHandler->findMsgByIdx(x)->sender->name == nodeName)
|
||||||
ui->cbMessages->addItem(dbcHandler->getFileByIdx(f)->messageHandler->findMsgByIdx(x)->name);
|
ui->cbMessages->addItem(dbcHandler->getFileByIdx(f)->messageHandler->findMsgByIdx(x)->name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -150,8 +201,10 @@ void SignalViewerWindow::addSignal(DBC_SIGNAL *sig)
|
|||||||
|
|
||||||
int rowIdx = ui->tableViewer->rowCount();
|
int rowIdx = ui->tableViewer->rowCount();
|
||||||
ui->tableViewer->insertRow(rowIdx);
|
ui->tableViewer->insertRow(rowIdx);
|
||||||
QTableWidgetItem *item = new QTableWidgetItem(sig->parentMessage->sender->name + " - " + sig->name);
|
QTableWidgetItem *nodeitem = new QTableWidgetItem(sig->parentMessage->sender->name);
|
||||||
ui->tableViewer->setItem(rowIdx, 0, item);
|
ui->tableViewer->setItem(rowIdx, 0, nodeitem);
|
||||||
|
QTableWidgetItem *msgitem = new QTableWidgetItem(sig->name);
|
||||||
|
ui->tableViewer->setItem(rowIdx, 1, msgitem);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SignalViewerWindow::saveSignalsFile()
|
void SignalViewerWindow::saveSignalsFile()
|
||||||
|
|||||||
@@ -17,7 +17,8 @@ public:
|
|||||||
~SignalViewerWindow();
|
~SignalViewerWindow();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void loadMessages();
|
void loadNodes();
|
||||||
|
void loadMessages(int idx);
|
||||||
void loadSignals(int idx);
|
void loadSignals(int idx);
|
||||||
void addSignal();
|
void addSignal();
|
||||||
void addSignal(DBC_SIGNAL *sig);
|
void addSignal(DBC_SIGNAL *sig);
|
||||||
|
|||||||
@@ -18,8 +18,11 @@
|
|||||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QTableWidget" name="tableViewer">
|
<widget class="QTableWidget" name="tableViewer">
|
||||||
|
<property name="sortingEnabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
<property name="columnCount">
|
<property name="columnCount">
|
||||||
<number>2</number>
|
<number>3</number>
|
||||||
</property>
|
</property>
|
||||||
<attribute name="horizontalHeaderDefaultSectionSize">
|
<attribute name="horizontalHeaderDefaultSectionSize">
|
||||||
<number>300</number>
|
<number>300</number>
|
||||||
@@ -32,6 +35,7 @@
|
|||||||
</attribute>
|
</attribute>
|
||||||
<column/>
|
<column/>
|
||||||
<column/>
|
<column/>
|
||||||
|
<column/>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
@@ -45,6 +49,16 @@
|
|||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="text">
|
||||||
|
<string>Node</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="cbNodes"/>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="label">
|
<widget class="QLabel" name="label">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
|
|||||||
Reference in New Issue
Block a user