From c855a0998b20b4c6a5d962d4e982454bdf7df9e1 Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Wed, 10 Jun 2015 19:27:58 -0400 Subject: [PATCH] Now it is possible to delete nodes and messages. Also fixed display of messageboxes for when you try to duplicate message/node names or IDs. --- dbcmaineditor.cpp | 70 +++++++++++++++++++++++++++++++++++++++++++---- dbcmaineditor.h | 4 +++ 2 files changed, 69 insertions(+), 5 deletions(-) diff --git a/dbcmaineditor.cpp b/dbcmaineditor.cpp index 7231d76..c5a8ace 100644 --- a/dbcmaineditor.cpp +++ b/dbcmaineditor.cpp @@ -1,6 +1,7 @@ #include "dbcmaineditor.h" #include "ui_dbcmaineditor.h" +#include #include DBCMainEditor::DBCMainEditor(DBCHandler *handler, QWidget *parent) : @@ -32,10 +33,13 @@ DBCMainEditor::DBCMainEditor(DBCHandler *handler, QWidget *parent) : connect(ui->NodesTable, SIGNAL(cellChanged(int,int)), this, SLOT(onCellChangedNode(int,int))); connect(ui->NodesTable, SIGNAL(cellClicked(int,int)), this, SLOT(onCellClickedNode(int,int))); - + connect(ui->NodesTable, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(onCustomMenuNode(QPoint))); + ui->NodesTable->setContextMenuPolicy(Qt::CustomContextMenu); connect(ui->MessagesTable, SIGNAL(cellChanged(int,int)), this, SLOT(onCellChangedMessage(int,int))); connect(ui->MessagesTable, SIGNAL(cellClicked(int,int)), this, SLOT(onCellClickedMessage(int,int))); + connect(ui->MessagesTable, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(onCustomMenuMessage(QPoint))); + ui->MessagesTable->setContextMenuPolicy(Qt::CustomContextMenu); sigEditor = new DBCSignalEditor(handler); } @@ -59,6 +63,53 @@ DBCMainEditor::~DBCMainEditor() delete sigEditor; } +void DBCMainEditor::onCustomMenuNode(QPoint point) +{ + QMenu *menu = new QMenu(this); + menu->setAttribute(Qt::WA_DeleteOnClose); + + menu->addAction(tr("Delete currently selected node"), this, SLOT(deleteCurrentNode())); + + menu->popup(ui->NodesTable->mapToGlobal(point)); + +} + +void DBCMainEditor::onCustomMenuMessage(QPoint point) +{ + QMenu *menu = new QMenu(this); + menu->setAttribute(Qt::WA_DeleteOnClose); + + menu->addAction(tr("Delete currently selected message"), this, SLOT(deleteCurrentMessage())); + + menu->popup(ui->MessagesTable->mapToGlobal(point)); + +} + +void DBCMainEditor::deleteCurrentNode() +{ + int thisRow = ui->NodesTable->currentRow(); + QString nodeName = ui->NodesTable->item(thisRow, 0)->text(); + if (nodeName.length() > 0 && nodeName.compare("Vector_XXX", Qt::CaseInsensitive) != 0) + { + ui->NodesTable->removeRow(thisRow); + dbcHandler->dbc_nodes.removeAt(thisRow); + inhibitCellChanged = true; + refreshMessagesTable(&dbcHandler->dbc_nodes[0]); + ui->NodesTable->selectRow(0); + inhibitCellChanged = false; + } +} + +void DBCMainEditor::deleteCurrentMessage() +{ + int thisRow = ui->MessagesTable->currentRow(); + if (ui->MessagesTable->item(thisRow, 0)->text().length() > 0) + { + ui->MessagesTable->removeRow(thisRow); + dbcHandler->dbc_messages.removeAt(thisRow); + } +} + void DBCMainEditor::onCellChangedNode(int row,int col) { if (inhibitCellChanged) return; @@ -77,8 +128,9 @@ void DBCMainEditor::onCellChangedNode(int row,int col) if (dbcHandler->findNodeByName(newName) != NULL) //duplicates an existing node! { QMessageBox msg; + msg.setParent(0); msg.setText("An existing node with that name already exists! Aborting!"); - msg.show(); + msg.exec(); return; } newNode.name = newName; @@ -98,7 +150,8 @@ void DBCMainEditor::onCellChangedNode(int row,int col) DBC_NODE *oldNode = dbcHandler->findNodeByIdx(row); QString nodeName = ui->NodesTable->item(row, col)->text().simplified().replace(' ', '_'); if (oldNode == NULL) return; - oldNode->name = nodeName; + if (row != 0) oldNode->name = nodeName; + else nodeName = oldNode->name; inhibitCellChanged = true; QTableWidgetItem *widgetName = new QTableWidgetItem(nodeName); ui->NodesTable->setItem(row, col, widgetName); @@ -139,8 +192,9 @@ void DBCMainEditor::onCellChangedMessage(int row,int col) if (dbcHandler->findMsgByID(msgID) != NULL) { QMessageBox msg; + msg.setParent(0); msg.setText("An existing msg with that ID already exists! Aborting!"); - msg.show(); + msg.exec(); return; } newMsg.ID = msgID; @@ -168,8 +222,9 @@ void DBCMainEditor::onCellChangedMessage(int row,int col) if (dbcHandler->findMsgByName(msgName) != NULL) { QMessageBox msg; + msg.setParent(0); msg.setText("An existing msg with that name already exists! Aborting!"); - msg.show(); + msg.exec(); return; } newMsg.ID = -1; @@ -276,6 +331,11 @@ void DBCMainEditor::onCellClickedMessage(int row, int col) DBC_MESSAGE *message = dbcHandler->findMsgByID(idString.toInt(NULL, 16)); sigEditor->setMessageRef(message); sigEditor->exec(); //blocks this window from being active until we're done + //now update the displayed # of signals + inhibitCellChanged = true; + QTableWidgetItem *replacement = new QTableWidgetItem(QString::number(message->msgSignals.count())); + ui->MessagesTable->setItem(row, col, replacement); + inhibitCellChanged = false; } } diff --git a/dbcmaineditor.h b/dbcmaineditor.h index 0454def..95fc587 100644 --- a/dbcmaineditor.h +++ b/dbcmaineditor.h @@ -23,6 +23,10 @@ private slots: void onCellClickedNode(int, int); void onCellClickedMessage(int, int); void onCellChangedMessage(int,int); + void onCustomMenuNode(QPoint); + void onCustomMenuMessage(QPoint); + void deleteCurrentNode(); + void deleteCurrentMessage(); private: Ui::DBCMainEditor *ui;