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 );
70 Q_DISABLE_COPY(Entry);
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 );
89 bool isUndoAvailable()
const;
90 bool isRedoAvailable()
const;
92 IncidenceChanger *mChanger;
94 QStack<Entry::Ptr> mUndoStack;
95 QStack<Entry::Ptr> mRedoStack;
97 OperationType mOperationTypeInProgress;
99 Entry::Ptr mEntryInProgress;
101 QString mLastErrorString;
102 bool mUndoAllInProgress;
108 QVector<Entry::Ptr> mQueuedEntries;
110 QPointer<QWidget> mCurrentParent;
113 void handleFinished( Akonadi::IncidenceChanger::ResultCode,
const QString &errorString );
119 class CreationEntry :
public Entry {
122 typedef QSharedPointer<CreationEntry> Ptr;
132 void onDeleteFinished(
int changeId,
const QVector<Akonadi::Item::Id> &deletedIds,
133 Akonadi::IncidenceChanger::ResultCode resultCode,
134 const QString &errorString );
136 void onCreateFinished(
int changeId,
const Akonadi::Item &item,
137 Akonadi::IncidenceChanger::ResultCode resultCode,
138 const QString &errorString );
140 Q_DISABLE_COPY(CreationEntry)
143 class DeletionEntry :
public Entry {
151 void onDeleteFinished(
int changeId,
const QVector<Akonadi::Item::Id> &deletedIds,
152 Akonadi::IncidenceChanger::ResultCode resultCode,
153 const QString &errorString );
155 void onCreateFinished(
int changeId,
const Akonadi::Item &item,
156 Akonadi::IncidenceChanger::ResultCode resultCode,
157 const QString &errorString );
159 IncidenceChanger::ResultCode mResultCode;
160 QString mErrorString;
161 QHash<int,Akonadi::Item::Id> mOldIdByChangeId;
162 int mNumPendingCreations;
163 Q_DISABLE_COPY(DeletionEntry)
166 class ModificationEntry :
public Entry {
170 const Incidence::Ptr &originalPayload,
171 const QString &description,
173 bool undo();
bool redo();
178 void onModifyFinished(
int changeId,
const Akonadi::Item &item,
179 Akonadi::IncidenceChanger::ResultCode resultCode,
180 const QString &errorString );
182 Q_DISABLE_COPY(ModificationEntry)
183 Incidence::Ptr mOriginalPayload;
186 class MultiEntry : public Entry {
189 typedef QSharedPointer<MultiEntry> Ptr;
190 MultiEntry(
int id,
const QString &description,
History *q );
192 void addEntry(
const Entry::Ptr &entry );
void updateIds(
Item::Id oldId,
Item::Id newId );
195 protected:
bool undo();
bool redo();
200 void onEntryFinished( Akonadi::IncidenceChanger::ResultCode resultCode,
201 const QString &errorString );
203 const uint mAtomicOperationId;
205 Entry::List mEntries;
206 int mFinishedEntries;
207 OperationType mOperationInProgress;
208 Q_DISABLE_COPY(MultiEntry)