File indexing completed on 2024-05-19 05:06:59

0001 /*
0002     SPDX-FileCopyrightText: 2023 Thomas Baumgart <tbaumgart@kde.org>
0003     SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005 
0006 #include "securityaccountsproxymodel.h"
0007 
0008 // ----------------------------------------------------------------------------
0009 // QT Includes
0010 
0011 #include <QFont>
0012 
0013 // ----------------------------------------------------------------------------
0014 // KDE Includes
0015 
0016 // ----------------------------------------------------------------------------
0017 // Project Includes
0018 
0019 #include "accountsmodel.h"
0020 #include "journalmodel.h"
0021 #include "mymoneyenums.h"
0022 #include "mymoneyfile.h"
0023 
0024 SecurityAccountsProxyModel::SecurityAccountsProxyModel(QObject* parent)
0025     : QSortFilterProxyModel(parent)
0026 {
0027 }
0028 
0029 void SecurityAccountsProxyModel::setSourceModel(QAbstractItemModel* sourceModel)
0030 {
0031     QSortFilterProxyModel::setSourceModel(sourceModel);
0032 
0033     // make sure that data changes in the source model invalidate our filter
0034     connect(sourceModel, &QAbstractItemModel::dataChanged, this, [&]() {
0035         invalidateFilter();
0036     });
0037 }
0038 
0039 int SecurityAccountsProxyModel::columnCount(const QModelIndex& parent) const
0040 {
0041     Q_UNUSED(parent);
0042     return MyMoneyFile::instance()->journalModel()->columnCount();
0043 }
0044 
0045 QModelIndex SecurityAccountsProxyModel::index(int row, int column, const QModelIndex& parent) const
0046 {
0047     if (column >= AccountsModel::Column::MaxColumns) {
0048         column = AccountsModel::Column::MaxColumns - 1;
0049     }
0050 
0051     switch (column) {
0052     case JournalModel::Column::Detail:
0053         column = AccountsModel::Column::AccountName;
0054         break;
0055     default:
0056         break;
0057     }
0058     return QSortFilterProxyModel::index(row, column, parent);
0059 }
0060 
0061 QVariant SecurityAccountsProxyModel::data(const QModelIndex& idx, int role) const
0062 {
0063     if (idx.column() >= AccountsModel::MaxColumns) {
0064         return {};
0065     }
0066 
0067     if (role == eMyMoney::Model::BaseModelRole) {
0068         return eMyMoney::Model::SecurityAccountNameEntryRole;
0069     }
0070 
0071     if (idx.isValid()) {
0072         switch (role) {
0073         case eMyMoney::Model::JournalSplitSecurityNameRole:
0074             return QSortFilterProxyModel::data(idx, eMyMoney::Model::AccountNameRole);
0075 
0076         case Qt::DisplayRole:
0077             switch (idx.column()) {
0078             case JournalModel::Column::Detail:
0079             case AccountsModel::Column::AccountName:
0080                 return QSortFilterProxyModel::data(idx, eMyMoney::Model::AccountNameRole);
0081             default:
0082                 break;
0083             }
0084             return {};
0085 
0086         case eMyMoney::Model::SplitAccountIdRole:
0087             return QSortFilterProxyModel::data(idx, eMyMoney::Model::IdRole);
0088 
0089         case eMyMoney::Model::JournalSplitIdRole:
0090         case eMyMoney::Model::TransactionPostDateRole:
0091         case eMyMoney::Model::TransactionEntryDateRole:
0092         case Qt::ForegroundRole:
0093             return {};
0094 
0095         case Qt::FontRole: {
0096             QFont font;
0097             font.setBold(true);
0098             return font;
0099         }
0100 
0101         case Qt::TextAlignmentRole:
0102             switch (idx.column()) {
0103             case JournalModel::Column::Detail:
0104                 return QVariant(Qt::AlignCenter | Qt::AlignVCenter);
0105 
0106             default:
0107                 break;
0108             }
0109             return {};
0110 
0111         case eMyMoney::Model::DelegateRole:
0112             return static_cast<int>(eMyMoney::Delegates::Types::SecurityAccountNameDelegate);
0113         }
0114     }
0115     return QSortFilterProxyModel::data(idx, role);
0116 }
0117 
0118 Qt::ItemFlags SecurityAccountsProxyModel::flags(const QModelIndex& idx) const
0119 {
0120     Q_UNUSED(idx)
0121     return Qt::NoItemFlags;
0122 }
0123 
0124 bool SecurityAccountsProxyModel::filterAcceptsRow(int source_row, const QModelIndex& source_parent) const
0125 {
0126     // never show a favorite entry
0127     auto idx = sourceModel()->index(source_row, 0, source_parent);
0128     if (idx.data(eMyMoney::Model::AccountIsFavoriteIndexRole).toBool() == true)
0129         return false;
0130     return true;
0131 }