File indexing completed on 2024-05-19 05:06:58
0001 /* 0002 SPDX-FileCopyrightText: 2022 Thomas Baumgart <tbaumgart@kde.org> 0003 SPDX-License-Identifier: GPL-2.0-or-later 0004 */ 0005 0006 #ifndef LEDGERSORTPROXYMODEL_P_H 0007 #define LEDGERSORTPROXYMODEL_P_H 0008 0009 // ---------------------------------------------------------------------------- 0010 // QT Includes 0011 0012 #include <QDate> 0013 #include <QDebug> 0014 0015 // ---------------------------------------------------------------------------- 0016 // KDE Includes 0017 0018 // ---------------------------------------------------------------------------- 0019 // Project Includes 0020 0021 #include "journalmodel.h" 0022 #include "mymoneyfile.h" 0023 0024 class LedgerSortProxyModelPrivate 0025 { 0026 public: 0027 LedgerSortProxyModelPrivate(LedgerSortProxyModel* qq) 0028 : q(qq) 0029 , hideReconciledTransactions(false) 0030 , balanceCalculationPending(false) 0031 , sortEnabled(false) 0032 , sortPending(false) 0033 , sortPostponed(false) 0034 , sorting(false) 0035 { 0036 } 0037 0038 inline bool isSpecialDatesModel(const QModelIndex& idx) const 0039 { 0040 return idx.data(eMyMoney::Model::BaseModelRole).value<eMyMoney::Model::Roles>() == eMyMoney::Model::SpecialDatesEntryRole; 0041 } 0042 0043 inline bool isReconciliationModel(const QModelIndex& idx) const 0044 { 0045 return idx.data(eMyMoney::Model::BaseModelRole).value<eMyMoney::Model::Roles>() == eMyMoney::Model::ReconciliationEntryRole; 0046 } 0047 0048 inline bool isOnlineBalanceModel(const QModelIndex& idx) const 0049 { 0050 return idx.data(eMyMoney::Model::BaseModelRole).value<eMyMoney::Model::Roles>() == eMyMoney::Model::OnlineBalanceEntryRole; 0051 } 0052 0053 inline bool isJournalModel(const QModelIndex& idx) const 0054 { 0055 return idx.data(eMyMoney::Model::BaseModelRole).value<eMyMoney::Model::Roles>() == eMyMoney::Model::JournalEntryRole; 0056 } 0057 0058 inline bool isSchedulesJournalModel(const QModelIndex& idx) const 0059 { 0060 return idx.data(eMyMoney::Model::BaseModelRole).value<eMyMoney::Model::Roles>() == eMyMoney::Model::SchedulesJournalEntryRole; 0061 } 0062 0063 inline bool isSecurityAccountNameModel(const QModelIndex& idx) const 0064 { 0065 return idx.data(eMyMoney::Model::BaseModelRole).value<eMyMoney::Model::Roles>() == eMyMoney::Model::SecurityAccountNameEntryRole; 0066 } 0067 0068 int columnToSortRole(int column) const 0069 { 0070 const QHash<int, int> columnToRole = { 0071 {JournalModel::Column::Number, eMyMoney::Model::JournalSplitNumberRole}, 0072 {JournalModel::Column::EntryDate, eMyMoney::Model::TransactionEntryDateRole}, 0073 {JournalModel::Column::Date, eMyMoney::Model::TransactionPostDateRole}, 0074 {JournalModel::Column::Account, Qt::DisplayRole}, 0075 {JournalModel::Column::Payee, eMyMoney::Model::SplitPayeeRole}, 0076 {JournalModel::Column::Security, Qt::DisplayRole}, 0077 {JournalModel::Column::CostCenter, Qt::DisplayRole}, 0078 {JournalModel::Column::Detail, Qt::DisplayRole}, 0079 {JournalModel::Column::Reconciliation, Qt::DisplayRole}, 0080 {JournalModel::Column::Payment, eMyMoney::Model::SplitValueRole}, 0081 {JournalModel::Column::Deposit, eMyMoney::Model::SplitValueRole}, 0082 {JournalModel::Column::Quantity, eMyMoney::Model::JournalSplitQuantitySortRole}, 0083 {JournalModel::Column::Price, eMyMoney::Model::JournalSplitPriceSortRole}, 0084 {JournalModel::Column::Amount, Qt::DisplayRole}, 0085 {JournalModel::Column::Value, eMyMoney::Model::JournalSplitValueSortRole}, 0086 {JournalModel::Column::Balance, eMyMoney::Model::JournalBalanceRole}, 0087 }; 0088 0089 return columnToRole.value(column, Qt::DisplayRole); 0090 } 0091 0092 LedgerSortProxyModel* q; 0093 QDate firstVisiblePostDate; 0094 LedgerSortOrder ledgerSortOrder; 0095 bool hideReconciledTransactions; 0096 bool balanceCalculationPending; 0097 /** 0098 * This flag controls if sorting is enabled or not. It is 0099 * used to temporarily bypass sorting to avoid sorting a 0100 * model multiple times with the same state. 0101 */ 0102 bool sortEnabled; 0103 0104 /** 0105 * This flag is set when a call to sort() happened while 0106 * sorting was disabled so that it can be fetched later. 0107 * 0108 * @sa sortEnabled 0109 */ 0110 bool sortPending; 0111 0112 /** 0113 * Some sort operations are postponed until the next 0114 * run of the event loop. This flag controls if such 0115 * a sort is still pending. 0116 */ 0117 bool sortPostponed; 0118 0119 /** 0120 * The sorting currently happens when this is set to @c true. 0121 */ 0122 bool sorting; 0123 }; 0124 0125 #endif // LEDGERSORTPROXYMODEL_P_H