File indexing completed on 2024-05-19 05:08:23

0001 /*
0002     SPDX-FileCopyrightText: 2021 Thomas Baumgart <tbaumgart@kde.org>
0003     SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005 
0006 #include "ledgerviewsettings.h"
0007 
0008 // ----------------------------------------------------------------------------
0009 // QT Includes
0010 
0011 #include <QDate>
0012 #include <QHash>
0013 #include <QTimer>
0014 
0015 // ----------------------------------------------------------------------------
0016 // KDE Includes
0017 
0018 // ----------------------------------------------------------------------------
0019 // Project Includes
0020 
0021 #include "journalmodel.h"
0022 
0023 class LedgerViewSettingsPrivate
0024 {
0025 public:
0026     LedgerViewSettingsPrivate()
0027         : m_showLedgerLens(false)
0028         , m_showTransactionDetails(false)
0029         , m_showAllSplits(false)
0030         , m_hideReconciledTransactions(false)
0031         , m_showReconciliationEntries(LedgerViewSettings::DontShowReconciliationHeader)
0032     {
0033         m_settingsChangedTimer.setSingleShot(true);
0034         m_settingsChangedTimer.setInterval(20);
0035     }
0036 
0037     void settingsChanged()
0038     {
0039         m_settingsChangedTimer.start();
0040     }
0041 
0042     QDate m_hideTransactionsBefore;
0043     QHash<LedgerViewSettings::SortOrderType, LedgerSortOrder> m_sortOrder;
0044     QTimer m_settingsChangedTimer;
0045     bool m_showLedgerLens;
0046     bool m_showTransactionDetails;
0047     bool m_showAllSplits;
0048     bool m_hideReconciledTransactions;
0049     LedgerViewSettings::ReconciliationHeader m_showReconciliationEntries;
0050 };
0051 
0052 LedgerViewSettings* LedgerViewSettings::instance()
0053 {
0054     static LedgerViewSettings* m_instance = nullptr;
0055 
0056     if (m_instance == nullptr) {
0057         m_instance = new LedgerViewSettings;
0058     }
0059     return m_instance;
0060 }
0061 
0062 LedgerViewSettings::LedgerViewSettings()
0063     : QObject(nullptr)
0064     , d(new LedgerViewSettingsPrivate)
0065 {
0066     connect(&d->m_settingsChangedTimer, &QTimer::timeout, this, [&]() {
0067         Q_EMIT settingsChanged();
0068     });
0069 }
0070 
0071 LedgerViewSettings::~LedgerViewSettings()
0072 {
0073     delete d;
0074 }
0075 
0076 bool LedgerViewSettings::showLedgerLens() const
0077 {
0078     return d->m_showLedgerLens;
0079 }
0080 
0081 void LedgerViewSettings::setShowLedgerLens(bool show)
0082 {
0083     if (d->m_showLedgerLens != show) {
0084         d->m_showLedgerLens = show;
0085         d->settingsChanged();
0086     }
0087 }
0088 
0089 bool LedgerViewSettings::showTransactionDetails() const
0090 {
0091     return d->m_showTransactionDetails;
0092 }
0093 
0094 void LedgerViewSettings::setShowTransactionDetails(bool show)
0095 {
0096     if (d->m_showTransactionDetails != show) {
0097         d->m_showTransactionDetails = show;
0098         d->settingsChanged();
0099     }
0100 }
0101 
0102 bool LedgerViewSettings::showAllSplits() const
0103 {
0104     return d->m_showAllSplits;
0105 }
0106 
0107 void LedgerViewSettings::setShowAllSplits(bool show)
0108 {
0109     if (d->m_showAllSplits != show) {
0110         d->m_showAllSplits = show;
0111         d->settingsChanged();
0112     }
0113 }
0114 
0115 bool LedgerViewSettings::hideReconciledTransactions() const
0116 {
0117     return d->m_hideReconciledTransactions;
0118 }
0119 
0120 void LedgerViewSettings::setHideReconciledTransactions(bool hide)
0121 {
0122     if (d->m_hideReconciledTransactions != hide) {
0123         d->m_hideReconciledTransactions = hide;
0124         d->settingsChanged();
0125     }
0126 }
0127 
0128 QDate LedgerViewSettings::hideTransactionsBefore() const
0129 {
0130     return d->m_hideTransactionsBefore;
0131 }
0132 
0133 void LedgerViewSettings::setHideTransactionsBefore(const QDate& date)
0134 {
0135     if (d->m_hideTransactionsBefore != date) {
0136         d->m_hideTransactionsBefore = date;
0137         d->settingsChanged();
0138     }
0139 }
0140 
0141 LedgerViewSettings::ReconciliationHeader LedgerViewSettings::showReconciliationEntries() const
0142 {
0143     return d->m_showReconciliationEntries;
0144 }
0145 
0146 void LedgerViewSettings::setShowReconciliationEntries(ReconciliationHeader showHeader)
0147 {
0148     if (d->m_showReconciliationEntries != showHeader) {
0149         d->m_showReconciliationEntries = showHeader;
0150         d->settingsChanged();
0151     }
0152 }
0153 
0154 LedgerSortOrder LedgerViewSettings::sortOrder(SortOrderType type) const
0155 {
0156     return d->m_sortOrder.value(type, LedgerSortOrder());
0157 }
0158 
0159 void LedgerViewSettings::setSortOrder(LedgerViewSettings::SortOrderType type, const QString& sortOrder)
0160 {
0161     LedgerSortOrder sortOrderItemList;
0162     sortOrderItemList.setSortOrder(sortOrder);
0163     if (d->m_sortOrder[type] != sortOrderItemList) {
0164         d->m_sortOrder[type] = sortOrderItemList;
0165         d->settingsChanged();
0166     }
0167 }
0168 
0169 void LedgerViewSettings::flushChanges()
0170 {
0171     if (d->m_settingsChangedTimer.isActive()) {
0172         d->m_settingsChangedTimer.stop();
0173         Q_EMIT settingsChanged();
0174     }
0175 }