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