Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_command_utils.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2015 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7#ifndef __KIS_COMMAND_UTILS_H
8#define __KIS_COMMAND_UTILS_H
9
10#include "kundo2command.h"
11#include "kis_undo_stores.h"
12#include "kritacommand_export.h"
13#include <functional>
14#include <memory>
15
16namespace KisCommandUtils
17{
18
28 struct KRITACOMMAND_EXPORT AggregateCommand : public KUndo2Command {
31 KUndo2Command *parent = 0);
32
33 void redo() override;
34 void undo() override;
35
36 protected:
37 virtual void populateChildCommands() = 0;
38 void addCommand(KUndo2Command *cmd);
39
40 private:
43 };
44
51 struct KRITACOMMAND_EXPORT LambdaCommand : public AggregateCommand {
52 LambdaCommand(std::function<KUndo2Command*()> createCommandFunc);
54 std::function<KUndo2Command*()> createCommandFunc);
56 KUndo2Command *parent,
57 std::function<KUndo2Command*()> createCommandFunc);
59 std::function<KUndo2Command*()> createCommandFunc);
60
61 protected:
62 void populateChildCommands() override;
63
64 private:
65 std::function<KUndo2Command*()> m_createCommandFunc;
66 };
67
68
69 struct KRITACOMMAND_EXPORT SkipFirstRedoWrapper : public KUndo2Command {
70 SkipFirstRedoWrapper(KUndo2Command *child = 0, KUndo2Command *parent = 0);
71 void redo() override;
72 void undo() override;
73
74 private:
76 QScopedPointer<KUndo2Command> m_child;
77 };
78
79
80 struct KRITACOMMAND_EXPORT SkipFirstRedoBase : public KUndo2Command {
81 SkipFirstRedoBase(bool skipFirstRedo, KUndo2Command *parent = 0);
82 SkipFirstRedoBase(bool skipFirstRedo, const KUndo2MagicString &text, KUndo2Command *parent = 0);
83
84 void redo() override final;
85 void undo() override final;
86
87 void setSkipOneRedo(bool value);
88
89 protected:
90 virtual void redoImpl() = 0;
91 virtual void undoImpl() = 0;
92
93 private:
95 };
96
97
98 struct KRITACOMMAND_EXPORT FlipFlopCommand : public KUndo2Command {
99 enum State {
100 INITIALIZING, // Before redo; after undo.
101 FINALIZING // After redo; before undo.
102 };
103
104 FlipFlopCommand(State initialState, KUndo2Command *parent = 0);
105 FlipFlopCommand(bool finalizing = false, KUndo2Command *parent = 0);
106
107 void redo() override; // partA -> redo command -> partB
108 void undo() override; // partB -> undo command -> partA
109
110 protected:
111 virtual void partA();
112 virtual void partB();
113
114 State getState() const { return m_currentState; }
115 bool isFirstRedo() const { return m_firstRedo; }
116
117 private:
119 bool m_firstRedo {true};
120 };
121
122 struct KRITACOMMAND_EXPORT CompositeCommand : public KUndo2Command {
123 CompositeCommand(KUndo2Command *parent = 0);
124 ~CompositeCommand() override;
125
126 void addCommand(KUndo2Command *cmd);
127
128 void redo() override;
129 void undo() override;
130
131 private:
133 };
134
169 KRITACOMMAND_EXPORT
171
178 KRITACOMMAND_EXPORT
179 void redoAndMergeIntoAccumulatingCommand(KUndo2Command *cmd, std::unique_ptr<KUndo2Command> &accumulatingCommand);
180}
181
182#endif /* __KIS_COMMAND_UTILS_H */
float value(const T *src, size_t ch)
void redoAndMergeIntoAccumulatingCommand(KUndo2Command *cmd, std::unique_ptr< KUndo2Command > &accumulatingCommand)
KUndo2Command * composeCommands(KUndo2Command *parent, KUndo2Command *cmd)
The AggregateCommand struct is a command with delayed initialization. On first redo() populateChildCo...
virtual void populateChildCommands()=0
QVector< KUndo2Command * > m_commands
The LambdaCommand struct is a shorthand for creation of AggregateCommand commands using C++ lambda fe...
QScopedPointer< KUndo2Command > m_child