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 }