File indexing completed on 2024-04-28 16:54:34

0001 /*
0002     SPDX-FileCopyrightText: 2019 Kai Uwe Broulik <kde@privat.broulik.de>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005 */
0006 
0007 #include "limitedrowcountproxymodel_p.h"
0008 
0009 #include "notifications.h"
0010 
0011 using namespace NotificationManager;
0012 
0013 LimitedRowCountProxyModel::LimitedRowCountProxyModel(QObject *parent)
0014     : QSortFilterProxyModel(parent)
0015 {
0016 }
0017 
0018 LimitedRowCountProxyModel::~LimitedRowCountProxyModel() = default;
0019 
0020 void LimitedRowCountProxyModel::setSourceModel(QAbstractItemModel *sourceModel)
0021 {
0022     if (sourceModel == QAbstractProxyModel::sourceModel()) {
0023         return;
0024     }
0025 
0026     if (QAbstractProxyModel::sourceModel()) {
0027         disconnect(QAbstractProxyModel::sourceModel(), nullptr, this, nullptr);
0028     }
0029 
0030     QSortFilterProxyModel::setSourceModel(sourceModel);
0031 
0032     if (sourceModel) {
0033         connect(sourceModel, &QAbstractItemModel::rowsInserted, this, &LimitedRowCountProxyModel::invalidateFilter);
0034         connect(sourceModel, &QAbstractItemModel::rowsMoved, this, &LimitedRowCountProxyModel::invalidateFilter);
0035         connect(sourceModel, &QAbstractItemModel::rowsRemoved, this, &LimitedRowCountProxyModel::invalidateFilter);
0036     }
0037 }
0038 
0039 int LimitedRowCountProxyModel::limit() const
0040 {
0041     return m_limit;
0042 }
0043 
0044 void LimitedRowCountProxyModel::setLimit(int limit)
0045 {
0046     if (m_limit != limit) {
0047         m_limit = limit;
0048         invalidateFilter();
0049         Q_EMIT limitChanged();
0050     }
0051 }
0052 
0053 bool LimitedRowCountProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
0054 {
0055     if (source_parent.isValid()) {
0056         return true;
0057     }
0058 
0059     if (m_limit > 0) {
0060         return source_row < m_limit;
0061     }
0062 
0063     return true;
0064 }