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 }