Fixed #7231 (GUI: 'Selected File Recheck' being performed multiple times if file selection includes existing error messages.)
This commit is contained in:
parent
b38559774d
commit
997d7dc695
|
@ -813,10 +813,16 @@ void MainWindow::ReCheckSelected(QStringList files, bool all)
|
|||
// Clear details, statistics and progress
|
||||
mUI.mResults->Clear(false);
|
||||
for (int i = 0; i < files.size(); ++i)
|
||||
mUI.mResults->Clear(files[i]);
|
||||
mUI.mResults->ClearRecheckFile(files[i]);
|
||||
|
||||
FileList pathList;
|
||||
pathList.AddPathList(files);
|
||||
if (mProject)
|
||||
pathList.AddExcludeList(mProject->GetProjectFile()->GetExcludedPaths());
|
||||
QStringList fileNames = pathList.GetFileList();
|
||||
CheckLockDownUI(); // lock UI while checking
|
||||
mUI.mResults->CheckingStarted(files.size());
|
||||
mThread->SetCheckFiles(files);
|
||||
mUI.mResults->CheckingStarted(fileNames.size());
|
||||
mThread->SetCheckFiles(fileNames);
|
||||
|
||||
// Saving last check start time, otherwise unchecked modified files will not be
|
||||
// considered in "Modified Files Check" performed after "Selected Files Check"
|
||||
|
|
|
@ -46,6 +46,7 @@
|
|||
#include "application.h"
|
||||
#include "showtypes.h"
|
||||
#include "threadhandler.h"
|
||||
#include "path.h"
|
||||
|
||||
ResultsTree::ResultsTree(QWidget * parent) :
|
||||
QTreeView(parent),
|
||||
|
@ -339,6 +340,21 @@ void ResultsTree::Clear(const QString &filename)
|
|||
}
|
||||
}
|
||||
|
||||
void ResultsTree::ClearRecheckFile(const QString &filename)
|
||||
{
|
||||
for (int i = 0; i < mModel.rowCount(); ++i) {
|
||||
const QStandardItem *item = mModel.item(i, 0);
|
||||
if (!item)
|
||||
continue;
|
||||
|
||||
QVariantMap data = item->data().toMap();
|
||||
if (filename == data["file"].toString()) {
|
||||
mModel.removeRow(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void ResultsTree::LoadSettings()
|
||||
{
|
||||
|
@ -813,8 +829,16 @@ void ResultsTree::RecheckSelectedFiles()
|
|||
QStringList selectedItems;
|
||||
foreach (QModelIndex index, selectedRows) {
|
||||
QStandardItem *item = mModel.itemFromIndex(index);
|
||||
while (item->parent())
|
||||
item = item->parent();
|
||||
QVariantMap data = item->data().toMap();
|
||||
selectedItems<<data["file"].toString();
|
||||
QString currentFile = data["file"].toString();
|
||||
if (Path::isHeader(currentFile.toStdString())) {
|
||||
if (!selectedItems.contains(data["file0"].toString()))
|
||||
selectedItems<<data["file0"].toString();
|
||||
}
|
||||
if (!selectedItems.contains(currentFile))
|
||||
selectedItems<<currentFile;
|
||||
}
|
||||
emit CheckSelected(selectedItems);
|
||||
}
|
||||
|
|
|
@ -70,6 +70,11 @@ public:
|
|||
*/
|
||||
void Clear(const QString &filename);
|
||||
|
||||
/**
|
||||
* @brief Clear errors of a file selected for recheck
|
||||
*/
|
||||
void ClearRecheckFile(const QString &filename);
|
||||
|
||||
/**
|
||||
* @brief Function to show/hide certain type of errors
|
||||
* Refreshes the tree.
|
||||
|
|
|
@ -42,7 +42,6 @@
|
|||
|
||||
ResultsView::ResultsView(QWidget * parent) :
|
||||
QWidget(parent),
|
||||
mErrorsFound(false),
|
||||
mShowNoErrorsMessage(true),
|
||||
mStatistics(new CheckStatistics(this))
|
||||
{
|
||||
|
@ -74,7 +73,6 @@ void ResultsView::Clear(bool results)
|
|||
{
|
||||
if (results) {
|
||||
mUI.mTree->Clear();
|
||||
mErrorsFound = false;
|
||||
}
|
||||
|
||||
mUI.mDetails->setText("");
|
||||
|
@ -90,13 +88,11 @@ void ResultsView::Clear(bool results)
|
|||
void ResultsView::Clear(const QString &filename)
|
||||
{
|
||||
mUI.mTree->Clear(filename);
|
||||
}
|
||||
|
||||
/**
|
||||
* @todo Optimize this.. It is inefficient to check this every time.
|
||||
*/
|
||||
// If the results list got empty..
|
||||
if (!mUI.mTree->HasResults())
|
||||
mErrorsFound = false;
|
||||
void ResultsView::ClearRecheckFile(const QString &filename)
|
||||
{
|
||||
mUI.mTree->ClearRecheckFile(filename);
|
||||
}
|
||||
|
||||
void ResultsView::Progress(int value, const QString& description)
|
||||
|
@ -107,7 +103,6 @@ void ResultsView::Progress(int value, const QString& description)
|
|||
|
||||
void ResultsView::Error(const ErrorItem &item)
|
||||
{
|
||||
mErrorsFound = true;
|
||||
if (mUI.mTree->AddErrorItem(item)) {
|
||||
emit GotResults();
|
||||
mStatistics->AddItem(ShowTypes::SeverityToShowType(item.severity));
|
||||
|
@ -141,7 +136,7 @@ void ResultsView::FilterResults(const QString& filter)
|
|||
|
||||
void ResultsView::Save(const QString &filename, Report::Type type) const
|
||||
{
|
||||
if (!mErrorsFound) {
|
||||
if (!HasResults()) {
|
||||
QMessageBox msgBox;
|
||||
msgBox.setText(tr("No errors found, nothing to save."));
|
||||
msgBox.setIcon(QMessageBox::Critical);
|
||||
|
@ -205,7 +200,7 @@ void ResultsView::PrintPreview()
|
|||
|
||||
void ResultsView::Print(QPrinter* printer)
|
||||
{
|
||||
if (!mErrorsFound) {
|
||||
if (!HasResults()) {
|
||||
QMessageBox msgBox;
|
||||
msgBox.setText(tr("No errors found, nothing to print."));
|
||||
msgBox.setIcon(QMessageBox::Critical);
|
||||
|
@ -251,7 +246,7 @@ void ResultsView::CheckingFinished()
|
|||
//Should we inform user of non visible/not found errors?
|
||||
if (mShowNoErrorsMessage) {
|
||||
//Tell user that we found no errors
|
||||
if (!mErrorsFound) {
|
||||
if (!HasResults()) {
|
||||
QMessageBox msg(QMessageBox::Information,
|
||||
tr("Cppcheck"),
|
||||
tr("No errors found."),
|
||||
|
|
|
@ -68,6 +68,11 @@ public:
|
|||
*/
|
||||
void Clear(const QString &filename);
|
||||
|
||||
/**
|
||||
* @brief Remove a recheck file from the results.
|
||||
*/
|
||||
void ClearRecheckFile(const QString &filename);
|
||||
|
||||
/**
|
||||
* @brief Save results to a file
|
||||
*
|
||||
|
@ -249,11 +254,6 @@ public slots:
|
|||
void PrintPreview();
|
||||
|
||||
protected:
|
||||
/**
|
||||
* @brief Have any errors been found
|
||||
*/
|
||||
bool mErrorsFound;
|
||||
|
||||
/**
|
||||
* @brief Should we show a "No errors found dialog" every time no errors were found?
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue