File indexing completed on 2024-05-12 16:42:19
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 "modelenums.h" 0010 0011 OnlineBankingAccountsFilterProxyModel::OnlineBankingAccountsFilterProxyModel(QObject* parent) 0012 : QSortFilterProxyModel(parent) 0013 { 0014 } 0015 0016 bool OnlineBankingAccountsFilterProxyModel::filterAcceptsRow(int source_row, const QModelIndex& source_parent) const 0017 { 0018 const QModelIndex sourceIndex = sourceModel()->index(source_row, (int)eAccountsModel::Column::Account, source_parent); 0019 const QString accountId = sourceModel()->data(sourceIndex, (int)eAccountsModel::Role::ID).toString(); 0020 if (accountId.isEmpty()) 0021 return false; 0022 else if (onlineJobAdministration::instance()->isAnyJobSupported(accountId)) 0023 return true; 0024 0025 return filterAcceptsParent(sourceIndex); 0026 } 0027 0028 Qt::ItemFlags OnlineBankingAccountsFilterProxyModel::flags(const QModelIndex& index) const 0029 { 0030 const QString accountId = sourceModel()->data(mapToSource(index), (int)eAccountsModel::Role::ID).toString(); 0031 if (onlineJobAdministration::instance()->isAnyJobSupported(accountId)) 0032 return QSortFilterProxyModel::flags(index); 0033 return QSortFilterProxyModel::flags(index) & ~Qt::ItemIsSelectable; 0034 } 0035 0036 0037 bool OnlineBankingAccountsFilterProxyModel::filterAcceptsParent(const QModelIndex& index) const 0038 { 0039 auto const model = sourceModel(); 0040 const auto rowCount = model->rowCount(index); 0041 for (auto i = 0; i < rowCount; ++i) { 0042 const auto childIndex = model->index(i, (int)eAccountsModel::Column::Account, index); // CAUTION! Assumption is being made that Account column number is always 0 0043 if (onlineJobAdministration::instance()->isAnyJobSupported(model->data(childIndex, (int)eAccountsModel::Role::ID).toString())) 0044 return true; 0045 if (filterAcceptsParent(childIndex)) 0046 return true; 0047 } 0048 return false; 0049 }