From a42d9532d7d341e9d268277ee76925d4a3e0d76c Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Thu, 21 Jan 2016 20:11:35 -0500 Subject: [PATCH] Refactored code so that frame file loading/saving is all done through a unified interface. Updated file filters. Notched up version number. --- config.h | 2 +- filecomparatorwindow.cpp | 12 +- framefileio.cpp | 118 +++++++++++++++++--- framefileio.h | 3 +- mainwindow.cpp | 235 +++------------------------------------ 5 files changed, 129 insertions(+), 241 deletions(-) diff --git a/config.h b/config.h index 5abfce5..c78ea75 100644 --- a/config.h +++ b/config.h @@ -1,7 +1,7 @@ #ifndef CONFIG #define CONFIG -#define VERSION 147 +#define VERSION 148 //try to keep this in sync. //SavvyCAN will complain if you connect a GVRET board with a revision diff --git a/filecomparatorwindow.cpp b/filecomparatorwindow.cpp index c7dde9c..83f120e 100644 --- a/filecomparatorwindow.cpp +++ b/filecomparatorwindow.cpp @@ -58,11 +58,11 @@ void FileComparatorWindow::writeSettings() void FileComparatorWindow::loadInterestedFile() { interestedFrames.clear(); - QString result = FrameFileIO::loadFrameFile(&interestedFrames); - if (result.length() > 0) + QString resultingFileName; + if (FrameFileIO::loadFrameFile(resultingFileName, &interestedFrames)) { - ui->lblFirstFile->setText(result); - interestedFilename = result; + ui->lblFirstFile->setText(resultingFileName); + interestedFilename = resultingFileName; if (interestedFrames.count() > 0 && referenceFrames.count() > 0) calculateDetails(); } } @@ -70,8 +70,8 @@ void FileComparatorWindow::loadInterestedFile() void FileComparatorWindow::loadReferenceFile() { //secondFileFrames.clear(); - QString result = FrameFileIO::loadFrameFile(&referenceFrames); - if (result.length() > 0) + QString resultingFileName; + if (FrameFileIO::loadFrameFile(resultingFileName, &referenceFrames)) { ui->lblRefFrames->setText(QString::number(referenceFrames.length())); if (interestedFrames.count() > 0 && referenceFrames.count() > 0) calculateDetails(); diff --git a/framefileio.cpp b/framefileio.cpp index 0c652ed..66e25a4 100644 --- a/framefileio.cpp +++ b/framefileio.cpp @@ -7,21 +7,113 @@ FrameFileIO::FrameFileIO() } -QString FrameFileIO::loadFrameFile(QVector* frameCache) +bool FrameFileIO::saveFrameFile(QString &fileName, const QVector* frameCache) +{ + QString filename; + QFileDialog dialog(qApp->activeWindow()); + bool result = false; + + QStringList filters; + filters.append(QString(tr("GVRET Logs (*.csv *.CSV)"))); + filters.append(QString(tr("CRTD Logs (*.txt *.TXT)"))); + filters.append(QString(tr("Generic ID/Data CSV (*.csv *.CSV)"))); + filters.append(QString(tr("BusMaster Log (*.log *.LOG)"))); + filters.append(QString(tr("Microchip Log (*.can *.CAN)"))); + filters.append(QString(tr("Vector Trace Files (*.trace *.TRACE)"))); + filters.append(QString(tr("IXXAT MiniLog (*.csv *.CSV)"))); + filters.append(QString(tr("CAN-DO Log (*.can *.avc *.evc *.qcc *.CAN *.AVC *.EVC *.QCC)"))); + + dialog.setFileMode(QFileDialog::AnyFile); + dialog.setNameFilters(filters); + dialog.setViewMode(QFileDialog::Detail); + dialog.setAcceptMode(QFileDialog::AcceptSave); + + if (dialog.exec() == QDialog::Accepted) + { + filename = dialog.selectedFiles()[0]; + + QProgressDialog progress(qApp->activeWindow()); + progress.setWindowModality(Qt::WindowModal); + progress.setLabelText("Saving file..."); + progress.setCancelButton(0); + progress.setRange(0,0); + progress.setMinimumDuration(0); + progress.show(); + + qApp->processEvents(); + + if (dialog.selectedNameFilter() == filters[0]) + { + if (!filename.contains('.')) filename += ".csv"; + result = saveNativeCSVFile(filename, frameCache); + } + if (dialog.selectedNameFilter() == filters[1]) + { + if (!filename.contains('.')) filename += ".txt"; + result = saveCRTDFile(filename, frameCache); + } + if (dialog.selectedNameFilter() == filters[2]) + { + if (!filename.contains('.')) filename += ".csv"; + result = saveGenericCSVFile(filename, frameCache); + } + if (dialog.selectedNameFilter() == filters[3]) + { + if (!filename.contains('.')) filename += ".log"; + result = saveLogFile(filename, frameCache); + } + if (dialog.selectedNameFilter() == filters[4]) + { + if (!filename.contains('.')) filename += ".log"; + result = saveMicrochipFile(filename, frameCache); + } + + if (dialog.selectedNameFilter() == filters[5]) + { + if (!filename.contains('.')) filename += ".trace"; + result = saveTraceFile(filename, frameCache); + } + + if (dialog.selectedNameFilter() == filters[6]) + { + if (!filename.contains('.')) filename += ".csv"; + result = saveIXXATFile(filename, frameCache); + } + + if (dialog.selectedNameFilter() == filters[7]) + { + if (!filename.contains('.')) filename += ".can"; + result = saveCANDOFile(filename, frameCache); + } + + progress.cancel(); + + if (result) + { + QStringList fileList = filename.split('/'); + fileName = fileList[fileList.length() - 1]; + return true; + } + return false; + } + return false; +} + +bool FrameFileIO::loadFrameFile(QString &fileName, QVector* frameCache) { QString filename; QFileDialog dialog; bool result = false; QStringList filters; - filters.append(QString(tr("GVRET Logs (*.csv)"))); - filters.append(QString(tr("CRTD Logs (*.txt)"))); - filters.append(QString(tr("Generic ID/Data CSV (*.csv)"))); - filters.append(QString(tr("BusMaster Log (*.log)"))); - filters.append(QString(tr("Microchip Log (*.can)"))); - filters.append(QString(tr("Vector trace files (*.trace)"))); - filters.append(QString(tr("IXXAT MiniLog (*.csv)"))); - filters.append(QString(tr("CAN-DO Log (*.*)"))); + filters.append(QString(tr("GVRET Logs (*.csv *.CSV)"))); + filters.append(QString(tr("CRTD Logs (*.txt *.TXT)"))); + filters.append(QString(tr("Generic ID/Data CSV (*.csv *.CSV)"))); + filters.append(QString(tr("BusMaster Log (*.log *.LOG)"))); + filters.append(QString(tr("Microchip Log (*.can *.CAN)"))); + filters.append(QString(tr("Vector trace files (*.trace *.TRACE)"))); + filters.append(QString(tr("IXXAT MiniLog (*.csv *.CSV)"))); + filters.append(QString(tr("CAN-DO Log (*.avc *.can *.evc *.qcc *.AVC *.CAN *.EVC *.QCC)"))); dialog.setFileMode(QFileDialog::ExistingFile); dialog.setNameFilters(filters); @@ -55,12 +147,12 @@ QString FrameFileIO::loadFrameFile(QVector* frameCache) if (result) { QStringList fileList = filename.split('/'); - filename = fileList[fileList.length() - 1]; - return filename; + fileName = fileList[fileList.length() - 1]; + return true; } - else return QString(""); + else return false; } - return QString(""); + return false; } //CRTD format from Mark Webb-Johnson / OVMS project diff --git a/framefileio.h b/framefileio.h index 27f4e96..9d27306 100644 --- a/framefileio.h +++ b/framefileio.h @@ -38,7 +38,8 @@ public: static bool saveTraceFile(QString, const QVector*); static bool saveIXXATFile(QString, const QVector*); static bool saveCANDOFile(QString, const QVector*); - static QString loadFrameFile(QVector*); + static bool loadFrameFile(QString &, QVector*); + static bool saveFrameFile(QString &, const QVector*); private: static QString unQuote(QString); diff --git a/mainwindow.cpp b/mainwindow.cpp index 2e9faae..ecbbfd2 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -525,247 +525,42 @@ void MainWindow::changeBaudRates() void MainWindow::handleLoadFile() { QString filename; - QFileDialog dialog(this); - bool result = false; + QVector tempFrames; - QStringList filters; - filters.append(QString(tr("GVRET Logs (*.csv)"))); - filters.append(QString(tr("CRTD Logs (*.txt)"))); - filters.append(QString(tr("Generic ID/Data CSV (*.csv)"))); - filters.append(QString(tr("BusMaster Log (*.log)"))); - filters.append(QString(tr("Microchip Log (*.can)"))); - filters.append(QString(tr("Vector Trace Files (*.trace)"))); - filters.append(QString(tr("IXXAT MiniLog (*.csv)"))); - filters.append(QString(tr("CAN-DO Log (*.*)"))); - - dialog.setFileMode(QFileDialog::ExistingFile); - dialog.setNameFilters(filters); - dialog.setViewMode(QFileDialog::Detail); - - if (dialog.exec() == QDialog::Accepted) + if (FrameFileIO::loadFrameFile(filename, &tempFrames)) { - filename = dialog.selectedFiles()[0]; ui->canFramesView->scrollToTop(); model->clearFrames(); + model->insertFrames(tempFrames); + loadedFileName = filename; + model->recalcOverwrite(); + ui->lbNumFrames->setText(QString::number(model->rowCount())); + if (ui->cbAutoScroll->isChecked()) ui->canFramesView->scrollToBottom(); - QVector tempFrames; - - QProgressDialog progress(this); - progress.setWindowModality(Qt::WindowModal); - progress.setLabelText("Loading file..."); - progress.setCancelButton(0); - progress.setRange(0,0); - progress.setMinimumDuration(0); - progress.show(); - - qApp->processEvents(); - - if (dialog.selectedNameFilter() == filters[0]) result = FrameFileIO::loadNativeCSVFile(filename, &tempFrames); - if (dialog.selectedNameFilter() == filters[1]) result = FrameFileIO::loadCRTDFile(filename, &tempFrames); - if (dialog.selectedNameFilter() == filters[2]) result = FrameFileIO::loadGenericCSVFile(filename, &tempFrames); - if (dialog.selectedNameFilter() == filters[3]) result = FrameFileIO::loadLogFile(filename, &tempFrames); - if (dialog.selectedNameFilter() == filters[4]) result = FrameFileIO::loadMicrochipFile(filename, &tempFrames); - if (dialog.selectedNameFilter() == filters[5]) result = FrameFileIO::loadTraceFile(filename, &tempFrames); - if (dialog.selectedNameFilter() == filters[6]) result = FrameFileIO::loadIXXATFile(filename, &tempFrames); - if (dialog.selectedNameFilter() == filters[7]) result = FrameFileIO::loadCANDOFile(filename, &tempFrames); - - progress.cancel(); - - if (result) - { - model->insertFrames(tempFrames); - QStringList fileList = filename.split('/'); - loadedFileName = fileList[fileList.length() - 1]; - - model->recalcOverwrite(); - ui->lbNumFrames->setText(QString::number(model->rowCount())); - if (ui->cbAutoScroll->isChecked()) ui->canFramesView->scrollToBottom(); - - updateFileStatus(); - emit framesUpdated(-2); - } + updateFileStatus(); + emit framesUpdated(-2); } } void MainWindow::handleSaveFile() { QString filename; - QFileDialog dialog(this); - bool result = false; - QStringList filters; - filters.append(QString(tr("GVRET Logs (*.csv)"))); - filters.append(QString(tr("CRTD Logs (*.txt)"))); - filters.append(QString(tr("Generic ID/Data CSV (*.csv)"))); - filters.append(QString(tr("BusMaster Log (*.log)"))); - filters.append(QString(tr("Microchip Log (*.can)"))); - filters.append(QString(tr("Vector Trace Files (*.trace)"))); - filters.append(QString(tr("IXXAT MiniLog (*.csv)"))); - filters.append(QString(tr("CAN-DO Log (*.can)"))); - - dialog.setFileMode(QFileDialog::AnyFile); - dialog.setNameFilters(filters); - dialog.setViewMode(QFileDialog::Detail); - dialog.setAcceptMode(QFileDialog::AcceptSave); - - if (dialog.exec() == QDialog::Accepted) + if (FrameFileIO::saveFrameFile(filename, model->getListReference())) { - const QVector *frames = model->getListReference(); - filename = dialog.selectedFiles()[0]; - - QProgressDialog progress(this); - progress.setWindowModality(Qt::WindowModal); - progress.setLabelText("Saving file..."); - progress.setCancelButton(0); - progress.setRange(0,0); - progress.setMinimumDuration(0); - progress.show(); - - qApp->processEvents(); - - if (dialog.selectedNameFilter() == filters[0]) - { - if (!filename.contains('.')) filename += ".csv"; - result = FrameFileIO::saveNativeCSVFile(filename, frames); - } - if (dialog.selectedNameFilter() == filters[1]) - { - if (!filename.contains('.')) filename += ".txt"; - result = FrameFileIO::saveCRTDFile(filename, frames); - } - if (dialog.selectedNameFilter() == filters[2]) - { - if (!filename.contains('.')) filename += ".csv"; - result = FrameFileIO::saveGenericCSVFile(filename, frames); - } - if (dialog.selectedNameFilter() == filters[3]) - { - if (!filename.contains('.')) filename += ".log"; - result = FrameFileIO::saveLogFile(filename, frames); - } - if (dialog.selectedNameFilter() == filters[4]) - { - if (!filename.contains('.')) filename += ".log"; - result = FrameFileIO::saveMicrochipFile(filename, frames); - } - - if (dialog.selectedNameFilter() == filters[5]) - { - if (!filename.contains('.')) filename += ".trace"; - result = FrameFileIO::saveTraceFile(filename, frames); - } - - if (dialog.selectedNameFilter() == filters[6]) - { - if (!filename.contains('.')) filename += ".csv"; - result = FrameFileIO::saveIXXATFile(filename, frames); - } - - if (dialog.selectedNameFilter() == filters[7]) - { - if (!filename.contains('.')) filename += ".can"; - result = FrameFileIO::saveCANDOFile(filename, frames); - } - - progress.cancel(); - - if (result) - { - QStringList fileList = filename.split('/'); - loadedFileName = fileList[fileList.length() - 1]; - updateFileStatus(); - } + loadedFileName = filename; + updateFileStatus(); } } void MainWindow::handleSaveFilteredFile() { QString filename; - QFileDialog dialog(this); - bool result = false; - QStringList filters; - filters.append(QString(tr("GVRET Logs (*.csv)"))); - filters.append(QString(tr("CRTD Logs (*.txt)"))); - filters.append(QString(tr("Generic ID/Data CSV (*.csv)"))); - filters.append(QString(tr("BusMaster Log (*.log)"))); - filters.append(QString(tr("Microchip Log (*.log)"))); - filters.append(QString(tr("Vector Trace Files (*.trace)"))); - filters.append(QString(tr("IXXAT MiniLog (*.csv)"))); - filters.append(QString(tr("CAN-DO Log (*.can)"))); - - dialog.setFileMode(QFileDialog::AnyFile); - dialog.setNameFilters(filters); - dialog.setViewMode(QFileDialog::Detail); - dialog.setAcceptMode(QFileDialog::AcceptSave); - - if (dialog.exec() == QDialog::Accepted) + if (FrameFileIO::saveFrameFile(filename, model->getFilteredListReference())) { - const QVector *frames = model->getFilteredListReference(); - filename = dialog.selectedFiles()[0]; - - QProgressDialog progress(this); - progress.setWindowModality(Qt::WindowModal); - progress.setLabelText("Saving filtered file..."); - progress.setCancelButton(0); - progress.setRange(0,0); - progress.setMinimumDuration(0); - progress.show(); - - qApp->processEvents(); - - if (dialog.selectedNameFilter() == filters[0]) - { - if (!filename.contains('.')) filename += ".csv"; - result = FrameFileIO::saveNativeCSVFile(filename, frames); - } - if (dialog.selectedNameFilter() == filters[1]) - { - if (!filename.contains('.')) filename += ".txt"; - result = FrameFileIO::saveCRTDFile(filename, frames); - } - if (dialog.selectedNameFilter() == filters[2]) - { - if (!filename.contains('.')) filename += ".csv"; - result = FrameFileIO::saveGenericCSVFile(filename, frames); - } - if (dialog.selectedNameFilter() == filters[3]) - { - if (!filename.contains('.')) filename += ".log"; - result = FrameFileIO::saveLogFile(filename, frames); - } - if (dialog.selectedNameFilter() == filters[4]) - { - if (!filename.contains('.')) filename += ".log"; - result = FrameFileIO::saveMicrochipFile(filename, frames); - } - - if (dialog.selectedNameFilter() == filters[5]) - { - if (!filename.contains('.')) filename += ".trace"; - result = FrameFileIO::saveTraceFile(filename, frames); - } - - if (dialog.selectedNameFilter() == filters[6]) - { - if (!filename.contains('.')) filename += ".csv"; - result = FrameFileIO::saveIXXATFile(filename, frames); - } - - if (dialog.selectedNameFilter() == filters[7]) - { - if (!filename.contains('.')) filename += ".can"; - result = FrameFileIO::saveCANDOFile(filename, frames); - } - - progress.cancel(); - - if (result) - { - QStringList fileList = filename.split('/'); - loadedFileName = fileList[fileList.length() - 1]; - updateFileStatus(); - } + loadedFileName = filename; + updateFileStatus(); } }