File indexing completed on 2024-05-19 05:13:17
0001 /* 0002 SPDX-FileCopyrightText: 2018 Daniel Vrátil <dvratil@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #pragma once 0008 0009 #include <QAbstractItemModel> 0010 #include <QSet> 0011 0012 class QStandardItemModel; 0013 0014 class LoggingModel : public QAbstractItemModel 0015 { 0016 Q_OBJECT 0017 public: 0018 struct Message { 0019 qint64 timestamp; 0020 QString app; 0021 qint64 pid; 0022 QString category; 0023 QString file; 0024 QString function; 0025 QString message; 0026 QtMsgType type; 0027 int line; 0028 }; 0029 0030 enum Roles { MessageRole = Qt::UserRole }; 0031 0032 enum Columns { 0033 TimeColumn, 0034 AppColumn, 0035 TypeColumn, 0036 CategoryColumn, 0037 FileColumn, 0038 FunctionColumn, 0039 MessageColumn, 0040 0041 _ColumnCount 0042 }; 0043 0044 explicit LoggingModel(QObject *parent = nullptr); 0045 ~LoggingModel() override; 0046 0047 void addMessage(qint64 timestamp, 0048 const QString &app, 0049 qint64 pid, 0050 QtMsgType type, 0051 const QString &category, 0052 const QString &file, 0053 const QString &function, 0054 int line, 0055 const QString &message); 0056 0057 void setAppFilterModel(QStandardItemModel *appFilterModel); 0058 void setCategoryFilterModel(QStandardItemModel *categoryFilterModel); 0059 0060 int rowCount(const QModelIndex &parent = {}) const override; 0061 int columnCount(const QModelIndex &parent = {}) const override; 0062 0063 QModelIndex index(int row, int column, const QModelIndex &parent = {}) const override; 0064 QModelIndex parent(const QModelIndex &child = {}) const override; 0065 0066 QVariant headerData(int section, Qt::Orientation orientation, int role) const override; 0067 QVariant data(const QModelIndex &index, int role) const override; 0068 0069 private: 0070 static QString cacheString(const QString &str, QSet<QString> &cache, QStandardItemModel *model = nullptr); 0071 0072 QList<Message> mMessages; 0073 QStandardItemModel *mAppFilterModel = nullptr; 0074 QSet<QString> mAppCache; 0075 QStandardItemModel *mCategoryFilterModel = nullptr; 0076 QSet<QString> mCategoryCache; 0077 QSet<QString> mFileCache; 0078 QSet<QString> mFunctionCache; 0079 };