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 }