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:
+15
-15
@@ -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;
|
||||||
@@ -676,25 +683,11 @@ void CANFrameModel::addFrame(const CANFrame& frame, bool autoRefresh = false)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!overwriteDups)
|
if (!overwriteDups)
|
||||||
{
|
|
||||||
bool alloc_ok = true;
|
|
||||||
|
|
||||||
for(int i=0; i<3; i++)
|
|
||||||
{
|
{
|
||||||
try
|
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();
|
||||||
|
if(filtersPersistDuringClear == false)
|
||||||
|
{
|
||||||
filters.clear();
|
filters.clear();
|
||||||
busFilters.clear();
|
busFilters.clear();
|
||||||
|
}
|
||||||
frames.reserve(preallocSize);
|
frames.reserve(preallocSize);
|
||||||
filteredFrames.reserve(preallocSize);
|
filteredFrames.reserve(preallocSize);
|
||||||
this->endResetModel();
|
this->endResetModel();
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
Reference in New Issue
Block a user