added bus filter to main window

This commit is contained in:
Bertrand
2021-02-23 08:10:39 +01:00
parent d7c70efc78
commit ba63a25fe3
5 changed files with 80 additions and 5 deletions
+3
View File
@@ -1,3 +1,6 @@
#Build directory
build/
# Compiled Object files # Compiled Object files
*.slo *.slo
*.lo *.lo
+47 -4
View File
@@ -11,6 +11,7 @@ CANFrameModel::~CANFrameModel()
frames.clear(); frames.clear();
filteredFrames.clear(); filteredFrames.clear();
filters.clear(); filters.clear();
busFilters.clear();
} }
int CANFrameModel::rowCount(const QModelIndex &parent) const int CANFrameModel::rowCount(const QModelIndex &parent) const
@@ -171,6 +172,13 @@ void CANFrameModel::setFilterState(unsigned int ID, bool state)
sendRefresh(); sendRefresh();
} }
void CANFrameModel::setBusFilterState(unsigned int BusID, bool state)
{
if (!busFilters.contains(BusID)) return;
busFilters[BusID] = state;
sendRefresh();
}
void CANFrameModel::setAllFilters(bool state) void CANFrameModel::setAllFilters(bool state)
{ {
QMap<int, bool>::iterator it; QMap<int, bool>::iterator it;
@@ -337,7 +345,7 @@ void CANFrameModel::recalcOverwrite()
for (int i = 0; i < frames.count(); i++) for (int i = 0; i < frames.count(); i++)
{ {
if (filters[frames[i].frameId()]) if (filters[frames[i].frameId()] && busFilters[frames[i].bus])
{ {
filteredFrames.append(frames[i]); filteredFrames.append(frames[i]);
} }
@@ -578,6 +586,18 @@ bool CANFrameModel::any_filters_are_configured(void)
return false; return false;
} }
bool CANFrameModel::any_busfilters_are_configured(void)
{
for (auto const &val : busFilters)
{
if (val == true)
continue;
else
return true;
}
return false;
}
void CANFrameModel::addFrame(const CANFrame& frame, bool autoRefresh = false) void CANFrameModel::addFrame(const CANFrame& frame, bool autoRefresh = false)
{ {
@@ -601,10 +621,21 @@ void CANFrameModel::addFrame(const CANFrame& frame, bool autoRefresh = false)
needFilterRefresh = true; needFilterRefresh = true;
} }
//if this BusID isn't found in the busFilters list then add it and show it by default
if (!busFilters.contains(tempFrame.bus))
{
// if there are any busFilters already configured, leave the new filter disabled
if (any_busfilters_are_configured())
busFilters.insert(tempFrame.bus, false);
else
busFilters.insert(tempFrame.bus, true);
needFilterRefresh = true;
}
if (!overwriteDups) if (!overwriteDups)
{ {
frames.append(tempFrame); frames.append(tempFrame);
if (filters[tempFrame.frameId()]) if (filters[tempFrame.frameId()] && busFilters[tempFrame.bus])
{ {
if (autoRefresh) beginInsertRows(QModelIndex(), filteredFrames.count(), filteredFrames.count()); if (autoRefresh) beginInsertRows(QModelIndex(), filteredFrames.count(), filteredFrames.count());
tempFrame.frameCount = 1; tempFrame.frameCount = 1;
@@ -629,7 +660,7 @@ void CANFrameModel::addFrame(const CANFrame& frame, bool autoRefresh = false)
if (!found) if (!found)
{ {
frames.append(tempFrame); frames.append(tempFrame);
if (filters[tempFrame.frameId()]) if (filters[tempFrame.frameId()] && busFilters[tempFrame.bus])
{ {
if (autoRefresh) beginInsertRows(QModelIndex(), filteredFrames.count(), filteredFrames.count()); if (autoRefresh) beginInsertRows(QModelIndex(), filteredFrames.count(), filteredFrames.count());
tempFrame.frameCount = 1; tempFrame.frameCount = 1;
@@ -676,7 +707,7 @@ void CANFrameModel::sendRefresh()
int count = frames.count(); int count = frames.count();
for (int i = 0; i < count; i++) for (int i = 0; i < count; i++)
{ {
if (filters[frames[i].frameId()]) if (filters[frames[i].frameId()] && busFilters[frames[i].bus])
{ {
tempContainer.append(frames[i]); tempContainer.append(frames[i]);
} }
@@ -727,6 +758,7 @@ void CANFrameModel::clearFrames()
frames.clear(); frames.clear();
filteredFrames.clear(); filteredFrames.clear();
filters.clear(); filters.clear();
busFilters.clear();
frames.reserve(preallocSize); frames.reserve(preallocSize);
filteredFrames.reserve(preallocSize); filteredFrames.reserve(preallocSize);
this->endResetModel(); this->endResetModel();
@@ -758,6 +790,11 @@ void CANFrameModel::insertFrames(const QVector<CANFrame> &newFrames)
needFilterRefresh = true; needFilterRefresh = true;
} }
if (filters[newFrames[i].frameId()]) if (filters[newFrames[i].frameId()])
{
busFilters.insert(newFrames[i].bus, true);
needFilterRefresh = true;
}
if (filters[newFrames[i].frameId()] && busFilters[newFrames[i].bus])
{ {
insertedFiltered++; insertedFiltered++;
filteredFrames.append(newFrames[i]); filteredFrames.append(newFrames[i]);
@@ -796,6 +833,7 @@ void CANFrameModel::loadFilterFile(QString filename)
return; return;
filters.clear(); filters.clear();
busFilters.clear();
while (!inFile->atEnd()) { while (!inFile->atEnd()) {
line = inFile->readLine().simplified(); line = inFile->readLine().simplified();
@@ -861,3 +899,8 @@ const QMap<int, bool>* CANFrameModel::getFiltersReference() const
{ {
return &filters; return &filters;
} }
const QMap<int, bool>* CANFrameModel::getBusFiltersReference() const
{
return &busFilters;
}
+4
View File
@@ -48,6 +48,7 @@ public:
void setHexMode(bool); void setHexMode(bool);
void setSysTimeMode(bool); void setSysTimeMode(bool);
void setFilterState(unsigned int ID, bool state); void setFilterState(unsigned int ID, bool state);
void setBusFilterState(unsigned int BusID, bool state);
void setAllFilters(bool state); void setAllFilters(bool state);
void setSecondsMode(bool); void setSecondsMode(bool);
void setTimeFormat(QString); void setTimeFormat(QString);
@@ -62,6 +63,7 @@ public:
const QVector<CANFrame> *getListReference() const; //thou shalt not modify these frames externally! const QVector<CANFrame> *getListReference() const; //thou shalt not modify these frames externally!
const QVector<CANFrame> *getFilteredListReference() const; //Thus saith the Lord, NO. const QVector<CANFrame> *getFilteredListReference() const; //Thus saith the Lord, NO.
const QMap<int, bool> *getFiltersReference() const; //this neither const QMap<int, bool> *getFiltersReference() const; //this neither
const QMap<int, bool> *getBusFiltersReference() const; //this neither
public slots: public slots:
void addFrame(const CANFrame&, bool); void addFrame(const CANFrame&, bool);
@@ -75,10 +77,12 @@ private:
void qSortCANFrameDesc(QVector<CANFrame>* frames, Column column, int lowerBound, int upperBound); void qSortCANFrameDesc(QVector<CANFrame>* frames, Column column, int lowerBound, int upperBound);
uint64_t getCANFrameVal(int row, Column col); uint64_t getCANFrameVal(int row, Column col);
bool any_filters_are_configured(void); bool any_filters_are_configured(void);
bool any_busfilters_are_configured(void);
QVector<CANFrame> frames; QVector<CANFrame> frames;
QVector<CANFrame> filteredFrames; QVector<CANFrame> filteredFrames;
QMap<int, bool> filters; QMap<int, bool> filters;
QMap<int, bool> busFilters;
DBCHandler *dbcHandler; DBCHandler *dbcHandler;
QMutex mutex; QMutex mutex;
bool interpretFrames; //should we use the dbcHandler? bool interpretFrames; //should we use the dbcHandler?
+24 -1
View File
@@ -124,6 +124,7 @@ MainWindow::MainWindow(QWidget *parent) :
connect(ui->actionPreferences, &QAction::triggered, this, &MainWindow::showSettingsDialog); connect(ui->actionPreferences, &QAction::triggered, this, &MainWindow::showSettingsDialog);
connect(model, &CANFrameModel::updatedFiltersList, this, &MainWindow::updateFilterList); connect(model, &CANFrameModel::updatedFiltersList, this, &MainWindow::updateFilterList);
connect(ui->listFilters, &QListWidget::itemChanged, this, &MainWindow::filterListItemChanged); connect(ui->listFilters, &QListWidget::itemChanged, this, &MainWindow::filterListItemChanged);
connect(ui->listBusFilters, &QListWidget::itemChanged, this, &MainWindow::busFilterListItemChanged);
connect(ui->btnFilterAll, &QAbstractButton::clicked, this, &MainWindow::filterSetAll); connect(ui->btnFilterAll, &QAbstractButton::clicked, this, &MainWindow::filterSetAll);
connect(ui->btnFilterNone, &QAbstractButton::clicked, this, &MainWindow::filterClearAll); connect(ui->btnFilterNone, &QAbstractButton::clicked, this, &MainWindow::filterClearAll);
connect(ui->actionFirmware_Update, &QAction::triggered, this, &MainWindow::showFirmwareUploaderWindow); connect(ui->actionFirmware_Update, &QAction::triggered, this, &MainWindow::showFirmwareUploaderWindow);
@@ -503,13 +504,15 @@ void MainWindow::updateFilterList()
{ {
if (model == nullptr) return; if (model == nullptr) return;
const QMap<int, bool> *filters = model->getFiltersReference(); const QMap<int, bool> *filters = model->getFiltersReference();
if (filters == nullptr) return; const QMap<int, bool> *busFilters = model->getBusFiltersReference();
if (filters == nullptr && busFilters == nullptr) return;
qDebug() << "updateFilterList called on MainWindow"; qDebug() << "updateFilterList called on MainWindow";
inhibitFilterUpdate = true; inhibitFilterUpdate = true;
ui->listFilters->clear(); ui->listFilters->clear();
ui->listBusFilters->clear();
if (filters->isEmpty()) return; if (filters->isEmpty()) return;
@@ -518,6 +521,13 @@ void MainWindow::updateFilterList()
{ {
/*QListWidgetItem *thisItem = */FilterUtility::createCheckableFilterItem(filterIter.key(), filterIter.value(), ui->listFilters); /*QListWidgetItem *thisItem = */FilterUtility::createCheckableFilterItem(filterIter.key(), filterIter.value(), ui->listFilters);
} }
if (busFilters->isEmpty()) return;
for (filterIter = busFilters->begin(); filterIter != busFilters->end(); ++filterIter)
{
QListWidgetItem *thisItem = FilterUtility::createCheckableBusFilterItem(filterIter.key(), filterIter.value(), ui->listBusFilters);
}
inhibitFilterUpdate = false; inhibitFilterUpdate = false;
} }
@@ -534,6 +544,19 @@ void MainWindow::filterListItemChanged(QListWidgetItem *item)
model->setFilterState(ID, isSet); model->setFilterState(ID, isSet);
} }
void MainWindow::busFilterListItemChanged(QListWidgetItem *item)
{
if (inhibitFilterUpdate) return;
//qDebug() << item->text();
// strip away possible filter label
int ID = FilterUtility::getIdAsInt(item);
bool isSet = false;
if (item->checkState() == Qt::Checked) isSet = true;
model->setBusFilterState(ID, isSet);
}
void MainWindow::filterSetAll() void MainWindow::filterSetAll()
{ {
inhibitFilterUpdate = true; inhibitFilterUpdate = true;
+2
View File
@@ -94,11 +94,13 @@ private slots:
void gridDoubleClicked(QModelIndex); void gridDoubleClicked(QModelIndex);
void interpretToggled(bool); void interpretToggled(bool);
void overwriteToggled(bool); void overwriteToggled(bool);
void logReceivedFrame(CANConnection*, QVector<CANFrame>);
void tickGUIUpdate(); void tickGUIUpdate();
void toggleCapture(); void toggleCapture();
void normalizeTiming(); void normalizeTiming();
void updateFilterList(); void updateFilterList();
void filterListItemChanged(QListWidgetItem *item); void filterListItemChanged(QListWidgetItem *item);
void busFilterListItemChanged(QListWidgetItem *item);
void filterSetAll(); void filterSetAll();
void filterClearAll(); void filterClearAll();
void headerClicked (int logicalIndex); void headerClicked (int logicalIndex);