[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;
 };
 }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.