20 #ifndef AKONADI_HISTORY_P_H
21 #define AKONADI_HISTORY_P_H
24 #include "incidencechanger.h"
25 #include <kcalcore/incidence.h>
26 #include <akonadi/collection.h>
32 using namespace Akonadi;
33 using namespace KCalCore;
45 class Entry :
public QObject {
48 typedef QSharedPointer<Entry> Ptr;
49 typedef QVector<Entry::Ptr> List;
53 void doIt(OperationType);
58 void finished(Akonadi::IncidenceChanger::ResultCode,
const QString &errorString);
60 virtual bool undo() = 0;
61 virtual bool redo() = 0;
63 QWidget* currentParent()
const;
64 IncidenceChanger *mChanger;
65 QHash<Akonadi::Item::Id,int> mLatestRevisionByItemId;
67 QVector<int> mChangeIds;
69 void init(
const QString &description,
History *qq);
73 class History::Private :
public QObject {
78 void doIt(OperationType);
79 void stackEntry(
const Entry::Ptr &entry, uint atomicOperationId);
82 QStack<Entry::Ptr>& destinationStack();
83 QStack<Entry::Ptr>& stack(OperationType);
84 QStack<Entry::Ptr>& stack();
85 void undoOrRedo(OperationType, QWidget *parent);
88 void setEnabled(
bool enabled);
90 bool isUndoAvailable()
const;
91 bool isRedoAvailable()
const;
93 IncidenceChanger *mChanger;
95 QStack<Entry::Ptr> mUndoStack;
96 QStack<Entry::Ptr> mRedoStack;
98 OperationType mOperationTypeInProgress;
100 Entry::Ptr mEntryInProgress;
102 QString mLastErrorString;
103 bool mUndoAllInProgress;
109 QVector<Entry::Ptr> mQueuedEntries;
111 QPointer<QWidget> mCurrentParent;
114 void handleFinished(Akonadi::IncidenceChanger::ResultCode,
const QString &errorString);
120 class CreationEntry :
public Entry {
123 typedef QSharedPointer<CreationEntry> Ptr;
133 void onDeleteFinished(
int changeId,
const QVector<Akonadi::Item::Id> &deletedIds,
134 Akonadi::IncidenceChanger::ResultCode resultCode,
135 const QString &errorString);
137 void onCreateFinished(
int changeId,
const Akonadi::Item &item,
138 Akonadi::IncidenceChanger::ResultCode resultCode,
139 const QString &errorString);
141 Q_DISABLE_COPY(CreationEntry)
144 class DeletionEntry :
public Entry {
152 void onDeleteFinished(
int changeId,
const QVector<Akonadi::Item::Id> &deletedIds,
153 Akonadi::IncidenceChanger::ResultCode resultCode,
154 const QString &errorString);
156 void onCreateFinished(
int changeId,
const Akonadi::Item &item,
157 Akonadi::IncidenceChanger::ResultCode resultCode,
158 const QString &errorString);
160 IncidenceChanger::ResultCode mResultCode;
161 QString mErrorString;
162 QHash<int,Akonadi::Item::Id> mOldIdByChangeId;
163 int mNumPendingCreations;
164 Q_DISABLE_COPY(DeletionEntry)
167 class ModificationEntry :
public Entry {
171 const Incidence::Ptr &originalPayload,
172 const QString &description,
174 bool undo();
bool redo();
179 void onModifyFinished(
int changeId,
const Akonadi::Item &item,
180 Akonadi::IncidenceChanger::ResultCode resultCode,
181 const QString &errorString);
183 Q_DISABLE_COPY(ModificationEntry)
184 Incidence::Ptr mOriginalPayload;
187 class MultiEntry : public Entry {
190 typedef QSharedPointer<MultiEntry> Ptr;
191 MultiEntry(
int id,
const QString &description,
History *q);
193 void addEntry(
const Entry::Ptr &entry);
void updateIds(
Item::Id oldId,
Item::Id newId);
198 bool undo();
bool redo();
202 void onEntryFinished(Akonadi::IncidenceChanger::ResultCode resultCode,
203 const QString &errorString);
205 const uint mAtomicOperationId;
207 Entry::List mEntries;
208 int mFinishedEntries;
209 OperationType mOperationInProgress;
210 Q_DISABLE_COPY(MultiEntry)