1 /*
2     SPDX-FileCopyrightText: 2019 Kai Uwe Broulik <kde@privat.broulik.de>
3 
4     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
5 */
6 
7 #pragma once
8 
9 #include <QDateTime>
10 #include <QSortFilterProxyModel>
11 
12 namespace NotificationManager
13 {
14 class NotificationGroupCollapsingProxyModel : public QSortFilterProxyModel
15 {
16     Q_OBJECT
17 
18 public:
19     explicit NotificationGroupCollapsingProxyModel(QObject *parent = nullptr);
20     ~NotificationGroupCollapsingProxyModel() override;
21 
22     void setSourceModel(QAbstractItemModel *sourceModel) override;
23 
24     QVariant data(const QModelIndex &index, int role) const override;
25     bool setData(const QModelIndex &index, const QVariant &value, int role) override;
26 
27     int limit() const;
28     void setLimit(int limit);
29 
30     QDateTime lastRead() const;
31     void setLastRead(const QDateTime &lastRead);
32 
33     bool expandUnread() const;
34     void setExpandUnread(bool expand);
35 
36     void collapseAll();
37 
38 Q_SIGNALS:
39     void limitChanged();
40     void lastReadChanged();
41     void expandUnreadChanged();
42 
43 protected:
44     bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override;
45 
46 private:
47     bool setGroupExpanded(const QModelIndex &idx, bool expanded);
48 
49     void invalidateGroupRoles();
50 
51     int m_limit = 0;
52     QDateTime m_lastRead;
53     bool m_expandUnread = false;
54 
55     QList<QPersistentModelIndex> m_expandedGroups;
56 };
57 
58 } // namespace NotificationManager
59