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