From d03c439ce38449a61fb93e97fb81764f78475016 Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Tue, 2 Jun 2015 21:27:11 -0400 Subject: [PATCH] More implementation of DBC signal editor (Now viewing is pretty well completely working) --- dbcsignaleditor.cpp | 154 ++++++++++++++++++++++++++++++++++---------- dbcsignaleditor.h | 7 ++ dbcsignaleditor.ui | 32 ++++----- 3 files changed, 143 insertions(+), 50 deletions(-) diff --git a/dbcsignaleditor.cpp b/dbcsignaleditor.cpp index c5533e7..2226958 100644 --- a/dbcsignaleditor.cpp +++ b/dbcsignaleditor.cpp @@ -8,44 +8,26 @@ DBCSignalEditor::DBCSignalEditor(DBCHandler *handler, QWidget *parent) : ui->setupUi(this); dbcHandler = handler; dbcMessage = NULL; -/* - QStringList headers; - headers << "Node Name" << "Comment"; - ui->signalsTable->setColumnCount(2); - ui->signalsTable->setColumnWidth(0, 240); - ui->signalsTable->setColumnWidth(1, 700); - ui->signalsTable->setHorizontalHeaderLabels(headers); - ui->signalsTable->horizontalHeader()->setStretchLastSection(true); - name, - a start bit, - a length, - byte order (intel or motorola), - a type (signed, unsigned, float, string), - a scaling factor, - a bias, - a minimum and - maximum, - a receiving node, - a unit name, - an optional comment, - and an optional value list - - - QStringList headers2; - headers2 << "Msg ID" << "Msg Name" << "Data Len" << "Signals" << "Comment"; - ui->MessagesTable->setColumnCount(5); - ui->MessagesTable->setColumnWidth(0, 80); - ui->MessagesTable->setColumnWidth(1, 240); - ui->MessagesTable->setColumnWidth(2, 80); - ui->MessagesTable->setColumnWidth(3, 80); - ui->MessagesTable->setColumnWidth(4, 340); - ui->MessagesTable->setHorizontalHeaderLabels(headers2); - ui->MessagesTable->horizontalHeader()->setStretchLastSection(true); + headers2 << "Value" << "Text"; + ui->valuesTable->setColumnCount(2); + ui->valuesTable->setColumnWidth(0, 200); + ui->valuesTable->setColumnWidth(1, 440); + ui->valuesTable->setHorizontalHeaderLabels(headers2); + ui->valuesTable->horizontalHeader()->setStretchLastSection(true); -*/ + ui->comboType->addItem("INTEGER"); + ui->comboType->addItem("SINGLE PRECISION"); + ui->comboType->addItem("DOUBLE PRECISION"); + ui->comboType->addItem("STRING"); + for (int x = 0; x < dbcHandler->dbc_nodes.count(); x++) + { + ui->comboReceiver->addItem(dbcHandler->dbc_nodes[x].name); + } + + connect(ui->signalsList, SIGNAL(currentRowChanged(int)), this, SLOT(clickSignalList(int))); } DBCSignalEditor::~DBCSignalEditor() @@ -62,4 +44,108 @@ void DBCSignalEditor::showEvent(QShowEvent* event) { QDialog::showEvent(event); + refreshSignalsList(); + fillSignalForm(&dbcMessage->msgSignals[0]); + fillValueTable(&dbcMessage->msgSignals[0]); +} + +void DBCSignalEditor::refreshSignalsList() +{ + ui->signalsList->clear(); + for (int x = 0; x < dbcMessage->msgSignals.count(); x++) + { + DBC_SIGNAL sig = dbcMessage->msgSignals.at(x); + ui->signalsList->addItem(sig.name); + } +} + +void DBCSignalEditor::fillSignalForm(DBC_SIGNAL *sig) +{ + unsigned char bitpattern[8]; + + + + + ui->txtName->setText(sig->name); + ui->txtBias->setText(QString::number(sig->bias)); + ui->txtBitLength->setText(QString::number(sig->signalSize)); + ui->txtComment->setText(sig->comment); + ui->txtMaxVal->setText(QString::number(sig->max)); + ui->txtMinVal->setText(QString::number(sig->min)); + ui->txtScale->setText(QString::number(sig->factor)); + ui->txtUnitName->setText(sig->unitName); + + memset(bitpattern, 0, 8); //clear it out first. + int startBit, endBit, startByte, bitWithinByteStart; + + startBit = sig->startBit; + startByte = startBit / 8; + bitWithinByteStart = startBit % 8; + if (sig->intelByteOrder) + { + bitWithinByteStart = 7 - bitWithinByteStart; + startBit = (startByte * 8) + bitWithinByteStart; + } + + endBit = startBit + sig->signalSize - 1; + + for (int y = startBit; y <= endBit; y++) + { + int byt = y / 8; + bitpattern[byt] |= 1 << (y % 8); + } + ui->bitfield->setReference(bitpattern, false); + ui->bitfield->updateData(bitpattern, true); + + ui->cbIntelFormat->setChecked(sig->intelByteOrder); + + switch (sig->valType) + { + case UNSIGNED_INT: + case SIGNED_INT: + ui->comboType->setCurrentIndex(0); + break; + case SP_FLOAT: + ui->comboType->setCurrentIndex(1); + break; + case DP_FLOAT: + ui->comboType->setCurrentIndex(2); + break; + case STRING: + ui->comboType->setCurrentIndex(3); + break; + } + + for (int i = 0; i < ui->comboReceiver->count(); i++) + { + if (ui->comboReceiver->itemText(i) == sig->receiver->name) + { + ui->comboReceiver->setCurrentIndex(i); + break; + } + } +} + +void DBCSignalEditor::fillValueTable(DBC_SIGNAL *sig) +{ + int rowIdx; + ui->valuesTable->clearContents(); + ui->valuesTable->setRowCount(0); + for (int i = 0; i < sig->valList.count(); i++) + { + QTableWidgetItem *val = new QTableWidgetItem(QString::number(sig->valList[i].value)); + QTableWidgetItem *desc = new QTableWidgetItem(sig->valList[i].descript); + rowIdx = ui->valuesTable->rowCount(); + ui->valuesTable->insertRow(rowIdx); + ui->valuesTable->setItem(rowIdx, 0, val); + ui->valuesTable->setItem(rowIdx, 1, desc); + } +} + +void DBCSignalEditor::clickSignalList(int row) +{ + DBC_SIGNAL *thisSig = dbcHandler->findSignalByName(dbcMessage, ui->signalsList->item(row)->text()); + fillSignalForm(thisSig); + fillValueTable(thisSig); + } diff --git a/dbcsignaleditor.h b/dbcsignaleditor.h index 94bee7a..d19e127 100644 --- a/dbcsignaleditor.h +++ b/dbcsignaleditor.h @@ -18,10 +18,17 @@ public: void showEvent(QShowEvent*); ~DBCSignalEditor(); +private slots: + void clickSignalList(int); + private: Ui::DBCSignalEditor *ui; DBCHandler *dbcHandler; DBC_MESSAGE *dbcMessage; + + void refreshSignalsList(); + void fillSignalForm(DBC_SIGNAL *sig); + void fillValueTable(DBC_SIGNAL *sig); }; #endif // DBCSIGNALEDITOR_H diff --git a/dbcsignaleditor.ui b/dbcsignaleditor.ui index 2fe81b6..8f46097 100644 --- a/dbcsignaleditor.ui +++ b/dbcsignaleditor.ui @@ -7,17 +7,17 @@ 0 0 884 - 530 + 791 Signal Editor - + - + - + @@ -33,7 +33,7 @@ - + @@ -43,7 +43,7 @@ - + 0 @@ -67,10 +67,10 @@ - + - + Intel (Little Endian) @@ -133,28 +133,28 @@ - + - + - + - + - + - + - + - +