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

0001 /*
0002    SPDX-FileCopyrightText: 2012 Sérgio Martins <iamsergio@gmail.com>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include "calendarbase.h"
0010 #include "calendarclipboard.h"
0011 #include "incidencechanger.h"
0012 #include <KCalendarCore/Incidence>
0013 #include <QList>
0014 #include <QSet>
0015 
0016 namespace KCalUtils
0017 {
0018 class DndFactory;
0019 }
0020 
0021 namespace Akonadi
0022 {
0023 class IncidenceChanger;
0024 
0025 class CalendarClipboardPrivate : public QObject
0026 {
0027     Q_OBJECT
0028 public:
0029     CalendarClipboardPrivate(const Akonadi::CalendarBase::Ptr &calendar, Akonadi::IncidenceChanger *changer, CalendarClipboard *qq);
0030 
0031     ~CalendarClipboardPrivate() override;
0032 
0033     /**
0034      * Returns all uids of incidenes having @p incidence has their parent (or grand parent, etc.)
0035      * @p incidence's uid is included in the list too.
0036      */
0037     void getIncidenceHierarchy(const KCalendarCore::Incidence::Ptr &incidence, QStringList &uids);
0038 
0039     /**
0040      * Copies all these incidences to clipboard. Deletes them.
0041      * This function assumes the caller already unparented all children ( made them independent ).
0042      */
0043     void cut(const KCalendarCore::Incidence::List &incidences);
0044 
0045     /**
0046      * Overload.
0047      */
0048     void cut(const KCalendarCore::Incidence::Ptr &incidence);
0049 
0050     /**
0051      * All immediate children of @p incidence are made independent.
0052      * Their RELATED-TO field is cleared.
0053      *
0054      * After it's done, signal makeChildsIndependentFinished() is emitted.
0055      */
0056     void makeChildsIndependent(const KCalendarCore::Incidence::Ptr &incidence);
0057 
0058 public Q_SLOTS:
0059     void slotModifyFinished(int changeId, const Akonadi::Item &item, Akonadi::IncidenceChanger::ResultCode resultCode, const QString &errorMessage);
0060 
0061     void slotDeleteFinished(int changeId, const QList<Akonadi::Item::Id> &ids, Akonadi::IncidenceChanger::ResultCode result, const QString &errorMessage);
0062 
0063 public:
0064     Akonadi::CalendarBase::Ptr m_calendar;
0065     Akonadi::IncidenceChanger *m_changer = nullptr;
0066     KCalUtils::DndFactory *m_dndfactory = nullptr;
0067     bool m_abortCurrentOperation = false;
0068     QSet<int> m_pendingChangeIds;
0069     CalendarClipboard *const q;
0070 };
0071 }