File indexing completed on 2024-05-12 05:06:16
0001 /* 0002 SPDX-FileCopyrightText: 2014 Christian Dávid <christian-david@web.de> 0003 SPDX-License-Identifier: GPL-2.0-or-later 0004 */ 0005 0006 #include "onlinebankingaccountsfilterproxymodel.h" 0007 0008 #include "mymoney/onlinejobadministration.h" 0009 #include "mymoneyenums.h" 0010 #include "accountsmodel.h" 0011 0012 OnlineBankingAccountsFilterProxyModel::OnlineBankingAccountsFilterProxyModel(QObject* parent) 0013 : QSortFilterProxyModel(parent) 0014 { 0015 } 0016 0017 bool OnlineBankingAccountsFilterProxyModel::filterAcceptsRow(int source_row, const QModelIndex& source_parent) const 0018 { 0019 const QModelIndex sourceIndex = sourceModel()->index(source_row, AccountsModel::Column::AccountName, source_parent); 0020 const QString accountId = sourceModel()->data(sourceIndex, eMyMoney::Model::Roles::IdRole).toString(); 0021 if (accountId.isEmpty()) 0022 return false; 0023 else if (onlineJobAdministration::instance()->isAnyJobSupported(accountId)) 0024 return true; 0025 0026 return filterAcceptsParent(sourceIndex); 0027 } 0028 0029 Qt::ItemFlags OnlineBankingAccountsFilterProxyModel::flags(const QModelIndex& index) const 0030 { 0031 const QString accountId = sourceModel()->data(mapToSource(index), eMyMoney::Model::Roles::IdRole).toString(); 0032 if (onlineJobAdministration::instance()->isAnyJobSupported(accountId)) 0033 return QSortFilterProxyModel::flags(index); 0034 return QSortFilterProxyModel::flags(index) & ~Qt::ItemIsSelectable; 0035 } 0036 0037 0038 bool OnlineBankingAccountsFilterProxyModel::filterAcceptsParent(const QModelIndex& index) const 0039 { 0040 auto const model = sourceModel(); 0041 const auto rowCount = model->rowCount(index); 0042 for (auto i = 0; i < rowCount; ++i) { 0043 const auto childIndex = model->index(i, AccountsModel::Column::AccountName, index); // CAUTION! Assumption is being made that Account column number is always 0 0044 if (onlineJobAdministration::instance()->isAnyJobSupported(model->data(childIndex, eMyMoney::Model::Roles::IdRole).toString())) 0045 return true; 0046 if (filterAcceptsParent(childIndex)) 0047 return true; 0048 } 0049 return false; 0050 }