From 6cf404701e64695963d819c58316dfa99f5b858f Mon Sep 17 00:00:00 2001 From: Andy Huska Date: Sat, 17 Sep 2022 13:04:39 -0500 Subject: [PATCH 1/5] Bug was due to treating an empty token as a 0, so fixed the string parsing to ignore empty tokens --- framesenderwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framesenderwindow.cpp b/framesenderwindow.cpp index 8e796ef..7029fa0 100644 --- a/framesenderwindow.cpp +++ b/framesenderwindow.cpp @@ -898,7 +898,7 @@ void FrameSenderWindow::processCellChange(int line, int col) case 6: //Data bytes for (int i = 0; i < 8; i++) sendingData[line].payload().data()[i] = 0; - tokens = ui->tableSender->item(line, 6)->text().split(" "); + tokens = ui->tableSender->item(line, 6)->text().split(" ", QString::SkipEmptyParts); arr.clear(); arr.reserve(tokens.count()); for (int j = 0; j < tokens.count(); j++) From dfc7b095c87450649b1e1ae2661a7a8999814688 Mon Sep 17 00:00:00 2001 From: Andy Huska Date: Sat, 17 Sep 2022 13:54:59 -0500 Subject: [PATCH 2/5] Added node name as part of the signal name that gets copied into the data table --- signalviewerwindow.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/signalviewerwindow.cpp b/signalviewerwindow.cpp index c401b49..9f926f6 100644 --- a/signalviewerwindow.cpp +++ b/signalviewerwindow.cpp @@ -105,6 +105,7 @@ void SignalViewerWindow::loadMessages() for (int f = 0; f < numFiles; f++) { qDebug() << dbcHandler->getFileByIdx(f)->messageHandler->getCount(); + for (int x = 0; x < dbcHandler->getFileByIdx(f)->messageHandler->getCount(); x++) { ui->cbMessages->addItem(dbcHandler->getFileByIdx(f)->messageHandler->findMsgByIdx(x)->name); @@ -140,7 +141,7 @@ void SignalViewerWindow::addSignal() int rowIdx = ui->tableViewer->rowCount(); ui->tableViewer->insertRow(rowIdx); - QTableWidgetItem *item = new QTableWidgetItem(sig->name); + QTableWidgetItem *item = new QTableWidgetItem(msg->sender->name + " - " + sig->name); ui->tableViewer->setItem(rowIdx, 0, item); } From 6fa84df7e02aea58163ca215532444e1c286989e Mon Sep 17 00:00:00 2001 From: Andy Huska Date: Mon, 19 Sep 2022 13:31:00 -0500 Subject: [PATCH 3/5] Added ability to maintain bus and msg filters when clearing frames --- canframemodel.cpp | 13 +++++++++++-- canframemodel.h | 2 ++ mainwindow.cpp | 13 +++++++++++++ mainwindow.h | 1 + ui/mainwindow.ui | 7 +++++++ 5 files changed, 34 insertions(+), 2 deletions(-) diff --git a/canframemodel.cpp b/canframemodel.cpp index c4a8309..8ca4a5a 100644 --- a/canframemodel.cpp +++ b/canframemodel.cpp @@ -67,6 +67,7 @@ CANFrameModel::CANFrameModel(QObject *parent) dbcHandler = DBCHandler::getReference(); interpretFrames = false; overwriteDups = false; + filtersPersistDuringClear = false; useHexMode = true; timeSeconds = false; timeOffset = 0; @@ -200,6 +201,11 @@ void CANFrameModel::setOverwriteMode(bool mode) endResetModel(); } +void CANFrameModel::setClearMode(bool mode) +{ + filtersPersistDuringClear = mode; +} + void CANFrameModel::setFilterState(unsigned int ID, bool state) { if (!filters.contains(ID)) return; @@ -832,8 +838,11 @@ void CANFrameModel::clearFrames() this->beginResetModel(); frames.clear(); filteredFrames.clear(); - filters.clear(); - busFilters.clear(); + if(filtersPersistDuringClear == false) + { + filters.clear(); + busFilters.clear(); + } frames.reserve(preallocSize); filteredFrames.reserve(preallocSize); this->endResetModel(); diff --git a/canframemodel.h b/canframemodel.h index edb65b5..49ad74d 100644 --- a/canframemodel.h +++ b/canframemodel.h @@ -46,6 +46,7 @@ public: bool getInterpretMode(); void setOverwriteMode(bool); void setHexMode(bool); + void setClearMode(bool mode); void setSysTimeMode(bool); void setMillisMode(bool mode); void setIgnoreDBCColors(bool mode); @@ -89,6 +90,7 @@ private: QMutex mutex; bool interpretFrames; //should we use the dbcHandler? bool overwriteDups; //should we display all frames or only the newest for each ID? + bool filtersPersistDuringClear; QString timeFormat; bool useHexMode; bool timeSeconds; diff --git a/mainwindow.cpp b/mainwindow.cpp index f32125a..1923063 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -141,6 +141,7 @@ MainWindow::MainWindow(QWidget *parent) : connect(ui->cbInterpret, &QAbstractButton::toggled, this, &MainWindow::interpretToggled); connect(ui->cbOverwrite, &QAbstractButton::toggled, this, &MainWindow::overwriteToggled); + connect(ui->cbPersistentFilters, &QAbstractButton::toggled, this, &MainWindow::presistentFiltersToggled); connect(ui->listFilters, &QListWidget::itemChanged, this, &MainWindow::filterListItemChanged); connect(ui->listBusFilters, &QListWidget::itemChanged, this, &MainWindow::busFilterListItemChanged); @@ -616,6 +617,18 @@ void MainWindow::overwriteToggled(bool state) } } +void MainWindow::presistentFiltersToggled(bool state) +{ + if (state) + { + model->setClearMode(true); + } + else + { + model->setClearMode(false); + } +} + void MainWindow::updateFilterList() { if (model == nullptr) return; diff --git a/mainwindow.h b/mainwindow.h index 0b0fd90..39bb612 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -99,6 +99,7 @@ private slots: void setupSendToLatestGraphWindow(); void interpretToggled(bool); void overwriteToggled(bool); + void presistentFiltersToggled(bool state); void logReceivedFrame(CANConnection*, QVector); void tickGUIUpdate(); void toggleCapture(); diff --git a/ui/mainwindow.ui b/ui/mainwindow.ui index 4fb01d8..77e1b5a 100644 --- a/ui/mainwindow.ui +++ b/ui/mainwindow.ui @@ -227,6 +227,13 @@ + + + + Keep Filters When Clearing + + + From f38e0b0bfaecd7197fa00cae2e7d9dfd1100b637 Mon Sep 17 00:00:00 2001 From: Andy Huska Date: Fri, 23 Sep 2022 15:28:41 -0500 Subject: [PATCH 4/5] Took out unnecessary exception recover code Cuz app is going to crash anyway, no need to make a mess --- canframemodel.cpp | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/canframemodel.cpp b/canframemodel.cpp index 8ca4a5a..94f3ce0 100644 --- a/canframemodel.cpp +++ b/canframemodel.cpp @@ -61,8 +61,9 @@ CANFrameModel::CANFrameModel(QObject *parent) QSettings settings; int preallocSize = settings.value("Main/MaximumFrames", maxFramesDefault).toInt(); + //the goal is to prevent a reallocation from ever happening frames.reserve(preallocSize); - filteredFrames.reserve(preallocSize); //the goal is to prevent a reallocation from ever happening + filteredFrames.reserve(preallocSize); dbcHandler = DBCHandler::getReference(); interpretFrames = false; @@ -685,18 +686,14 @@ void CANFrameModel::addFrame(const CANFrame& frame, bool autoRefresh = false) { bool alloc_ok = true; - for(int i=0; i<3; i++) + try { - try - { - frames.append(tempFrame); - break; - } - catch (const std::exception& ex) - { - alloc_ok = false; - qDebug() << "addFrame failed to append. frames.length(): " << frames.length() << " Exception: " << ex.what(); - } + frames.append(tempFrame); + } + catch (const std::exception& ex) + { + alloc_ok = false; + qDebug() << "addFrame failed to append. App is probably going to crash. frames.length(): " << frames.length() << " Exception: " << ex.what(); } if(alloc_ok) From 5ffe161210aef98a51068234ead07b391ab0d34f Mon Sep 17 00:00:00 2001 From: Andy Huska Date: Fri, 23 Sep 2022 15:30:58 -0500 Subject: [PATCH 5/5] more clean up --- canframemodel.cpp | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/canframemodel.cpp b/canframemodel.cpp index 94f3ce0..df75171 100644 --- a/canframemodel.cpp +++ b/canframemodel.cpp @@ -684,20 +684,10 @@ void CANFrameModel::addFrame(const CANFrame& frame, bool autoRefresh = false) if (!overwriteDups) { - bool alloc_ok = true; - try { frames.append(tempFrame); - } - catch (const std::exception& ex) - { - alloc_ok = false; - qDebug() << "addFrame failed to append. App is probably going to crash. frames.length(): " << frames.length() << " Exception: " << ex.what(); - } - if(alloc_ok) - { if (filters[tempFrame.frameId()] && busFilters[tempFrame.bus]) { if (autoRefresh) beginInsertRows(QModelIndex(), filteredFrames.count(), filteredFrames.count()); @@ -706,6 +696,10 @@ void CANFrameModel::addFrame(const CANFrame& frame, bool autoRefresh = false) if (autoRefresh) endInsertRows(); } } + catch (const std::exception& ex) + { + qDebug() << "addFrame failed to append. App is probably going to crash. frames.length(): " << frames.length() << " Exception: " << ex.what(); + } } else //yes, overwrite dups {