diff --git a/dbc/dbcmaineditor.cpp b/dbc/dbcmaineditor.cpp
index e3ea24e..2aa5825 100644
--- a/dbc/dbcmaineditor.cpp
+++ b/dbc/dbcmaineditor.cpp
@@ -368,6 +368,32 @@ void DBCMainEditor::updatedMessage(DBC_MESSAGE *msg)
QString msgInfo = Utility::formatCANID(msg->ID) + " " + msg->name;
if (msg->comment.count() > 0) msgInfo.append(" - ").append(msg->comment);
item->setText(0, msgInfo);
+ //editor could have changed the parent Node too. Have to figure out which node
+ //is parent in the GUI and compare that to parent in the data.
+ DBC_NODE *oldParent = dbcFile->findNodeByName(item->parent()->text(0));
+ if (oldParent != msg->sender)
+ {
+ qDebug() << "Changed parent of message. Trying to rehome it.";
+ QTreeWidgetItem *newParent = nullptr;
+ if (nodeToItem.contains(msg->sender)) newParent = nodeToItem.value(msg->sender);
+ else //new node created within message editor. Create the item and then use it
+ {
+ QTreeWidgetItem *newNodeItem = new QTreeWidgetItem();
+ newNodeItem->setText(0, msg->sender->name);
+ newNodeItem->setIcon(0, nodeIcon);
+ newNodeItem->setData(0, Qt::UserRole, 1);
+ ui->treeDBC->addTopLevelItem(newNodeItem);
+ nodeToItem.insert(msg->sender, newNodeItem);
+ itemToNode.insert(newNodeItem, msg->sender);
+ newParent = newNodeItem;
+ }
+
+ QTreeWidgetItem *prevParent = nodeToItem.value(oldParent);
+ prevParent->removeChild(item);
+ newParent->addChild(item);
+ ui->treeDBC->setCurrentItem(item);
+ ui->treeDBC->sortItems(0, Qt::AscendingOrder); //resort because we just moved an item
+ }
}
else qDebug() << "That mesage doesn't exist. That's a bug dude.";
}
diff --git a/dbc/dbcmessageeditor.cpp b/dbc/dbcmessageeditor.cpp
index 8b3a426..2366696 100644
--- a/dbc/dbcmessageeditor.cpp
+++ b/dbc/dbcmessageeditor.cpp
@@ -17,11 +17,13 @@ DBCMessageEditor::DBCMessageEditor(QWidget *parent) :
dbcHandler = DBCHandler::getReference();
dbcMessage = nullptr;
+ suppressEditCallbacks = false;
connect(ui->lineComment, &QLineEdit::editingFinished,
[=]()
{
if (dbcMessage == nullptr) return;
+ if (suppressEditCallbacks) return;
if (dbcMessage->comment != ui->lineComment->text()) dbcFile->setDirtyFlag();
dbcMessage->comment = ui->lineComment->text();
emit updatedTreeInfo(dbcMessage);
@@ -31,6 +33,7 @@ DBCMessageEditor::DBCMessageEditor(QWidget *parent) :
[=]()
{
if (dbcMessage == nullptr) return;
+ if (suppressEditCallbacks) return;
if (dbcMessage->ID != Utility::ParseStringToNum(ui->lineFrameID->text())) dbcFile->setDirtyFlag();
dbcMessage->ID = Utility::ParseStringToNum(ui->lineFrameID->text());
emit updatedTreeInfo(dbcMessage);
@@ -40,6 +43,7 @@ DBCMessageEditor::DBCMessageEditor(QWidget *parent) :
[=]()
{
if (dbcMessage == nullptr) return;
+ if (suppressEditCallbacks) return;
if (dbcMessage->name != ui->lineMsgName->text().simplified().replace(' ', '_')) dbcFile->setDirtyFlag();
dbcMessage->name = ui->lineMsgName->text().simplified().replace(' ', '_');
emit updatedTreeInfo(dbcMessage);
@@ -49,13 +53,47 @@ DBCMessageEditor::DBCMessageEditor(QWidget *parent) :
[=]()
{
if (dbcMessage == nullptr) return;
+ if (suppressEditCallbacks) return;
if (dbcMessage->len != Utility::ParseStringToNum(ui->lineFrameLen->text())) dbcFile->setDirtyFlag();
dbcMessage->len = Utility::ParseStringToNum(ui->lineFrameLen->text());
});
+ connect(ui->comboSender, &QComboBox::currentTextChanged,
+ [=](const QString newText)
+ {
+ if (dbcMessage == nullptr) return;
+ if (suppressEditCallbacks) return;
+ DBC_NODE *node = dbcFile->findNodeByName(newText);
+ if (!node) return;
+ if (node != dbcMessage->sender) dbcFile->setDirtyFlag();
+ dbcMessage->sender = node;
+ emit updatedTreeInfo(dbcMessage);
+ });
+
+ connect(ui->comboSender->lineEdit(), &QLineEdit::editingFinished,
+ [=]()
+ {
+ if (dbcMessage == nullptr) return;
+ if (suppressEditCallbacks) return;
+ QString newText = ui->comboSender->currentText();
+ DBC_NODE *node = dbcFile->findNodeByName(newText);
+ if (!node)
+ {
+ DBC_NODE newNode;
+ newNode.name = newText;
+ dbcFile->dbc_nodes.append(newNode);
+ node = dbcFile->findNodeByName(newText);
+ ui->comboSender->addItem(newText);
+ }
+ if (node != dbcMessage->sender) dbcFile->setDirtyFlag();
+ dbcMessage->sender = node;
+ emit updatedTreeInfo(dbcMessage);
+ });
+
connect(ui->btnTextColor, &QAbstractButton::clicked,
[=]()
{
+ if (suppressEditCallbacks) return;
QColor newColor = QColorDialog::getColor(dbcMessage->fgColor);
if (dbcMessage->fgColor != newColor) dbcFile->setDirtyFlag();
dbcMessage->fgColor = newColor;
@@ -77,6 +115,7 @@ DBCMessageEditor::DBCMessageEditor(QWidget *parent) :
connect(ui->btnBackgroundColor, &QAbstractButton::clicked,
[=]()
{
+ if (suppressEditCallbacks) return;
QColor newColor = QColorDialog::getColor(dbcMessage->bgColor);
if (dbcMessage->bgColor != newColor) dbcFile->setDirtyFlag();
dbcMessage->bgColor = newColor;
@@ -133,10 +172,13 @@ void DBCMessageEditor::setFileIdx(int idx)
if (idx < 0 || idx > dbcHandler->getFileCount() - 1) return;
dbcFile = dbcHandler->getFileByIdx(idx);
+ suppressEditCallbacks = true;
+ ui->comboSender->clear();
for (int x = 0; x < dbcFile->dbc_nodes.count(); x++)
{
ui->comboSender->addItem(dbcFile->dbc_nodes[x].name);
}
+ suppressEditCallbacks = false;
}
void DBCMessageEditor::readSettings()
@@ -175,10 +217,12 @@ void DBCMessageEditor::showEvent(QShowEvent* event)
void DBCMessageEditor::refreshView()
{
+ suppressEditCallbacks = true;
+
ui->lineComment->setText(dbcMessage->comment);
ui->lineFrameID->setText(Utility::formatCANID(dbcMessage->ID));
ui->lineMsgName->setText(dbcMessage->name);
- ui->lineFrameLen->setText(QString::number(dbcMessage->len));
+ ui->lineFrameLen->setText(QString::number(dbcMessage->len));
for (int i = 0; i < ui->comboSender->count(); i++)
{
if (ui->comboSender->itemText(i) == dbcMessage->sender->name)
@@ -188,6 +232,8 @@ void DBCMessageEditor::refreshView()
}
}
+ suppressEditCallbacks = false;
+
generateSampleText();
}
diff --git a/dbc/dbcmessageeditor.h b/dbc/dbcmessageeditor.h
index 5388466..473b54d 100644
--- a/dbc/dbcmessageeditor.h
+++ b/dbc/dbcmessageeditor.h
@@ -30,6 +30,7 @@ private:
DBCHandler *dbcHandler;
DBC_MESSAGE *dbcMessage;
DBCFile *dbcFile;
+ bool suppressEditCallbacks;
void closeEvent(QCloseEvent *event);
bool eventFilter(QObject *obj, QEvent *event);
diff --git a/ui/dbcmessageeditor.ui b/ui/dbcmessageeditor.ui
index c4b3a2a..7ce6554 100644
--- a/ui/dbcmessageeditor.ui
+++ b/ui/dbcmessageeditor.ui
@@ -78,7 +78,11 @@
-
-
+
+
+ true
+
+
-