1 /* 2 * Copyright 2017-2018 Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com> 3 * 4 * This program is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU General Public License as 6 * published by the Free Software Foundation; either version 2 of 7 * the License, or (at your option) any later version. 8 * 9 * This program is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License 15 * along with this program. If not, see <http://www.gnu.org/licenses/>. 16 */ 17 18 #ifndef EQUITIESMODEL_H 19 #define EQUITIESMODEL_H 20 21 #include "kmm_models_export.h" 22 23 // ---------------------------------------------------------------------------- 24 // QT Includes 25 26 #include <QStandardItemModel> 27 28 #include <QSortFilterProxyModel> 29 #if QT_VERSION < QT_VERSION_CHECK(5,10,0) 30 #include <KItemModels/KRecursiveFilterProxyModel> 31 #define QSortFilterProxyModel KRecursiveFilterProxyModel 32 #endif 33 // ---------------------------------------------------------------------------- 34 // KDE Includes 35 36 // ---------------------------------------------------------------------------- 37 // Project Includes 38 39 class MyMoneyObject; 40 class MyMoneyAccount; 41 42 namespace eMyMoney { namespace File { enum class Object; } } 43 44 class KMM_MODELS_EXPORT EquitiesModel : public QStandardItemModel 45 { 46 Q_OBJECT 47 48 public: 49 enum Column { Equity = 0, Symbol, Value, Quantity, Price }; 50 enum Role { InvestmentID = Qt::UserRole, EquityID = Qt::UserRole, SecurityID = Qt::UserRole + 1 }; 51 52 ~EquitiesModel(); 53 54 auto getColumns(); 55 static QString getHeaderName(const Column column); 56 57 public Q_SLOTS: 58 void slotObjectAdded(eMyMoney::File::Object objType, const QString &id); 59 void slotObjectModified(eMyMoney::File::Object objType, const QString &id); 60 void slotObjectRemoved(eMyMoney::File::Object objType, const QString& id); 61 void slotBalanceOrValueChanged(const MyMoneyAccount &account); 62 63 private: 64 EquitiesModel(QObject *parent = nullptr); 65 EquitiesModel(const EquitiesModel&); 66 EquitiesModel& operator=(EquitiesModel&); 67 friend class Models; // only this class can create EquitiesModel 68 69 void init(); 70 void load(); 71 72 protected: 73 class Private; 74 Private* const d; 75 }; 76 77 class KMM_MODELS_EXPORT EquitiesFilterProxyModel : public QSortFilterProxyModel 78 { 79 Q_OBJECT 80 81 public: 82 EquitiesFilterProxyModel(QObject *parent , EquitiesModel *model, const QList<EquitiesModel::Column> &columns = QList<EquitiesModel::Column>()); 83 ~EquitiesFilterProxyModel(); 84 85 QList<EquitiesModel::Column> &getVisibleColumns(); 86 void setHideClosedAccounts(const bool hideClosedAccounts); 87 void setHideZeroBalanceAccounts(const bool hideZeroBalanceAccounts); 88 89 Q_SIGNALS: 90 void columnToggled(const EquitiesModel::Column column, const bool show); 91 92 public Q_SLOTS: 93 void slotColumnsMenu(const QPoint); 94 95 protected: 96 bool filterAcceptsColumn(int source_column, const QModelIndex &source_parent) const override; 97 bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override; 98 99 private: 100 class Private; 101 Private* const d; 102 #if QT_VERSION < QT_VERSION_CHECK(5,10,0) 103 // provide the interface for backward compatbility setRecursiveFilteringEnabled(bool enable)104 void setRecursiveFilteringEnabled(bool enable) { Q_UNUSED(enable) } 105 #endif 106 107 }; 108 109 #undef QSortFilterProxyModel 110 #endif // EQUITIESMODEL_H 111