File indexing completed on 2024-06-23 04:42:35

0001 // SPDX-FileCopyrightText: 2021 Claudio Cambra <claudio.cambra@gmail.com>
0002 // SPDX-License-Identifier: LGPL-2.1-or-later
0003 
0004 #pragma once
0005 
0006 #include <KCalendarCore/Calendar>
0007 #include <QAbstractListModel>
0008 #include <QDebug>
0009 /**
0010  *
0011  */
0012 class AttendeeStatusModel : public QAbstractListModel
0013 {
0014     Q_OBJECT
0015 
0016 public:
0017     enum Roles {
0018         DisplayNameRole = Qt::UserRole + 1,
0019         ValueRole,
0020     };
0021     Q_ENUM(Roles);
0022 
0023     explicit AttendeeStatusModel(QObject *parent = nullptr);
0024     ~AttendeeStatusModel() override = default;
0025 
0026     QVariant data(const QModelIndex &idx, int role) const override;
0027     QHash<int, QByteArray> roleNames() const override;
0028     int rowCount(const QModelIndex &parent = {}) const override;
0029 
0030 private:
0031     QHash<int, QString> m_status;
0032 };
0033 
0034 class AttendeesModel : public QAbstractListModel
0035 {
0036     Q_OBJECT
0037     Q_PROPERTY(KCalendarCore::Incidence::Ptr incidencePtr READ incidencePtr WRITE setIncidencePtr NOTIFY incidencePtrChanged)
0038     Q_PROPERTY(KCalendarCore::Attendee::List attendees READ attendees NOTIFY attendeesChanged)
0039     Q_PROPERTY(AttendeeStatusModel *attendeeStatusModel READ attendeeStatusModel NOTIFY attendeeStatusModelChanged)
0040     Q_PROPERTY(QList<qint64> attendeesAkonadiIds READ attendeesAkonadiIds NOTIFY attendeesAkonadiIdsChanged)
0041 
0042 public:
0043     enum Roles {
0044         CuTypeRole = Qt::UserRole + 1,
0045         DelegateRole,
0046         DelegatorRole,
0047         EmailRole,
0048         FullNameRole,
0049         IsNullRole,
0050         NameRole,
0051         RoleRole,
0052         RSVPRole,
0053         StatusRole,
0054         UidRole
0055     };
0056     Q_ENUM(Roles);
0057 
0058     explicit AttendeesModel(QObject *parent = nullptr, KCalendarCore::Incidence::Ptr incidencePtr = nullptr);
0059     ~AttendeesModel() override = default;
0060 
0061     KCalendarCore::Incidence::Ptr incidencePtr() const;
0062     void setIncidencePtr(const KCalendarCore::Incidence::Ptr incidence);
0063     KCalendarCore::Attendee::List attendees() const;
0064     void updateAkonadiContactIds();
0065     AttendeeStatusModel *attendeeStatusModel();
0066     QList<qint64> attendeesAkonadiIds() const;
0067 
0068     QVariant data(const QModelIndex &idx, int role) const override;
0069     bool setData(const QModelIndex &idx, const QVariant &value, int role) override;
0070     QHash<int, QByteArray> roleNames() const override;
0071     int rowCount(const QModelIndex &parent = {}) const override;
0072 
0073     Q_INVOKABLE void addAttendee(qint64 itemId = qint64(), const QString &email = QString());
0074     Q_INVOKABLE void deleteAttendee(int row);
0075     Q_INVOKABLE void deleteAttendeeFromAkonadiId(qint64 itemId);
0076 
0077 Q_SIGNALS:
0078     void incidencePtrChanged();
0079     void attendeesChanged();
0080     void attendeeStatusModelChanged();
0081     void attendeesAkonadiIdsChanged();
0082 
0083 private:
0084     KCalendarCore::Incidence::Ptr m_incidence;
0085     AttendeeStatusModel m_attendeeStatusModel;
0086     QList<qint64> m_attendeesAkonadiIds;
0087     QVariantMap m_dataRoles;
0088 };