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"