File indexing completed on 2024-05-19 05:13:16
0001 /* 0002 SPDX-FileCopyrightText: 2017-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "jobtrackerfilterproxymodel.h" 0008 #include "akonadiconsole_debug.h" 0009 #include "jobtrackermodel.h" 0010 #include <QDebug> 0011 #include <QRegularExpression> 0012 0013 JobTrackerFilterProxyModel::JobTrackerFilterProxyModel(QObject *parent) 0014 : QSortFilterProxyModel(parent) 0015 { 0016 setRecursiveFilteringEnabled(true); 0017 setDynamicSortFilter(true); 0018 } 0019 0020 JobTrackerFilterProxyModel::~JobTrackerFilterProxyModel() = default; 0021 0022 bool JobTrackerFilterProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const 0023 { 0024 if (mShowOnlyFailed) { 0025 const QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent); 0026 const QVariant var = sourceModel()->data(index, JobTrackerModel::FailedIdRole); 0027 if (var.isValid()) { 0028 bool result = var.toBool(); 0029 if (!result) { 0030 return false; 0031 } 0032 } 0033 } 0034 QRegularExpression reg = filterRegularExpression(); 0035 if (reg.pattern().isEmpty()) { 0036 return true; 0037 } 0038 reg.setPatternOptions(QRegularExpression::CaseInsensitiveOption); 0039 if (mSearchColumn == -1) { // search in all columns 0040 const int colCount = sourceModel()->columnCount(); 0041 for (int i = 0; i < colCount; i++) { 0042 const QModelIndex index = sourceModel()->index(sourceRow, i, sourceParent); 0043 if (index.isValid()) { 0044 // qDebug() << " " << index << " data=" << sourceModel()->data(index).toString(); 0045 if (sourceModel()->data(index).toString().contains(reg)) { 0046 return true; 0047 } 0048 } 0049 } 0050 return false; 0051 } else { 0052 const int colCount = sourceModel()->columnCount(); 0053 if (mSearchColumn < colCount) { 0054 const QModelIndex index = sourceModel()->index(sourceRow, mSearchColumn, sourceParent); 0055 return sourceModel()->data(index).toString().contains(reg); 0056 } else { 0057 qCWarning(AKONADICONSOLE_LOG) << "You try to select a column which doesn't exist " << mSearchColumn << " model number of column " << colCount; 0058 return true; 0059 } 0060 } 0061 } 0062 0063 void JobTrackerFilterProxyModel::setShowOnlyFailed(bool showOnlyFailed) 0064 { 0065 if (mShowOnlyFailed != showOnlyFailed) { 0066 mShowOnlyFailed = showOnlyFailed; 0067 invalidateFilter(); 0068 } 0069 } 0070 0071 void JobTrackerFilterProxyModel::setSearchColumn(int column) 0072 { 0073 if (mSearchColumn != column) { 0074 mSearchColumn = column; 0075 invalidateFilter(); 0076 } 0077 } 0078 0079 #include "moc_jobtrackerfilterproxymodel.cpp"