simplification of messagestable management
This commit is contained in:
+81
-89
@@ -5,6 +5,8 @@
|
|||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
#include <QSettings>
|
#include <QSettings>
|
||||||
|
|
||||||
|
#define MT_COLUMN_COUNT 5
|
||||||
|
|
||||||
DBCMainEditor::DBCMainEditor(DBCHandler *handler, const QVector<CANFrame> *frames, QWidget *parent) :
|
DBCMainEditor::DBCMainEditor(DBCHandler *handler, const QVector<CANFrame> *frames, QWidget *parent) :
|
||||||
QDialog(parent),
|
QDialog(parent),
|
||||||
ui(new Ui::DBCMainEditor)
|
ui(new Ui::DBCMainEditor)
|
||||||
@@ -26,7 +28,7 @@ DBCMainEditor::DBCMainEditor(DBCHandler *handler, const QVector<CANFrame> *frame
|
|||||||
|
|
||||||
QStringList headers2;
|
QStringList headers2;
|
||||||
headers2 << "Msg ID" << "Msg Name" << "Data Len" << "Signals" << "Comment";
|
headers2 << "Msg ID" << "Msg Name" << "Data Len" << "Signals" << "Comment";
|
||||||
ui->MessagesTable->setColumnCount(5);
|
ui->MessagesTable->setColumnCount(MT_COLUMN_COUNT);
|
||||||
ui->MessagesTable->setColumnWidth(0, 80);
|
ui->MessagesTable->setColumnWidth(0, 80);
|
||||||
ui->MessagesTable->setColumnWidth(1, 240);
|
ui->MessagesTable->setColumnWidth(1, 240);
|
||||||
ui->MessagesTable->setColumnWidth(2, 80);
|
ui->MessagesTable->setColumnWidth(2, 80);
|
||||||
@@ -210,49 +212,57 @@ void DBCMainEditor::onCellChangedNode(int row,int col)
|
|||||||
|
|
||||||
void DBCMainEditor::onCellChangedMessage(int row,int col)
|
void DBCMainEditor::onCellChangedMessage(int row,int col)
|
||||||
{
|
{
|
||||||
|
QTableWidgetItem* item = NULL;
|
||||||
|
bool ret = false;
|
||||||
|
DBC_MESSAGE *msg = NULL;
|
||||||
|
uint msgID;
|
||||||
|
|
||||||
if (inhibitCellChanged) return;
|
if (inhibitCellChanged) return;
|
||||||
|
|
||||||
qDebug() << "Editing row: " << row << " col: " << col;
|
|
||||||
|
|
||||||
QTableWidgetItem *replacement = NULL;
|
|
||||||
int msgID;
|
|
||||||
QString msgName;
|
|
||||||
int msgLen;
|
|
||||||
QString msgComment;
|
|
||||||
DBC_MESSAGE newMsg;
|
|
||||||
DBC_NODE *node = dbcFile->findNodeByIdx(ui->NodesTable->currentRow());
|
DBC_NODE *node = dbcFile->findNodeByIdx(ui->NodesTable->currentRow());
|
||||||
DBC_MESSAGE *msg;
|
|
||||||
if (node == NULL)
|
if (node == NULL)
|
||||||
{
|
{
|
||||||
qDebug() << "No node set?!? This is bad!";
|
qDebug() << "No node set?!? This is bad!";
|
||||||
return;
|
return;
|
||||||
//dbcHandler->findNodeByIdx(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
msgID = Utility::ParseStringToNum(ui->MessagesTable->item(row, 0)->text());
|
item = ui->MessagesTable->item(row, 0);
|
||||||
qDebug() << "Msg ID of edited: " << msgID;
|
if(!item) return;
|
||||||
|
|
||||||
|
msgID = Utility::ParseStringToNum2(item->text(), &ret);
|
||||||
msg = dbcFile->messageHandler->findMsgByID(msgID);
|
msg = dbcFile->messageHandler->findMsgByID(msgID);
|
||||||
|
|
||||||
switch(col)
|
switch(col)
|
||||||
{
|
{
|
||||||
case 0: //msg id
|
case 0: //msg id
|
||||||
if (row == ui->MessagesTable->rowCount() - 1) //new record
|
|
||||||
{
|
{
|
||||||
if (dbcFile->messageHandler->findMsgByID(msgID) != NULL)
|
/* sanity checks */
|
||||||
|
if(!ret)
|
||||||
|
{
|
||||||
|
/* bad message id */
|
||||||
|
ui->MessagesTable->item(row, 0)->setText("");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (msg != NULL)
|
||||||
{
|
{
|
||||||
QMessageBox msg;
|
QMessageBox msg;
|
||||||
msg.setParent(0);
|
msg.setParent(0);
|
||||||
msg.setText("An existing msg with that ID already exists! Aborting!");
|
msg.setText("An existing msg with that ID already exists! Aborting!");
|
||||||
msg.exec();
|
msg.exec();
|
||||||
|
|
||||||
|
ui->MessagesTable->item(row, 0)->setText("");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* insert row */
|
||||||
|
DBC_MESSAGE newMsg;
|
||||||
newMsg.ID = msgID;
|
newMsg.ID = msgID;
|
||||||
newMsg.name = "";
|
newMsg.name = "";
|
||||||
newMsg.sender = node;
|
newMsg.sender = node;
|
||||||
newMsg.len = 0;
|
newMsg.len = 0;
|
||||||
for (int i = 0; i < referenceFrames->length(); i++)
|
for (int i = 0; i < referenceFrames->length(); i++)
|
||||||
{
|
{
|
||||||
if (referenceFrames->at(i).ID == msgID)
|
if ((uint) referenceFrames->at(i).ID == msgID)
|
||||||
{
|
{
|
||||||
newMsg.len = referenceFrames->at(i).len;
|
newMsg.len = referenceFrames->at(i).len;
|
||||||
break;
|
break;
|
||||||
@@ -262,95 +272,65 @@ void DBCMainEditor::onCellChangedMessage(int row,int col)
|
|||||||
|
|
||||||
/* insert message in table */
|
/* insert message in table */
|
||||||
inhibitCellChanged = true;
|
inhibitCellChanged = true;
|
||||||
replacement = new QTableWidgetItem(Utility::formatNumber(msgID));
|
|
||||||
replacement->setFlags(replacement->flags() ^ Qt::ItemIsEditable);
|
|
||||||
ui->MessagesTable->setItem(row, col, replacement);
|
|
||||||
replacement = new QTableWidgetItem(QString::number(newMsg.len));
|
|
||||||
ui->MessagesTable->setItem(row, 2, replacement);
|
|
||||||
inhibitCellChanged = false;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
|
item = ui->MessagesTable->item(row, 0);
|
||||||
|
item->setFlags(item->flags() & ~Qt::ItemIsEditable);
|
||||||
|
item->setText(Utility::formatNumber(msgID));
|
||||||
|
|
||||||
|
for(int i=1 ; i<MT_COLUMN_COUNT ; i++)
|
||||||
|
{
|
||||||
|
item = ui->MessagesTable->item(row, i);
|
||||||
|
item->setFlags(item->flags() | Qt::ItemIsEditable);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* set length */
|
||||||
|
item = ui->MessagesTable->item(row, 2);
|
||||||
|
item->setText(QString::number(newMsg.len));
|
||||||
|
|
||||||
|
inhibitCellChanged = false;
|
||||||
|
|
||||||
|
/* insert a new row */
|
||||||
|
insertBlankRow();
|
||||||
|
break;
|
||||||
|
}
|
||||||
case 1: //msg name
|
case 1: //msg name
|
||||||
msgName = ui->MessagesTable->item(row, col)->text().simplified().replace(' ', '_');
|
{
|
||||||
|
QString msgName = ui->MessagesTable->item(row, 1)->text().simplified().replace(' ', '_');
|
||||||
if (msgName.length() == 0) return;
|
if (msgName.length() == 0) return;
|
||||||
if (row == ui->MessagesTable->rowCount() - 1) //new record
|
if( ret && (msg!=NULL) )
|
||||||
|
msg->name = msgName;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 2: //data length
|
||||||
{
|
{
|
||||||
if (dbcFile->messageHandler->findMsgByName(msgName) != NULL)
|
bool parseOk = false;
|
||||||
|
uint msgLen = ui->MessagesTable->item(row, col)->text().toUInt(&parseOk);
|
||||||
|
|
||||||
|
/* sanity checks */
|
||||||
|
if(!parseOk)
|
||||||
{
|
{
|
||||||
QMessageBox msg;
|
ui->MessagesTable->item(row, col)->setText("");
|
||||||
msg.setParent(0);
|
|
||||||
msg.setText("An existing msg with that name already exists! Aborting!");
|
|
||||||
msg.exec();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
newMsg.ID = -1;
|
if (msgLen > 8)
|
||||||
newMsg.name = msgName;
|
|
||||||
newMsg.sender = node;
|
|
||||||
dbcFile->messageHandler->addMessage(newMsg);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
if (msg != NULL) msg->name = msgName;
|
msgLen = 8;
|
||||||
|
ui->MessagesTable->item(row, col)->setText(QString::number(msgLen));
|
||||||
}
|
}
|
||||||
inhibitCellChanged = true;
|
|
||||||
replacement = new QTableWidgetItem(msgName);
|
|
||||||
ui->MessagesTable->setItem(row, col, replacement);
|
|
||||||
inhibitCellChanged = false;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 2: //data length
|
|
||||||
msgLen = ui->MessagesTable->item(row, col)->text().toInt();
|
|
||||||
if (msgLen < 0) msgLen = 0;
|
|
||||||
if (msgLen > 8) msgLen = 8;
|
|
||||||
if (row == ui->MessagesTable->rowCount() - 1) //new record
|
|
||||||
{
|
|
||||||
DBC_MESSAGE newMsg;
|
|
||||||
newMsg.ID = -1;
|
|
||||||
newMsg.name = "";
|
|
||||||
newMsg.len = msgLen;
|
|
||||||
newMsg.sender = node;
|
|
||||||
dbcFile->messageHandler->addMessage(newMsg);
|
|
||||||
}
|
|
||||||
else //editing an existing record
|
|
||||||
{
|
|
||||||
if (msg != NULL) msg->len = msgLen;
|
|
||||||
}
|
|
||||||
inhibitCellChanged = true;
|
|
||||||
replacement = new QTableWidgetItem(QString::number(msgLen, 16));
|
|
||||||
ui->MessagesTable->setItem(row, col, replacement);
|
|
||||||
inhibitCellChanged = false;
|
|
||||||
|
|
||||||
|
if( ret && (msg!=NULL) )
|
||||||
|
msg->len = msgLen;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case 3: //signals (number) - we don't handle anything here. User cannot directly change this value
|
case 3: //signals (number) - we don't handle anything here. User cannot directly change this value
|
||||||
break;
|
break;
|
||||||
case 4: //comment
|
case 4: //comment
|
||||||
msgComment = ui->MessagesTable->item(row, col)->text().simplified();
|
|
||||||
if (row == ui->MessagesTable->rowCount() - 1) //new record
|
|
||||||
{
|
{
|
||||||
DBC_MESSAGE newMsg;
|
QString msgComment = ui->MessagesTable->item(row, col)->text().simplified();
|
||||||
newMsg.ID = -1;
|
if( ret && (msgComment!=NULL) )
|
||||||
newMsg.name = "";
|
msg->comment = msgComment;
|
||||||
newMsg.len = 0;
|
|
||||||
newMsg.comment = msgComment;
|
|
||||||
newMsg.sender = node;
|
|
||||||
dbcFile->messageHandler->addMessage(newMsg);
|
|
||||||
}
|
|
||||||
else //editing an existing record
|
|
||||||
{
|
|
||||||
if (msg != NULL) msg->comment = msgComment;
|
|
||||||
}
|
|
||||||
inhibitCellChanged = true;
|
|
||||||
replacement = new QTableWidgetItem(msgComment);
|
|
||||||
ui->MessagesTable->setItem(row, col, replacement);
|
|
||||||
inhibitCellChanged = false;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (row == ui->MessagesTable->rowCount() - 1)
|
|
||||||
{
|
|
||||||
ui->MessagesTable->insertRow(ui->MessagesTable->rowCount());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ui->MessagesTable->setCurrentCell(row, col);
|
ui->MessagesTable->setCurrentCell(row, col);
|
||||||
@@ -465,5 +445,17 @@ void DBCMainEditor::refreshMessagesTable(const DBC_NODE *node)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//insert blank record that can be used to add new messages
|
//insert blank record that can be used to add new messages
|
||||||
ui->MessagesTable->insertRow(ui->MessagesTable->rowCount());
|
insertBlankRow();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DBCMainEditor::insertBlankRow()
|
||||||
|
{
|
||||||
|
int rowIdx = ui->MessagesTable->rowCount();
|
||||||
|
ui->MessagesTable->insertRow(rowIdx);
|
||||||
|
for(int i=1 ; i<MT_COLUMN_COUNT ; i++)
|
||||||
|
{
|
||||||
|
QTableWidgetItem *item = new QTableWidgetItem("");
|
||||||
|
item->setFlags(item->flags() & ~Qt::ItemIsEditable);
|
||||||
|
ui->MessagesTable->setItem(rowIdx, i, item);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ private:
|
|||||||
void closeEvent(QCloseEvent *event);
|
void closeEvent(QCloseEvent *event);
|
||||||
void readSettings();
|
void readSettings();
|
||||||
void writeSettings();
|
void writeSettings();
|
||||||
|
void insertBlankRow();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user