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())
{
case 1: //node
case DBCItemTypes::NODE: //node
ui->btnNewNode->setEnabled(true);
ui->btnNewMessage->setEnabled(true);
ui->btnNewSignal->setEnabled(false);
ui->btnDelete->setEnabled(true);
break;
case 2: //message
case DBCItemTypes::MSG: //message
ui->btnNewNode->setEnabled(true);
ui->btnNewMessage->setEnabled(true);
ui->btnNewSignal->setEnabled(true);
ui->btnDelete->setEnabled(true);
break;
case 3: //signal
case DBCItemTypes::SIG: //signal
ui->btnNewNode->setEnabled(true);
ui->btnNewMessage->setEnabled(true);
ui->btnNewSignal->setEnabled(true);
@@ -243,7 +243,7 @@ void DBCMainEditor::currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem
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]));
}
@@ -271,7 +271,7 @@ void DBCMainEditor::onTreeDoubleClicked(const QModelIndex &index)
switch (firstCol->data(0, Qt::UserRole).toInt())
{
case 1: //a node
case DBCItemTypes::NODE: //a node
idString = firstCol->text(0).split(" ")[0];
node = dbcFile->findNodeByName(idString);
nodeEditor->setFileIdx(fileIdx);
@@ -279,7 +279,7 @@ void DBCMainEditor::onTreeDoubleClicked(const QModelIndex &index)
nodeEditor->refreshView();
nodeEditor->show();
break;
case 2: //a message
case DBCItemTypes::MSG: //a message
idString = firstCol->text(0).split(" ")[0];
msgID = static_cast<uint32_t>(Utility::ParseStringToNum(idString));
msg = dbcFile->messageHandler->findMsgByID(msgID);
@@ -289,7 +289,7 @@ void DBCMainEditor::onTreeDoubleClicked(const QModelIndex &index)
msgEditor->refreshView();
msgEditor->show(); //show allows the rest of the forms to keep going
break;
case 3: //a signal
case DBCItemTypes::SIG: //a signal
msgID = getParentMessageID(firstCol);
msg = dbcFile->messageHandler->findMsgByID(msgID);
QString nameString = firstCol->text(0);
@@ -318,7 +318,7 @@ void DBCMainEditor::onTreeContextMenu(const QPoint & pos)
switch (firstCol->data(0, Qt::UserRole).toInt())
{
case 1: //a node
case DBCItemTypes::NODE: //a node
idString = firstCol->text(0).split(" ")[0];
//node = dbcFile->findNodeByName(idString);
@@ -408,7 +408,7 @@ void DBCMainEditor::refreshTree()
if (node->comment.count() > 0) nodeInfo.append(" - ").append(node->comment);
nodeItem->setText(0, nodeInfo);
nodeItem->setIcon(0, nodeIcon);
nodeItem->setData(0, Qt::UserRole, 1);
nodeItem->setData(0, Qt::UserRole, DBCItemTypes::NODE);
nodeToItem.insert(node, nodeItem);
itemToNode.insert(nodeItem, node);
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);
msgItem->setText(0, msgInfo);
msgItem->setIcon(0, messageIcon);
msgItem->setData(0, Qt::UserRole, 2);
msgItem->setData(0, Qt::UserRole, DBCItemTypes::MSG);
messageToItem.insert(msg, msgItem);
itemToMessage.insert(msgItem, msg);
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);
else if (sig->isMultiplexed) sigItem->setIcon(0, multiplexedSignalIcon);
else sigItem->setIcon(0, signalIcon);
sigItem->setData(0, Qt::UserRole, 3);
sigItem->setData(0, Qt::UserRole, DBCItemTypes::SIG);
signalToItem.insert(sig, sigItem);
itemToSignal.insert(sigItem, sig);
if (sig->multiplexedChildren.count() > 0)
@@ -511,7 +511,7 @@ void DBCMainEditor::updatedMessage(DBC_MESSAGE *msg)
QTreeWidgetItem *newNodeItem = new QTreeWidgetItem();
newNodeItem->setText(0, msg->sender->name);
newNodeItem->setIcon(0, nodeIcon);
newNodeItem->setData(0, Qt::UserRole, 1);
newNodeItem->setData(0, Qt::UserRole, DBCItemTypes::NODE);
ui->treeDBC->addTopLevelItem(newNodeItem);
nodeToItem.insert(msg->sender, newNodeItem);
itemToNode.insert(newNodeItem, msg->sender);
@@ -537,7 +537,7 @@ void DBCMainEditor::updatedSignal(DBC_SIGNAL *sig)
item->setText(0, sigInfo);
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);
if (nameString.contains("(")) nameString = nameString.split(" ")[1];
@@ -577,7 +577,7 @@ void DBCMainEditor::newNode(QString nodeName)
QTreeWidgetItem *nodeItem = new QTreeWidgetItem();
nodeItem->setText(0, node.name);
nodeItem->setIcon(0, nodeIcon);
nodeItem->setData(0, Qt::UserRole, 1);
nodeItem->setData(0, Qt::UserRole, DBCItemTypes::NODE);
nodeToItem.insert(nodePtr, nodeItem);
itemToNode.insert(nodeItem, nodePtr);
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);
newMsgItem->setText(0, msgInfo);
newMsgItem->setIcon(0, messageIcon);
newMsgItem->setData(0, Qt::UserRole, 2);
newMsgItem->setData(0, Qt::UserRole, DBCItemTypes::MSG);
messageToItem.insert(msgPtr, newMsgItem);
itemToMessage.insert(newMsgItem, msgPtr);
nodeItem->addChild(newMsgItem);
@@ -665,12 +665,12 @@ void DBCMainEditor::newMessage()
nodeItem = ui->treeDBC->currentItem();
int typ = nodeItem->data(0, Qt::UserRole).toInt();
if (!nodeItem) return; //nothing selected!
if (typ == 2)
if (typ == DBCItemTypes::MSG)
{
msgItem = nodeItem;
nodeItem = nodeItem->parent();
}
if (typ == 3)
if (typ == DBCItemTypes::SIG)
{
msgItem = nodeItem->parent();
nodeItem = msgItem->parent();
@@ -701,14 +701,14 @@ void DBCMainEditor::newMessage()
{
msg.name = nodeName + "Msg" + QString::number(randGen.bounded(500));
msg.ID = 0;
msg.len = 0;
msg.len = 8;
}
}
else
{
msg.name = nodeName + "Msg" + QString::number(randGen.bounded(500));
msg.ID = 0;
msg.len = 0;
msg.len = 8;
}
msg.sender = node;
@@ -719,7 +719,7 @@ void DBCMainEditor::newMessage()
if (msg.comment.count() > 0) msgInfo.append(" - ").append(msg.comment);
newMsgItem->setText(0, msgInfo);
newMsgItem->setIcon(0, messageIcon);
newMsgItem->setData(0, Qt::UserRole, 2);
newMsgItem->setData(0, Qt::UserRole, DBCItemTypes::MSG);
messageToItem.insert(msgPtr, newMsgItem);
itemToMessage.insert(newMsgItem, msgPtr);
nodeItem->addChild(newMsgItem);
@@ -731,27 +731,37 @@ void DBCMainEditor::newSignal()
{
QTreeWidgetItem *msgItem = nullptr;
QTreeWidgetItem *sigItem = nullptr;
QTreeWidgetItem *parentItem = nullptr;
msgItem = ui->treeDBC->currentItem();
parentItem = msgItem;
if (!msgItem) return; //nothing selected!
int typ = msgItem->data(0, Qt::UserRole).toInt();
if (typ == 1) return; //can't add signals to a node!
if (typ == 3)
if (typ == DBCItemTypes::NODE) return; //can't add signals to a node!
if (typ == DBCItemTypes::SIG)
{
sigItem = msgItem;
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];
int msgID = static_cast<uint32_t>(Utility::ParseStringToNum(idString));
DBC_MESSAGE *msg = dbcFile->messageHandler->findMsgByID(msgID);
if (!msg) return; //null pointers are a bummer. Do not follow them.
DBC_SIGNAL sig;
DBC_SIGNAL *sigPtr;
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)
{
sig = *oldSig; //copy it all over
sig = *oldSig;
sig.name = sig.name + QString::number(randGen.bounded(100));
}
else
@@ -775,10 +785,10 @@ void DBCMainEditor::newSignal()
if (sig.isMultiplexed) newSigItem->setIcon(0, multiplexedSignalIcon);
else if (sig.isMultiplexor) newSigItem->setIcon(0, multiplexorSignalIcon);
else newSigItem->setIcon(0, signalIcon);
newSigItem->setData(0, Qt::UserRole, 3);
newSigItem->setData(0, Qt::UserRole, DBCItemTypes::SIG);
signalToItem.insert(sigPtr, newSigItem);
itemToSignal.insert(newSigItem, sigPtr);
msgItem->addChild(newSigItem);
parentItem->addChild(newSigItem);
ui->treeDBC->setCurrentItem(newSigItem);
dbcFile->setDirtyFlag();
}
@@ -798,7 +808,7 @@ void DBCMainEditor::deleteCurrentTreeItem()
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);
node = dbcFile->findNodeByNameAndComment(columnText);
if (!node) return;
@@ -826,7 +836,7 @@ void DBCMainEditor::deleteCurrentTreeItem()
}
break;
case 2: //cascades to removing all signals too.
case DBCItemTypes::MSG: //cascades to removing all signals too.
idString = currItem->text(0).split(" ")[0];
msgID = static_cast<uint32_t>(Utility::ParseStringToNum(idString));
msg = dbcFile->messageHandler->findMsgByID(msgID);
@@ -847,7 +857,7 @@ void DBCMainEditor::deleteCurrentTreeItem()
}
}
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?",
QMessageBox::Yes|QMessageBox::No);
if (confirmDialog == QMessageBox::Yes)
+7
View File
@@ -18,6 +18,13 @@ namespace Ui {
class DBCMainEditor;
}
enum DBCItemTypes
{
NODE = 1,
MSG = 2,
SIG = 3
};
class DBCMainEditor : public QDialog
{
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
DBC_SIGNAL *newSig = dbcMessage->sigHandler->findSignalByName(ui->cbMultiplexParent->currentText());
DBC_SIGNAL *oldParent = currentSignal->multiplexParent;
if (newSig)
if (newSig && oldParent)
{
oldParent->multiplexedChildren.removeOne(currentSignal);
currentSignal->multiplexParent = newSig;
+15 -1
View File
@@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>967</width>
<width>995</width>
<height>644</height>
</rect>
</property>
@@ -259,9 +259,23 @@
</customwidgets>
<tabstops>
<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>rbMultiplexed</tabstop>
<tabstop>rbMultiplexor</tabstop>
<tabstop>rbExtended</tabstop>
<tabstop>txtMultiplexLow</tabstop>
<tabstop>txtMultiplexHigh</tabstop>
<tabstop>cbMultiplexParent</tabstop>
<tabstop>txtComment</tabstop>
<tabstop>valuesTable</tabstop>
</tabstops>
<resources/>