File indexing completed on 2024-05-19 05:06:58
0001 /* 0002 SPDX-FileCopyrightText: 2020 Thomas Baumgart <tbaumgart@kde.org> 0003 SPDX-License-Identifier: GPL-2.0-or-later 0004 */ 0005 0006 #include "scheduleproxymodel.h" 0007 0008 // ---------------------------------------------------------------------------- 0009 // QT Includes 0010 0011 #include <QDate> 0012 #include <QDebug> 0013 0014 // ---------------------------------------------------------------------------- 0015 // KDE Includes 0016 0017 // ---------------------------------------------------------------------------- 0018 // Project Includes 0019 0020 #include "mymoneyenums.h" 0021 #include "mymoneyfile.h" 0022 #include "schedulesmodel.h" 0023 0024 class ScheduleProxyModelPrivate 0025 { 0026 public: 0027 ScheduleProxyModelPrivate() 0028 : m_hideFinishedSchedules(false) 0029 {} 0030 0031 bool m_hideFinishedSchedules; 0032 }; 0033 0034 ScheduleProxyModel::ScheduleProxyModel(QObject *parent) 0035 : QSortFilterProxyModel(parent) 0036 , d(new ScheduleProxyModelPrivate) 0037 { 0038 setRecursiveFilteringEnabled(true); 0039 } 0040 0041 #undef QSortFilterProxyModel 0042 0043 ScheduleProxyModel::~ScheduleProxyModel() 0044 { 0045 } 0046 0047 bool ScheduleProxyModel::filterAcceptsRow(int source_row, const QModelIndex& source_parent) const 0048 { 0049 // we only need to take care of sub-items here 0050 if (source_parent.isValid()) { 0051 const auto idx = sourceModel()->index(source_row, 0, source_parent); 0052 if (d->m_hideFinishedSchedules && idx.data(eMyMoney::Model::ScheduleIsFinishedRole).toBool()) { 0053 return false; 0054 } 0055 return QSortFilterProxyModel::filterAcceptsRow(source_row, source_parent); 0056 } 0057 return true; 0058 } 0059 0060 void ScheduleProxyModel::setHideFinishedSchedules(bool hide) 0061 { 0062 d->m_hideFinishedSchedules = hide; 0063 } 0064 0065 bool ScheduleProxyModel::lessThan(const QModelIndex& source_left, const QModelIndex& source_right) const 0066 { 0067 if (source_left.parent().isValid() && source_right.parent().isValid()) { 0068 // always show overdue schedules first 0069 if (source_left.data(eMyMoney::Model::ScheduleIsOverdueRole).toBool() != source_right.data(eMyMoney::Model::ScheduleIsOverdueRole).toBool()) { 0070 return (sortOrder() == Qt::SortOrder::AscendingOrder) ? source_left.data(eMyMoney::Model::ScheduleIsOverdueRole).toBool() 0071 : source_right.data(eMyMoney::Model::ScheduleIsOverdueRole).toBool(); 0072 } 0073 0074 switch (source_left.column()) { 0075 case SchedulesModel::Column::Name: 0076 case SchedulesModel::Column::Account: 0077 case SchedulesModel::Column::Payee: 0078 break; 0079 0080 case SchedulesModel::Column::NextDueDate: 0081 return source_left.data(eMyMoney::Model::ScheduleNextDueDateRole).toDate() < source_right.data(eMyMoney::Model::ScheduleNextDueDateRole).toDate(); 0082 0083 case SchedulesModel::Column::Frequency: 0084 return source_left.data(eMyMoney::Model::ScheduleFrequencyRole).toInt() < source_right.data(eMyMoney::Model::ScheduleFrequencyRole).toInt(); 0085 } 0086 } 0087 return QSortFilterProxyModel::lessThan(source_left, source_right); 0088 }