#include "CANViewerPage.h" #include "ui_CANViewerPage.h" #include "defines.h" CCANViewerPage::CCANViewerPage(QWidget *parent) : QWidget(parent), ui(new Ui::CCANViewerPage) { mMsgList = 0; ui->setupUi(this); ui->mCANDataTableWidget->setColumnCount(6); ui->mCANDataTableWidget->setHorizontalHeaderLabels(QStringList() << "Time" << "Channel" << "Msg ID" << "Msg Type" << "Msg Length" << "Data"); ui->mCANDataTableWidget->clearContents(); ui->mCANDataTableWidget->setRowCount(0); ui->mCANDataTableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); ui->mCANSignalTableWidget->setColumnCount(4); ui->mCANSignalTableWidget->setHorizontalHeaderLabels(QStringList() << "Nom du signal" << "Val. physique" << "Val. brute" << "Unités"); connect(ui->mCANDataTableWidget,&QTableWidget::itemSelectionChanged,this,&CCANViewerPage::MessageSelectionChanged); } CCANViewerPage::~CCANViewerPage() { delete ui; } int CCANViewerPage::InitCANTable(QList *MsgList) { if(MsgList == 0) { return RET_GENERAL_ERROR; } mMsgList = MsgList; int row = ui->mCANDataTableWidget->rowCount(); ui->mCANDataTableWidget->setRowCount(MsgList->size()); for(int Msg = 0; Msg < MsgList->size(); Msg++) { QTableWidgetItem *NewItem; NewItem = new QTableWidgetItem("Time"); ui->mCANDataTableWidget->setItem(row,0,NewItem); //Set Msg name NewItem = new QTableWidgetItem(QString("%1").arg(MsgList->at(Msg)->mCANMsgName)); ui->mCANDataTableWidget->setItem(row,1,NewItem); //Set message ID value NewItem = new QTableWidgetItem(QString("0x%1").arg(MsgList->at(Msg)->mCANMsgID,0,16)); ui->mCANDataTableWidget->setItem(row,2,NewItem); NewItem->setData(Qt::UserRole,MsgList->at(Msg)->mCANMsgID); //Set message ID as reference to easily find the row when updating... //Set message type value NewItem = new QTableWidgetItem(QString("0x%1").arg(MsgList->at(Msg)->mCANMsgType,0,16)); ui->mCANDataTableWidget->setItem(row,3,NewItem); //Set message length value NewItem = new QTableWidgetItem(QString(" ")); ui->mCANDataTableWidget->setItem(row,4,NewItem); NewItem = new QTableWidgetItem(QString(" ")); ui->mCANDataTableWidget->setItem(row,5,NewItem); row++; // //Set data value // QString Data; // for(unsigned int i = 0; i < MsgList->at(Msg)->mCANMsgLength; i++) // { // unsigned char DataByte = MsgList->at(Msg)->mCANMsgData.at(i); // Data.append(QString("%1 ").arg(DataByte,2,16,QLatin1Char('0'))); // } // NewItem = new QTableWidgetItem(Data); // ui->mCANDataTableWidget->setItem(Msg,5,NewItem); } // ui->mCANSignalTableWidget->setCurrentItem(ui->mCANDataTableWidget->item(0,0)); // MessageSelectionChanged(); return RET_OK; } int CCANViewerPage::UpdateCANTable(QList *MsgList) { //Find the row of each message and update values in table for(int msg = 0; msg < MsgList->size(); msg++) { int row = 0; for(row = 0; row < ui->mCANDataTableWidget->rowCount(); row++) { // if(ui->mCANDataTableWidget->item(row,2)->text() == QString("0x%1").arg(MsgList->at(msg)->mCANMsgID,0,16)) if(ui->mCANDataTableWidget->item(row,2)->data(Qt::UserRole).toUInt() == MsgList->at(msg)->mCANMsgID) { //Set message length value ui->mCANDataTableWidget->item(row,4)->setText(QString("%1").arg(MsgList->at(msg)->mCANMsgLength)); QString Data; for(int byte = 0; byte < MsgList->at(msg)->mCANMsgData.size();byte++) { // Data.append(QString("%1 ").arg((unsigned int)MsgList->at(msg)->mCANMsgData.at(byte),2,16)); Data.append(QString().asprintf("%.2X ",(unsigned char)MsgList->at(msg)->mCANMsgData.at(byte))); } ui->mCANDataTableWidget->item(row,5)->setText(Data); } } } // UpdateSignalsTable(); MessageSelectionChanged(); return RET_OK; } void CCANViewerPage::MessageSelectionChanged() { if(mMsgList == 0) { return; } ui->mCANSignalTableWidget->clearContents(); //Find message based on current table selection int row = ui->mCANDataTableWidget->currentRow(); if(row == -1) return; for (int msg = 0; msg < mMsgList->size(); msg++) { unsigned int ID = ui->mCANDataTableWidget->item(row,2)->data(Qt::UserRole).toUInt(); if(ID == mMsgList->at(msg)->mCANMsgID) { CCANMessage *Msg = mMsgList->at(msg); ui->mCANSignalTableWidget->clearContents(); ui->mCANSignalTableWidget->setRowCount(Msg->mSignalsList.size()); for(int signal = 0; signal < Msg->mSignalsList.size(); signal++) { //Signal name QTableWidgetItem *NewItem = new QTableWidgetItem(Msg->mSignalsList.at(signal)->mSignalName); ui->mCANSignalTableWidget->setItem(signal,0,NewItem); //Phys value NewItem = new QTableWidgetItem(QString("%1").arg(Msg->mSignalsList.at(signal)->mPhysicalValue,0,'f',1)); ui->mCANSignalTableWidget->setItem(signal,1,NewItem); //Raw value NewItem = new QTableWidgetItem(QString("0x%1").arg(Msg->mSignalsList.at(signal)->mRawValue,0,16)); ui->mCANSignalTableWidget->setItem(signal,2,NewItem); //Units NewItem = new QTableWidgetItem(Msg->mSignalsList.at(signal)->mSignalUnit); ui->mCANSignalTableWidget->setItem(signal,3,NewItem); } } } } int CCANViewerPage::UpdateSignalsTable() { int row = ui->mCANDataTableWidget->currentRow(); for (int msg = 0; msg < mMsgList->size(); msg++) { unsigned int ID = ui->mCANDataTableWidget->item(row,2)->data(Qt::UserRole).toUInt(); if(ID == mMsgList->at(msg)->mCANMsgID) { CCANMessage *Msg = mMsgList->at(msg); ui->mCANSignalTableWidget->clearContents(); ui->mCANSignalTableWidget->setRowCount(Msg->mSignalsList.size()); for(int signal = 0; signal < Msg->mSignalsList.size(); signal++) { //Signal name ui->mCANSignalTableWidget->item(row,0)->setText(Msg->mSignalsList.at(signal)->mSignalName); //Phys value ui->mCANSignalTableWidget->item(row,0)->setText(QString("%1").arg(Msg->mSignalsList.at(signal)->mPhysicalValue,0,'f',1)); //Raw value ui->mCANSignalTableWidget->item(row,0)->setText(QString("0x%1").arg(Msg->mSignalsList.at(signal)->mRawValue,0,16)); //Units ui->mCANSignalTableWidget->item(row,0)->setText(Msg->mSignalsList.at(signal)->mSignalUnit); } } } return RET_OK; }