Fixed tab order in signal editor, fixed bugs in copying a signal when

adding a new signal, code clean up
This commit is contained in:
Collin Kidder
2022-12-08 21:55:19 -05:00
parent e1f06be6fd
commit ddf26bb9b8
4 changed files with 62 additions and 31 deletions
+39 -29
View File
@@ -216,19 +216,19 @@ void DBCMainEditor::currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem
} }
switch (current->data(0, Qt::UserRole).toInt()) switch (current->data(0, Qt::UserRole).toInt())
{ {
case 1: //node case DBCItemTypes::NODE: //node
ui->btnNewNode->setEnabled(true); ui->btnNewNode->setEnabled(true);
ui->btnNewMessage->setEnabled(true); ui->btnNewMessage->setEnabled(true);
ui->btnNewSignal->setEnabled(false); ui->btnNewSignal->setEnabled(false);
ui->btnDelete->setEnabled(true); ui->btnDelete->setEnabled(true);
break; break;
case 2: //message case DBCItemTypes::MSG: //message
ui->btnNewNode->setEnabled(true); ui->btnNewNode->setEnabled(true);
ui->btnNewMessage->setEnabled(true); ui->btnNewMessage->setEnabled(true);
ui->btnNewSignal->setEnabled(true); ui->btnNewSignal->setEnabled(true);
ui->btnDelete->setEnabled(true); ui->btnDelete->setEnabled(true);
break; break;
case 3: //signal case DBCItemTypes::SIG: //signal
ui->btnNewNode->setEnabled(true); ui->btnNewNode->setEnabled(true);
ui->btnNewMessage->setEnabled(true); ui->btnNewMessage->setEnabled(true);
ui->btnNewSignal->setEnabled(true); ui->btnNewSignal->setEnabled(true);
@@ -243,7 +243,7 @@ void DBCMainEditor::currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem
uint32_t DBCMainEditor::getParentMessageID(QTreeWidgetItem *cell) uint32_t DBCMainEditor::getParentMessageID(QTreeWidgetItem *cell)
{ {
if (cell->data(0, Qt::UserRole) == 2) if (cell->data(0, Qt::UserRole) == DBCItemTypes::MSG)
{ {
return static_cast<uint32_t>(Utility::ParseStringToNum(cell->text(0).split(" ")[0])); return static_cast<uint32_t>(Utility::ParseStringToNum(cell->text(0).split(" ")[0]));
} }
@@ -271,7 +271,7 @@ void DBCMainEditor::onTreeDoubleClicked(const QModelIndex &index)
switch (firstCol->data(0, Qt::UserRole).toInt()) switch (firstCol->data(0, Qt::UserRole).toInt())
{ {
case 1: //a node case DBCItemTypes::NODE: //a node
idString = firstCol->text(0).split(" ")[0]; idString = firstCol->text(0).split(" ")[0];
node = dbcFile->findNodeByName(idString); node = dbcFile->findNodeByName(idString);
nodeEditor->setFileIdx(fileIdx); nodeEditor->setFileIdx(fileIdx);
@@ -279,7 +279,7 @@ void DBCMainEditor::onTreeDoubleClicked(const QModelIndex &index)
nodeEditor->refreshView(); nodeEditor->refreshView();
nodeEditor->show(); nodeEditor->show();
break; break;
case 2: //a message case DBCItemTypes::MSG: //a message
idString = firstCol->text(0).split(" ")[0]; idString = firstCol->text(0).split(" ")[0];
msgID = static_cast<uint32_t>(Utility::ParseStringToNum(idString)); msgID = static_cast<uint32_t>(Utility::ParseStringToNum(idString));
msg = dbcFile->messageHandler->findMsgByID(msgID); msg = dbcFile->messageHandler->findMsgByID(msgID);
@@ -289,7 +289,7 @@ void DBCMainEditor::onTreeDoubleClicked(const QModelIndex &index)
msgEditor->refreshView(); msgEditor->refreshView();
msgEditor->show(); //show allows the rest of the forms to keep going msgEditor->show(); //show allows the rest of the forms to keep going
break; break;
case 3: //a signal case DBCItemTypes::SIG: //a signal
msgID = getParentMessageID(firstCol); msgID = getParentMessageID(firstCol);
msg = dbcFile->messageHandler->findMsgByID(msgID); msg = dbcFile->messageHandler->findMsgByID(msgID);
QString nameString = firstCol->text(0); QString nameString = firstCol->text(0);
@@ -318,7 +318,7 @@ void DBCMainEditor::onTreeContextMenu(const QPoint & pos)
switch (firstCol->data(0, Qt::UserRole).toInt()) switch (firstCol->data(0, Qt::UserRole).toInt())
{ {
case 1: //a node case DBCItemTypes::NODE: //a node
idString = firstCol->text(0).split(" ")[0]; idString = firstCol->text(0).split(" ")[0];
//node = dbcFile->findNodeByName(idString); //node = dbcFile->findNodeByName(idString);
@@ -408,7 +408,7 @@ void DBCMainEditor::refreshTree()
if (node->comment.count() > 0) nodeInfo.append(" - ").append(node->comment); if (node->comment.count() > 0) nodeInfo.append(" - ").append(node->comment);
nodeItem->setText(0, nodeInfo); nodeItem->setText(0, nodeInfo);
nodeItem->setIcon(0, nodeIcon); nodeItem->setIcon(0, nodeIcon);
nodeItem->setData(0, Qt::UserRole, 1); nodeItem->setData(0, Qt::UserRole, DBCItemTypes::NODE);
nodeToItem.insert(node, nodeItem); nodeToItem.insert(node, nodeItem);
itemToNode.insert(nodeItem, node); itemToNode.insert(nodeItem, node);
for (int x = 0; x < dbcFile->messageHandler->getCount(); x++) for (int x = 0; x < dbcFile->messageHandler->getCount(); x++)
@@ -421,7 +421,7 @@ void DBCMainEditor::refreshTree()
if (msg->comment.count() > 0) msgInfo.append(" - ").append(msg->comment); if (msg->comment.count() > 0) msgInfo.append(" - ").append(msg->comment);
msgItem->setText(0, msgInfo); msgItem->setText(0, msgInfo);
msgItem->setIcon(0, messageIcon); msgItem->setIcon(0, messageIcon);
msgItem->setData(0, Qt::UserRole, 2); msgItem->setData(0, Qt::UserRole, DBCItemTypes::MSG);
messageToItem.insert(msg, msgItem); messageToItem.insert(msg, msgItem);
itemToMessage.insert(msgItem, msg); itemToMessage.insert(msgItem, msg);
for (int i = 0; i < msg->sigHandler->getCount(); i++) for (int i = 0; i < msg->sigHandler->getCount(); i++)
@@ -466,7 +466,7 @@ void DBCMainEditor::processSignalToTree(QTreeWidgetItem *parent, DBC_SIGNAL *sig
if (sig->isMultiplexor) sigItem->setIcon(0, multiplexorSignalIcon); if (sig->isMultiplexor) sigItem->setIcon(0, multiplexorSignalIcon);
else if (sig->isMultiplexed) sigItem->setIcon(0, multiplexedSignalIcon); else if (sig->isMultiplexed) sigItem->setIcon(0, multiplexedSignalIcon);
else sigItem->setIcon(0, signalIcon); else sigItem->setIcon(0, signalIcon);
sigItem->setData(0, Qt::UserRole, 3); sigItem->setData(0, Qt::UserRole, DBCItemTypes::SIG);
signalToItem.insert(sig, sigItem); signalToItem.insert(sig, sigItem);
itemToSignal.insert(sigItem, sig); itemToSignal.insert(sigItem, sig);
if (sig->multiplexedChildren.count() > 0) if (sig->multiplexedChildren.count() > 0)
@@ -511,7 +511,7 @@ void DBCMainEditor::updatedMessage(DBC_MESSAGE *msg)
QTreeWidgetItem *newNodeItem = new QTreeWidgetItem(); QTreeWidgetItem *newNodeItem = new QTreeWidgetItem();
newNodeItem->setText(0, msg->sender->name); newNodeItem->setText(0, msg->sender->name);
newNodeItem->setIcon(0, nodeIcon); newNodeItem->setIcon(0, nodeIcon);
newNodeItem->setData(0, Qt::UserRole, 1); newNodeItem->setData(0, Qt::UserRole, DBCItemTypes::NODE);
ui->treeDBC->addTopLevelItem(newNodeItem); ui->treeDBC->addTopLevelItem(newNodeItem);
nodeToItem.insert(msg->sender, newNodeItem); nodeToItem.insert(msg->sender, newNodeItem);
itemToNode.insert(newNodeItem, msg->sender); itemToNode.insert(newNodeItem, msg->sender);
@@ -537,7 +537,7 @@ void DBCMainEditor::updatedSignal(DBC_SIGNAL *sig)
item->setText(0, sigInfo); item->setText(0, sigInfo);
if (sig->isMultiplexed) if (sig->isMultiplexed)
{ {
if (item->parent()->data(0, Qt::UserRole).toInt() == 3) //if our parent is another signal if (item->parent()->data(0, Qt::UserRole).toInt() == DBCItemTypes::SIG) //if our parent is another signal
{ {
QString nameString = item->parent()->text(0); QString nameString = item->parent()->text(0);
if (nameString.contains("(")) nameString = nameString.split(" ")[1]; if (nameString.contains("(")) nameString = nameString.split(" ")[1];
@@ -577,7 +577,7 @@ void DBCMainEditor::newNode(QString nodeName)
QTreeWidgetItem *nodeItem = new QTreeWidgetItem(); QTreeWidgetItem *nodeItem = new QTreeWidgetItem();
nodeItem->setText(0, node.name); nodeItem->setText(0, node.name);
nodeItem->setIcon(0, nodeIcon); nodeItem->setIcon(0, nodeIcon);
nodeItem->setData(0, Qt::UserRole, 1); nodeItem->setData(0, Qt::UserRole, DBCItemTypes::NODE);
nodeToItem.insert(nodePtr, nodeItem); nodeToItem.insert(nodePtr, nodeItem);
itemToNode.insert(nodeItem, nodePtr); itemToNode.insert(nodeItem, nodePtr);
ui->treeDBC->addTopLevelItem(nodeItem); ui->treeDBC->addTopLevelItem(nodeItem);
@@ -649,7 +649,7 @@ void DBCMainEditor::copyMessageToNode(DBC_NODE *parentNode, DBC_MESSAGE *source,
if (msg.comment.count() > 0) msgInfo.append(" - ").append(msg.comment); if (msg.comment.count() > 0) msgInfo.append(" - ").append(msg.comment);
newMsgItem->setText(0, msgInfo); newMsgItem->setText(0, msgInfo);
newMsgItem->setIcon(0, messageIcon); newMsgItem->setIcon(0, messageIcon);
newMsgItem->setData(0, Qt::UserRole, 2); newMsgItem->setData(0, Qt::UserRole, DBCItemTypes::MSG);
messageToItem.insert(msgPtr, newMsgItem); messageToItem.insert(msgPtr, newMsgItem);
itemToMessage.insert(newMsgItem, msgPtr); itemToMessage.insert(newMsgItem, msgPtr);
nodeItem->addChild(newMsgItem); nodeItem->addChild(newMsgItem);
@@ -665,12 +665,12 @@ void DBCMainEditor::newMessage()
nodeItem = ui->treeDBC->currentItem(); nodeItem = ui->treeDBC->currentItem();
int typ = nodeItem->data(0, Qt::UserRole).toInt(); int typ = nodeItem->data(0, Qt::UserRole).toInt();
if (!nodeItem) return; //nothing selected! if (!nodeItem) return; //nothing selected!
if (typ == 2) if (typ == DBCItemTypes::MSG)
{ {
msgItem = nodeItem; msgItem = nodeItem;
nodeItem = nodeItem->parent(); nodeItem = nodeItem->parent();
} }
if (typ == 3) if (typ == DBCItemTypes::SIG)
{ {
msgItem = nodeItem->parent(); msgItem = nodeItem->parent();
nodeItem = msgItem->parent(); nodeItem = msgItem->parent();
@@ -701,14 +701,14 @@ void DBCMainEditor::newMessage()
{ {
msg.name = nodeName + "Msg" + QString::number(randGen.bounded(500)); msg.name = nodeName + "Msg" + QString::number(randGen.bounded(500));
msg.ID = 0; msg.ID = 0;
msg.len = 0; msg.len = 8;
} }
} }
else else
{ {
msg.name = nodeName + "Msg" + QString::number(randGen.bounded(500)); msg.name = nodeName + "Msg" + QString::number(randGen.bounded(500));
msg.ID = 0; msg.ID = 0;
msg.len = 0; msg.len = 8;
} }
msg.sender = node; msg.sender = node;
@@ -719,7 +719,7 @@ void DBCMainEditor::newMessage()
if (msg.comment.count() > 0) msgInfo.append(" - ").append(msg.comment); if (msg.comment.count() > 0) msgInfo.append(" - ").append(msg.comment);
newMsgItem->setText(0, msgInfo); newMsgItem->setText(0, msgInfo);
newMsgItem->setIcon(0, messageIcon); newMsgItem->setIcon(0, messageIcon);
newMsgItem->setData(0, Qt::UserRole, 2); newMsgItem->setData(0, Qt::UserRole, DBCItemTypes::MSG);
messageToItem.insert(msgPtr, newMsgItem); messageToItem.insert(msgPtr, newMsgItem);
itemToMessage.insert(newMsgItem, msgPtr); itemToMessage.insert(newMsgItem, msgPtr);
nodeItem->addChild(newMsgItem); nodeItem->addChild(newMsgItem);
@@ -731,27 +731,37 @@ void DBCMainEditor::newSignal()
{ {
QTreeWidgetItem *msgItem = nullptr; QTreeWidgetItem *msgItem = nullptr;
QTreeWidgetItem *sigItem = nullptr; QTreeWidgetItem *sigItem = nullptr;
QTreeWidgetItem *parentItem = nullptr;
msgItem = ui->treeDBC->currentItem(); msgItem = ui->treeDBC->currentItem();
parentItem = msgItem;
if (!msgItem) return; //nothing selected! if (!msgItem) return; //nothing selected!
int typ = msgItem->data(0, Qt::UserRole).toInt(); int typ = msgItem->data(0, Qt::UserRole).toInt();
if (typ == 1) return; //can't add signals to a node! if (typ == DBCItemTypes::NODE) return; //can't add signals to a node!
if (typ == 3) if (typ == DBCItemTypes::SIG)
{ {
sigItem = msgItem; sigItem = msgItem;
msgItem = msgItem->parent(); msgItem = msgItem->parent();
parentItem = msgItem;
//walk up the tree to find the parent msg
while (msgItem && msgItem->data(0, Qt::UserRole).toInt() != DBCItemTypes::MSG) msgItem = msgItem->parent();
if (!msgItem) return; //something bad happened. abort.
} }
QString idString = msgItem->text(0).split(" ")[0]; QString idString = msgItem->text(0).split(" ")[0];
int msgID = static_cast<uint32_t>(Utility::ParseStringToNum(idString)); int msgID = static_cast<uint32_t>(Utility::ParseStringToNum(idString));
DBC_MESSAGE *msg = dbcFile->messageHandler->findMsgByID(msgID); DBC_MESSAGE *msg = dbcFile->messageHandler->findMsgByID(msgID);
if (!msg) return; //null pointers are a bummer. Do not follow them.
DBC_SIGNAL sig; DBC_SIGNAL sig;
DBC_SIGNAL *sigPtr; DBC_SIGNAL *sigPtr;
if (sigItem) if (sigItem)
{ {
DBC_SIGNAL *oldSig = msg->sigHandler->findSignalByName(sigItem->text(0).split(" ")[0]); QString txt = sigItem->text(0);
if (txt.startsWith('(')) txt = txt.split(" ")[1]; //if it was a multiplexed signal we need to ignore that part and still grab sig name
else txt = txt.split(" ")[0];
DBC_SIGNAL *oldSig = msg->sigHandler->findSignalByName(txt);
if (oldSig) if (oldSig)
{ {
sig = *oldSig; //copy it all over sig = *oldSig;
sig.name = sig.name + QString::number(randGen.bounded(100)); sig.name = sig.name + QString::number(randGen.bounded(100));
} }
else else
@@ -775,10 +785,10 @@ void DBCMainEditor::newSignal()
if (sig.isMultiplexed) newSigItem->setIcon(0, multiplexedSignalIcon); if (sig.isMultiplexed) newSigItem->setIcon(0, multiplexedSignalIcon);
else if (sig.isMultiplexor) newSigItem->setIcon(0, multiplexorSignalIcon); else if (sig.isMultiplexor) newSigItem->setIcon(0, multiplexorSignalIcon);
else newSigItem->setIcon(0, signalIcon); else newSigItem->setIcon(0, signalIcon);
newSigItem->setData(0, Qt::UserRole, 3); newSigItem->setData(0, Qt::UserRole, DBCItemTypes::SIG);
signalToItem.insert(sigPtr, newSigItem); signalToItem.insert(sigPtr, newSigItem);
itemToSignal.insert(newSigItem, sigPtr); itemToSignal.insert(newSigItem, sigPtr);
msgItem->addChild(newSigItem); parentItem->addChild(newSigItem);
ui->treeDBC->setCurrentItem(newSigItem); ui->treeDBC->setCurrentItem(newSigItem);
dbcFile->setDirtyFlag(); dbcFile->setDirtyFlag();
} }
@@ -798,7 +808,7 @@ void DBCMainEditor::deleteCurrentTreeItem()
switch (typ) switch (typ)
{ {
case 1: //deleting a node cascades deletion down to messages and signals case DBCItemTypes::NODE: //deleting a node cascades deletion down to messages and signals
columnText = currItem->text(0); columnText = currItem->text(0);
node = dbcFile->findNodeByNameAndComment(columnText); node = dbcFile->findNodeByNameAndComment(columnText);
if (!node) return; if (!node) return;
@@ -826,7 +836,7 @@ void DBCMainEditor::deleteCurrentTreeItem()
} }
break; break;
case 2: //cascades to removing all signals too. case DBCItemTypes::MSG: //cascades to removing all signals too.
idString = currItem->text(0).split(" ")[0]; idString = currItem->text(0).split(" ")[0];
msgID = static_cast<uint32_t>(Utility::ParseStringToNum(idString)); msgID = static_cast<uint32_t>(Utility::ParseStringToNum(idString));
msg = dbcFile->messageHandler->findMsgByID(msgID); msg = dbcFile->messageHandler->findMsgByID(msgID);
@@ -847,7 +857,7 @@ void DBCMainEditor::deleteCurrentTreeItem()
} }
} }
break; break;
case 3: //no cascade, just this one signal. case DBCItemTypes::SIG: //no cascade, just this one signal.
confirmDialog = QMessageBox::question(this, "Really?", "Are you sure you want to delete this signal?", confirmDialog = QMessageBox::question(this, "Really?", "Are you sure you want to delete this signal?",
QMessageBox::Yes|QMessageBox::No); QMessageBox::Yes|QMessageBox::No);
if (confirmDialog == QMessageBox::Yes) if (confirmDialog == QMessageBox::Yes)
+7
View File
@@ -18,6 +18,13 @@ namespace Ui {
class DBCMainEditor; class DBCMainEditor;
} }
enum DBCItemTypes
{
NODE = 1,
MSG = 2,
SIG = 3
};
class DBCMainEditor : public QDialog class DBCMainEditor : public QDialog
{ {
Q_OBJECT Q_OBJECT
+1 -1
View File
@@ -299,7 +299,7 @@ DBCSignalEditor::DBCSignalEditor(QWidget *parent) :
//add it to this one, update this signal's parent multiplexor //add it to this one, update this signal's parent multiplexor
DBC_SIGNAL *newSig = dbcMessage->sigHandler->findSignalByName(ui->cbMultiplexParent->currentText()); DBC_SIGNAL *newSig = dbcMessage->sigHandler->findSignalByName(ui->cbMultiplexParent->currentText());
DBC_SIGNAL *oldParent = currentSignal->multiplexParent; DBC_SIGNAL *oldParent = currentSignal->multiplexParent;
if (newSig) if (newSig && oldParent)
{ {
oldParent->multiplexedChildren.removeOne(currentSignal); oldParent->multiplexedChildren.removeOne(currentSignal);
currentSignal->multiplexParent = newSig; currentSignal->multiplexParent = newSig;
+15 -1
View File
@@ -6,7 +6,7 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>967</width> <width>995</width>
<height>644</height> <height>644</height>
</rect> </rect>
</property> </property>
@@ -259,9 +259,23 @@
</customwidgets> </customwidgets>
<tabstops> <tabstops>
<tabstop>txtName</tabstop> <tabstop>txtName</tabstop>
<tabstop>txtBitLength</tabstop>
<tabstop>cbIntelFormat</tabstop>
<tabstop>comboType</tabstop>
<tabstop>txtScale</tabstop>
<tabstop>txtBias</tabstop>
<tabstop>txtMinVal</tabstop>
<tabstop>txtMaxVal</tabstop>
<tabstop>txtUnitName</tabstop>
<tabstop>comboReceiver</tabstop>
<tabstop>rbNotMulti</tabstop> <tabstop>rbNotMulti</tabstop>
<tabstop>rbMultiplexed</tabstop> <tabstop>rbMultiplexed</tabstop>
<tabstop>rbMultiplexor</tabstop> <tabstop>rbMultiplexor</tabstop>
<tabstop>rbExtended</tabstop>
<tabstop>txtMultiplexLow</tabstop>
<tabstop>txtMultiplexHigh</tabstop>
<tabstop>cbMultiplexParent</tabstop>
<tabstop>txtComment</tabstop>
<tabstop>valuesTable</tabstop> <tabstop>valuesTable</tabstop>
</tabstops> </tabstops>
<resources/> <resources/>