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