File indexing completed on 2024-05-12 05:10:43
0001 /* 0002 SPDX-FileCopyrightText: 2009 KDAB 0003 SPDX-FileContributor: Frank Osterfeld <osterfeld@kde.org> 0004 0005 SPDX-License-Identifier: LGPL-2.0-or-later 0006 */ 0007 0008 #include "calfilterproxymodel_p.h" 0009 #include "calendarutils.h" 0010 0011 #include <Akonadi/EntityTreeModel> 0012 #include <Akonadi/Item> 0013 0014 #include <KCalendarCore/CalFilter> 0015 #include <KCalendarCore/Incidence> 0016 0017 using namespace Akonadi; 0018 0019 class Akonadi::CalFilterProxyModelPrivate 0020 { 0021 public: 0022 explicit CalFilterProxyModelPrivate() = default; 0023 0024 KCalendarCore::CalFilter *filter = nullptr; 0025 }; 0026 0027 CalFilterProxyModel::CalFilterProxyModel(QObject *parent) 0028 : QSortFilterProxyModel(parent) 0029 , d(new CalFilterProxyModelPrivate) 0030 { 0031 setFilterKeyColumn(0); 0032 } 0033 0034 CalFilterProxyModel::~CalFilterProxyModel() = default; 0035 0036 KCalendarCore::CalFilter *CalFilterProxyModel::filter() const 0037 { 0038 return d->filter; 0039 } 0040 0041 void CalFilterProxyModel::setFilter(KCalendarCore::CalFilter *filter) 0042 { 0043 if (filter == d->filter) { 0044 return; 0045 } 0046 0047 d->filter = filter; 0048 invalidateFilter(); 0049 } 0050 0051 bool CalFilterProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const 0052 { 0053 if (!d->filter) { 0054 return true; 0055 } 0056 0057 const QModelIndex idx = sourceModel()->index(source_row, 0, source_parent); 0058 if (!idx.isValid()) { 0059 return false; 0060 } 0061 0062 const auto item = idx.data(Akonadi::EntityTreeModel::ItemRole).value<Akonadi::Item>(); 0063 if (!item.isValid()) { 0064 return false; 0065 } 0066 0067 const KCalendarCore::Incidence::Ptr incidence = CalendarUtils::incidence(item); 0068 if (!incidence) { 0069 return false; 0070 } 0071 0072 return d->filter->filterIncidence(incidence); 0073 } 0074 0075 #include "moc_calfilterproxymodel_p.cpp"