File indexing completed on 2024-05-12 15:58:26

0001 /*
0002  *  SPDX-FileCopyrightText: 2016 Dmitry Kazakov <dimula73@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #ifndef __KIS_MACRO_BASED_UNDO_STORE_H
0008 #define __KIS_MACRO_BASED_UNDO_STORE_H
0009 
0010 #include <QScopedPointer>
0011 #include "kis_undo_store.h"
0012 
0013 class KisSavedMacroCommand;
0014 
0015 
0016 /**
0017  * This undo store is supposed to be stacked with a KisPostExecutionUndoAdapter.
0018  *
0019  * That chain looks like:
0020  *    KisPostExecutionUndoAdapter ->
0021  *    KisMacroBasedUndoStore ->
0022  *    KisSavedMacroCommand;
0023  *
0024  * So the store calls redo() on every command that is added via
0025  * addCommand();
0026  */
0027 class KisMacroBasedUndoStore : public KisUndoStore
0028 {
0029 public:
0030     KisMacroBasedUndoStore(KisSavedMacroCommand *command);
0031     ~KisMacroBasedUndoStore() override;
0032 
0033     const KUndo2Command* presentCommand() override;
0034     void undoLastCommand() override;
0035     void addCommand(KUndo2Command *cmd) override;
0036     void beginMacro(const KUndo2MagicString& macroName) override;
0037     void endMacro() override;
0038     void purgeRedoState() override;
0039 
0040 private:
0041     struct Private;
0042     const QScopedPointer<Private> m_d;
0043 };
0044 
0045 #endif /* __KIS_MACRO_BASED_UNDO_STORE_H */