diff --git a/signalviewerwindow.cpp b/signalviewerwindow.cpp index dc53fc5..49c2440 100644 --- a/signalviewerwindow.cpp +++ b/signalviewerwindow.cpp @@ -9,10 +9,65 @@ SignalViewerWindow::SignalViewerWindow(QWidget *parent) : QStringList headers; headers << "Signal" << "Value"; - ui->tableViewer->setHorizontalHeaderLabels(headers); + ui->tableViewer->setHorizontalHeaderLabels(headers); + ui->tableViewer->setColumnWidth(0, 150); + ui->tableViewer->setColumnWidth(1, 300); + QHeaderView *HorzHdr = ui->tableViewer->horizontalHeader(); + HorzHdr->setStretchLastSection(true); //causes the data column to automatically fill the tableview + + dbcHandler = DBCHandler::getReference(); + + connect(ui->cbMessages, SIGNAL(currentIndexChanged(int)), this, SLOT(loadSignals(int))); + connect(ui->btnAdd, SIGNAL(clicked(bool)), this, SLOT(addSignal())); + + loadMessages(); } SignalViewerWindow::~SignalViewerWindow() { delete ui; } + +void SignalViewerWindow::loadMessages() +{ + ui->cbMessages->clear(); + if (dbcHandler == NULL) return; + if (dbcHandler->getFileCount() == 0) dbcHandler->createBlankFile(); + for (int x = 0; x < dbcHandler->getFileByIdx(0)->messageHandler->getCount(); x++) + { + ui->cbMessages->addItem(dbcHandler->getFileByIdx(0)->messageHandler->findMsgByIdx(x)->name); + } +} + +void SignalViewerWindow::loadSignals(int idx) +{ + Q_UNUSED(idx); + //messages were placed into the list in the same order as they exist + //in the data structure so it should have been possible to just + //look it up based on index but by name is probably safer and this operation + //is not time critical at all. + DBC_MESSAGE *msg = dbcHandler->getFileByIdx(0)->messageHandler->findMsgByName(ui->cbMessages->currentText()); + + if (msg == NULL) return; + ui->cbSignals->clear(); + for (int x = 0; x < msg->sigHandler->getCount(); x++) + { + ui->cbSignals->addItem(msg->sigHandler->findSignalByIdx(x)->name); + } +} + +void SignalViewerWindow::addSignal() +{ + DBC_MESSAGE *msg = dbcHandler->getFileByIdx(0)->messageHandler->findMsgByName(ui->cbMessages->currentText()); + if (!msg) return; + DBC_SIGNAL *sig = msg->sigHandler->findSignalByName(ui->cbSignals->currentText()); + if (!sig) return; + + signalList.append(sig); + + int rowIdx = ui->tableViewer->rowCount(); + ui->tableViewer->insertRow(rowIdx); + QTableWidgetItem *item = new QTableWidgetItem(sig->name); + ui->tableViewer->setItem(rowIdx, 0, item); + +} diff --git a/signalviewerwindow.h b/signalviewerwindow.h index e88f4e5..68a0553 100644 --- a/signalviewerwindow.h +++ b/signalviewerwindow.h @@ -2,6 +2,7 @@ #define SIGNALVIEWERWINDOW_H #include +#include "dbc/dbchandler.h" namespace Ui { class SignalViewerWindow; @@ -15,8 +16,16 @@ public: explicit SignalViewerWindow(QWidget *parent = 0); ~SignalViewerWindow(); +private slots: + void loadMessages(); + void loadSignals(int idx); + void addSignal(); + private: Ui::SignalViewerWindow *ui; + DBCHandler *dbcHandler; + + QList signalList; }; #endif // SIGNALVIEWERWINDOW_H