diff --git a/canframemodel.cpp b/canframemodel.cpp index cdcaa19..5d30d21 100644 --- a/canframemodel.cpp +++ b/canframemodel.cpp @@ -61,12 +61,14 @@ CANFrameModel::CANFrameModel(QObject *parent) QSettings settings; 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; overwriteDups = false; + filtersPersistDuringClear = false; useHexMode = true; timeSeconds = false; timeOffset = 0; @@ -200,6 +202,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; @@ -677,24 +684,10 @@ void CANFrameModel::addFrame(const CANFrame& frame, bool autoRefresh = false) if (!overwriteDups) { - 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); - if(alloc_ok) - { if (filters[tempFrame.frameId()] && busFilters[tempFrame.bus]) { if (autoRefresh) beginInsertRows(QModelIndex(), filteredFrames.count(), filteredFrames.count()); @@ -703,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 { @@ -832,8 +829,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/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); } 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 + + +