Added searching to DBC window to make it easier to find messages. Replaced deprecated random number calls with new method.

This commit is contained in:
Collin Kidder
2020-07-15 18:23:18 -04:00
parent 90918f6d8c
commit 717228a091
8 changed files with 144 additions and 14 deletions
+79
View File
@@ -5,6 +5,7 @@
#include <QMessageBox>
#include <QSettings>
#include <QColorDialog>
#include <QTableWidgetItem>
#include <qevent.h>
#include "helpwindow.h"
@@ -50,6 +51,9 @@ DBCMainEditor::DBCMainEditor( const QVector<CANFrame> *frames, QWidget *parent)
connect(ui->MessagesTable, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(onCustomMenuMessage(QPoint)));
ui->MessagesTable->setContextMenuPolicy(Qt::CustomContextMenu);
connect(ui->btnSearch, &QAbstractButton::clicked, this, &DBCMainEditor::handleSearch);
connect(ui->lineSearch, &QLineEdit::returnPressed, this, &DBCMainEditor::handleSearch);
sigEditor = new DBCSignalEditor(this);
installEventFilter(this);
@@ -179,6 +183,81 @@ void DBCMainEditor::deleteCurrentMessage()
}
}
void DBCMainEditor::handleSearch()
{
uint32_t msgId = Utility::ParseStringToNum(ui->lineSearch->text());
if (ui->radioID->isChecked())
{
DBC_MESSAGE *msg = dbcFile->messageHandler->findMsgByID(msgId);
if (msg)
{
DBC_NODE *node = msg->sender;
if (node)
{
QString nodeName = node->name;
for (int i = 0; i < ui->NodesTable->rowCount(); i++)
{
QTableWidgetItem *item = ui->NodesTable->item(i, 0);
if (item->text() == nodeName)
{
item->setSelected(true);
ui->NodesTable->scrollToItem(item);
onCellClickedNode(i, 0);
for (int j = 0; j < ui->MessagesTable->rowCount(); j++)
{
QTableWidgetItem *msgItem = ui->MessagesTable->item(j, 0);
if (!msgItem) break;
if (Utility::ParseStringToNum(msgItem->text()) == msgId)
{
msgItem->setSelected(true);
ui->MessagesTable->scrollToItem(msgItem);
onCellClickedMessage(j, 0);
break;
}
}
break;
}
}
}
}
}
if (ui->radioName->isChecked())
{
DBC_MESSAGE *msg = dbcFile->messageHandler->findMsgByPartialName(ui->lineSearch->text());
if (msg)
{
DBC_NODE *node = msg->sender;
if (node)
{
QString nodeName = node->name;
for (int i = 0; i < ui->NodesTable->rowCount(); i++)
{
QTableWidgetItem *item = ui->NodesTable->item(i, 0);
if (item->text() == nodeName)
{
item->setSelected(true);
ui->NodesTable->scrollToItem(item);
onCellClickedNode(i, 0);
for (int j = 0; j < ui->MessagesTable->rowCount(); j++)
{
QTableWidgetItem *msgItem = ui->MessagesTable->item(j, 1);
if (!msgItem) break;
if (msgItem->text().contains(ui->lineSearch->text(), Qt::CaseInsensitive))
{
msgItem->setSelected(true);
ui->MessagesTable->scrollToItem(msgItem);
onCellClickedMessage(j, 0);
break;
}
}
break;
}
}
}
}
}
}
void DBCMainEditor::onCellChangedNode(int row,int col)
{
if (inhibitCellChanged) return;