Initial implementation of adding nodes, messages, signals with new tree style.
This commit is contained in:
+206
-32
@@ -6,6 +6,7 @@
|
|||||||
#include <QSettings>
|
#include <QSettings>
|
||||||
#include <QColorDialog>
|
#include <QColorDialog>
|
||||||
#include <QTableWidgetItem>
|
#include <QTableWidgetItem>
|
||||||
|
#include <QRandomGenerator>
|
||||||
#include <qevent.h>
|
#include <qevent.h>
|
||||||
#include "helpwindow.h"
|
#include "helpwindow.h"
|
||||||
|
|
||||||
@@ -25,6 +26,11 @@ DBCMainEditor::DBCMainEditor( const QVector<CANFrame> *frames, QWidget *parent)
|
|||||||
connect(ui->btnSearchNext, &QAbstractButton::clicked, this, &DBCMainEditor::handleSearchForward);
|
connect(ui->btnSearchNext, &QAbstractButton::clicked, this, &DBCMainEditor::handleSearchForward);
|
||||||
connect(ui->btnSearchPrev, &QAbstractButton::clicked, this, &DBCMainEditor::handleSearchBackward);
|
connect(ui->btnSearchPrev, &QAbstractButton::clicked, this, &DBCMainEditor::handleSearchBackward);
|
||||||
connect(ui->treeDBC, &QTreeWidget::doubleClicked, this, &DBCMainEditor::onTreeDoubleClicked);
|
connect(ui->treeDBC, &QTreeWidget::doubleClicked, this, &DBCMainEditor::onTreeDoubleClicked);
|
||||||
|
connect(ui->treeDBC, &QTreeWidget::currentItemChanged, this, &DBCMainEditor::currentItemChanged);
|
||||||
|
connect(ui->btnDelete, &QAbstractButton::clicked, this, &DBCMainEditor::deleteCurrentTreeItem);
|
||||||
|
connect(ui->btnNewNode, &QAbstractButton::clicked, this, &DBCMainEditor::newNode);
|
||||||
|
connect(ui->btnNewMessage, &QAbstractButton::clicked, this, &DBCMainEditor::newMessage);
|
||||||
|
connect(ui->btnNewSignal, &QAbstractButton::clicked, this, &DBCMainEditor::newSignal);
|
||||||
|
|
||||||
sigEditor = new DBCSignalEditor(this);
|
sigEditor = new DBCSignalEditor(this);
|
||||||
msgEditor = new DBCMessageEditor(this);
|
msgEditor = new DBCMessageEditor(this);
|
||||||
@@ -142,38 +148,6 @@ void DBCMainEditor::onCustomMenuTree(QPoint point)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DBCMainEditor::deleteCurrentTreeItem()
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
int thisRow = ui->NodesTable->currentRow();
|
|
||||||
QTableWidgetItem* thisItem = ui->NodesTable->item(thisRow, 0);
|
|
||||||
if (!thisItem) return;
|
|
||||||
QString nodeName = thisItem->text();
|
|
||||||
if (nodeName.length() > 0 && nodeName.compare("Vector__XXX", Qt::CaseInsensitive) != 0)
|
|
||||||
{
|
|
||||||
ui->NodesTable->removeRow(thisRow);
|
|
||||||
dbcFile->dbc_nodes.removeAt(thisRow);
|
|
||||||
inhibitCellChanged = true;
|
|
||||||
refreshMessagesTable(&dbcFile->dbc_nodes[0]);
|
|
||||||
ui->NodesTable->selectRow(0);
|
|
||||||
inhibitCellChanged = false;
|
|
||||||
} */
|
|
||||||
}
|
|
||||||
|
|
||||||
//void DBCMainEditor::deleteCurrentMessage()
|
|
||||||
//{
|
|
||||||
/*
|
|
||||||
int thisRow = ui->MessagesTable->currentRow();
|
|
||||||
QTableWidgetItem* thisItem = ui->MessagesTable->item(thisRow, 0);
|
|
||||||
if (!thisItem) return;
|
|
||||||
if (thisItem->text().length() > 0)
|
|
||||||
{
|
|
||||||
ui->MessagesTable->removeRow(thisRow);
|
|
||||||
dbcFile->messageHandler->removeMessageByIndex(thisRow);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
//}
|
|
||||||
|
|
||||||
void DBCMainEditor::handleSearch()
|
void DBCMainEditor::handleSearch()
|
||||||
{
|
{
|
||||||
searchItems = ui->treeDBC->findItems(ui->lineSearch->text(),Qt::MatchContains | Qt::MatchRecursive);
|
searchItems = ui->treeDBC->findItems(ui->lineSearch->text(),Qt::MatchContains | Qt::MatchRecursive);
|
||||||
@@ -208,6 +182,43 @@ void DBCMainEditor::handleSearchBackward()
|
|||||||
ui->lblSearchPos->setText("Search Results: " + QString::number(searchItemPos + 1) + " of " + QString::number(searchItems.count()));
|
ui->lblSearchPos->setText("Search Results: " + QString::number(searchItemPos + 1) + " of " + QString::number(searchItems.count()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DBCMainEditor::currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *prev)
|
||||||
|
{
|
||||||
|
Q_UNUSED(prev)
|
||||||
|
if (!current)
|
||||||
|
{
|
||||||
|
ui->btnNewMessage->setEnabled(false);
|
||||||
|
ui->btnNewSignal->setEnabled(false);
|
||||||
|
ui->btnDelete->setEnabled(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
switch (current->data(0, Qt::UserRole).toInt())
|
||||||
|
{
|
||||||
|
case 1: //node
|
||||||
|
ui->btnNewNode->setEnabled(true);
|
||||||
|
ui->btnNewMessage->setEnabled(true);
|
||||||
|
ui->btnNewSignal->setEnabled(false);
|
||||||
|
ui->btnDelete->setEnabled(true);
|
||||||
|
break;
|
||||||
|
case 2: //message
|
||||||
|
ui->btnNewNode->setEnabled(true);
|
||||||
|
ui->btnNewMessage->setEnabled(true);
|
||||||
|
ui->btnNewSignal->setEnabled(true);
|
||||||
|
ui->btnDelete->setEnabled(true);
|
||||||
|
break;
|
||||||
|
case 3: //signal
|
||||||
|
ui->btnNewNode->setEnabled(true);
|
||||||
|
ui->btnNewMessage->setEnabled(true);
|
||||||
|
ui->btnNewSignal->setEnabled(true);
|
||||||
|
ui->btnDelete->setEnabled(true);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ui->btnNewMessage->setEnabled(false);
|
||||||
|
ui->btnNewSignal->setEnabled(false);
|
||||||
|
ui->btnDelete->setEnabled(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//Double clicking is interpreted as a desire to edit the given item.
|
//Double clicking is interpreted as a desire to edit the given item.
|
||||||
void DBCMainEditor::onTreeDoubleClicked(const QModelIndex &index)
|
void DBCMainEditor::onTreeDoubleClicked(const QModelIndex &index)
|
||||||
{
|
{
|
||||||
@@ -355,3 +366,166 @@ void DBCMainEditor::updatedSignal(DBC_SIGNAL *sig)
|
|||||||
}
|
}
|
||||||
else qDebug() << "Shit?! That signal doesn't exist. That's a bug dude.";
|
else qDebug() << "Shit?! That signal doesn't exist. That's a bug dude.";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DBCMainEditor::newNode()
|
||||||
|
{
|
||||||
|
DBC_NODE node;
|
||||||
|
DBC_NODE *nodePtr;
|
||||||
|
node.name = "Unnamed" + QString::number(randGen.bounded(50000));
|
||||||
|
dbcFile->dbc_nodes.append(node);
|
||||||
|
nodePtr = dbcFile->findNodeByName(node.name);
|
||||||
|
QTreeWidgetItem *nodeItem = new QTreeWidgetItem();
|
||||||
|
nodeItem->setText(0, node.name);
|
||||||
|
nodeItem->setIcon(0, nodeIcon);
|
||||||
|
nodeItem->setData(0, Qt::UserRole, 1);
|
||||||
|
nodeToItem.insert(nodePtr, nodeItem);
|
||||||
|
ui->treeDBC->addTopLevelItem(nodeItem);
|
||||||
|
ui->treeDBC->setCurrentItem(nodeItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//create a new message with it's parent being the node we're currently within
|
||||||
|
void DBCMainEditor::newMessage()
|
||||||
|
{
|
||||||
|
QTreeWidgetItem *nodeItem = nullptr;
|
||||||
|
QTreeWidgetItem *msgItem = nullptr;
|
||||||
|
nodeItem = ui->treeDBC->currentItem();
|
||||||
|
int typ = nodeItem->data(0, Qt::UserRole).toInt();
|
||||||
|
if (typ == 2)
|
||||||
|
{
|
||||||
|
msgItem = nodeItem;
|
||||||
|
nodeItem = nodeItem->parent();
|
||||||
|
}
|
||||||
|
if (typ == 3)
|
||||||
|
{
|
||||||
|
msgItem = nodeItem->parent();
|
||||||
|
nodeItem = msgItem->parent();
|
||||||
|
}
|
||||||
|
|
||||||
|
DBC_NODE *node = dbcFile->findNodeByName(nodeItem->data(0, Qt::DisplayRole).toString());
|
||||||
|
DBC_MESSAGE msg;
|
||||||
|
DBC_MESSAGE *msgPtr;
|
||||||
|
if (msgItem)
|
||||||
|
{
|
||||||
|
QString idString = msgItem->text(0).split(" ")[0];
|
||||||
|
int msgID = static_cast<uint32_t>(Utility::ParseStringToNum(idString));
|
||||||
|
DBC_MESSAGE *oldMsg = dbcFile->messageHandler->findMsgByID(msgID);
|
||||||
|
if (oldMsg)
|
||||||
|
{
|
||||||
|
msg.name = oldMsg->name + QString::number(randGen.bounded(1000));
|
||||||
|
msg.ID = oldMsg->ID + 1;
|
||||||
|
msg.len = oldMsg->len;
|
||||||
|
msg.bgColor = oldMsg->bgColor;
|
||||||
|
msg.fgColor = oldMsg->fgColor;
|
||||||
|
msg.comment = oldMsg->comment;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
msg.name = nodeItem->text(0) + "Msg" + QString::number(randGen.bounded(500));
|
||||||
|
msg.ID = 0;
|
||||||
|
msg.len = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
msg.name = nodeItem->text(0) + "Msg" + QString::number(randGen.bounded(500));
|
||||||
|
msg.ID = 0;
|
||||||
|
msg.len = 0;
|
||||||
|
}
|
||||||
|
msg.sender = node;
|
||||||
|
|
||||||
|
dbcFile->messageHandler->addMessage(msg);
|
||||||
|
msgPtr = dbcFile->messageHandler->findMsgByIdx(dbcFile->messageHandler->getCount() - 1);
|
||||||
|
QTreeWidgetItem *newMsgItem = new QTreeWidgetItem();
|
||||||
|
QString msgInfo = Utility::formatCANID(msg.ID) + " " + msg.name;
|
||||||
|
if (msg.comment.count() > 0) msgInfo.append(" - ").append(msg.comment);
|
||||||
|
newMsgItem->setText(0, msgInfo);
|
||||||
|
newMsgItem->setIcon(0, messageIcon);
|
||||||
|
newMsgItem->setData(0, Qt::UserRole, 2);
|
||||||
|
messageToItem.insert(msgPtr, newMsgItem);
|
||||||
|
nodeItem->addChild(newMsgItem);
|
||||||
|
ui->treeDBC->setCurrentItem(newMsgItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DBCMainEditor::newSignal()
|
||||||
|
{
|
||||||
|
QTreeWidgetItem *msgItem = nullptr;
|
||||||
|
QTreeWidgetItem *sigItem = nullptr;
|
||||||
|
msgItem = ui->treeDBC->currentItem();
|
||||||
|
int typ = msgItem->data(0, Qt::UserRole).toInt();
|
||||||
|
if (typ == 3)
|
||||||
|
{
|
||||||
|
sigItem = msgItem;
|
||||||
|
msgItem = msgItem->parent();
|
||||||
|
}
|
||||||
|
|
||||||
|
QString idString = msgItem->text(0).split(" ")[0];
|
||||||
|
int msgID = static_cast<uint32_t>(Utility::ParseStringToNum(idString));
|
||||||
|
DBC_MESSAGE *msg = dbcFile->messageHandler->findMsgByID(msgID);
|
||||||
|
DBC_SIGNAL sig;
|
||||||
|
DBC_SIGNAL *sigPtr;
|
||||||
|
if (sigItem)
|
||||||
|
{
|
||||||
|
DBC_SIGNAL *oldSig = msg->sigHandler->findSignalByName(sigItem->text(0).split(" ")[0]);
|
||||||
|
if (oldSig)
|
||||||
|
{
|
||||||
|
sig = *oldSig; //copy it all over
|
||||||
|
sig.name = sig.name + QString::number(randGen.bounded(100));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sig.name = msgItem->text(0).split(" ")[1] + "Sig" + QString::number(randGen.bounded(500));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sig.name = msgItem->text(0).split(" ")[1] + "Sig" + QString::number(randGen.bounded(500));
|
||||||
|
}
|
||||||
|
|
||||||
|
msg->sigHandler->addSignal(sig);
|
||||||
|
sigPtr = msg->sigHandler->findSignalByIdx(msg->sigHandler->getCount() - 1);
|
||||||
|
QTreeWidgetItem *newSigItem = new QTreeWidgetItem();
|
||||||
|
QString sigInfo = sig.name;
|
||||||
|
if (sig.comment.count() > 0) sigInfo.append(" - ").append(sig.comment);
|
||||||
|
newSigItem->setText(0, sigInfo);
|
||||||
|
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);
|
||||||
|
signalToItem.insert(sigPtr, newSigItem);
|
||||||
|
msgItem->addChild(newSigItem);
|
||||||
|
ui->treeDBC->setCurrentItem(newSigItem);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void DBCMainEditor::deleteCurrentTreeItem()
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
int thisRow = ui->NodesTable->currentRow();
|
||||||
|
QTableWidgetItem* thisItem = ui->NodesTable->item(thisRow, 0);
|
||||||
|
if (!thisItem) return;
|
||||||
|
QString nodeName = thisItem->text();
|
||||||
|
if (nodeName.length() > 0 && nodeName.compare("Vector__XXX", Qt::CaseInsensitive) != 0)
|
||||||
|
{
|
||||||
|
ui->NodesTable->removeRow(thisRow);
|
||||||
|
dbcFile->dbc_nodes.removeAt(thisRow);
|
||||||
|
inhibitCellChanged = true;
|
||||||
|
refreshMessagesTable(&dbcFile->dbc_nodes[0]);
|
||||||
|
ui->NodesTable->selectRow(0);
|
||||||
|
inhibitCellChanged = false;
|
||||||
|
} */
|
||||||
|
}
|
||||||
|
|
||||||
|
//void DBCMainEditor::deleteCurrentMessage()
|
||||||
|
//{
|
||||||
|
/*
|
||||||
|
int thisRow = ui->MessagesTable->currentRow();
|
||||||
|
QTableWidgetItem* thisItem = ui->MessagesTable->item(thisRow, 0);
|
||||||
|
if (!thisItem) return;
|
||||||
|
if (thisItem->text().length() > 0)
|
||||||
|
{
|
||||||
|
ui->MessagesTable->removeRow(thisRow);
|
||||||
|
dbcFile->messageHandler->removeMessageByIndex(thisRow);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
//}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QIcon>
|
#include <QIcon>
|
||||||
#include <QTreeWidget>
|
#include <QTreeWidget>
|
||||||
|
#include <QRandomGenerator>
|
||||||
#include "dbchandler.h"
|
#include "dbchandler.h"
|
||||||
#include "dbcsignaleditor.h"
|
#include "dbcsignaleditor.h"
|
||||||
#include "dbcmessageeditor.h"
|
#include "dbcmessageeditor.h"
|
||||||
@@ -31,11 +32,15 @@ public slots:
|
|||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void onTreeDoubleClicked(const QModelIndex &index);
|
void onTreeDoubleClicked(const QModelIndex &index);
|
||||||
|
void currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *prev);
|
||||||
void onCustomMenuTree(QPoint);
|
void onCustomMenuTree(QPoint);
|
||||||
void deleteCurrentTreeItem();
|
void deleteCurrentTreeItem();
|
||||||
void handleSearch();
|
void handleSearch();
|
||||||
void handleSearchForward();
|
void handleSearchForward();
|
||||||
void handleSearchBackward();
|
void handleSearchBackward();
|
||||||
|
void newNode();
|
||||||
|
void newMessage();
|
||||||
|
void newSignal();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::DBCMainEditor *ui;
|
Ui::DBCMainEditor *ui;
|
||||||
@@ -56,6 +61,7 @@ private:
|
|||||||
QMap<DBC_NODE*, QTreeWidgetItem *> nodeToItem;
|
QMap<DBC_NODE*, QTreeWidgetItem *> nodeToItem;
|
||||||
QMap<DBC_MESSAGE*, QTreeWidgetItem *> messageToItem;
|
QMap<DBC_MESSAGE*, QTreeWidgetItem *> messageToItem;
|
||||||
QMap<DBC_SIGNAL*, QTreeWidgetItem *> signalToItem;
|
QMap<DBC_SIGNAL*, QTreeWidgetItem *> signalToItem;
|
||||||
|
QRandomGenerator randGen;
|
||||||
|
|
||||||
void showEvent(QShowEvent* event);
|
void showEvent(QShowEvent* event);
|
||||||
void closeEvent(QCloseEvent *event);
|
void closeEvent(QCloseEvent *event);
|
||||||
|
|||||||
Reference in New Issue
Block a user