File indexing completed on 2024-05-19 05:06:57
0001 /* 0002 SPDX-FileCopyrightText: 2020 Thomas Baumgart <tbaumgart@kde.org> 0003 SPDX-License-Identifier: GPL-2.0-or-later 0004 */ 0005 0006 #include "idfilter.h" 0007 0008 // ---------------------------------------------------------------------------- 0009 // QT Includes 0010 0011 #include <QSet> 0012 0013 // ---------------------------------------------------------------------------- 0014 // KDE Includes 0015 0016 // ---------------------------------------------------------------------------- 0017 // Project Includes 0018 0019 #include "mymoneyenums.h" 0020 0021 class IdFilterPrivate 0022 { 0023 public: 0024 IdFilterPrivate() 0025 { 0026 } 0027 0028 QSet<QString> idList; 0029 }; 0030 0031 0032 IdFilter::IdFilter(QObject* parent) 0033 : QSortFilterProxyModel(parent) 0034 , d_ptr(new IdFilterPrivate) 0035 { 0036 } 0037 0038 bool IdFilter::filterAcceptsRow(int source_row, const QModelIndex& source_parent) const 0039 { 0040 Q_D(const IdFilter); 0041 0042 const auto idx = sourceModel()->index(source_row, 0, source_parent); 0043 0044 // in case the object supports the ClosedRole, we evaluate it 0045 // and don't accept this item when it is true 0046 const auto closedRole = idx.data(eMyMoney::Model::ClosedRole); 0047 if (closedRole.isValid() && (closedRole.toBool() == true)) 0048 return false; 0049 0050 return !d->idList.contains(idx.data(eMyMoney::Model::IdRole).toString()); 0051 } 0052 0053 void IdFilter::setFilterList(const QStringList& idList) 0054 { 0055 Q_D(IdFilter); 0056 d->idList = QSet<QString>(idList.constBegin(), idList.constEnd()); 0057 invalidateFilter(); 0058 } 0059 0060 void IdFilter::addFilter(const QString& id) 0061 { 0062 Q_D(IdFilter); 0063 d->idList.insert(id); 0064 invalidateFilter(); 0065 } 0066 0067 void IdFilter::removeFilter(const QString& id) 0068 { 0069 Q_D(IdFilter); 0070 if (d->idList.remove(id)) { 0071 invalidateFilter(); 0072 } 0073 } 0074 0075 QList<QString> IdFilter::filterList() const 0076 { 0077 Q_D(const IdFilter); 0078 return d->idList.values(); 0079 } 0080 0081 bool IdFilter::lessThan(const QModelIndex& left, const QModelIndex& right) const 0082 { 0083 // make sure that the empty item is shown first in any case 0084 if(left.data(eMyMoney::Model::IdRole).toString().isEmpty()) { 0085 return true; 0086 0087 } else if(right.data(eMyMoney::Model::IdRole).toString().isEmpty()) { 0088 return false; 0089 } 0090 0091 // let the base class do the real work 0092 return QSortFilterProxyModel::lessThan(left, right); 0093 }