File indexing completed on 2024-05-19 05:08:30

0001 /*
0002     SPDX-FileCopyrightText: 2006 Darren Gould <darren_gould@gmx.de>
0003     SPDX-FileCopyrightText: 2009-2014 Alvaro Soliverez <asoliverez@gmail.com>
0004     SPDX-FileCopyrightText: 2017-2018 Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com>
0005     SPDX-FileCopyrightText: 2019 Thomas Baumgart <tbaumgart@kde.org>
0006     SPDX-License-Identifier: GPL-2.0-or-later
0007 */
0008 
0009 #ifndef BUDGETVIEWPROXYMODEL_H
0010 #define BUDGETVIEWPROXYMODEL_H
0011 
0012 #include "kmm_widgets_export.h"
0013 
0014 // ----------------------------------------------------------------------------
0015 // QT Includes
0016 
0017 // ----------------------------------------------------------------------------
0018 // KDE Includes
0019 
0020 // ----------------------------------------------------------------------------
0021 // Project Includes
0022 
0023 #include "accountsproxymodel.h"
0024 #include "accountsmodel.h"
0025 
0026 class MyMoneyAccount;
0027 class MyMoneyBudget;
0028 class MyMoneyMoney;
0029 
0030 /**
0031   * This proxy model implements all the functionality needed by the budgets
0032   * account tree based on the @ref AccountsModel. One such functionality is
0033   * obtaining the account balance and value base on the budget.
0034   *
0035   * @author Cristian Oneț
0036   */
0037 class BudgetViewProxyModelPrivate;
0038 class KMM_WIDGETS_EXPORT BudgetViewProxyModel : public AccountsProxyModel
0039 {
0040     Q_OBJECT
0041     Q_DISABLE_COPY(BudgetViewProxyModel)
0042 
0043 public:
0044     explicit BudgetViewProxyModel(QObject *parent = nullptr);
0045     ~BudgetViewProxyModel() override;
0046 
0047     virtual QVariant data(const QModelIndex &idx, int role = Qt::DisplayRole) const override;
0048     Qt::ItemFlags flags(const QModelIndex &idx) const override;
0049 
0050     void setBudget(const MyMoneyBudget& budget);
0051     void setColorScheme(AccountsModel::ColorScheme scheme, const QColor& color);
0052 
0053 Q_SIGNALS:
0054     /**
0055       * Emit this signal when the balance of the budget is changed.
0056       */
0057     void balanceChanged(const MyMoneyMoney &);
0058 
0059 protected:
0060     bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override;
0061     MyMoneyMoney accountBalance(const QString &accountId) const;
0062     MyMoneyMoney accountBalance(const QModelIndex& idx) const;
0063     MyMoneyMoney accountValue(const MyMoneyAccount &account, const MyMoneyMoney &balance) const;
0064     MyMoneyMoney computeTotalValue(const QModelIndex &source_index) const;
0065 
0066 private:
0067     Q_DECLARE_PRIVATE(BudgetViewProxyModel)
0068 
0069     void checkBalance();
0070 };
0071 
0072 #endif