File indexing completed on 2024-05-05 05:28:25

0001 /*
0002  * SPDX-FileCopyrightText: 2021 Devin Lin <devin@kde.org>
0003  * SPDX-License-Identifier: GPL-2.0-or-later
0004  */
0005 
0006 #include "modulesproxymodel.h"
0007 
0008 ModulesProxyModel::ModulesProxyModel(QObject *parent)
0009     : QSortFilterProxyModel{parent}
0010     , m_model{new ModulesModel}
0011 {
0012     setSourceModel(m_model);
0013     setSortRole(ModulesModel::NameRole);
0014     setFilterString(m_filterString);
0015     setRecursiveFilteringEnabled(true);
0016 }
0017 
0018 QString ModulesProxyModel::filterString() const
0019 {
0020     return m_filterString;
0021 }
0022 
0023 void ModulesProxyModel::setFilterString(QString filterString)
0024 {
0025     if (filterString != m_filterString) {
0026         m_filterString = filterString;
0027         setFilterFixedString({m_filterString});
0028         Q_EMIT filterStringChanged();
0029     }
0030 }
0031 
0032 bool ModulesProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &parent) const
0033 {
0034     QString name = m_model->data(m_model->index(sourceRow, 0), ModulesModel::NameRole).toString();
0035     QString description = m_model->data(m_model->index(sourceRow, 0), ModulesModel::DescriptionRole).toString();
0036     QStringList keywords = m_model->data(m_model->index(sourceRow, 0), ModulesModel::KeywordsRole).toStringList();
0037 
0038     for (const QString &keyword : keywords) {
0039         if (keyword.contains(m_filterString, Qt::CaseInsensitive))
0040             return true;
0041     }
0042     return name.contains(m_filterString, Qt::CaseInsensitive) || description.contains(m_filterString, Qt::CaseInsensitive);
0043 }