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