Merge pull request #502 from qurrent-llc/add_allowfilterstostayuponclear

Add option to main window to allow filters to persist when clearing frames
This commit is contained in:
Collin Kidder
2022-09-26 21:21:45 -05:00
committed by GitHub
6 changed files with 44 additions and 20 deletions
+19 -19
View File
@@ -61,12 +61,14 @@ CANFrameModel::CANFrameModel(QObject *parent)
QSettings settings; QSettings settings;
preallocSize = settings.value("Main/MaximumFrames", maxFramesDefault).toInt(); preallocSize = settings.value("Main/MaximumFrames", maxFramesDefault).toInt();
//the goal is to prevent a reallocation from ever happening
frames.reserve(preallocSize); frames.reserve(preallocSize);
filteredFrames.reserve(preallocSize); //the goal is to prevent a reallocation from ever happening filteredFrames.reserve(preallocSize);
dbcHandler = DBCHandler::getReference(); dbcHandler = DBCHandler::getReference();
interpretFrames = false; interpretFrames = false;
overwriteDups = false; overwriteDups = false;
filtersPersistDuringClear = false;
useHexMode = true; useHexMode = true;
timeSeconds = false; timeSeconds = false;
timeOffset = 0; timeOffset = 0;
@@ -200,6 +202,11 @@ void CANFrameModel::setOverwriteMode(bool mode)
endResetModel(); endResetModel();
} }
void CANFrameModel::setClearMode(bool mode)
{
filtersPersistDuringClear = mode;
}
void CANFrameModel::setFilterState(unsigned int ID, bool state) void CANFrameModel::setFilterState(unsigned int ID, bool state)
{ {
if (!filters.contains(ID)) return; if (!filters.contains(ID)) return;
@@ -677,24 +684,10 @@ void CANFrameModel::addFrame(const CANFrame& frame, bool autoRefresh = false)
if (!overwriteDups) if (!overwriteDups)
{ {
bool alloc_ok = true; try
for(int i=0; i<3; i++)
{ {
try frames.append(tempFrame);
{
frames.append(tempFrame);
break;
}
catch (const std::exception& ex)
{
alloc_ok = false;
qDebug() << "addFrame failed to append. frames.length(): " << frames.length() << " Exception: " << ex.what();
}
}
if(alloc_ok)
{
if (filters[tempFrame.frameId()] && busFilters[tempFrame.bus]) if (filters[tempFrame.frameId()] && busFilters[tempFrame.bus])
{ {
if (autoRefresh) beginInsertRows(QModelIndex(), filteredFrames.count(), filteredFrames.count()); if (autoRefresh) beginInsertRows(QModelIndex(), filteredFrames.count(), filteredFrames.count());
@@ -703,6 +696,10 @@ void CANFrameModel::addFrame(const CANFrame& frame, bool autoRefresh = false)
if (autoRefresh) endInsertRows(); 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 else //yes, overwrite dups
{ {
@@ -832,8 +829,11 @@ void CANFrameModel::clearFrames()
this->beginResetModel(); this->beginResetModel();
frames.clear(); frames.clear();
filteredFrames.clear(); filteredFrames.clear();
filters.clear(); if(filtersPersistDuringClear == false)
busFilters.clear(); {
filters.clear();
busFilters.clear();
}
frames.reserve(preallocSize); frames.reserve(preallocSize);
filteredFrames.reserve(preallocSize); filteredFrames.reserve(preallocSize);
this->endResetModel(); this->endResetModel();
+2
View File
@@ -46,6 +46,7 @@ public:
bool getInterpretMode(); bool getInterpretMode();
void setOverwriteMode(bool); void setOverwriteMode(bool);
void setHexMode(bool); void setHexMode(bool);
void setClearMode(bool mode);
void setSysTimeMode(bool); void setSysTimeMode(bool);
void setMillisMode(bool mode); void setMillisMode(bool mode);
void setIgnoreDBCColors(bool mode); void setIgnoreDBCColors(bool mode);
@@ -89,6 +90,7 @@ private:
QMutex mutex; QMutex mutex;
bool interpretFrames; //should we use the dbcHandler? bool interpretFrames; //should we use the dbcHandler?
bool overwriteDups; //should we display all frames or only the newest for each ID? bool overwriteDups; //should we display all frames or only the newest for each ID?
bool filtersPersistDuringClear;
QString timeFormat; QString timeFormat;
bool useHexMode; bool useHexMode;
bool timeSeconds; bool timeSeconds;
+13
View File
@@ -141,6 +141,7 @@ MainWindow::MainWindow(QWidget *parent) :
connect(ui->cbInterpret, &QAbstractButton::toggled, this, &MainWindow::interpretToggled); connect(ui->cbInterpret, &QAbstractButton::toggled, this, &MainWindow::interpretToggled);
connect(ui->cbOverwrite, &QAbstractButton::toggled, this, &MainWindow::overwriteToggled); 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->listFilters, &QListWidget::itemChanged, this, &MainWindow::filterListItemChanged);
connect(ui->listBusFilters, &QListWidget::itemChanged, this, &MainWindow::busFilterListItemChanged); 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() void MainWindow::updateFilterList()
{ {
if (model == nullptr) return; if (model == nullptr) return;
+1
View File
@@ -99,6 +99,7 @@ private slots:
void setupSendToLatestGraphWindow(); void setupSendToLatestGraphWindow();
void interpretToggled(bool); void interpretToggled(bool);
void overwriteToggled(bool); void overwriteToggled(bool);
void presistentFiltersToggled(bool state);
void logReceivedFrame(CANConnection*, QVector<CANFrame>); void logReceivedFrame(CANConnection*, QVector<CANFrame>);
void tickGUIUpdate(); void tickGUIUpdate();
void toggleCapture(); void toggleCapture();
+2 -1
View File
@@ -105,6 +105,7 @@ void SignalViewerWindow::loadMessages()
for (int f = 0; f < numFiles; f++) for (int f = 0; f < numFiles; f++)
{ {
qDebug() << dbcHandler->getFileByIdx(f)->messageHandler->getCount(); qDebug() << dbcHandler->getFileByIdx(f)->messageHandler->getCount();
for (int x = 0; x < dbcHandler->getFileByIdx(f)->messageHandler->getCount(); x++) for (int x = 0; x < dbcHandler->getFileByIdx(f)->messageHandler->getCount(); x++)
{ {
ui->cbMessages->addItem(dbcHandler->getFileByIdx(f)->messageHandler->findMsgByIdx(x)->name); ui->cbMessages->addItem(dbcHandler->getFileByIdx(f)->messageHandler->findMsgByIdx(x)->name);
@@ -140,7 +141,7 @@ void SignalViewerWindow::addSignal()
int rowIdx = ui->tableViewer->rowCount(); int rowIdx = ui->tableViewer->rowCount();
ui->tableViewer->insertRow(rowIdx); 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); ui->tableViewer->setItem(rowIdx, 0, item);
} }
+7
View File
@@ -227,6 +227,13 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="QCheckBox" name="cbPersistentFilters">
<property name="text">
<string>Keep Filters When Clearing</string>
</property>
</widget>
</item>
<item> <item>
<widget class="QCheckBox" name="cbAutoScroll"> <widget class="QCheckBox" name="cbAutoScroll">
<property name="text"> <property name="text">