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

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 #pragma once
0008 
0009 #include <QDateTime>
0010 #include <QSortFilterProxyModel>
0011 
0012 namespace NotificationManager
0013 {
0014 class NotificationGroupCollapsingProxyModel : public QSortFilterProxyModel
0015 {
0016     Q_OBJECT
0017 
0018 public:
0019     explicit NotificationGroupCollapsingProxyModel(QObject *parent = nullptr);
0020     ~NotificationGroupCollapsingProxyModel() override;
0021 
0022     void setSourceModel(QAbstractItemModel *sourceModel) override;
0023 
0024     QVariant data(const QModelIndex &index, int role) const override;
0025     bool setData(const QModelIndex &index, const QVariant &value, int role) override;
0026 
0027     int limit() const;
0028     void setLimit(int limit);
0029 
0030     QDateTime lastRead() const;
0031     void setLastRead(const QDateTime &lastRead);
0032 
0033     bool expandUnread() const;
0034     void setExpandUnread(bool expand);
0035 
0036     void collapseAll();
0037 
0038 Q_SIGNALS:
0039     void limitChanged();
0040     void lastReadChanged();
0041     void expandUnreadChanged();
0042 
0043 protected:
0044     bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override;
0045 
0046 private:
0047     bool setGroupExpanded(const QModelIndex &idx, bool expanded);
0048 
0049     void invalidateGroupRoles();
0050 
0051     int m_limit = 0;
0052     QDateTime m_lastRead;
0053     bool m_expandUnread = false;
0054 
0055     QList<QPersistentModelIndex> m_expandedGroups;
0056 };
0057 
0058 } // namespace NotificationManager