/* * SPDX-FileCopyrightText: 2021 Reion Wong * SPDX-FileCopyrightText: 2018-2019 Kai Uwe Broulik * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL */ #ifndef NOTIFICATIONSMODEL_H #define NOTIFICATIONSMODEL_H #include #include #include #include "notificationserver.h" class Notification; class NotificationsModel : public QAbstractListModel { Q_OBJECT public: enum Roles { IdRole = Qt::UserRole + 1, SummaryRole = Qt::DisplayRole, ImageRole = Qt::DecorationRole, CreatedRole, UpdatedRole, BodyRole, IconNameRole, HasDefaultActionRole }; Q_ENUM(Roles) static NotificationsModel *self(); explicit NotificationsModel(QObject *parent = nullptr); QVariant data(const QModelIndex &index, int role) const override; bool setData(const QModelIndex &index, const QVariant &value, int role) override; int rowCount(const QModelIndex &parent = QModelIndex()) const override; QHash roleNames() const override; Q_INVOKABLE void expired(uint id); Q_INVOKABLE void close(uint id); Q_INVOKABLE void invokeDefaultAction(uint id); int rowOfNotification(uint id) const; void removeRows(const QVector &rows); private slots: void onNotificationAdded(const Notification ¬ification); void onNotificationReplaced(uint replacedId, const Notification ¬ification); void onNotificationRemoved(uint notificationId, NotificationServer::CloseReason reason); private: QVector m_notifications; QVector m_pendingRemovals; QTimer m_pendingRemovalTimer; }; #endif // NOTIFICATIONSMODEL_H