Enzo
Loading...
Searching...
No Matches
UndoDisabler.h
1#pragma once
2
3#include "Engine/UndoRedo/UndoCommands.h"
4#include <algorithm>
5#include <optional>
6#include <vector>
7
9{
10 public:
12 UndoDisabler() : blockedCommand_(std::nullopt) { blockAllCount_++; }
13
15 UndoDisabler(UndoCommandType command) : blockedCommand_(command)
16 {
17 blockedCommands_.push_back(command);
18 }
19
21 {
22 if (blockedCommand_)
23 {
24 auto it = std::find(blockedCommands_.begin(), blockedCommands_.end(), *blockedCommand_);
25 blockedCommands_.erase(it);
26 }
27 else
28 {
29 blockAllCount_--;
30 }
31 }
32
33 UndoDisabler(const UndoDisabler&) = delete;
34 UndoDisabler& operator=(const UndoDisabler&) = delete;
35
36 static bool isBlocked(UndoCommandType command)
37 {
38 return blockAllCount_ > 0 ||
39 std::find(blockedCommands_.begin(), blockedCommands_.end(), command) !=
40 blockedCommands_.end();
41 }
42
43 private:
44 std::optional<UndoCommandType> blockedCommand_;
45 static inline std::vector<UndoCommandType> blockedCommands_;
46 static inline int blockAllCount_ = 0;
47};
Definition UndoDisabler.h:9
UndoDisabler()
Blocks all undo command types while this object is alive.
Definition UndoDisabler.h:12
UndoDisabler(UndoCommandType command)
Blocks a specific undo command type while this object is alive.
Definition UndoDisabler.h:15