File indexing completed on 2024-05-12 09:14:53

0001 /*
0002  *  SPDX-FileCopyrightText: 2014 Sandro Knauß <knauss@kolabsys.com>
0003  *
0004  *  SPDX-License-Identifier: LGPL-2.0-or-later
0005  */
0006 
0007 #pragma once
0008 
0009 #include <KCalendarCore/Attendee>
0010 
0011 #include <QAbstractTableModel>
0012 #include <QModelIndex>
0013 #include <QSortFilterProxyModel>
0014 
0015 namespace IncidenceEditorNG
0016 {
0017 class AttendeeTableModel : public QAbstractTableModel
0018 {
0019     Q_OBJECT
0020 
0021 public:
0022     enum Roles { AttendeeRole = Qt::UserRole };
0023 
0024     enum Columns { CuType, Role, FullName, Name, Email, Available, Status, Response };
0025 
0026     enum AvailableStatus { Unknown, Free, Accepted, Busy, Tentative };
0027 
0028     explicit AttendeeTableModel(QObject *parent = nullptr);
0029 
0030     [[nodiscard]] int rowCount(const QModelIndex &parent = QModelIndex()) const override;
0031     [[nodiscard]] int columnCount(const QModelIndex &parent = QModelIndex()) const override;
0032     [[nodiscard]] QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
0033     [[nodiscard]] QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
0034 
0035     [[nodiscard]] Qt::ItemFlags flags(const QModelIndex &index) const override;
0036     bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;
0037 
0038     bool insertRows(int position, int rows, const QModelIndex &index = QModelIndex()) override;
0039     bool removeRows(int position, int rows, const QModelIndex &index = QModelIndex()) override;
0040 
0041     bool insertAttendee(int position, const KCalendarCore::Attendee &attendee);
0042 
0043     void setAttendees(const KCalendarCore::Attendee::List &resources);
0044     [[nodiscard]] KCalendarCore::Attendee::List attendees() const;
0045 
0046     void setKeepEmpty(bool keepEmpty);
0047     [[nodiscard]] bool keepEmpty() const;
0048 
0049     void setRemoveEmptyLines(bool removeEmptyLines);
0050     [[nodiscard]] bool removeEmptyLines() const;
0051 
0052 private:
0053     void addEmptyAttendee();
0054 
0055     KCalendarCore::Attendee::List mAttendeeList;
0056     std::vector<AvailableStatus> mAttendeeAvailable;
0057     bool mKeepEmpty = false;
0058     bool mRemoveEmptyLines = false;
0059 };
0060 
0061 class ResourceFilterProxyModel : public QSortFilterProxyModel
0062 {
0063     Q_OBJECT
0064 public:
0065     explicit ResourceFilterProxyModel(QObject *parent = nullptr);
0066     bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
0067 };
0068 
0069 class AttendeeFilterProxyModel : public QSortFilterProxyModel
0070 {
0071     Q_OBJECT
0072 public:
0073     explicit AttendeeFilterProxyModel(QObject *parent = nullptr);
0074     bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
0075 };
0076 }