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

0001 /*
0002     SPDX-FileCopyrightText: 2010-2014 Cristian Oneț <onet.cristian@gmail.com>
0003     SPDX-FileCopyrightText: 2017-2018 Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com>
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #ifndef ACCOUNTSPROXYMODEL_H
0008 #define ACCOUNTSPROXYMODEL_H
0009 
0010 #include "kmm_models_export.h"
0011 
0012 // ----------------------------------------------------------------------------
0013 // QT Includes
0014 
0015 #include <QtGlobal> // for QT_VERSION macro
0016 #include <QSortFilterProxyModel>
0017 
0018 #if QT_VERSION < QT_VERSION_CHECK(5,10,0)
0019 #include <KItemModels/KRecursiveFilterProxyModel>
0020 #define QSortFilterProxyModel KRecursiveFilterProxyModel
0021 #endif
0022 
0023 // ----------------------------------------------------------------------------
0024 // KDE Includes
0025 
0026 // ----------------------------------------------------------------------------
0027 // Project Includes
0028 
0029 /**
0030   * A proxy model to provide various sorting and filtering operations for @ref AccountsModel.
0031   *
0032   * Here is an example of how to use this class in combination with the @ref AccountsModel.
0033   * (in the example @a widget is a pointer to a model/view widget):
0034   *
0035   * @code
0036   *   AccountsFilterProxyModel *filterModel = new AccountsFilterProxyModel(widget);
0037   *   filterModel->addAccountGroup(eMyMoney::Account::Type::Asset);
0038   *   filterModel->addAccountGroup(eMyMoney::Account::Type::Liability);
0039   *   filterModel->setSourceModel(Models::instance()->accountsModel());
0040   *   filterModel->sort(0);
0041   *
0042   *   widget->setModel(filterModel);
0043   * @endcode
0044   *
0045   * @see AccountsModel
0046   *
0047   * @author Cristian Onet 2010
0048   *
0049   */
0050 
0051 namespace eMyMoney {
0052 namespace Account {
0053 enum class Type;
0054 }
0055 }
0056 namespace eAccountsModel {
0057 enum class Column;
0058 }
0059 
0060 class AccountsProxyModelPrivate;
0061 class KMM_MODELS_EXPORT AccountsProxyModel : public QSortFilterProxyModel
0062 {
0063     Q_OBJECT
0064     Q_DISABLE_COPY(AccountsProxyModel)
0065 
0066 public:
0067     explicit AccountsProxyModel(QObject *parent = nullptr);
0068     virtual ~AccountsProxyModel();
0069 
0070     void addAccountType(eMyMoney::Account::Type type);
0071     void addAccountGroup(const QVector<eMyMoney::Account::Type> &groups);
0072     void removeAccountType(eMyMoney::Account::Type type);
0073 
0074     void clear();
0075 
0076     void setHideClosedAccounts(bool hideClosedAccounts);
0077     bool hideClosedAccounts() const;
0078 
0079     void setHideEquityAccounts(bool hideEquityAccounts);
0080     bool hideEquityAccounts() const;
0081 
0082     void setHideUnusedIncomeExpenseAccounts(bool hideUnusedIncomeExpenseAccounts);
0083     bool hideUnusedIncomeExpenseAccounts() const;
0084 
0085     int visibleItems(bool includeBaseAccounts = false) const;
0086 
0087     void setSourceColumns(QList<eAccountsModel::Column> *columns);
0088 
0089 protected:
0090     const QScopedPointer<AccountsProxyModelPrivate> d_ptr;
0091     AccountsProxyModel(AccountsProxyModelPrivate &dd, QObject *parent);
0092 
0093     bool lessThan(const QModelIndex &left, const QModelIndex &right) const override;
0094     bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override;
0095     bool acceptSourceItem(const QModelIndex &source) const;
0096 
0097     bool filterAcceptsRowOrChildRows(int source_row, const QModelIndex &source_parent) const;
0098 
0099     int visibleItems(const QModelIndex& index) const;
0100 
0101 Q_SIGNALS:
0102     void unusedIncomeExpenseAccountHidden();
0103 
0104 private:
0105     Q_DECLARE_PRIVATE(AccountsProxyModel)
0106 
0107 #if QT_VERSION < QT_VERSION_CHECK(5,10,0)
0108     // provide the interface for backward compatbility
0109     void setRecursiveFilteringEnabled(bool enable) {
0110         Q_UNUSED(enable)
0111     }
0112 #endif
0113 
0114 };
0115 
0116 #undef QSortFilterProxyModel
0117 #endif