Krita Source Code Documentation
Loading...
Searching...
No Matches
KisChangeValueCommand.h
Go to the documentation of this file.
1#ifndef KISCHANGEVALUECOMMAND_H
2#define KISCHANGEVALUECOMMAND_H
3
4#include "kundo2command.h"
5
24template <auto mem_ptr, typename ValueType>
26
27template <typename Base, typename Member, Member Base::* mem_ptr, typename ValueType>
28struct KisChangeValueCommand<mem_ptr, ValueType> : KUndo2Command
29{
30 KisChangeValueCommand(Base *base, const ValueType &newValue, KUndo2Command *parent = nullptr)
31 : KUndo2Command(parent)
32 , m_base(base)
33 , m_oldValue(m_base->*mem_ptr)
34 , m_newValue(newValue)
35 {
36 }
37
38 void redo() {
40 m_base->*mem_ptr = m_newValue;
41 }
42
43 void undo() {
44 m_base->*mem_ptr = m_oldValue;
46 }
47
48protected:
49 Base *m_base;
50 ValueType m_oldValue;
51 ValueType m_newValue;
52};
53
54
59template <auto mem_ptr, typename Base, typename ValueType>
60KisChangeValueCommand<mem_ptr, ValueType> *makeChangeValueCommand(Base *base, const ValueType &newValue, KUndo2Command *parent = nullptr)
61{
62 return new KisChangeValueCommand<mem_ptr, ValueType>(base, newValue, parent);
63}
64
65
72template <auto mem_ptr, typename ValueType>
74
75template <typename Base, typename Member, Member Base::* mem_ptr, typename ValueType>
76struct KisChangeIndirectValueCommand<mem_ptr, ValueType> : KUndo2Command
77{
78 KisChangeIndirectValueCommand(Base *base, const ValueType &newValue, KUndo2Command *parent = nullptr)
79 : KUndo2Command(parent)
80 , m_base(base)
81 , m_oldValue(*(m_base->*mem_ptr))
82 , m_newValue(newValue)
83 {
84 }
85
86 void redo() {
88 *(m_base->*mem_ptr) = m_newValue;
89 }
90
91 void undo() {
92 *(m_base->*mem_ptr) = m_oldValue;
94 }
95private:
96 Base *m_base;
97 ValueType m_oldValue;
98 ValueType m_newValue;
99};
100
105template <auto mem_ptr, typename Base, typename ValueType>
107{
108 return new KisChangeIndirectValueCommand<mem_ptr, ValueType>(base, newValue, parent);
109}
110
111#endif // KISCHANGEVALUECOMMAND_H
KisChangeIndirectValueCommand< mem_ptr, ValueType > * makeChangeIndirectValueCommand(Base *base, const ValueType &newValue, KUndo2Command *parent=nullptr)
KisChangeValueCommand< mem_ptr, ValueType > * makeChangeValueCommand(Base *base, const ValueType &newValue, KUndo2Command *parent=nullptr)
virtual void undo()
virtual void redo()
KisChangeIndirectValueCommand(Base *base, const ValueType &newValue, KUndo2Command *parent=nullptr)
KisChangeValueCommand(Base *base, const ValueType &newValue, KUndo2Command *parent=nullptr)