From 30ff8c7414966eaaf59573b269f3542bb3a6c6d9 Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Fri, 10 Jul 2015 21:46:52 -0400 Subject: [PATCH] More implementation of signal editing. It's getting close to operational now. --- dbcsignaleditor.cpp | 96 +++++++++++++++++++++++++++++++++++++++++++++ dbcsignaleditor.h | 5 +++ 2 files changed, 101 insertions(+) diff --git a/dbcsignaleditor.cpp b/dbcsignaleditor.cpp index b16bd84..d4350cc 100644 --- a/dbcsignaleditor.cpp +++ b/dbcsignaleditor.cpp @@ -1,6 +1,8 @@ #include "dbcsignaleditor.h" #include "ui_dbcsignaleditor.h" +#include #include +#include #include DBCSignalEditor::DBCSignalEditor(DBCHandler *handler, QWidget *parent) : @@ -11,6 +13,8 @@ DBCSignalEditor::DBCSignalEditor(DBCHandler *handler, QWidget *parent) : readSettings(); + qsrand(QDateTime::currentMSecsSinceEpoch()); + dbcHandler = handler; dbcMessage = NULL; currentSignal = NULL; @@ -36,6 +40,11 @@ DBCSignalEditor::DBCSignalEditor(DBCHandler *handler, QWidget *parent) : connect(ui->signalsList, SIGNAL(currentRowChanged(int)), this, SLOT(clickSignalList(int))); connect(ui->bitfield, SIGNAL(gridClicked(int,int)), this, SLOT(bitfieldClicked(int,int))); + connect(ui->signalsList, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(onCustomMenuSignals(QPoint))); + ui->signalsList->setContextMenuPolicy(Qt::CustomContextMenu); + connect(ui->valuesTable, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(onCustomMenuValues(QPoint))); + ui->valuesTable->setContextMenuPolicy(Qt::CustomContextMenu); + //now with 100% more lambda expressions just to make it interesting (and shorter, and easier...) connect(ui->cbIntelFormat, &QCheckBox::toggled, @@ -134,6 +143,7 @@ DBCSignalEditor::DBCSignalEditor(DBCHandler *handler, QWidget *parent) : //ui->signalsList->currentItem()->setText(currentSignal->name); }); + } DBCSignalEditor::~DBCSignalEditor() @@ -187,6 +197,71 @@ void DBCSignalEditor::showEvent(QShowEvent* event) } } +void DBCSignalEditor::onCustomMenuSignals(QPoint point) +{ + QMenu *menu = new QMenu(this); + menu->setAttribute(Qt::WA_DeleteOnClose); + + menu->addAction(tr("Add a new signal"), this, SLOT(addNewSignal())); + menu->addAction(tr("Delete currently selected signal"), this, SLOT(deleteCurrentSignal())); + + menu->popup(ui->signalsList->mapToGlobal(point)); +} + +void DBCSignalEditor::onCustomMenuValues(QPoint point) +{ + QMenu *menu = new QMenu(this); + menu->setAttribute(Qt::WA_DeleteOnClose); + + menu->addAction(tr("Delete currently selected value"), this, SLOT(deleteCurrentValue())); + + menu->popup(ui->valuesTable->mapToGlobal(point)); +} + +void DBCSignalEditor::addNewSignal() +{ + int num = qrand() % 70000; + QString newName = "SIGNAL" + QString::number(num); + DBC_SIGNAL newSig; + newSig.name = newName; + newSig.bias = 0.0; + newSig.factor = 0.0; + newSig.intelByteOrder = true; + newSig.max = 0.0; + newSig.min = 0.0; + newSig.receiver = &dbcHandler->dbc_nodes[0]; + newSig.signalSize = 1; + newSig.startBit = 0; + newSig.valType = UNSIGNED_INT; + ui->signalsList->addItem(newName); + dbcMessage->msgSignals.append(newSig); +} + +void DBCSignalEditor::deleteCurrentSignal() +{ + int currIdx = ui->signalsList->currentRow(); + if (currIdx > -1) + { + delete(ui->signalsList->item(currIdx)); + dbcMessage->msgSignals.removeAt(currIdx); + currentSignal = NULL; + currIdx = ui->signalsList->currentRow(); + if (currIdx > -1) currentSignal = &dbcMessage->msgSignals[currIdx]; + fillSignalForm(currentSignal); + fillValueTable(currentSignal); + } +} + +void DBCSignalEditor::deleteCurrentValue() +{ + int currIdx = ui->valuesTable->currentRow(); + if (currIdx > -1) + { + ui->valuesTable->removeRow(currIdx); + currentSignal->valList.removeAt(currIdx); + } +} + void DBCSignalEditor::refreshSignalsList() { ui->signalsList->clear(); @@ -201,6 +276,24 @@ void DBCSignalEditor::fillSignalForm(DBC_SIGNAL *sig) { unsigned char bitpattern[8]; + if (sig == NULL) + { + ui->txtName->setText(""); + ui->txtBias->setText(""); + ui->txtBitLength->setText(""); + ui->txtComment->setText(""); + ui->txtMaxVal->setText(""); + ui->txtMinVal->setText(""); + ui->txtScale->setText(""); + ui->txtUnitName->setText(""); + memset(bitpattern, 0, 8); //clear it out + ui->bitfield->setReference(bitpattern, false); + ui->bitfield->updateData(bitpattern, true); + ui->comboReceiver->setCurrentIndex(0); + ui->comboType->setCurrentIndex(0); + return; + } + ui->txtName->setText(sig->name); ui->txtBias->setText(QString::number(sig->bias)); ui->txtBitLength->setText(QString::number(sig->signalSize)); @@ -274,6 +367,9 @@ void DBCSignalEditor::fillValueTable(DBC_SIGNAL *sig) int rowIdx; ui->valuesTable->clearContents(); ui->valuesTable->setRowCount(0); + + if (sig == NULL) return; + for (int i = 0; i < sig->valList.count(); i++) { QTableWidgetItem *val = new QTableWidgetItem(QString::number(sig->valList[i].value)); diff --git a/dbcsignaleditor.h b/dbcsignaleditor.h index 0bfe6c4..d19ae06 100644 --- a/dbcsignaleditor.h +++ b/dbcsignaleditor.h @@ -21,6 +21,11 @@ public: private slots: void clickSignalList(int); void bitfieldClicked(int x, int y); + void onCustomMenuSignals(QPoint); + void onCustomMenuValues(QPoint); + void addNewSignal(); + void deleteCurrentSignal(); + void deleteCurrentValue(); private: Ui::DBCSignalEditor *ui;