File indexing completed on 2024-05-12 16:43:56
0001 /* 0002 SPDX-FileCopyrightText: 2009 Cristian Oneț <onet.cristian@gmail.com> 0003 SPDX-FileCopyrightText: 2017-2018 Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com> 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "accountsviewproxymodel.h" 0008 #include "accountsviewproxymodel_p.h" 0009 0010 // ---------------------------------------------------------------------------- 0011 // QT Includes 0012 0013 #include <QMenu> 0014 #include <QPoint> 0015 0016 // ---------------------------------------------------------------------------- 0017 // KDE Includes 0018 0019 #include <KLocalizedString> 0020 0021 // ---------------------------------------------------------------------------- 0022 // Project Includes 0023 0024 #include "accountsmodel.h" 0025 #include "modelenums.h" 0026 0027 using namespace eAccountsModel; 0028 0029 AccountsViewProxyModel::AccountsViewProxyModel(QObject *parent) : 0030 AccountsProxyModel(*new AccountsViewProxyModelPrivate, parent) 0031 { 0032 setFilterKeyColumn(-1); // set-up filter to search in all columns 0033 } 0034 0035 AccountsViewProxyModel::AccountsViewProxyModel(AccountsViewProxyModelPrivate &dd, QObject *parent) : 0036 AccountsProxyModel(dd, parent) 0037 { 0038 } 0039 0040 AccountsViewProxyModel::~AccountsViewProxyModel() 0041 { 0042 } 0043 0044 /* 0045 * Reimplemented to filter all but the account displayed in the accounts view. 0046 */ 0047 bool AccountsViewProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const 0048 { 0049 if (!source_parent.isValid()) { 0050 const auto data = sourceModel()->index(source_row, (int)(Column::Account), source_parent).data((int)Role::ID); 0051 if (data.isValid() && data.toString() == AccountsModel::favoritesAccountId) 0052 return false; 0053 } 0054 return AccountsProxyModel::filterAcceptsRow(source_row, source_parent); 0055 } 0056 0057 bool AccountsViewProxyModel::filterAcceptsColumn(int source_column, const QModelIndex &source_parent) const 0058 { 0059 Q_D(const AccountsViewProxyModel); 0060 Q_UNUSED(source_parent) 0061 if (d->m_visColumns.contains(d->m_mdlColumns->at(source_column))) 0062 return true; 0063 return false; 0064 } 0065 0066 QSet<Column> AccountsViewProxyModel::getVisibleColumns() 0067 { 0068 Q_D(AccountsViewProxyModel); 0069 return d->m_visColumns; 0070 } 0071 0072 void AccountsViewProxyModel::setColumnVisibility(Column column, bool show) 0073 { 0074 Q_D(AccountsViewProxyModel); 0075 if (show) 0076 d->m_visColumns.insert(column); // add column to filter 0077 else 0078 d->m_visColumns.remove(column); 0079 } 0080 0081 void AccountsViewProxyModel::slotColumnsMenu(const QPoint) 0082 { 0083 Q_D(AccountsViewProxyModel); 0084 // construct all hideable columns list 0085 const QVector<Column> idColumns = { Column::Type, Column::Tax, 0086 Column::VAT, Column::CostCenter, 0087 Column::TotalBalance, Column::PostedValue, 0088 Column::TotalValue, Column::AccountNumber, 0089 Column::AccountSortCode 0090 }; 0091 0092 // create menu 0093 QMenu menu(i18n("Displayed columns")); 0094 QList<QAction *> actions; 0095 foreach (const auto idColumn, idColumns) { 0096 auto a = new QAction(nullptr); 0097 a->setObjectName(QString::number(static_cast<int>(idColumn))); 0098 a->setText(AccountsModel::getHeaderName(idColumn)); 0099 a->setCheckable(true); 0100 a->setChecked(d->m_visColumns.contains(idColumn)); 0101 actions.append(a); 0102 } 0103 menu.addActions(actions); 0104 0105 // execute menu and get result 0106 const auto retAction = menu.exec(QCursor::pos()); 0107 if (retAction) { 0108 const auto idColumn = static_cast<Column>(retAction->objectName().toInt()); 0109 const auto isChecked = retAction->isChecked(); 0110 setColumnVisibility(idColumn, isChecked); 0111 emit columnToggled(idColumn, isChecked); // emit signal for method to possible load column into modela 0112 invalidateFilter(); // refresh filter to reflect recent changes 0113 } 0114 }