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 }