File indexing completed on 2024-05-19 05:06:57
0001 /* 0002 SPDX-FileCopyrightText: 2019 Thomas Baumgart <tbaumgart@kde.org> 0003 SPDX-License-Identifier: GPL-2.0-or-later 0004 */ 0005 0006 #include "itemrenameproxymodel.h" 0007 0008 // ---------------------------------------------------------------------------- 0009 // QT Includes 0010 0011 #include <QDebug> 0012 0013 // ---------------------------------------------------------------------------- 0014 // KDE Includes 0015 0016 // ---------------------------------------------------------------------------- 0017 // Project Includes 0018 0019 #include "mymoneyenums.h" 0020 #include "mymoneyfile.h" 0021 0022 ItemRenameProxyModel::ItemRenameProxyModel(QObject *parent) 0023 : QSortFilterProxyModel(parent) 0024 , m_renameColumn(0) 0025 , m_referenceFilter(eAllItem) 0026 { 0027 } 0028 0029 ItemRenameProxyModel::~ItemRenameProxyModel() 0030 { 0031 } 0032 0033 void ItemRenameProxyModel::setRenameColumn(int column) 0034 { 0035 m_renameColumn = column; 0036 } 0037 0038 bool ItemRenameProxyModel::setData(const QModelIndex& idx, const QVariant& value, int role) 0039 { 0040 if (idx.column() == m_renameColumn && role == Qt::EditRole) { 0041 qDebug() << "Rename to" << value.toString(); 0042 Q_EMIT renameItem(idx, value); 0043 return true; 0044 } 0045 return QSortFilterProxyModel::setData(idx, value, role); 0046 } 0047 0048 Qt::ItemFlags ItemRenameProxyModel::flags(const QModelIndex& idx) const 0049 { 0050 auto flags = QSortFilterProxyModel::flags(idx); 0051 if (idx.column() == m_renameColumn) { 0052 flags |= Qt::ItemIsEditable; 0053 } 0054 return flags; 0055 } 0056 0057 void ItemRenameProxyModel::setReferenceFilter(const QVariant& filterType) 0058 { 0059 const uint type = filterType.toUInt(); 0060 if (type < eMaxItems) { 0061 setReferenceFilter(static_cast<ReferenceFilterType>(type)); 0062 } 0063 } 0064 0065 void ItemRenameProxyModel::setReferenceFilter(ItemRenameProxyModel::ReferenceFilterType filterType) 0066 { 0067 if (m_referenceFilter != filterType) { 0068 m_referenceFilter = filterType; 0069 invalidateFilter(); 0070 } 0071 } 0072 0073 ItemRenameProxyModel::ReferenceFilterType ItemRenameProxyModel::referenceFilter() const 0074 { 0075 return m_referenceFilter; 0076 } 0077 0078 bool ItemRenameProxyModel::filterAcceptsRow(int source_row, const QModelIndex& source_parent) const 0079 { 0080 if (m_referenceFilter != eAllItem) { 0081 const auto idx = sourceModel()->index(source_row, 0, source_parent); 0082 const auto itemId = idx.data(eMyMoney::Model::IdRole).toString(); 0083 if (!itemId.isEmpty()) { 0084 QVariant rc; 0085 const auto objectList = MyMoneyFile::instance()->referencedObjects(); 0086 switch(m_referenceFilter) { 0087 case eReferencedItems: 0088 if (!objectList.contains(itemId)) 0089 return false; 0090 break; 0091 case eUnReferencedItems: 0092 if (objectList.contains(itemId)) 0093 return false; 0094 break; 0095 case eOpenedItems: 0096 rc = idx.data(eMyMoney::Model::ClosedRole); 0097 if (rc.isValid() && (rc.toBool() == true)) { 0098 return false; 0099 } 0100 break; 0101 case eClosedItems: 0102 rc = idx.data(eMyMoney::Model::ClosedRole); 0103 if (rc.isValid() && (rc.toBool() == false)) { 0104 return false; 0105 } 0106 break; 0107 default: 0108 break; 0109 } 0110 } 0111 } 0112 return QSortFilterProxyModel::filterAcceptsRow(source_row, source_parent); 0113 }