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;
50 Entry(
const Akonadi::Item &item,
const QString &description,
History *qq );
51 Entry(
const Akonadi::Item::List &items,
const QString &description,
History *qq );
52 virtual void updateIds( Item::Id oldId, Item::Id newId );
53 void doIt( OperationType );
55 Akonadi::Item::List mItems;
58 void finished( Akonadi::IncidenceChanger::ResultCode,
const QString &errorString );
60 virtual bool undo() = 0;
61 virtual bool redo() = 0;
62 void updateIdsGlobaly(Item::Id oldId, Item::Id newId);
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 );
80 void updateIds( Item::Id oldId, Item::Id newId );
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;
124 CreationEntry(
const Akonadi::Item &item,
const QString &description,
History *q );
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 {
147 DeletionEntry(
const Akonadi::Item::List &items,
const QString &description,
History *q );
bool undo();
bool redo();
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 {
170 ModificationEntry(
const Akonadi::Item &item,
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 );
196 protected:
bool undo();
bool redo();
201 void onEntryFinished( Akonadi::IncidenceChanger::ResultCode resultCode,
202 const QString &errorString );
204 const uint mAtomicOperationId;
206 Entry::List mEntries;
207 int mFinishedEntries;
208 OperationType mOperationInProgress;
209 Q_DISABLE_COPY(MultiEntry)
History class for implementing undo/redo of calendar operations.
ResultCode
This enum describes the possible result codes (success/error values) for an undo or redo operation...