Enzo
Loading...
Searching...
No Matches
ChangeParameterCommand.h
1#pragma once
2
3#include "Engine/Core/Types.h"
4#include "Engine/Network/NetworkManager.h"
5#include "Engine/Parameter/Parameter.h"
6#include "Engine/Serializer/ParameterSerializable.h"
7#include "Engine/UndoRedo/UndoCommand.h"
8#include <icecream.hpp>
9#include <string>
10
11namespace enzo::nt {
12
16{
17 public:
19 enzo::nt::NodeId nodeId,
20 std::string paramName,
23 )
24 : nodeId_(nodeId), paramName_(paramName), before_(std::move(before)),
25 after_(std::move(after))
26 {
27 }
28
29 // Flat parameters hand over their value vectors and the snapshot is built here.
31 enzo::nt::NodeId nodeId,
32 std::string paramName,
33 const enzo::prm::PrmValues& before,
34 const enzo::prm::PrmValues& after
35 )
36 : nodeId_(nodeId), paramName_(paramName), before_(toSerializable(paramName, before)),
37 after_(toSerializable(paramName, after))
38 {
39 }
40
41 void undo() override { restore_(before_); }
42 void redo() override { restore_(after_); }
43
44 UndoCommandType type() const override { return UndoCommandType::ChangeParameter; }
45
46 private:
47 void restore_(const ParameterSerializable& snapshot)
48 {
49 IC(nodeId_, paramName_);
50 if (!nm().isValidNode(nodeId_))
51 {
52 IC("ChangeParameterCommand — node not found", nodeId_);
53 return;
54 }
55 if (auto prm = nm().getNode(nodeId_).getParameter(paramName_).lock())
56 applySerializable(*prm, snapshot);
57 else
58 IC("ChangeParameterCommand — parameter not found", nodeId_, paramName_);
59 }
60
61 enzo::nt::NodeId nodeId_;
62 std::string paramName_;
65};
66
67} // namespace enzo::nt
Basic attribute, parameter, and node types for Enzo.
uint64_t NodeId
The unique ID assigned to each node in the network.
Definition Types.h:306
Undo step for a parameter edit. Restores the whole parameter from a snapshot so flat values and multi...
Definition ChangeParameterCommand.h:16
Definition UndoCommand.h:8
Definition ParameterSerializable.h:12