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:
Andy Huska
2022-09-28 20:02:27 -05:00
parent e8c2bba0c4
commit bd8582b8e3
3 changed files with 81 additions and 13 deletions
+64 -11
View File
@@ -4,6 +4,9 @@
#include "mainwindow.h"
#include <QDebug>
#define MSG_COL 1
#define VALUE_COL 2
SignalViewerWindow::SignalViewerWindow(const QVector<CANFrame> *frames, QWidget *parent) :
QDialog(parent),
ui(new Ui::SignalViewerWindow)
@@ -14,15 +17,16 @@ SignalViewerWindow::SignalViewerWindow(const QVector<CANFrame> *frames, QWidget
modelFrames = frames;
QStringList headers;
headers << "Signal" << "Value";
headers << "Node" << "Signal" << "Value";
ui->tableViewer->setHorizontalHeaderLabels(headers);
ui->tableViewer->setColumnWidth(0, 150);
ui->tableViewer->setColumnWidth(1, 300);
ui->tableViewer->setColumnWidth(0, 100);
ui->tableViewer->setColumnWidth(1, 150);
QHeaderView *HorzHdr = ui->tableViewer->horizontalHeader();
HorzHdr->setStretchLastSection(true); //causes the data column to automatically fill the tableview
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->btnAdd, SIGNAL(clicked(bool)), this, SLOT(addSignal()));
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->btnClear, SIGNAL(clicked(bool)), this, SLOT(clearSignalsTable()));
loadMessages();
loadNodes();
}
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
{
QTableWidgetItem *item = ui->tableViewer->item(i, 1);
QTableWidgetItem *item = ui->tableViewer->item(i, VALUE_COL);
if (!item)
{
item = new QTableWidgetItem(sigString);
ui->tableViewer->setItem(i, 1, item);
ui->tableViewer->setItem(i, VALUE_COL, item);
}
else item->setText(sigString);
}
@@ -99,20 +103,67 @@ void SignalViewerWindow::removeSelectedSignal()
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;
ui->cbMessages->clear();
ui->cbNodes->clear();
if (dbcHandler == nullptr) return;
if ((numFiles = dbcHandler->getFileCount()) == 0) return;
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++)
{
qDebug() << dbcHandler->getFileByIdx(f)->messageHandler->getCount();
for (int x = 0; x < dbcHandler->getFileByIdx(f)->messageHandler->getCount(); x++)
{
ui->cbMessages->addItem(dbcHandler->getFileByIdx(f)->messageHandler->findMsgByIdx(x)->name);
if(dbcHandler->getFileByIdx(f)->messageHandler->findMsgByIdx(x)->sender->name == nodeName)
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();
ui->tableViewer->insertRow(rowIdx);
QTableWidgetItem *item = new QTableWidgetItem(sig->parentMessage->sender->name + " - " + sig->name);
ui->tableViewer->setItem(rowIdx, 0, item);
QTableWidgetItem *nodeitem = new QTableWidgetItem(sig->parentMessage->sender->name);
ui->tableViewer->setItem(rowIdx, 0, nodeitem);
QTableWidgetItem *msgitem = new QTableWidgetItem(sig->name);
ui->tableViewer->setItem(rowIdx, 1, msgitem);
}
void SignalViewerWindow::saveSignalsFile()
+2 -1
View File
@@ -17,7 +17,8 @@ public:
~SignalViewerWindow();
private slots:
void loadMessages();
void loadNodes();
void loadMessages(int idx);
void loadSignals(int idx);
void addSignal();
void addSignal(DBC_SIGNAL *sig);
+15 -1
View File
@@ -18,8 +18,11 @@
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QTableWidget" name="tableViewer">
<property name="sortingEnabled">
<bool>true</bool>
</property>
<property name="columnCount">
<number>2</number>
<number>3</number>
</property>
<attribute name="horizontalHeaderDefaultSectionSize">
<number>300</number>
@@ -32,6 +35,7 @@
</attribute>
<column/>
<column/>
<column/>
</widget>
</item>
<item>
@@ -45,6 +49,16 @@
</item>
<item>
<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>
<widget class="QLabel" name="label">
<property name="text">