[pim/kmail] src: continue to implement undo/redo
Laurent Montel <[email protected]>
| Newsgroups | gmane.comp.kde.cvs |
|---|---|
| Message-ID | <[email protected]> |
Git commit 8a72e912898f5400afa9d053c63ca428e451aff1 by Laurent Montel.
Committed on 24/07/2026 at 11:35.
Pushed by mlaurent into branch 'master'.
continue to implement undo/redo
M +68 -0 src/kmundoredomanager.cpp
M +23 -0 src/kmundoredomanager.h
https://invent.kde.org/pim/kmail/-/commit/8a72e912898f5400afa9d053c63ca428e451aff1
diff --git a/src/kmundoredomanager.cpp b/src/kmundoredomanager.cpp
index 28dd340e2..b66519f5e 100644
--- a/src/kmundoredomanager.cpp
+++ b/src/kmundoredomanager.cpp
@@ -5,6 +5,8 @@
*/
#include "kmundoredomanager.h"
+#include "kmkernel.h"
+#include <Akonadi/ItemMoveJob>
#include <QUndoStack>
using namespace KMail;
KMUndoRedoManager::KMUndoRedoManager(QObject *parent)
@@ -15,6 +17,32 @@ KMUndoRedoManager::KMUndoRedoManager(QObject *parent)
KMUndoRedoManager::~KMUndoRedoManager() = default;
+int KMUndoRedoManager::newUndoMoveAction(const Akonadi::Collection &srcFolder, const Akonadi::Collection &destFolder)
+{
+ auto info = new KMUndoInfoMoveItems;
+#if 0
+ info->id = ++mLastId;
+ info->srcFolder = srcFolder;
+ info->destFolder = destFolder;
+ info->moveToTrash = (destFolder == CommonKernel->trashCollectionFolder());
+ if (static_cast<int>(mStack.count()) == mSize) {
+ delete mStack.last();
+ mStack.removeLast();
+ }
+ mStack.prepend(info);
+ Q_EMIT undoStackChanged();
+ return info->id;
+#endif
+ // TODO
+ return -1;
+}
+
+void KMUndoRedoManager::addMsgToMoveAction(int undoId, const Akonadi::Item &item)
+{
+ // TODO push push()
+ // TODO
+}
+
void KMUndoInfoMoveItems::undo()
{
// TODO
@@ -24,3 +52,43 @@ void KMUndoInfoMoveItems::redo()
{
// TODO
}
+
+Akonadi::Item::List KMUndoInfoMoveItems::items() const
+{
+ return mItems;
+}
+
+void KMUndoInfoMoveItems::setItems(const Akonadi::Item::List &newItems)
+{
+ mItems = newItems;
+}
+
+Akonadi::Collection KMUndoInfoMoveItems::srcFolder() const
+{
+ return mSrcFolder;
+}
+
+void KMUndoInfoMoveItems::setSrcFolder(const Akonadi::Collection &newSrcFolder)
+{
+ mSrcFolder = newSrcFolder;
+}
+
+Akonadi::Collection KMUndoInfoMoveItems::destFolder() const
+{
+ return mDestFolder;
+}
+
+void KMUndoInfoMoveItems::setDestFolder(const Akonadi::Collection &newDestFolder)
+{
+ mDestFolder = newDestFolder;
+}
+
+bool KMUndoInfoMoveItems::moveToTrash() const
+{
+ return mMoveToTrash;
+}
+
+void KMUndoInfoMoveItems::setMoveToTrash(bool newMoveToTrash)
+{
+ mMoveToTrash = newMoveToTrash;
+}
diff --git a/src/kmundoredomanager.h b/src/kmundoredomanager.h
index 48826f36b..4e3f5ffc8 100644
--- a/src/kmundoredomanager.h
+++ b/src/kmundoredomanager.h
@@ -5,6 +5,8 @@
*/
#pragma once
+#include <Akonadi/Collection>
+#include <Akonadi/Item>
#include <QObject>
#include <QUndoCommand>
class QUndoStack;
@@ -17,6 +19,9 @@ public:
explicit KMUndoRedoManager(QObject *parent = nullptr);
~KMUndoRedoManager() override;
+ [[nodiscard]] int newUndoMoveAction(const Akonadi::Collection &srcFolder, const Akonadi::Collection &destFolder);
+ void addMsgToMoveAction(int undoId, const Akonadi::Item &item);
+
private:
QUndoStack *const mUndoStack;
};
@@ -26,5 +31,23 @@ class KMUndoInfoMoveItems : public QUndoCommand
public:
void undo() override;
void redo() override;
+
+ [[nodiscard]] Akonadi::Item::List items() const;
+ void setItems(const Akonadi::Item::List &newItems);
+
+ [[nodiscard]] Akonadi::Collection srcFolder() const;
+ void setSrcFolder(const Akonadi::Collection &newSrcFolder);
+
+ [[nodiscard]] Akonadi::Collection destFolder() const;
+ void setDestFolder(const Akonadi::Collection &newDestFolder);
+
+ [[nodiscard]] bool moveToTrash() const;
+ void setMoveToTrash(bool newMoveToTrash);
+
+private:
+ Akonadi::Item::List mItems;
+ Akonadi::Collection mSrcFolder;
+ Akonadi::Collection mDestFolder;
+ bool mMoveToTrash = false;
};
}