mirror of
https://github.com/godotengine/godot.git
synced 2025-10-20 00:13:30 +00:00
Add EditorUndoRedoManager singleton
This commit is contained in:
parent
91fedb60de
commit
b58111588a
89 changed files with 551 additions and 546 deletions
|
@ -1861,7 +1861,7 @@ void VisualShaderEditor::_update_parameters(bool p_update_refs) {
|
|||
}
|
||||
|
||||
void VisualShaderEditor::_update_parameter_refs(HashSet<String> &p_deleted_names) {
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
|
||||
for (int i = 0; i < VisualShader::TYPE_MAX; i++) {
|
||||
VisualShader::Type type = VisualShader::Type(i);
|
||||
|
||||
|
@ -1958,7 +1958,7 @@ void VisualShaderEditor::_add_input_port(int p_node, int p_port, int p_port_type
|
|||
return;
|
||||
}
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
|
||||
undo_redo->create_action(TTR("Add Input Port"));
|
||||
undo_redo->add_do_method(node.ptr(), "add_input_port", p_port, p_port_type, p_name);
|
||||
undo_redo->add_undo_method(node.ptr(), "remove_input_port", p_port);
|
||||
|
@ -1974,7 +1974,7 @@ void VisualShaderEditor::_add_output_port(int p_node, int p_port, int p_port_typ
|
|||
return;
|
||||
}
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
|
||||
undo_redo->create_action(TTR("Add Output Port"));
|
||||
undo_redo->add_do_method(node.ptr(), "add_output_port", p_port, p_port_type, p_name);
|
||||
undo_redo->add_undo_method(node.ptr(), "remove_output_port", p_port);
|
||||
|
@ -1990,7 +1990,7 @@ void VisualShaderEditor::_change_input_port_type(int p_type, int p_node, int p_p
|
|||
return;
|
||||
}
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
|
||||
undo_redo->create_action(TTR("Change Input Port Type"));
|
||||
undo_redo->add_do_method(node.ptr(), "set_input_port_type", p_port, p_type);
|
||||
undo_redo->add_undo_method(node.ptr(), "set_input_port_type", p_port, node->get_input_port_type(p_port));
|
||||
|
@ -2006,7 +2006,7 @@ void VisualShaderEditor::_change_output_port_type(int p_type, int p_node, int p_
|
|||
return;
|
||||
}
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
|
||||
undo_redo->create_action(TTR("Change Output Port Type"));
|
||||
undo_redo->add_do_method(node.ptr(), "set_output_port_type", p_port, p_type);
|
||||
undo_redo->add_undo_method(node.ptr(), "set_output_port_type", p_port, node->get_output_port_type(p_port));
|
||||
|
@ -2035,7 +2035,7 @@ void VisualShaderEditor::_change_input_port_name(const String &p_text, Object *p
|
|||
return;
|
||||
}
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
|
||||
undo_redo->create_action(TTR("Change Input Port Name"));
|
||||
undo_redo->add_do_method(node.ptr(), "set_input_port_name", p_port_id, validated_name);
|
||||
undo_redo->add_undo_method(node.ptr(), "set_input_port_name", p_port_id, node->get_input_port_name(p_port_id));
|
||||
|
@ -2062,7 +2062,7 @@ void VisualShaderEditor::_change_output_port_name(const String &p_text, Object *
|
|||
return;
|
||||
}
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
|
||||
undo_redo->create_action(TTR("Change Output Port Name"));
|
||||
undo_redo->add_do_method(node.ptr(), "set_output_port_name", p_port_id, validated_name);
|
||||
undo_redo->add_undo_method(node.ptr(), "set_output_port_name", p_port_id, prev_name);
|
||||
|
@ -2075,7 +2075,7 @@ void VisualShaderEditor::_expand_output_port(int p_node, int p_port, bool p_expa
|
|||
Ref<VisualShaderNode> node = visual_shader->get_node(type, p_node);
|
||||
ERR_FAIL_COND(!node.is_valid());
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
|
||||
if (p_expand) {
|
||||
undo_redo->create_action(TTR("Expand Output Port"));
|
||||
} else {
|
||||
|
@ -2173,7 +2173,7 @@ void VisualShaderEditor::_remove_input_port(int p_node, int p_port) {
|
|||
return;
|
||||
}
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
|
||||
undo_redo->create_action(TTR("Remove Input Port"));
|
||||
|
||||
List<VisualShader::Connection> conns;
|
||||
|
@ -2223,7 +2223,7 @@ void VisualShaderEditor::_remove_output_port(int p_node, int p_port) {
|
|||
return;
|
||||
}
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
|
||||
undo_redo->create_action(TTR("Remove Output Port"));
|
||||
|
||||
List<VisualShader::Connection> conns;
|
||||
|
@ -2290,7 +2290,7 @@ void VisualShaderEditor::_expression_focus_out(Object *code_edit, int p_node) {
|
|||
return;
|
||||
}
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
|
||||
undo_redo->create_action(TTR("Set VisualShader Expression"));
|
||||
undo_redo->add_do_method(node.ptr(), "set_expression", expression_box->get_text());
|
||||
undo_redo->add_undo_method(node.ptr(), "set_expression", node->get_expression());
|
||||
|
@ -2354,7 +2354,7 @@ void VisualShaderEditor::_node_resized(const Vector2 &p_new_size, int p_type, in
|
|||
return;
|
||||
}
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
|
||||
undo_redo->create_action(TTR("Resize VisualShader Node"), UndoRedo::MERGE_ENDS);
|
||||
undo_redo->add_do_method(this, "_set_node_size", p_type, p_node, p_new_size);
|
||||
undo_redo->add_undo_method(this, "_set_node_size", p_type, p_node, node->get_size());
|
||||
|
@ -2371,7 +2371,7 @@ void VisualShaderEditor::_preview_select_port(int p_node, int p_port) {
|
|||
if (node->get_output_port_for_preview() == p_port) {
|
||||
p_port = -1; //toggle it
|
||||
}
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
|
||||
undo_redo->create_action(p_port == -1 ? TTR("Hide Port Preview") : TTR("Show Port Preview"));
|
||||
undo_redo->add_do_method(node.ptr(), "set_output_port_for_preview", p_port);
|
||||
undo_redo->add_undo_method(node.ptr(), "set_output_port_for_preview", prev_port);
|
||||
|
@ -2417,7 +2417,7 @@ void VisualShaderEditor::_comment_title_popup_hide() {
|
|||
if (node->get_title() == comment_title_change_edit->get_text()) {
|
||||
return; // nothing changed - ignored
|
||||
}
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
|
||||
undo_redo->create_action(TTR("Set Comment Node Title"));
|
||||
undo_redo->add_do_method(node.ptr(), "set_title", comment_title_change_edit->get_text());
|
||||
undo_redo->add_undo_method(node.ptr(), "set_title", node->get_title());
|
||||
|
@ -2460,7 +2460,7 @@ void VisualShaderEditor::_comment_desc_popup_hide() {
|
|||
if (node->get_description() == comment_desc_change_edit->get_text()) {
|
||||
return; // nothing changed - ignored
|
||||
}
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
|
||||
undo_redo->create_action(TTR("Set Comment Node Description"));
|
||||
undo_redo->add_do_method(node.ptr(), "set_description", comment_desc_change_edit->get_text());
|
||||
undo_redo->add_undo_method(node.ptr(), "set_description", node->get_title());
|
||||
|
@ -2481,7 +2481,7 @@ void VisualShaderEditor::_parameter_line_edit_changed(const String &p_text, int
|
|||
return;
|
||||
}
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
|
||||
undo_redo->create_action(TTR("Set Parameter Name"));
|
||||
undo_redo->add_do_method(node.ptr(), "set_parameter_name", validated_name);
|
||||
undo_redo->add_undo_method(node.ptr(), "set_parameter_name", node->get_parameter_name());
|
||||
|
@ -2517,7 +2517,7 @@ void VisualShaderEditor::_port_edited(const StringName &p_property, const Varian
|
|||
Ref<VisualShaderNode> vsn = visual_shader->get_node(type, editing_node);
|
||||
ERR_FAIL_COND(!vsn.is_valid());
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
|
||||
undo_redo->create_action(TTR("Set Input Default Port"));
|
||||
|
||||
Ref<VisualShaderNodeCustom> custom = Object::cast_to<VisualShaderNodeCustom>(vsn.ptr());
|
||||
|
@ -2963,7 +2963,7 @@ void VisualShaderEditor::_add_node(int p_idx, const Vector<Variant> &p_ops, Stri
|
|||
|
||||
int id_to_use = visual_shader->get_valid_node_id(type);
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
|
||||
if (p_resource_path.is_empty()) {
|
||||
undo_redo->create_action(TTR("Add Node to Visual Shader"));
|
||||
} else {
|
||||
|
@ -3130,7 +3130,7 @@ void VisualShaderEditor::_add_node(int p_idx, const Vector<Variant> &p_ops, Stri
|
|||
}
|
||||
|
||||
void VisualShaderEditor::_add_varying(const String &p_name, VisualShader::VaryingMode p_mode, VisualShader::VaryingType p_type) {
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
|
||||
undo_redo->create_action(vformat(TTR("Add Varying to Visual Shader: %s"), p_name));
|
||||
|
||||
undo_redo->add_do_method(visual_shader.ptr(), "add_varying", p_name, p_mode, p_type);
|
||||
|
@ -3165,7 +3165,7 @@ void VisualShaderEditor::_add_varying(const String &p_name, VisualShader::Varyin
|
|||
}
|
||||
|
||||
void VisualShaderEditor::_remove_varying(const String &p_name) {
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
|
||||
undo_redo->create_action(vformat(TTR("Remove Varying from Visual Shader: %s"), p_name));
|
||||
|
||||
VisualShader::VaryingMode var_mode = visual_shader->get_varying_mode(p_name);
|
||||
|
@ -3253,7 +3253,7 @@ void VisualShaderEditor::_node_dragged(const Vector2 &p_from, const Vector2 &p_t
|
|||
void VisualShaderEditor::_nodes_dragged() {
|
||||
drag_dirty = false;
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
|
||||
undo_redo->create_action(TTR("Node(s) Moved"));
|
||||
|
||||
for (const DragOp &E : drag_buffer) {
|
||||
|
@ -3277,7 +3277,7 @@ void VisualShaderEditor::_connection_request(const String &p_from, int p_from_in
|
|||
return;
|
||||
}
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
|
||||
undo_redo->create_action(TTR("Nodes Connected"));
|
||||
|
||||
List<VisualShader::Connection> conns;
|
||||
|
@ -3309,7 +3309,7 @@ void VisualShaderEditor::_disconnection_request(const String &p_from, int p_from
|
|||
int from = p_from.to_int();
|
||||
int to = p_to.to_int();
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
|
||||
undo_redo->create_action(TTR("Nodes Disconnected"));
|
||||
undo_redo->add_do_method(visual_shader.ptr(), "disconnect_nodes", type, from, p_from_index, to, p_to_index);
|
||||
undo_redo->add_undo_method(visual_shader.ptr(), "connect_nodes", type, from, p_from_index, to, p_to_index);
|
||||
|
@ -3349,7 +3349,7 @@ void VisualShaderEditor::_delete_nodes(int p_type, const List<int> &p_nodes) {
|
|||
List<VisualShader::Connection> conns;
|
||||
visual_shader->get_node_connections(type, &conns);
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
|
||||
for (const int &F : p_nodes) {
|
||||
for (const VisualShader::Connection &E : conns) {
|
||||
if (E.from_node == F || E.to_node == F) {
|
||||
|
@ -3408,7 +3408,7 @@ void VisualShaderEditor::_delete_nodes(int p_type, const List<int> &p_nodes) {
|
|||
}
|
||||
|
||||
void VisualShaderEditor::_replace_node(VisualShader::Type p_type_id, int p_node_id, const StringName &p_from, const StringName &p_to) {
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
|
||||
undo_redo->add_do_method(visual_shader.ptr(), "replace_node", p_type_id, p_node_id, p_to);
|
||||
undo_redo->add_undo_method(visual_shader.ptr(), "replace_node", p_type_id, p_node_id, p_from);
|
||||
}
|
||||
|
@ -3443,7 +3443,7 @@ void VisualShaderEditor::_update_parameter(VisualShader::Type p_type_id, int p_n
|
|||
void VisualShaderEditor::_convert_constants_to_parameters(bool p_vice_versa) {
|
||||
VisualShader::Type type_id = get_current_shader_type();
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
|
||||
if (!p_vice_versa) {
|
||||
undo_redo->create_action(TTR("Convert Constant Node(s) To Parameter(s)"));
|
||||
} else {
|
||||
|
@ -3642,7 +3642,7 @@ void VisualShaderEditor::_delete_node_request(int p_type, int p_node) {
|
|||
List<int> to_erase;
|
||||
to_erase.push_back(p_node);
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
|
||||
undo_redo->create_action(TTR("Delete VisualShader Node"));
|
||||
_delete_nodes(p_type, to_erase);
|
||||
undo_redo->commit_action();
|
||||
|
@ -3671,7 +3671,7 @@ void VisualShaderEditor::_delete_nodes_request(const TypedArray<StringName> &p_n
|
|||
return;
|
||||
}
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
|
||||
undo_redo->create_action(TTR("Delete VisualShader Node(s)"));
|
||||
_delete_nodes(get_current_shader_type(), to_erase);
|
||||
undo_redo->commit_action();
|
||||
|
@ -4084,7 +4084,7 @@ void VisualShaderEditor::_dup_copy_nodes(int p_type, List<CopyItem> &r_items, Li
|
|||
}
|
||||
|
||||
void VisualShaderEditor::_dup_paste_nodes(int p_type, List<CopyItem> &r_items, const List<VisualShader::Connection> &p_connections, const Vector2 &p_offset, bool p_duplicate) {
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
|
||||
if (p_duplicate) {
|
||||
undo_redo->create_action(TTR("Duplicate VisualShader Node(s)"));
|
||||
} else {
|
||||
|
@ -4203,7 +4203,7 @@ void VisualShaderEditor::_copy_nodes(bool p_cut) {
|
|||
_dup_copy_nodes(get_current_shader_type(), copy_items_buffer, copy_connections_buffer);
|
||||
|
||||
if (p_cut) {
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
|
||||
undo_redo->create_action(TTR("Cut VisualShader Node(s)"));
|
||||
|
||||
List<int> ids;
|
||||
|
@ -4290,7 +4290,7 @@ void VisualShaderEditor::_input_select_item(Ref<VisualShaderNodeInput> p_input,
|
|||
|
||||
bool type_changed = next_input_type != prev_input_type;
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo_man = EditorNode::get_undo_redo();
|
||||
EditorUndoRedoManager *undo_redo_man = EditorUndoRedoManager::get_singleton();
|
||||
undo_redo_man->create_action(TTR("Visual Shader Input Type Changed"));
|
||||
|
||||
undo_redo_man->add_do_method(p_input.ptr(), "set_input_name", p_name);
|
||||
|
@ -4359,7 +4359,7 @@ void VisualShaderEditor::_parameter_ref_select_item(Ref<VisualShaderNodeParamete
|
|||
|
||||
bool type_changed = p_parameter_ref->get_parameter_type_by_name(p_name) != p_parameter_ref->get_parameter_type_by_name(prev_name);
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo_man = EditorNode::get_undo_redo();
|
||||
EditorUndoRedoManager *undo_redo_man = EditorUndoRedoManager::get_singleton();
|
||||
undo_redo_man->create_action(TTR("ParameterRef Name Changed"));
|
||||
|
||||
undo_redo_man->add_do_method(p_parameter_ref.ptr(), "set_parameter_name", p_name);
|
||||
|
@ -4403,7 +4403,7 @@ void VisualShaderEditor::_varying_select_item(Ref<VisualShaderNodeVarying> p_var
|
|||
|
||||
bool is_getter = Ref<VisualShaderNodeVaryingGetter>(p_varying.ptr()).is_valid();
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo_man = EditorNode::get_undo_redo();
|
||||
EditorUndoRedoManager *undo_redo_man = EditorUndoRedoManager::get_singleton();
|
||||
undo_redo_man->create_action(TTR("Varying Name Changed"));
|
||||
|
||||
undo_redo_man->add_do_method(p_varying.ptr(), "set_varying_name", p_name);
|
||||
|
@ -4474,7 +4474,7 @@ void VisualShaderEditor::_float_constant_selected(int p_which) {
|
|||
return; // same
|
||||
}
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
|
||||
undo_redo->create_action(vformat(TTR("Set Constant: %s"), float_constant_defs[p_which].name));
|
||||
undo_redo->add_do_method(node.ptr(), "set_constant", float_constant_defs[p_which].value);
|
||||
undo_redo->add_undo_method(node.ptr(), "set_constant", node->get_constant());
|
||||
|
@ -4738,7 +4738,7 @@ void VisualShaderEditor::drop_data_fw(const Point2 &p_point, const Variant &p_da
|
|||
saved_node_pos_dirty = true;
|
||||
_add_node(idx, add_options[idx].ops);
|
||||
} else if (d.has("files")) {
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
|
||||
undo_redo->create_action(TTR("Add Node(s) to Visual Shader"));
|
||||
|
||||
if (d["files"].get_type() == Variant::PACKED_STRING_ARRAY) {
|
||||
|
@ -6169,7 +6169,7 @@ public:
|
|||
return;
|
||||
}
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
|
||||
|
||||
updating = true;
|
||||
undo_redo->create_action(TTR("Edit Visual Property:") + " " + p_property, UndoRedo::MERGE_ENDS);
|
||||
|
@ -6371,7 +6371,7 @@ void EditorPropertyVisualShaderMode::_option_selected(int p_which) {
|
|||
return;
|
||||
}
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton();
|
||||
undo_redo->create_action(TTR("Visual Shader Mode Changed"));
|
||||
//do is easy
|
||||
undo_redo->add_do_method(visual_shader.ptr(), "set_mode", p_which);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue