File indexing completed on 2024-04-28 16:54:36
0001 /* 0002 SPDX-FileCopyrightText: 2016 Eike Hein <hein@kde.org> 0003 SPDX-FileCopyrightText: 2019 Kai Uwe Broulik <kde@privat.broulik.de> 0004 0005 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0006 */ 0007 0008 #pragma once 0009 0010 #include <QAbstractProxyModel> 0011 0012 namespace NotificationManager 0013 { 0014 class NotificationGroupingProxyModel : public QAbstractProxyModel 0015 { 0016 Q_OBJECT 0017 0018 public: 0019 explicit NotificationGroupingProxyModel(QObject *parent = nullptr); 0020 ~NotificationGroupingProxyModel() override; 0021 0022 void setSourceModel(QAbstractItemModel *sourceModel) override; 0023 0024 QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override; 0025 QModelIndex parent(const QModelIndex &child) const override; 0026 0027 int rowCount(const QModelIndex &parent = QModelIndex()) const override; 0028 bool hasChildren(const QModelIndex &parent = QModelIndex()) const override; 0029 int columnCount(const QModelIndex &parent = QModelIndex()) const override; 0030 0031 QVariant data(const QModelIndex &proxyIndex, int role) const override; 0032 0033 QModelIndex mapFromSource(const QModelIndex &sourceIndex) const override; 0034 QModelIndex mapToSource(const QModelIndex &proxyIndex) const override; 0035 0036 protected: 0037 // bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const override; 0038 0039 private: 0040 bool appsMatch(const QModelIndex &a, const QModelIndex &b) const; 0041 bool isGroup(int row) const; 0042 bool tryToGroup(const QModelIndex &sourceIndex, bool silent = false); 0043 void adjustMap(int anchor, int delta); 0044 void rebuildMap(); 0045 void checkGrouping(bool silent = false); 0046 void formGroupFor(const QModelIndex &index); 0047 0048 QVector<QVector<int> *> rowMap; 0049 }; 0050 0051 } // namespace NotificationManager