Files
qt-creator/src/plugins/projectexplorer/taskmodel.h
Lucie Gérard a7956df3ca Use SPDX license identifiers
Replace the current license disclaimer in files by
a SPDX-License-Identifier.

Task-number: QTBUG-67283
Change-Id: I708fd1f9f2b73d60f57cc3568646929117825813
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
2022-08-26 12:27:18 +00:00

154 lines
4.8 KiB
C++

// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0
#pragma once
#include <QSortFilterProxyModel>
#include <QIcon>
#include <QRegularExpression>
#include "task.h"
namespace ProjectExplorer {
namespace Internal {
class TaskModel : public QAbstractItemModel
{
Q_OBJECT
public:
// Model stuff
explicit TaskModel(QObject *parent);
QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override;
QModelIndex parent(const QModelIndex &child) const override;
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
Task task(const QModelIndex &index) const;
Tasks tasks(const QModelIndexList &indexes) const;
QList<Utils::Id> categoryIds() const;
QString categoryDisplayName(Utils::Id categoryId) const;
void addCategory(Utils::Id categoryId, const QString &categoryName, int priority);
Tasks tasks(Utils::Id categoryId = Utils::Id()) const;
void addTask(const Task &t);
void removeTask(unsigned int id);
void clearTasks(Utils::Id categoryId = Utils::Id());
void updateTaskFileName(const Task &task, const QString &fileName);
void updateTaskLineNumber(const Task &task, int line);
int sizeOfFile(const QFont &font);
int sizeOfLineNumber(const QFont &font);
void setFileNotFound(const QModelIndex &index, bool b);
enum Roles { File = Qt::UserRole, Line, MovedLine, Description, FileNotFound, Type, Category, Icon, Task_t };
int taskCount(Utils::Id categoryId);
int errorTaskCount(Utils::Id categoryId);
int warningTaskCount(Utils::Id categoryId);
int unknownTaskCount(Utils::Id categoryId);
bool hasFile(const QModelIndex &index) const;
int rowForTask(const Task &task);
private:
bool compareTasks(const Task &t1, const Task &t2);
class CategoryData
{
public:
void addTask(const Task &task)
{
++count;
if (task.type == Task::Warning)
++warnings;
else if (task.type == Task::Error)
++errors;
}
void removeTask(const Task &task)
{
--count;
if (task.type == Task::Warning)
--warnings;
else if (task.type == Task::Error)
--errors;
}
void clear() {
count = 0;
warnings = 0;
errors = 0;
}
QString displayName;
int priority = 0;
int count = 0;
int warnings = 0;
int errors = 0;
};
QHash<Utils::Id,CategoryData> m_categories; // category id to data
Tasks m_tasks; // all tasks (in order of id)
QHash<QString,bool> m_fileNotFound;
QFont m_fileMeasurementFont;
QFont m_lineMeasurementFont;
int m_maxSizeOfFileName = 0;
int m_lastMaxSizeIndex = 0;
int m_sizeOfLineNumber = 0;
};
class TaskFilterModel : public QSortFilterProxyModel
{
Q_OBJECT
public:
TaskFilterModel(TaskModel *sourceModel, QObject *parent = nullptr);
TaskModel *taskModel() const { return static_cast<TaskModel *>(sourceModel()); }
bool filterIncludesWarnings() const { return m_includeWarnings; }
void setFilterIncludesWarnings(bool b);
bool filterIncludesErrors() const { return m_includeErrors; }
void setFilterIncludesErrors(bool b) { m_includeErrors = b; invalidateFilter(); }
QList<Utils::Id> filteredCategories() const { return m_categoryIds; }
void setFilteredCategories(const QList<Utils::Id> &categoryIds) { m_categoryIds = categoryIds; invalidateFilter(); }
Task task(const QModelIndex &index) const { return taskModel()->task(mapToSource(index)); }
Tasks tasks(const QModelIndexList &indexes) const;
int issuesCount(int startRow, int endRow) const;
bool hasFile(const QModelIndex &index) const
{ return taskModel()->hasFile(mapToSource(index)); }
void updateFilterProperties(
const QString &filterText,
Qt::CaseSensitivity caseSensitivity,
bool isRegex,
bool isInverted);
private:
bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override;
bool filterAcceptsTask(const Task &task) const;
bool m_beginRemoveRowsSent = false;
bool m_includeUnknowns;
bool m_includeWarnings;
bool m_includeErrors;
bool m_filterStringIsRegexp = false;
bool m_filterIsInverted = false;
Qt::CaseSensitivity m_filterCaseSensitivity = Qt::CaseInsensitive;
QList<Utils::Id> m_categoryIds;
QString m_filterText;
QRegularExpression m_filterRegexp;
};
} // namespace Internal
} // namespace ProjectExplorer