From cc6c8db1fc327f4013ef8785e7b68b9986ad4544 Mon Sep 17 00:00:00 2001 From: Collin Kidder Date: Tue, 30 Jun 2015 20:24:16 -0400 Subject: [PATCH] Fixes to frame capture bugs introduced by last commit. Naughty! --- canframemodel.cpp | 13 +++++++++++-- canframemodel.h | 2 ++ mainwindow.cpp | 6 +++++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/canframemodel.cpp b/canframemodel.cpp index 5bdf212..63f2a02 100644 --- a/canframemodel.cpp +++ b/canframemodel.cpp @@ -28,6 +28,7 @@ CANFrameModel::CANFrameModel(QObject *parent) useHexMode = true; timeSeconds = false; timeOffset = 0; + needFilterRefresh = false; } void CANFrameModel::setHexMode(bool mode) @@ -245,7 +246,7 @@ void CANFrameModel::addFrame(CANFrame &frame, bool autoRefresh = false) if (!filters.contains(frame.ID)) { filters.insert(frame.ID, true); - emit updatedFiltersList(); + needFilterRefresh = true; } if (!overwriteDups) @@ -369,7 +370,7 @@ void CANFrameModel::insertFrames(const QVector &newFrames) if (!filters.contains(newFrames[i].ID)) { filters.insert(newFrames[i].ID, true); - emit updatedFiltersList(); + needFilterRefresh = true; } if (filters[newFrames[i].ID]) { @@ -380,6 +381,7 @@ void CANFrameModel::insertFrames(const QVector &newFrames) beginInsertRows(QModelIndex(), filteredFrames.count() + 1, filteredFrames.count() + insertedFiltered); endInsertRows(); + if (needFilterRefresh) emit updatedFiltersList(); } void CANFrameModel::loadFilterFile(QString filename) @@ -429,6 +431,13 @@ void CANFrameModel::saveFilterFile(QString filename) outFile->close(); } +bool CANFrameModel::needsFilterRefresh() +{ + bool temp = needFilterRefresh; + needFilterRefresh = false; + return temp; +} + /* *This used to not be const correct but it is now. So, there's little harm in * allowing external code to peek at our frames. There's just no touching. diff --git a/canframemodel.h b/canframemodel.h index dbcd588..7dccd21 100644 --- a/canframemodel.h +++ b/canframemodel.h @@ -38,6 +38,7 @@ public: void saveFilterFile(QString filename); void normalizeTiming(); void recalcOverwrite(); + bool needsFilterRefresh(); void insertFrames(const QVector &newFrames); const QVector *getListReference() const; //thou shalt not modify these frames externally! const QVector *getFilteredListReference() const; //Thus saith the Lord, NO. @@ -56,6 +57,7 @@ private: bool overwriteDups; //should we display all frames or only the newest for each ID? bool useHexMode; bool timeSeconds; + bool needFilterRefresh; uint64_t timeOffset; }; diff --git a/mainwindow.cpp b/mainwindow.cpp index 32cf3d4..76d2edd 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -102,7 +102,7 @@ MainWindow::MainWindow(QWidget *parent) : connect(this, &MainWindow::startFrameCapturing, worker, &SerialWorker::startFrameCapture); connect(this, &MainWindow::stopFrameCapturing, worker, &SerialWorker::stopFrameCapture); serialWorkerThread.start(); - serialWorkerThread.setPriority(QThread::TimeCriticalPriority); + serialWorkerThread.setPriority(QThread::HighPriority); graphingWindow = NULL; frameInfoWindow = NULL; @@ -292,6 +292,8 @@ void MainWindow::updateFilterList() const QMap *filters = model->getFiltersReference(); if (filters == NULL) return; + qDebug() << "updateFilterList called on MainWindow"; + ui->listFilters->clear(); if (filters->isEmpty()) return; @@ -333,6 +335,8 @@ void MainWindow::gotFrames(int FPS, int framesSinceLastUpdate) bDirty = true; emit framesUpdated(framesSinceLastUpdate); //anyone care that frames were updated? } + + if (model->needsFilterRefresh()) updateFilterList(); } void MainWindow::addFrameToDisplay(CANFrame &frame, bool autoRefresh = false)