Editing of nodes, messages, signals all works now.

Dynamically updates DBC tree if info changes.
This commit is contained in:
Collin Kidder
2020-07-22 20:57:22 -04:00
parent c89bc43795
commit 1a5010fca6
10 changed files with 105 additions and 29 deletions
+46 -8
View File
@@ -31,9 +31,9 @@ DBCMainEditor::DBCMainEditor( const QVector<CANFrame> *frames, QWidget *parent)
nodeEditor = new DBCNodeEditor(this); nodeEditor = new DBCNodeEditor(this);
//all three might potentially change the data stored and force the tree to be updated //all three might potentially change the data stored and force the tree to be updated
connect(sigEditor, &DBCSignalEditor::updatedTreeInfo, this, &DBCMainEditor::updatedTreeInfo); connect(sigEditor, &DBCSignalEditor::updatedTreeInfo, this, &DBCMainEditor::updatedSignal);
connect(msgEditor, &DBCMessageEditor::updatedTreeInfo, this, &DBCMainEditor::updatedTreeInfo); connect(msgEditor, &DBCMessageEditor::updatedTreeInfo, this, &DBCMainEditor::updatedMessage);
connect(nodeEditor, &DBCNodeEditor::updatedTreeInfo, this, &DBCMainEditor::updatedTreeInfo); connect(nodeEditor, &DBCNodeEditor::updatedTreeInfo, this, &DBCMainEditor::updatedNode);
nodeIcon = QIcon(":/icons/images/node.png"); nodeIcon = QIcon(":/icons/images/node.png");
messageIcon = QIcon(":/icons/images/message.png"); messageIcon = QIcon(":/icons/images/message.png");
@@ -266,6 +266,9 @@ void DBCMainEditor::onTreeDoubleClicked(const QModelIndex &index)
void DBCMainEditor::refreshTree() void DBCMainEditor::refreshTree()
{ {
ui->treeDBC->clear(); ui->treeDBC->clear();
nodeToItem.clear();
messageToItem.clear();
signalToItem.clear();
if (dbcFile->findNodeByName("Vector__XXX") == nullptr) if (dbcFile->findNodeByName("Vector__XXX") == nullptr)
{ {
@@ -275,18 +278,20 @@ void DBCMainEditor::refreshTree()
dbcFile->dbc_nodes.append(newNode); dbcFile->dbc_nodes.append(newNode);
} }
foreach (DBC_NODE node, dbcFile->dbc_nodes) for (int n = 0; n < dbcFile->dbc_nodes.count(); n++)
{ {
DBC_NODE *node = &dbcFile->dbc_nodes[n];
QTreeWidgetItem *nodeItem = new QTreeWidgetItem(); QTreeWidgetItem *nodeItem = new QTreeWidgetItem();
QString nodeInfo = node.name; QString nodeInfo = node->name;
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, 1);
nodeToItem.insert(node, nodeItem);
for (int x = 0; x < dbcFile->messageHandler->getCount(); x++) for (int x = 0; x < dbcFile->messageHandler->getCount(); x++)
{ {
DBC_MESSAGE *msg = dbcFile->messageHandler->findMsgByIdx(x); DBC_MESSAGE *msg = dbcFile->messageHandler->findMsgByIdx(x);
if (msg->sender->name == node.name) if (msg->sender->name == node->name)
{ {
QTreeWidgetItem *msgItem = new QTreeWidgetItem(nodeItem); QTreeWidgetItem *msgItem = new QTreeWidgetItem(nodeItem);
QString msgInfo = Utility::formatCANID(msg->ID) + " " + msg->name; QString msgInfo = Utility::formatCANID(msg->ID) + " " + msg->name;
@@ -294,6 +299,7 @@ void DBCMainEditor::refreshTree()
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, 2);
messageToItem.insert(msg, msgItem);
for (int i = 0; i < msg->sigHandler->getCount(); i++) for (int i = 0; i < msg->sigHandler->getCount(); i++)
{ {
DBC_SIGNAL *sig = msg->sigHandler->findSignalByIdx(i); DBC_SIGNAL *sig = msg->sigHandler->findSignalByIdx(i);
@@ -305,6 +311,7 @@ void DBCMainEditor::refreshTree()
else if (sig->isMultiplexor) sigItem->setIcon(0, multiplexorSignalIcon); else if (sig->isMultiplexor) sigItem->setIcon(0, multiplexorSignalIcon);
else sigItem->setIcon(0, signalIcon); else sigItem->setIcon(0, signalIcon);
sigItem->setData(0, Qt::UserRole, 3); sigItem->setData(0, Qt::UserRole, 3);
signalToItem.insert(sig, sigItem);
} }
} }
} }
@@ -313,7 +320,38 @@ void DBCMainEditor::refreshTree()
ui->treeDBC->sortItems(0, Qt::SortOrder::AscendingOrder); //sort the display list for ease in viewing by mere mortals, helps me a lot. ui->treeDBC->sortItems(0, Qt::SortOrder::AscendingOrder); //sort the display list for ease in viewing by mere mortals, helps me a lot.
} }
void DBCMainEditor::updatedTreeInfo(QString oldData, QString newData, int type) void DBCMainEditor::updatedNode(DBC_NODE *node)
{ {
if (nodeToItem.contains(node))
{
QTreeWidgetItem *item = nodeToItem[node];
QString nodeInfo = node->name;
if (node->comment.count() > 0) nodeInfo.append(" - ").append(node->comment);
item->setText(0, nodeInfo);
}
else qDebug() << "That node doesn't exist. That's a bug dude.";
}
void DBCMainEditor::updatedMessage(DBC_MESSAGE *msg)
{
if (messageToItem.contains(msg))
{
QTreeWidgetItem *item = messageToItem.value(msg);
QString msgInfo = Utility::formatCANID(msg->ID) + " " + msg->name;
if (msg->comment.count() > 0) msgInfo.append(" - ").append(msg->comment);
item->setText(0, msgInfo);
}
else qDebug() << "Shit?! That mesage doesn't exist. That's a bug dude.";
}
void DBCMainEditor::updatedSignal(DBC_SIGNAL *sig)
{
if (signalToItem.contains(sig))
{
QTreeWidgetItem *item = signalToItem.value(sig);
QString sigInfo = sig->name;
if (sig->comment.count() > 0) sigInfo.append(" - ").append(sig->comment);
item->setText(0, sigInfo);
}
else qDebug() << "Shit?! That signal doesn't exist. That's a bug dude.";
} }
+6 -1
View File
@@ -25,7 +25,9 @@ public:
void setFileIdx(int idx); void setFileIdx(int idx);
public slots: public slots:
void updatedTreeInfo(QString oldData, QString newData, int type); void updatedNode(DBC_NODE *node);
void updatedMessage(DBC_MESSAGE *msg);
void updatedSignal(DBC_SIGNAL *sig);
private slots: private slots:
void onTreeDoubleClicked(const QModelIndex &index); void onTreeDoubleClicked(const QModelIndex &index);
@@ -51,6 +53,9 @@ private:
QIcon multiplexedSignalIcon; QIcon multiplexedSignalIcon;
QList<QTreeWidgetItem *> searchItems; QList<QTreeWidgetItem *> searchItems;
int searchItemPos; int searchItemPos;
QMap<DBC_NODE*, QTreeWidgetItem *> nodeToItem;
QMap<DBC_MESSAGE*, QTreeWidgetItem *> messageToItem;
QMap<DBC_SIGNAL*, QTreeWidgetItem *> signalToItem;
void showEvent(QShowEvent* event); void showEvent(QShowEvent* event);
void closeEvent(QCloseEvent *event); void closeEvent(QCloseEvent *event);
+31
View File
@@ -18,6 +18,37 @@ DBCMessageEditor::DBCMessageEditor(QWidget *parent) :
dbcHandler = DBCHandler::getReference(); dbcHandler = DBCHandler::getReference();
dbcMessage = nullptr; dbcMessage = nullptr;
connect(ui->lineComment, &QLineEdit::editingFinished,
[=]()
{
if (dbcMessage == nullptr) return;
dbcMessage->comment = ui->lineComment->text();
emit updatedTreeInfo(dbcMessage);
});
connect(ui->lineFrameID, &QLineEdit::editingFinished,
[=]()
{
if (dbcMessage == nullptr) return;
dbcMessage->ID = Utility::ParseStringToNum(ui->lineFrameID->text());
emit updatedTreeInfo(dbcMessage);
});
connect(ui->lineMsgName, &QLineEdit::editingFinished,
[=]()
{
if (dbcMessage == nullptr) return;
dbcMessage->name = ui->lineMsgName->text().simplified().replace(' ', '_');
emit updatedTreeInfo(dbcMessage);
});
connect(ui->lineFrameLen, &QLineEdit::editingFinished,
[=]()
{
if (dbcMessage == nullptr) return;
dbcMessage->len = Utility::ParseStringToNum(ui->lineFrameLen->text());
});
connect(ui->btnTextColor, &QAbstractButton::clicked, connect(ui->btnTextColor, &QAbstractButton::clicked,
[=]() [=]()
{ {
+1 -1
View File
@@ -22,7 +22,7 @@ public:
void refreshView(); void refreshView();
signals: signals:
void updatedTreeInfo(QString oldData, QString newData, int type); void updatedTreeInfo(DBC_MESSAGE *msg);
private: private:
Ui::DBCMessageEditor *ui; Ui::DBCMessageEditor *ui;
+16
View File
@@ -18,6 +18,22 @@ DBCNodeEditor::DBCNodeEditor(QWidget *parent) :
dbcHandler = DBCHandler::getReference(); dbcHandler = DBCHandler::getReference();
dbcNode = nullptr; dbcNode = nullptr;
connect(ui->lineComment, &QLineEdit::editingFinished,
[=]()
{
if (dbcNode == nullptr) return;
dbcNode->comment = ui->lineComment->text();
emit updatedTreeInfo(dbcNode);
});
connect(ui->lineMsgName, &QLineEdit::editingFinished,
[=]()
{
if (dbcNode == nullptr) return;
dbcNode->name = ui->lineMsgName->text();
emit updatedTreeInfo(dbcNode);
});
installEventFilter(this); installEventFilter(this);
} }
+1 -1
View File
@@ -22,7 +22,7 @@ public:
void refreshView(); void refreshView();
signals: signals:
void updatedTreeInfo(QString oldData, QString newData, int type); void updatedTreeInfo(DBC_NODE *node);
private: private:
Ui::DBCNodeEditor *ui; Ui::DBCNodeEditor *ui;
+2 -2
View File
@@ -125,7 +125,7 @@ DBCSignalEditor::DBCSignalEditor(QWidget *parent) :
{ {
if (currentSignal == nullptr) return; if (currentSignal == nullptr) return;
currentSignal->comment = ui->txtComment->text().simplified().replace(' ', '_'); currentSignal->comment = ui->txtComment->text().simplified().replace(' ', '_');
//updatedTreeInfo(); emit updatedTreeInfo(currentSignal);
}); });
connect(ui->txtUnitName, &QLineEdit::editingFinished, connect(ui->txtUnitName, &QLineEdit::editingFinished,
@@ -153,7 +153,7 @@ DBCSignalEditor::DBCSignalEditor(QWidget *parent) :
QString tempNameStr = ui->txtName->text().simplified().replace(' ', '_'); QString tempNameStr = ui->txtName->text().simplified().replace(' ', '_');
if (tempNameStr.length() > 0) currentSignal->name = tempNameStr; if (tempNameStr.length() > 0) currentSignal->name = tempNameStr;
//need to update the tree too. //need to update the tree too.
//updatedTreeInfo(); emit updatedTreeInfo(currentSignal);
}); });
connect(ui->txtMultiplexValue, &QLineEdit::editingFinished, connect(ui->txtMultiplexValue, &QLineEdit::editingFinished,
+1 -1
View File
@@ -23,7 +23,7 @@ public:
void refreshView(); void refreshView();
signals: signals:
void updatedTreeInfo(QString oldData, QString newData, int type); void updatedTreeInfo(DBC_SIGNAL *sig);
private slots: private slots:
void bitfieldClicked(int x, int y); void bitfieldClicked(int x, int y);
-7
View File
@@ -109,13 +109,6 @@
<item> <item>
<widget class="QListWidget" name="listSample"/> <widget class="QListWidget" name="listSample"/>
</item> </item>
<item>
<widget class="QPushButton" name="btnClose">
<property name="text">
<string>Close</string>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
<resources/> <resources/>
+1 -8
View File
@@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>311</width> <width>311</width>
<height>128</height> <height>88</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@@ -38,13 +38,6 @@
</item> </item>
</layout> </layout>
</item> </item>
<item>
<widget class="QPushButton" name="btnClose">
<property name="text">
<string>Close</string>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
<resources/> <resources/>