From ccab975a70f16cc3aaa435b9927cc80f33831cf9 Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Thu, 2 Apr 2020 19:55:04 -0400 Subject: [PATCH] Fixes for loading tesla json files (if you somehow get some) --- dbc/dbchandler.cpp | 29 +++------------------ dbc/dbchandler.h | 2 +- dbc/dbcloadsavewindow.cpp | 54 ++++++++++++++++++++++++--------------- ui/dbcloadsavewindow.ui | 7 ----- 4 files changed, 39 insertions(+), 53 deletions(-) diff --git a/dbc/dbchandler.cpp b/dbc/dbchandler.cpp index 15b2207..a8d09da 100644 --- a/dbc/dbchandler.cpp +++ b/dbc/dbchandler.cpp @@ -1505,28 +1505,12 @@ DBCFile* DBCHandler::loadDBCFile(int idx) return nullptr; } -DBCFile* DBCHandler::loadJSONFile(int idx) +DBCFile* DBCHandler::loadJSONFile(QString filename) { - if (idx > -1 && idx < loadedFiles.count()) removeDBCFile(idx); - - QString filename; - QFileDialog dialog; QSettings settings; DBCFile *thisFile; DBC_MESSAGE *pMsg; - QStringList filters; - filters.append(QString(tr("JSON File (*.json *.JSON)"))); - - dialog.setDirectory(settings.value("DBC/LoadSaveDirectory", dialog.directory().path()).toString()); - dialog.setFileMode(QFileDialog::ExistingFile); - dialog.setNameFilters(filters); - dialog.setViewMode(QFileDialog::Detail); - - if (dialog.exec() == QDialog::Accepted) - { - filename = dialog.selectedFiles()[0]; - //right now there is only one file type that can be loaded here so just do it. createBlankFile(); thisFile = &loadedFiles.last(); QFile *inFile = new QFile(filename); @@ -1543,7 +1527,7 @@ DBCFile* DBCHandler::loadJSONFile(int idx) QJsonDocument jsonDoc = QJsonDocument::fromJson(wholeFileData); if (jsonDoc.isNull()) { - qDebug() << "Couldn't load the json file, shit the bed, don't know why I did it."; + qDebug() << "Couldn't load and parse the JSON file for some reason."; return nullptr; } qDebug() << "Loaded JSON"; @@ -1594,8 +1578,8 @@ DBCFile* DBCHandler::loadJSONFile(int idx) sig.name = QString(sigIter.key().toUtf8()); sig.factor = sigObj.find("scale").value().toDouble(); sig.bias = sigObj.find("offset").value().toDouble(); - sig.max = sigObj.find("max").value().toInt(); - sig.min = sigObj.find("min").value().toInt(); + sig.max = sigObj.find("max").value().toDouble(); + sig.min = sigObj.find("min").value().toDouble(); sig.startBit = sigObj.find("start_position").value().toInt(); sig.unitName = sigObj.find("units").value().toString(); sig.signalSize = sigObj.find("width").value().toInt(); @@ -1669,12 +1653,7 @@ DBCFile* DBCHandler::loadJSONFile(int idx) } } } - - settings.setValue("DBC/LoadSaveDirectory", dialog.directory().path()); return thisFile; - } - - return nullptr; } void DBCHandler::removeDBCFile(int idx) diff --git a/dbc/dbchandler.h b/dbc/dbchandler.h index 0dfd3fe..f7b6c25 100644 --- a/dbc/dbchandler.h +++ b/dbc/dbchandler.h @@ -113,7 +113,7 @@ public: DBCFile* getFileByIdx(int idx); DBCFile* getFileByName(QString name); int createBlankFile(); - DBCFile* loadJSONFile(int); + DBCFile* loadJSONFile(QString); static DBCHandler *getReference(); private: diff --git a/dbc/dbcloadsavewindow.cpp b/dbc/dbcloadsavewindow.cpp index 5cdedd9..cd47371 100644 --- a/dbc/dbcloadsavewindow.cpp +++ b/dbc/dbcloadsavewindow.cpp @@ -1,6 +1,7 @@ #include "dbcloadsavewindow.h" #include "ui_dbcloadsavewindow.h" #include +#include #include #include #include "helpwindow.h" @@ -67,7 +68,6 @@ DBCLoadSaveWindow::DBCLoadSaveWindow(const QVector *frames, QWidget *p connect(ui->btnNewDBC, &QAbstractButton::clicked, this, &DBCLoadSaveWindow::newFile); connect(ui->tableFiles, &QTableWidget::cellChanged, this, &DBCLoadSaveWindow::cellChanged); connect(ui->tableFiles, &QTableWidget::cellDoubleClicked, this, &DBCLoadSaveWindow::cellDoubleClicked); - connect(ui->btnLoadJSON, &QAbstractButton::clicked, this, &DBCLoadSaveWindow::loadJSON); editorWindow = new DBCMainEditor(frames, this); currentlyEditingFile = nullptr; @@ -153,7 +153,38 @@ void DBCLoadSaveWindow::newFile() void DBCLoadSaveWindow::loadFile() { - DBCFile *file = dbcHandler->loadDBCFile(-1); + DBCFile *file = nullptr; + QString filename; + QFileDialog dialog; + QSettings settings; + + QStringList filters; + filters.append(QString(tr("DBC File (*.dbc)"))); + filters.append(QString(tr("Tesla JSON File (*.json)"))); + + dialog.setDirectory(settings.value("DBC/LoadSaveDirectory", dialog.directory().path()).toString()); + dialog.setFileMode(QFileDialog::ExistingFile); + dialog.setNameFilters(filters); + dialog.setViewMode(QFileDialog::Detail); + + if (dialog.exec() == QDialog::Accepted) + { + filename = dialog.selectedFiles()[0]; + //right now there is only one file type that can be loaded here so just do it. + settings.setValue("DBC/LoadSaveDirectory", dialog.directory().path()); + + if (dialog.selectedNameFilter() == filters[0]) + { + if (!filename.contains('.')) filename += ".dbc"; + file = dbcHandler->loadDBCFile(filename); + } + if (dialog.selectedNameFilter() == filters[1]) + { + if (!filename.contains('.')) filename += ".json"; + file = dbcHandler->loadJSONFile(filename); + } + } + if(file) { inhibitCellProcessing=true; int idx = ui->tableFiles->rowCount(); @@ -187,24 +218,7 @@ void DBCLoadSaveWindow::loadFile() void DBCLoadSaveWindow::loadJSON() { - DBCFile *file = dbcHandler->loadJSONFile(-1); - if(file) { - int idx = ui->tableFiles->rowCount(); - ui->tableFiles->insertRow(ui->tableFiles->rowCount()); - ui->tableFiles->setItem(idx, 0, new QTableWidgetItem(file->getFullFilename())); - ui->tableFiles->setItem(idx, 1, new QTableWidgetItem("-1")); - DBC_ATTRIBUTE *attr = file->findAttributeByName("isj1939dbc"); - QTableWidgetItem *item = new QTableWidgetItem(""); - ui->tableFiles->setItem(idx, 2, item); - if (attr && attr->defaultValue > 0) - { - item->setCheckState(Qt::Checked); - } - else - { - item->setCheckState(Qt::Unchecked); - } - } + } void DBCLoadSaveWindow::saveFile() diff --git a/ui/dbcloadsavewindow.ui b/ui/dbcloadsavewindow.ui index 135a4d5..4041084 100644 --- a/ui/dbcloadsavewindow.ui +++ b/ui/dbcloadsavewindow.ui @@ -24,13 +24,6 @@ - - - - Load Tesla JSON (shhhh....) - - -