File indexing completed on 2024-05-05 05:28:19

0001 /*
0002  * SPDX-FileCopyrightText: 2021 Dimitris Kardarakos <dimkard@posteo.net>
0003  *
0004  * SPDX-License-Identifier: GPL-3.0-or-later
0005  */
0006 
0007 #ifndef ATTENDEES_MODEL_H
0008 #define ATTENDEES_MODEL_H
0009 
0010 #include <QAbstractListModel>
0011 #include <QVariantList>
0012 #include <KCalendarCore/Attendee>
0013 
0014 class LocalCalendar;
0015 
0016 /**
0017  * @brief Model that serves the attendees of an Incidence
0018  *
0019  */
0020 class AttendeesModel : public QAbstractListModel
0021 {
0022     Q_OBJECT
0023 
0024     Q_PROPERTY(QString uid READ uid WRITE setUid NOTIFY uidChanged)
0025 public:
0026     explicit AttendeesModel(QObject *parent = nullptr);
0027 
0028     enum RoleNames {
0029         Email = Qt::UserRole + 1,
0030         FullName,
0031         Name,
0032         ParticipationStatus,
0033         ParticipationStatusIcon,
0034         ParticipationStatusDisplay,
0035         AttendeeRole
0036     };
0037 
0038     QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
0039     bool setData(const QModelIndex &index, const QVariant &value, int role) override;
0040     int rowCount(const QModelIndex &parent = QModelIndex()) const override;
0041     QHash<int, QByteArray> roleNames() const override;
0042 
0043     QString uid() const;
0044     void setUid(const QString &uid);
0045 
0046     Q_INVOKABLE void removeItem(const int row);
0047     Q_INVOKABLE void addPersons(const QStringList uris);
0048     Q_INVOKABLE QStringList emails() const;
0049     Q_INVOKABLE QVariantList attendees() const;
0050 
0051 Q_SIGNALS:
0052     void uidChanged();
0053 
0054 public Q_SLOTS:
0055     void loadPersistentData();
0056 
0057 private:
0058     QString m_uid;
0059     KCalendarCore::Attendee::List m_attendees;
0060 
0061     QString statusIcon(const int row) const;
0062     QString displayStatus(const int row) const;
0063 };
0064 #endif