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
15namespace KisCommandUtils
16{
17
27 struct KRITACOMMAND_EXPORT AggregateCommand : public KUndo2Command {
30 KUndo2Command *parent = 0);
31
32 void redo() override;
33 void undo() override;
34
35 protected:
36 virtual void populateChildCommands() = 0;
37 void addCommand(KUndo2Command *cmd);
38
39 private:
42 };
43
50 struct KRITACOMMAND_EXPORT LambdaCommand : public AggregateCommand {
51 LambdaCommand(std::function<KUndo2Command*()> createCommandFunc);
53 std::function<KUndo2Command*()> createCommandFunc);
55 KUndo2Command *parent,
56 std::function<KUndo2Command*()> createCommandFunc);
58 std::function<KUndo2Command*()> createCommandFunc);
59
60 protected:
61 void populateChildCommands() override;
62
63 private:
64 std::function<KUndo2Command*()> m_createCommandFunc;
65 };
66
67
68 struct KRITACOMMAND_EXPORT SkipFirstRedoWrapper : public KUndo2Command {
69 SkipFirstRedoWrapper(KUndo2Command *child = 0, KUndo2Command *parent = 0);
70 void redo() override;
71 void undo() override;
72
73 private:
75 QScopedPointer<KUndo2Command> m_child;
76 };
77
78
79 struct KRITACOMMAND_EXPORT SkipFirstRedoBase : public KUndo2Command {
80 SkipFirstRedoBase(bool skipFirstRedo, KUndo2Command *parent = 0);
81 SkipFirstRedoBase(bool skipFirstRedo, const KUndo2MagicString &text, KUndo2Command *parent = 0);
82
83 void redo() override final;
84 void undo() override final;
85
86 void setSkipOneRedo(bool value);
87
88 protected:
89 virtual void redoImpl() = 0;
90 virtual void undoImpl() = 0;
91
92 private:
94 };
95
96
97 struct KRITACOMMAND_EXPORT FlipFlopCommand : public KUndo2Command {
98 enum State {
99 INITIALIZING, // Before redo; after undo.
100 FINALIZING // After redo; before undo.
101 };
102
103 FlipFlopCommand(State initialState, KUndo2Command *parent = 0);
104 FlipFlopCommand(bool finalizing = false, KUndo2Command *parent = 0);
105
106 void redo() override; // partA -> redo command -> partB
107 void undo() override; // partB -> undo command -> partA
108
109 protected:
110 virtual void partA();
111 virtual void partB();
112
113 State getState() const { return m_currentState; }
114 bool isFirstRedo() const { return m_firstRedo; }
115
116 private:
118 bool m_firstRedo {true};
119 };
120
121 struct KRITACOMMAND_EXPORT CompositeCommand : public KUndo2Command {
122 CompositeCommand(KUndo2Command *parent = 0);
123 ~CompositeCommand() override;
124
125 void addCommand(KUndo2Command *cmd);
126
127 void redo() override;
128 void undo() override;
129
130 private:
132 };
133
140 KRITACOMMAND_EXPORT
141 void redoAndMergeIntoAccumulatingCommand(KUndo2Command *cmd, QScopedPointer<KUndo2Command> &accumulatingCommand);
142}
143
144#endif /* __KIS_COMMAND_UTILS_H */
float value(const T *src, size_t ch)
void redoAndMergeIntoAccumulatingCommand(KUndo2Command *cmd, QScopedPointer< KUndo2Command > &accumulatingCommand)
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