File indexing completed on 2024-05-19 16:38:51
0001 /* 0002 SPDX-FileCopyrightText: 2020 Kai Uwe Broulik <kde@privat.broulik.de> 0003 0004 SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #include "filterproxymodel.h" 0008 0009 #include "modulesmodel.h" 0010 0011 FilterProxyModel::FilterProxyModel(QObject *parent) 0012 : QSortFilterProxyModel(parent) 0013 { 0014 } 0015 0016 FilterProxyModel::~FilterProxyModel() = default; 0017 0018 QString FilterProxyModel::query() const 0019 { 0020 return m_query; 0021 } 0022 0023 void FilterProxyModel::setQuery(const QString &query) 0024 { 0025 if (m_query != query) { 0026 m_query = query; 0027 invalidateFilter(); 0028 Q_EMIT queryChanged(); 0029 } 0030 } 0031 0032 KDEDConfig::ModuleStatus FilterProxyModel::statusFilter() const 0033 { 0034 return m_statusFilter; 0035 } 0036 0037 void FilterProxyModel::setStatusFilter(KDEDConfig::ModuleStatus statusFilter) 0038 { 0039 if (m_statusFilter != statusFilter) { 0040 m_statusFilter = statusFilter; 0041 invalidateFilter(); 0042 Q_EMIT statusFilterChanged(); 0043 } 0044 } 0045 0046 bool FilterProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const 0047 { 0048 const QModelIndex idx = sourceModel()->index(source_row, 0, source_parent); 0049 0050 if (!m_query.isEmpty()) { 0051 if (!idx.data(Qt::DisplayRole).toString().contains(m_query, Qt::CaseInsensitive) 0052 && !idx.data(ModulesModel::ModuleNameRole).toString().contains(m_query, Qt::CaseInsensitive)) { 0053 return false; 0054 } 0055 } 0056 0057 if (m_statusFilter != KDEDConfig::UnknownStatus) { 0058 const auto status = static_cast<KDEDConfig::ModuleStatus>(idx.data(ModulesModel::StatusRole).toInt()); 0059 if (m_statusFilter != status) { 0060 return false; 0061 } 0062 } 0063 0064 return true; 0065 }