File indexing completed on 2024-05-12 05:10:50

0001 /*
0002   SPDX-FileCopyrightText: 2008 Thomas Thrainer <tom_t@gmx.at>
0003   SPDX-FileCopyrightText: 2012 Sérgio Martins <iamsergio@gmail.com>
0004 
0005   SPDX-License-Identifier: GPL-2.0-or-later WITH Qt-Commercial-exception-1.0
0006 */
0007 
0008 #pragma once
0009 
0010 #include "akonadi-calendar_export.h"
0011 
0012 #include <Akonadi/ETMCalendar>
0013 #include <Akonadi/IncidenceChanger>
0014 #include <Akonadi/Item>
0015 
0016 #include <Akonadi/EntityTreeModel>
0017 #include <KCalendarCore/Todo>
0018 
0019 #include <KExtraColumnsProxyModel>
0020 
0021 #include <memory>
0022 
0023 class QMimeData;
0024 
0025 namespace Akonadi
0026 {
0027 class TodoModelPrivate;
0028 
0029 /** Expands an IncidenceTreeModel by additional columns for showing todos. */
0030 class AKONADI_CALENDAR_EXPORT TodoModel : public KExtraColumnsProxyModel
0031 {
0032     Q_OBJECT
0033 
0034 public:
0035     /** This enum defines all columns this model provides */
0036     enum {
0037         SummaryColumn = 0,
0038         RecurColumn,
0039         PriorityColumn,
0040         PercentColumn,
0041         StartDateColumn,
0042         DueDateColumn,
0043         CategoriesColumn,
0044         DescriptionColumn,
0045         CalendarColumn,
0046         CompletedDateColumn,
0047         ColumnCount // Just for iteration/column count purposes. Always keep at the end of enum.
0048     };
0049 
0050     /** This enum defines the user defined roles of the items in this model */
0051     enum {
0052         TodoRole = Akonadi::EntityTreeModel::UserRole + 1,
0053         TodoPtrRole,
0054         IsRichTextRole,
0055         SummaryRole,
0056         RecurRole,
0057         PriorityRole,
0058         PercentRole,
0059         StartDateRole,
0060         DueDateRole,
0061         CategoriesRole,
0062         DescriptionRole,
0063         CalendarRole,
0064     };
0065 
0066     explicit TodoModel(QObject *parent = nullptr);
0067 
0068     ~TodoModel() override;
0069 
0070     [[nodiscard]] int columnCount(const QModelIndex &parent = QModelIndex()) const override;
0071 
0072     void setSourceModel(QAbstractItemModel *sourceModel) override;
0073 
0074     [[nodiscard]] QVariant data(const QModelIndex &index, int role) const override;
0075     QVariant extraColumnData(const QModelIndex &parent, int row, int extraColumn, int role = Qt::DisplayRole) const override;
0076 
0077     [[nodiscard]] bool setData(const QModelIndex &index, const QVariant &value, int role) override;
0078 
0079     [[nodiscard]] QVariant headerData(int section, Qt::Orientation, int role) const override;
0080 
0081     AKONADI_CALENDAR_DECL_DEPRECATED_TEXT("Setting calendar is no longer necessary.")
0082     void setCalendar(const Akonadi::ETMCalendar::Ptr &calendar);
0083 
0084     void setIncidenceChanger(Akonadi::IncidenceChanger *changer);
0085 
0086     [[nodiscard]] QMimeData *mimeData(const QModelIndexList &indexes) const override;
0087 
0088     [[nodiscard]] bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override;
0089 
0090     [[nodiscard]] QStringList mimeTypes() const override;
0091 
0092     [[nodiscard]] Qt::DropActions supportedDropActions() const override;
0093 
0094     [[nodiscard]] Qt::ItemFlags flags(const QModelIndex &index) const override;
0095 
0096     [[nodiscard]] QHash<int, QByteArray> roleNames() const override;
0097 
0098 Q_SIGNALS:
0099     /** Emitted when dropMimeData() rejected a drop
0100      *  on the same item or any of its children.
0101      */
0102     void dropOnSelfRejected();
0103 
0104 private:
0105     friend class TodoModelPrivate;
0106     std::unique_ptr<TodoModelPrivate> const d;
0107 };
0108 }
0109