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