3#include <QtCore/QChronoTimer>
4#include <QtCore/QRegularExpression>
6#include <QtCore/QStringList>
7#include <QtQmlIntegration/QtQmlIntegration>
30 explicit LogModel(QObject* parent =
nullptr);
32 int rowCount(
const QModelIndex& parent = QModelIndex())
const override;
33 QVariant
data(
const QModelIndex& index,
int role = Qt::DisplayRole)
const override;
34 void multiData(
const QModelIndex& index, QModelRoleDataSpan roleDataSpan)
const override;
36 int totalCount()
const {
return static_cast<int>(_entries.size()); }
63 Q_INVOKABLE
void clear();
67 QList<LogEntry>
allEntriesSnapshot()
const {
return QList<LogEntry>(_entries.begin(), _entries.end()); }
89 void _rebuildFilteredIndices();
90 bool _passesFilter(
const LogEntry& entry)
const;
92 bool _hasActiveFilter()
const;
93 void _recompileRegex();
94 void _appendToFiltered(
int first,
int last);
95 void _invalidateCategoryCache();
97 std::deque<LogEntry> _entries;
98 std::vector<LogEntry> _pendingEntries;
99 std::vector<int> _filteredIndices;
100 QChronoTimer _batchTimer{std::chrono::milliseconds{kBatchFlushMs}};
101 QTimer _filterTextDebounce;
102 QString _pendingFilterText;
104 int _maxEntries = 100000;
106 QString _filterCategory;
108 bool _filterRegex =
false;
109 bool _filterBypassed =
true;
110 QRegularExpression _compiledRegex;
112 QSet<QString> _categoriesSet;
113 mutable QStringList _categoriesCache;
114 mutable bool _categoriesDirty =
false;
116 static constexpr int kBatchFlushMs = 16;
117 static constexpr int kBatchMaxSize = 200;
118 static constexpr int kFilterDebounceMs = 200;
Base class for table models that display LogEntry data.
const LogEntry * entryAt(int row) const override
Return entry at visible row, or nullptr if out of range.
void enqueue(LogEntry entry)
QString filterText() const
void multiData(const QModelIndex &index, QModelRoleDataSpan roleDataSpan) const override
void setFilterText(const QString &text)
void setFilterRegex(bool enabled)
bool filterRegexValid() const
Q_INVOKABLE void clearFilters()
void filterCategoryChanged()
void setFilterCategory(const QString &category)
void setMaxEntries(int max)
QList< LogEntry > allEntriesSnapshot() const
void filterRegexValidChanged()
QList< LogEntry > filteredEntries() const
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const override
Q_INVOKABLE void setFilterTextDeferred(const QString &text)
void setFilterLevel(int level)
void filterRegexChanged()
QStringList categoriesList() const
QString filterCategory() const
void filterLevelChanged()
int rowCount(const QModelIndex &parent=QModelIndex()) const override