File indexing completed on 2024-05-12 16:42:20

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 SECURITIESMODEL_H
0007 #define SECURITIESMODEL_H
0008 
0009 #include "kmm_models_export.h"
0010 
0011 // ----------------------------------------------------------------------------
0012 // QT Includes
0013 
0014 #include <QStandardItemModel>
0015 #include <QSortFilterProxyModel>
0016 #if QT_VERSION < QT_VERSION_CHECK(5,10,0)
0017 #include <KItemModels/KRecursiveFilterProxyModel>
0018 #define QSortFilterProxyModel KRecursiveFilterProxyModel
0019 #endif
0020 
0021 // ----------------------------------------------------------------------------
0022 // KDE Includes
0023 
0024 // ----------------------------------------------------------------------------
0025 // Project Includes
0026 
0027 class MyMoneyObject;
0028 
0029 namespace eMyMoney {
0030 namespace File {
0031 enum class Object;
0032 }
0033 }
0034 
0035 class KMM_MODELS_EXPORT SecuritiesModel : public QStandardItemModel
0036 {
0037     Q_OBJECT
0038 
0039 public:
0040     enum Column { Security = 0, Symbol, Type, Market, Currency, Fraction };
0041 
0042     ~SecuritiesModel();
0043 
0044     auto getColumns();
0045     static QString getHeaderName(const Column column);
0046 
0047 public Q_SLOTS:
0048     void slotObjectAdded(eMyMoney::File::Object objType, const QString &id);
0049     void slotObjectModified(eMyMoney::File::Object objType, const QString &id);
0050     void slotObjectRemoved(eMyMoney::File::Object objType, const QString& id);
0051 
0052 private:
0053     SecuritiesModel(QObject *parent = nullptr);
0054     SecuritiesModel(const SecuritiesModel&);
0055     SecuritiesModel& operator=(SecuritiesModel&);
0056     friend class Models;  // only this class can create SecuritiesModel
0057 
0058     void init();
0059     void load();
0060 
0061 protected:
0062     class Private;
0063     Private* const d;
0064 };
0065 
0066 class KMM_MODELS_EXPORT SecuritiesFilterProxyModel : public QSortFilterProxyModel
0067 {
0068     Q_OBJECT
0069 
0070 public:
0071     SecuritiesFilterProxyModel(QObject *parent, SecuritiesModel *model, const QList<SecuritiesModel::Column> &columns = QList<SecuritiesModel::Column>());
0072     ~SecuritiesFilterProxyModel();
0073 
0074     QList<SecuritiesModel::Column> &getVisibleColumns();
0075 
0076 Q_SIGNALS:
0077     void columnToggled(const SecuritiesModel::Column column, const bool show);
0078 
0079 public Q_SLOTS:
0080     void slotColumnsMenu(const QPoint);
0081 
0082 protected:
0083     bool filterAcceptsColumn(int source_column, const QModelIndex &source_parent) const override;
0084 
0085 private:
0086     class Private;
0087     Private* const d;
0088 
0089 #if QT_VERSION < QT_VERSION_CHECK(5,10,0)
0090     // provide the interface for backward compatbility
0091     void setRecursiveFilteringEnabled(bool enable) {
0092         Q_UNUSED(enable)
0093     }
0094 #endif
0095 
0096 };
0097 
0098 #undef QSortFilterProxyModel
0099 #endif // SECURITIESMODEL_H