feat: warn on duplicate CAN ID in DBC message editor
This commit is contained in:
@@ -4,6 +4,7 @@
|
|||||||
#include <QSettings>
|
#include <QSettings>
|
||||||
#include <QKeyEvent>
|
#include <QKeyEvent>
|
||||||
#include <QColorDialog>
|
#include <QColorDialog>
|
||||||
|
#include <QMessageBox>
|
||||||
#include "helpwindow.h"
|
#include "helpwindow.h"
|
||||||
#include "utility.h"
|
#include "utility.h"
|
||||||
|
|
||||||
@@ -37,6 +38,7 @@ DBCMessageEditor::DBCMessageEditor(QWidget *parent) :
|
|||||||
if ((dbcMessage->ID & 0x1FFFFFFFul) != Utility::ParseStringToNum(ui->lineFrameID->text())) dbcFile->setDirtyFlag();
|
if ((dbcMessage->ID & 0x1FFFFFFFul) != Utility::ParseStringToNum(ui->lineFrameID->text())) dbcFile->setDirtyFlag();
|
||||||
dbcMessage->ID = Utility::ParseStringToNum(ui->lineFrameID->text());
|
dbcMessage->ID = Utility::ParseStringToNum(ui->lineFrameID->text());
|
||||||
emit updatedTreeInfo(dbcMessage);
|
emit updatedTreeInfo(dbcMessage);
|
||||||
|
warnIfDuplicateID(dbcMessage->ID);
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(ui->lineMsgName, &QLineEdit::editingFinished,
|
connect(ui->lineMsgName, &QLineEdit::editingFinished,
|
||||||
@@ -237,6 +239,31 @@ void DBCMessageEditor::refreshView()
|
|||||||
generateSampleText();
|
generateSampleText();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Warn if any other message in the file already uses the same CAN ID. Duplicate IDs are legal
|
||||||
|
//in the DBC format but almost always a mistake, so this just informs rather than blocks.
|
||||||
|
void DBCMessageEditor::warnIfDuplicateID(uint32_t id)
|
||||||
|
{
|
||||||
|
if (!dbcFile) return;
|
||||||
|
int count = 0;
|
||||||
|
for (int i = 0; i < dbcFile->messageHandler->getCount(); i++)
|
||||||
|
{
|
||||||
|
DBC_MESSAGE *m = dbcFile->messageHandler->findMsgByIdx(i);
|
||||||
|
if (m != dbcMessage && (m->ID & 0x1FFFFFFFul) == (id & 0x1FFFFFFFul)) count++;
|
||||||
|
}
|
||||||
|
if (count > 0)
|
||||||
|
{
|
||||||
|
//Showing the modal dialog pulls focus off the ID field, which re-emits editingFinished
|
||||||
|
//and would stack a second warning. Suppress the edit callbacks while the dialog is up.
|
||||||
|
bool prevSuppress = suppressEditCallbacks;
|
||||||
|
suppressEditCallbacks = true;
|
||||||
|
QMessageBox::warning(this, tr("Duplicate ID"),
|
||||||
|
tr("Another message already uses ID %1.\n"
|
||||||
|
"Duplicate IDs are allowed but are usually a mistake.")
|
||||||
|
.arg(Utility::formatCANID(id & 0x1FFFFFFFul)));
|
||||||
|
suppressEditCallbacks = prevSuppress;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void DBCMessageEditor::generateSampleText()
|
void DBCMessageEditor::generateSampleText()
|
||||||
{
|
{
|
||||||
QBrush fg, bg;
|
QBrush fg, bg;
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ private:
|
|||||||
void readSettings();
|
void readSettings();
|
||||||
void writeSettings();
|
void writeSettings();
|
||||||
void generateSampleText();
|
void generateSampleText();
|
||||||
|
void warnIfDuplicateID(uint32_t id);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // DBCMESSAGEEDITOR_H
|
#endif // DBCMESSAGEEDITOR_H
|
||||||
|
|||||||
Reference in New Issue
Block a user