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 @@
-
-
+
-
-
+
-
-
+
-
-
+
-
-
+
-
-
+
-
-
+
-
-
+