File indexing completed on 2024-05-12 16:42:18
0001 /* 0002 SPDX-FileCopyrightText: 2017-2018 Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com> 0003 SPDX-License-Identifier: GPL-2.0-or-later 0004 */ 0005 0006 #ifndef EQUITIESMODEL_H 0007 #define EQUITIESMODEL_H 0008 0009 #include "kmm_models_export.h" 0010 0011 // ---------------------------------------------------------------------------- 0012 // QT Includes 0013 0014 #include <QStandardItemModel> 0015 0016 #include <QSortFilterProxyModel> 0017 #if QT_VERSION < QT_VERSION_CHECK(5,10,0) 0018 #include <KItemModels/KRecursiveFilterProxyModel> 0019 #define QSortFilterProxyModel KRecursiveFilterProxyModel 0020 #endif 0021 // ---------------------------------------------------------------------------- 0022 // KDE Includes 0023 0024 // ---------------------------------------------------------------------------- 0025 // Project Includes 0026 0027 class MyMoneyObject; 0028 class MyMoneyAccount; 0029 0030 namespace eMyMoney { 0031 namespace File { 0032 enum class Object; 0033 } 0034 } 0035 0036 class KMM_MODELS_EXPORT EquitiesModel : public QStandardItemModel 0037 { 0038 Q_OBJECT 0039 0040 public: 0041 enum Column { Equity = 0, Symbol, Value, Quantity, Price }; 0042 enum Role { InvestmentID = Qt::UserRole, EquityID = Qt::UserRole, SecurityID = Qt::UserRole + 1, SortRole }; 0043 0044 ~EquitiesModel(); 0045 0046 auto getColumns(); 0047 static QString getHeaderName(const Column column); 0048 0049 public Q_SLOTS: 0050 void slotObjectAdded(eMyMoney::File::Object objType, const QString &id); 0051 void slotObjectModified(eMyMoney::File::Object objType, const QString &id); 0052 void slotObjectRemoved(eMyMoney::File::Object objType, const QString& id); 0053 void slotBalanceOrValueChanged(const MyMoneyAccount &account); 0054 0055 private: 0056 EquitiesModel(QObject *parent = nullptr); 0057 EquitiesModel(const EquitiesModel&); 0058 EquitiesModel& operator=(EquitiesModel&); 0059 friend class Models; // only this class can create EquitiesModel 0060 0061 void init(); 0062 void load(); 0063 0064 protected: 0065 class Private; 0066 Private* const d; 0067 }; 0068 0069 class KMM_MODELS_EXPORT EquitiesFilterProxyModel : public QSortFilterProxyModel 0070 { 0071 Q_OBJECT 0072 0073 public: 0074 EquitiesFilterProxyModel(QObject *parent, EquitiesModel *model, const QList<EquitiesModel::Column> &columns = QList<EquitiesModel::Column>()); 0075 ~EquitiesFilterProxyModel(); 0076 0077 QList<EquitiesModel::Column> &getVisibleColumns(); 0078 void setHideClosedAccounts(const bool hideClosedAccounts); 0079 void setHideZeroBalanceAccounts(const bool hideZeroBalanceAccounts); 0080 0081 Q_SIGNALS: 0082 void columnToggled(const EquitiesModel::Column column, const bool show); 0083 0084 public Q_SLOTS: 0085 void slotColumnsMenu(const QPoint); 0086 0087 protected: 0088 bool filterAcceptsColumn(int source_column, const QModelIndex &source_parent) const override; 0089 bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override; 0090 bool lessThan(const QModelIndex& left, const QModelIndex& right) const override; 0091 0092 private: 0093 class Private; 0094 Private* const d; 0095 #if QT_VERSION < QT_VERSION_CHECK(5,10,0) 0096 // provide the interface for backward compatbility 0097 void setRecursiveFilteringEnabled(bool enable) { 0098 Q_UNUSED(enable) 0099 } 0100 #endif 0101 0102 }; 0103 0104 #undef QSortFilterProxyModel 0105 #endif // EQUITIESMODEL_H