Merge pull request #65062 from KoBeWi/RedoUndo
Unify usage of undo_redo in editor
This commit is contained in:
commit
eefba5bc33
@ -194,7 +194,7 @@ void EditorAutoloadSettings::_autoload_edited() {
|
||||
TreeItem *ti = tree->get_edited();
|
||||
int column = tree->get_edited_column();
|
||||
|
||||
Ref<EditorUndoRedoManager> undo_redo = EditorNode::get_undo_redo();
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
|
||||
if (column == 0) {
|
||||
String name = ti->get_text(0);
|
||||
@ -289,7 +289,7 @@ void EditorAutoloadSettings::_autoload_button_pressed(Object *p_item, int p_colu
|
||||
|
||||
String name = "autoload/" + ti->get_text(0);
|
||||
|
||||
Ref<EditorUndoRedoManager> undo_redo = EditorNode::get_undo_redo();
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
|
||||
switch (p_button) {
|
||||
case BUTTON_OPEN: {
|
||||
@ -714,7 +714,7 @@ void EditorAutoloadSettings::drop_data_fw(const Point2 &p_point, const Variant &
|
||||
|
||||
orders.sort();
|
||||
|
||||
Ref<EditorUndoRedoManager> undo_redo = EditorNode::get_undo_redo();
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
|
||||
undo_redo->create_action(TTR("Rearrange Autoloads"));
|
||||
|
||||
@ -757,7 +757,7 @@ bool EditorAutoloadSettings::autoload_add(const String &p_name, const String &p_
|
||||
|
||||
name = "autoload/" + name;
|
||||
|
||||
Ref<EditorUndoRedoManager> undo_redo = EditorNode::get_undo_redo();
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
|
||||
undo_redo->create_action(TTR("Add Autoload"));
|
||||
// Singleton autoloads are represented with a leading "*" in their path.
|
||||
@ -783,7 +783,7 @@ bool EditorAutoloadSettings::autoload_add(const String &p_name, const String &p_
|
||||
void EditorAutoloadSettings::autoload_remove(const String &p_name) {
|
||||
String name = "autoload/" + p_name;
|
||||
|
||||
Ref<EditorUndoRedoManager> undo_redo = EditorNode::get_undo_redo();
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
|
||||
int order = ProjectSettings::get_singleton()->get_order(name);
|
||||
|
||||
|
@ -457,12 +457,10 @@ Callable EditorData::get_move_array_element_function(const StringName &p_class)
|
||||
}
|
||||
|
||||
void EditorData::remove_editor_plugin(EditorPlugin *p_plugin) {
|
||||
p_plugin->undo_redo = Ref<EditorUndoRedoManager>();
|
||||
editor_plugins.erase(p_plugin);
|
||||
}
|
||||
|
||||
void EditorData::add_editor_plugin(EditorPlugin *p_plugin) {
|
||||
p_plugin->undo_redo = undo_redo_manager;
|
||||
editor_plugins.push_back(p_plugin);
|
||||
}
|
||||
|
||||
|
@ -39,6 +39,7 @@
|
||||
#include "editor/editor_property_name_processor.h"
|
||||
#include "editor/editor_scale.h"
|
||||
#include "editor/editor_settings.h"
|
||||
#include "editor/editor_undo_redo_manager.h"
|
||||
#include "editor/plugins/script_editor_plugin.h"
|
||||
#include "multi_node_edit.h"
|
||||
#include "scene/gui/center_container.h"
|
||||
@ -1698,6 +1699,7 @@ void EditorInspectorArray::_move_element(int p_element_index, int p_to_pos) {
|
||||
} else {
|
||||
action_name = vformat("Move element %d to position %d in property array with prefix %s.", p_element_index, p_to_pos, array_element_prefix);
|
||||
}
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(action_name);
|
||||
if (mode == MODE_USE_MOVE_ARRAY_ELEMENT_FUNCTION) {
|
||||
// Call the function.
|
||||
@ -1841,6 +1843,7 @@ void EditorInspectorArray::_move_element(int p_element_index, int p_to_pos) {
|
||||
}
|
||||
|
||||
void EditorInspectorArray::_clear_array() {
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(vformat("Clear property array with prefix %s.", array_element_prefix));
|
||||
if (mode == MODE_USE_MOVE_ARRAY_ELEMENT_FUNCTION) {
|
||||
for (int i = count - 1; i >= 0; i--) {
|
||||
@ -1893,6 +1896,7 @@ void EditorInspectorArray::_resize_array(int p_size) {
|
||||
return;
|
||||
}
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(vformat("Resize property array with prefix %s.", array_element_prefix));
|
||||
if (p_size > count) {
|
||||
if (mode == MODE_USE_MOVE_ARRAY_ELEMENT_FUNCTION) {
|
||||
@ -2242,10 +2246,6 @@ void EditorInspectorArray::_bind_methods() {
|
||||
ADD_SIGNAL(MethodInfo("page_change_request"));
|
||||
}
|
||||
|
||||
void EditorInspectorArray::set_undo_redo(Ref<EditorUndoRedoManager> p_undo_redo) {
|
||||
undo_redo = p_undo_redo;
|
||||
}
|
||||
|
||||
void EditorInspectorArray::setup_with_move_element_function(Object *p_object, String p_label, const StringName &p_array_element_prefix, int p_page, const Color &p_bg_color, bool p_foldable, bool p_movable, bool p_numbered, int p_page_length, const String &p_add_item_text) {
|
||||
count_property = "";
|
||||
mode = MODE_USE_MOVE_ARRAY_ELEMENT_FUNCTION;
|
||||
@ -2508,10 +2508,6 @@ Button *EditorInspector::create_inspector_action_button(const String &p_text) {
|
||||
return button;
|
||||
}
|
||||
|
||||
void EditorInspector::set_undo_redo(Ref<EditorUndoRedoManager> p_undo_redo) {
|
||||
undo_redo = p_undo_redo;
|
||||
}
|
||||
|
||||
String EditorInspector::get_selected_path() const {
|
||||
return property_selected;
|
||||
}
|
||||
@ -3077,7 +3073,6 @@ void EditorInspector::update_tree() {
|
||||
int page = per_array_page.has(array_element_prefix) ? per_array_page[array_element_prefix] : 0;
|
||||
editor_inspector_array->setup_with_move_element_function(object, array_label, array_element_prefix, page, c, use_folding);
|
||||
editor_inspector_array->connect("page_change_request", callable_mp(this, &EditorInspector::_page_change_request).bind(array_element_prefix));
|
||||
editor_inspector_array->set_undo_redo(undo_redo);
|
||||
} else if (p.type == Variant::INT) {
|
||||
// Setup the array to use the count property and built-in functions to create/move/delete elements.
|
||||
if (class_name_components.size() >= 2) {
|
||||
@ -3087,8 +3082,6 @@ void EditorInspector::update_tree() {
|
||||
|
||||
editor_inspector_array->setup_with_count_property(object, class_name_components[0], p.name, array_element_prefix, page, c, foldable, movable, numbered, page_size, add_button_text, swap_method);
|
||||
editor_inspector_array->connect("page_change_request", callable_mp(this, &EditorInspector::_page_change_request).bind(array_element_prefix));
|
||||
|
||||
editor_inspector_array->set_undo_redo(undo_redo);
|
||||
}
|
||||
}
|
||||
|
||||
@ -3565,6 +3558,7 @@ void EditorInspector::_edit_set(const String &p_name, const Variant &p_value, bo
|
||||
}
|
||||
}
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
if (!undo_redo.is_valid() || bool(object->call("_dont_undo_redo"))) {
|
||||
object->set(p_name, p_value);
|
||||
if (p_refresh_all) {
|
||||
@ -3685,6 +3679,7 @@ void EditorInspector::_multiple_properties_changed(Vector<String> p_paths, Array
|
||||
}
|
||||
names += p_paths[i];
|
||||
}
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Set Multiple:") + " " + names, UndoRedo::MERGE_ENDS);
|
||||
for (int i = 0; i < p_paths.size(); i++) {
|
||||
_edit_set(p_paths[i], p_values[i], false, "");
|
||||
@ -3719,6 +3714,7 @@ void EditorInspector::_property_deleted(const String &p_path) {
|
||||
|
||||
if (p_path.begins_with("metadata/")) {
|
||||
String name = p_path.replace_first("metadata/", "");
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(vformat(TTR("Remove metadata %s"), name));
|
||||
undo_redo->add_do_method(object, "remove_meta", name);
|
||||
undo_redo->add_undo_method(object, "set_meta", name, object->get_meta(name));
|
||||
@ -3784,6 +3780,7 @@ void EditorInspector::_property_pinned(const String &p_path, bool p_pinned) {
|
||||
Node *node = Object::cast_to<Node>(object);
|
||||
ERR_FAIL_COND(!node);
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
if (undo_redo.is_valid()) {
|
||||
undo_redo->create_action(vformat(p_pinned ? TTR("Pinned %s") : TTR("Unpinned %s"), p_path));
|
||||
undo_redo->add_do_method(node, "_set_property_pinned", p_path, p_pinned);
|
||||
@ -3981,6 +3978,7 @@ void EditorInspector::_add_meta_confirm() {
|
||||
Variant defval;
|
||||
Callable::CallError ce;
|
||||
Variant::construct(Variant::Type(add_meta_type->get_selected_id()), defval, nullptr, 0, ce);
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(vformat(TTR("Add metadata %s"), name));
|
||||
undo_redo->add_do_method(object, "set_meta", name, defval);
|
||||
undo_redo->add_undo_method(object, "remove_meta", name);
|
||||
|
@ -31,7 +31,6 @@
|
||||
#ifndef EDITOR_INSPECTOR_H
|
||||
#define EDITOR_INSPECTOR_H
|
||||
|
||||
#include "editor/editor_undo_redo_manager.h"
|
||||
#include "editor_property_name_processor.h"
|
||||
#include "scene/gui/box_container.h"
|
||||
#include "scene/gui/button.h"
|
||||
@ -305,8 +304,6 @@ public:
|
||||
class EditorInspectorArray : public EditorInspectorSection {
|
||||
GDCLASS(EditorInspectorArray, EditorInspectorSection);
|
||||
|
||||
Ref<EditorUndoRedoManager> undo_redo;
|
||||
|
||||
enum Mode {
|
||||
MODE_NONE,
|
||||
MODE_USE_COUNT_PROPERTY,
|
||||
@ -401,8 +398,6 @@ protected:
|
||||
static void _bind_methods();
|
||||
|
||||
public:
|
||||
void set_undo_redo(Ref<EditorUndoRedoManager> p_undo_redo);
|
||||
|
||||
void setup_with_move_element_function(Object *p_object, String p_label, const StringName &p_array_element_prefix, int p_page, const Color &p_bg_color, bool p_foldable, bool p_movable = true, bool p_numbered = false, int p_page_length = 5, const String &p_add_item_text = "");
|
||||
void setup_with_count_property(Object *p_object, String p_label, const StringName &p_count_property, const StringName &p_array_element_prefix, int p_page, const Color &p_bg_color, bool p_foldable, bool p_movable = true, bool p_numbered = false, int p_page_length = 5, const String &p_add_item_text = "", const String &p_swap_method = "");
|
||||
VBoxContainer *get_vbox(int p_index);
|
||||
@ -441,7 +436,6 @@ public:
|
||||
class EditorInspector : public ScrollContainer {
|
||||
GDCLASS(EditorInspector, ScrollContainer);
|
||||
|
||||
Ref<EditorUndoRedoManager> undo_redo;
|
||||
enum {
|
||||
MAX_PLUGINS = 1024
|
||||
};
|
||||
@ -555,8 +549,6 @@ public:
|
||||
|
||||
static EditorProperty *instantiate_property_editor(Object *p_object, const Variant::Type p_type, const String &p_path, const PropertyHint p_hint, const String &p_hint_text, const uint32_t p_usage, const bool p_wide = false);
|
||||
|
||||
void set_undo_redo(Ref<EditorUndoRedoManager> p_undo_redo);
|
||||
|
||||
String get_selected_path() const;
|
||||
|
||||
void update_tree();
|
||||
|
@ -141,6 +141,7 @@ void EditorLocaleDialog::_filter_lang_option_changed() {
|
||||
|
||||
f_lang_all.sort();
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Changed Locale Language Filter"));
|
||||
undo_redo->add_do_property(ProjectSettings::get_singleton(), "internationalization/locale/language_filter", f_lang_all);
|
||||
undo_redo->add_undo_property(ProjectSettings::get_singleton(), "internationalization/locale/language_filter", prev);
|
||||
@ -174,6 +175,7 @@ void EditorLocaleDialog::_filter_script_option_changed() {
|
||||
|
||||
f_script_all.sort();
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Changed Locale Script Filter"));
|
||||
undo_redo->add_do_property(ProjectSettings::get_singleton(), "internationalization/locale/script_filter", f_script_all);
|
||||
undo_redo->add_undo_property(ProjectSettings::get_singleton(), "internationalization/locale/script_filter", prev);
|
||||
@ -207,6 +209,7 @@ void EditorLocaleDialog::_filter_cnt_option_changed() {
|
||||
|
||||
f_cnt_all.sort();
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Changed Locale Country Filter"));
|
||||
undo_redo->add_do_property(ProjectSettings::get_singleton(), "internationalization/locale/country_filter", f_cnt_all);
|
||||
undo_redo->add_undo_property(ProjectSettings::get_singleton(), "internationalization/locale/country_filter", prev);
|
||||
@ -221,6 +224,7 @@ void EditorLocaleDialog::_filter_mode_changed(int p_mode) {
|
||||
prev = GLOBAL_GET("internationalization/locale/locale_filter_mode");
|
||||
}
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Changed Locale Filter Mode"));
|
||||
undo_redo->add_do_property(ProjectSettings::get_singleton(), "internationalization/locale/locale_filter_mode", f_mode);
|
||||
undo_redo->add_undo_property(ProjectSettings::get_singleton(), "internationalization/locale/locale_filter_mode", prev);
|
||||
@ -385,8 +389,6 @@ void EditorLocaleDialog::popup_locale_dialog() {
|
||||
}
|
||||
|
||||
EditorLocaleDialog::EditorLocaleDialog() {
|
||||
undo_redo = EditorNode::get_undo_redo();
|
||||
|
||||
set_title(TTR("Select a Locale"));
|
||||
|
||||
VBoxContainer *vb = memnew(VBoxContainer);
|
||||
|
@ -40,7 +40,6 @@ class VBoxContainer;
|
||||
class LineEdit;
|
||||
class Tree;
|
||||
class OptionButton;
|
||||
class EditorUndoRedoManager;
|
||||
|
||||
class EditorLocaleDialog : public ConfirmationDialog {
|
||||
GDCLASS(EditorLocaleDialog, ConfirmationDialog);
|
||||
@ -63,8 +62,6 @@ class EditorLocaleDialog : public ConfirmationDialog {
|
||||
Tree *script_list = nullptr;
|
||||
Tree *cnt_list = nullptr;
|
||||
|
||||
Ref<EditorUndoRedoManager> undo_redo;
|
||||
|
||||
bool locale_set = false;
|
||||
bool updating_lists = false;
|
||||
|
||||
|
@ -30,6 +30,7 @@
|
||||
|
||||
#include "editor_log.h"
|
||||
|
||||
#include "core/object/undo_redo.h"
|
||||
#include "core/os/keyboard.h"
|
||||
#include "core/version.h"
|
||||
#include "editor/editor_node.h"
|
||||
|
@ -967,7 +967,7 @@ void EditorPlugin::_bind_methods() {
|
||||
}
|
||||
|
||||
Ref<EditorUndoRedoManager> EditorPlugin::get_undo_redo() {
|
||||
return undo_redo;
|
||||
return EditorNode::get_undo_redo();
|
||||
}
|
||||
|
||||
EditorPluginCreateFunc EditorPlugins::creation_funcs[MAX_CREATE_FUNCS];
|
||||
|
@ -32,7 +32,6 @@
|
||||
#define EDITOR_PLUGIN_H
|
||||
|
||||
#include "core/io/config_file.h"
|
||||
#include "core/object/undo_redo.h"
|
||||
#include "editor/debugger/editor_debugger_node.h"
|
||||
#include "editor/editor_inspector.h"
|
||||
#include "editor/editor_translation_parser.h"
|
||||
@ -134,7 +133,6 @@ public:
|
||||
class EditorPlugin : public Node {
|
||||
GDCLASS(EditorPlugin, Node);
|
||||
friend class EditorData;
|
||||
Ref<EditorUndoRedoManager> undo_redo;
|
||||
|
||||
bool input_event_forwarding_always_enabled = false;
|
||||
bool force_draw_over_forwarding_enabled = false;
|
||||
|
@ -31,7 +31,6 @@
|
||||
#ifndef EDITOR_PLUGIN_SETTINGS_H
|
||||
#define EDITOR_PLUGIN_SETTINGS_H
|
||||
|
||||
#include "core/object/undo_redo.h"
|
||||
#include "editor/editor_data.h"
|
||||
#include "editor/plugin_config_dialog.h"
|
||||
|
||||
|
@ -4097,7 +4097,6 @@ void EditorPropertyResource::update_property() {
|
||||
sub_inspector->set_keying(is_keying());
|
||||
sub_inspector->set_read_only(is_read_only());
|
||||
sub_inspector->set_use_folding(is_using_folding());
|
||||
sub_inspector->set_undo_redo(EditorNode::get_undo_redo());
|
||||
|
||||
sub_inspector_vbox = memnew(VBoxContainer);
|
||||
add_child(sub_inspector_vbox);
|
||||
|
@ -132,6 +132,7 @@ void EditorSettingsDialog::_notification(int p_what) {
|
||||
} break;
|
||||
|
||||
case NOTIFICATION_READY: {
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->get_or_create_history(EditorUndoRedoManager::GLOBAL_HISTORY).undo_redo->set_method_notify_callback(EditorDebuggerNode::_method_changeds, nullptr);
|
||||
undo_redo->get_or_create_history(EditorUndoRedoManager::GLOBAL_HISTORY).undo_redo->set_property_notify_callback(EditorDebuggerNode::_property_changeds, nullptr);
|
||||
undo_redo->get_or_create_history(EditorUndoRedoManager::GLOBAL_HISTORY).undo_redo->set_commit_notify_callback(_undo_redo_callback, this);
|
||||
@ -158,9 +159,9 @@ void EditorSettingsDialog::_notification(int p_what) {
|
||||
|
||||
void EditorSettingsDialog::shortcut_input(const Ref<InputEvent> &p_event) {
|
||||
ERR_FAIL_COND(p_event.is_null());
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
|
||||
const Ref<InputEventKey> k = p_event;
|
||||
|
||||
if (k.is_valid() && k->is_pressed()) {
|
||||
bool handled = false;
|
||||
|
||||
@ -229,6 +230,7 @@ void EditorSettingsDialog::_event_config_confirmed() {
|
||||
void EditorSettingsDialog::_update_builtin_action(const String &p_name, const Array &p_events) {
|
||||
Array old_input_array = EditorSettings::get_singleton()->get_builtin_action_overrides(p_name);
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Edit Built-in Action") + " '" + p_name + "'");
|
||||
undo_redo->add_do_method(EditorSettings::get_singleton(), "mark_setting_changed", "builtin_action_overrides");
|
||||
undo_redo->add_undo_method(EditorSettings::get_singleton(), "mark_setting_changed", "builtin_action_overrides");
|
||||
@ -244,6 +246,7 @@ void EditorSettingsDialog::_update_builtin_action(const String &p_name, const Ar
|
||||
void EditorSettingsDialog::_update_shortcut_events(const String &p_path, const Array &p_events) {
|
||||
Ref<Shortcut> current_sc = EditorSettings::get_singleton()->get_shortcut(p_path);
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Edit Shortcut") + " '" + p_path + "'");
|
||||
undo_redo->add_do_method(current_sc.ptr(), "set_events", p_events);
|
||||
undo_redo->add_undo_method(current_sc.ptr(), "set_events", current_sc->get_events());
|
||||
@ -697,8 +700,6 @@ void EditorSettingsDialog::_bind_methods() {
|
||||
EditorSettingsDialog::EditorSettingsDialog() {
|
||||
set_title(TTR("Editor Settings"));
|
||||
|
||||
undo_redo = EditorNode::get_undo_redo();
|
||||
|
||||
tabs = memnew(TabContainer);
|
||||
tabs->set_theme_type_variation("TabContainerOdd");
|
||||
tabs->connect("tab_changed", callable_mp(this, &EditorSettingsDialog::_tabs_tab_changed));
|
||||
@ -723,7 +724,6 @@ EditorSettingsDialog::EditorSettingsDialog() {
|
||||
inspector->get_inspector()->set_use_filter(true);
|
||||
inspector->register_search_box(search_box);
|
||||
inspector->set_v_size_flags(Control::SIZE_EXPAND_FILL);
|
||||
inspector->get_inspector()->set_undo_redo(undo_redo);
|
||||
tab_general->add_child(inspector);
|
||||
inspector->get_inspector()->connect("property_edited", callable_mp(this, &EditorSettingsDialog::_settings_property_edited));
|
||||
inspector->get_inspector()->connect("restart_requested", callable_mp(this, &EditorSettingsDialog::_editor_restart_request));
|
||||
|
@ -40,8 +40,6 @@
|
||||
#include "scene/gui/tab_container.h"
|
||||
#include "scene/gui/texture_rect.h"
|
||||
|
||||
class EditorUndoRedoManager;
|
||||
|
||||
class EditorSettingsDialog : public AcceptDialog {
|
||||
GDCLASS(EditorSettingsDialog, AcceptDialog);
|
||||
|
||||
@ -75,8 +73,6 @@ class EditorSettingsDialog : public AcceptDialog {
|
||||
|
||||
Timer *timer = nullptr;
|
||||
|
||||
Ref<EditorUndoRedoManager> undo_redo;
|
||||
|
||||
virtual void cancel_pressed() override;
|
||||
virtual void ok_pressed() override;
|
||||
|
||||
|
@ -130,6 +130,7 @@ void GroupDialog::_add_pressed() {
|
||||
return;
|
||||
}
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Add to Group"));
|
||||
|
||||
while (selected) {
|
||||
@ -159,6 +160,7 @@ void GroupDialog::_removed_pressed() {
|
||||
return;
|
||||
}
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Remove from Group"));
|
||||
|
||||
while (selected) {
|
||||
@ -246,6 +248,7 @@ void GroupDialog::_group_renamed() {
|
||||
|
||||
renamed_group->set_text(0, name); // Spaces trimmed.
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Rename Group"));
|
||||
|
||||
List<Node *> nodes;
|
||||
@ -322,6 +325,7 @@ void GroupDialog::_modify_group_pressed(Object *p_item, int p_column, int p_id,
|
||||
case DELETE_GROUP: {
|
||||
String name = ti->get_text(0);
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Delete Group"));
|
||||
|
||||
List<Node *> nodes;
|
||||
@ -402,10 +406,6 @@ void GroupDialog::_notification(int p_what) {
|
||||
}
|
||||
}
|
||||
|
||||
void GroupDialog::set_undo_redo(Ref<EditorUndoRedoManager> p_undo_redo) {
|
||||
undo_redo = p_undo_redo;
|
||||
}
|
||||
|
||||
void GroupDialog::edit() {
|
||||
popup_centered();
|
||||
|
||||
@ -597,6 +597,7 @@ void GroupsEditor::_add_group(const String &p_group) {
|
||||
return;
|
||||
}
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Add to Group"));
|
||||
|
||||
undo_redo->add_do_method(node, "add_to_group", name, true);
|
||||
@ -651,6 +652,7 @@ void GroupsEditor::_group_renamed() {
|
||||
|
||||
ti->set_text(0, name); // Spaces trimmed.
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Rename Group"));
|
||||
|
||||
undo_redo->add_do_method(node, "remove_from_group", selected_group);
|
||||
@ -686,6 +688,7 @@ void GroupsEditor::_modify_group(Object *p_item, int p_column, int p_id, MouseBu
|
||||
switch (p_id) {
|
||||
case DELETE_GROUP: {
|
||||
const String name = ti->get_text(0);
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Remove from Group"));
|
||||
|
||||
undo_redo->add_do_method(node, "remove_from_group", name);
|
||||
@ -764,10 +767,6 @@ void GroupsEditor::update_tree() {
|
||||
}
|
||||
}
|
||||
|
||||
void GroupsEditor::set_undo_redo(Ref<EditorUndoRedoManager> p_undo_redo) {
|
||||
undo_redo = p_undo_redo;
|
||||
}
|
||||
|
||||
void GroupsEditor::set_current(Node *p_node) {
|
||||
node = p_node;
|
||||
update_tree();
|
||||
@ -775,7 +774,6 @@ void GroupsEditor::set_current(Node *p_node) {
|
||||
|
||||
void GroupsEditor::_show_group_dialog() {
|
||||
group_dialog->edit();
|
||||
group_dialog->set_undo_redo(undo_redo);
|
||||
}
|
||||
|
||||
void GroupsEditor::_bind_methods() {
|
||||
|
@ -39,8 +39,6 @@
|
||||
#include "scene/gui/popup.h"
|
||||
#include "scene/gui/tree.h"
|
||||
|
||||
class EditorUndoRedoManager;
|
||||
|
||||
class GroupDialog : public AcceptDialog {
|
||||
GDCLASS(GroupDialog, AcceptDialog);
|
||||
|
||||
@ -69,8 +67,6 @@ class GroupDialog : public AcceptDialog {
|
||||
|
||||
String selected_group;
|
||||
|
||||
Ref<EditorUndoRedoManager> undo_redo;
|
||||
|
||||
void _group_selected();
|
||||
|
||||
void _remove_filter_changed(const String &p_filter);
|
||||
@ -102,7 +98,6 @@ public:
|
||||
};
|
||||
|
||||
void edit();
|
||||
void set_undo_redo(Ref<EditorUndoRedoManager> p_undo_redo);
|
||||
|
||||
GroupDialog();
|
||||
};
|
||||
@ -120,8 +115,6 @@ class GroupsEditor : public VBoxContainer {
|
||||
Button *add = nullptr;
|
||||
Tree *tree = nullptr;
|
||||
|
||||
Ref<EditorUndoRedoManager> undo_redo;
|
||||
|
||||
String selected_group;
|
||||
|
||||
void update_tree();
|
||||
@ -143,7 +136,6 @@ public:
|
||||
COPY_GROUP,
|
||||
};
|
||||
|
||||
void set_undo_redo(Ref<EditorUndoRedoManager> p_undo_redo);
|
||||
void set_current(Node *p_node);
|
||||
|
||||
GroupsEditor();
|
||||
|
@ -34,6 +34,7 @@
|
||||
#include "editor/editor_node.h"
|
||||
#include "editor/editor_scale.h"
|
||||
#include "editor/editor_settings.h"
|
||||
#include "editor/editor_undo_redo_manager.h"
|
||||
#include "editor/plugins/script_editor_plugin.h"
|
||||
|
||||
InspectorDock *InspectorDock::singleton = nullptr;
|
||||
@ -769,7 +770,6 @@ InspectorDock::InspectorDock(EditorData &p_editor_data) {
|
||||
inspector->set_property_name_style(EditorPropertyNameProcessor::get_default_inspector_style());
|
||||
inspector->set_use_folding(!bool(EDITOR_GET("interface/inspector/disable_folding")));
|
||||
inspector->register_text_enter(search);
|
||||
inspector->set_undo_redo(editor_data->get_undo_redo());
|
||||
|
||||
inspector->set_use_filter(true); // TODO: check me
|
||||
|
||||
|
@ -81,6 +81,7 @@ void LocalizationEditor::_translation_add(const PackedStringArray &p_paths) {
|
||||
}
|
||||
}
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(vformat(TTR("Add %d Translations"), p_paths.size()));
|
||||
undo_redo->add_do_property(ProjectSettings::get_singleton(), "internationalization/locale/translations", translations);
|
||||
undo_redo->add_undo_property(ProjectSettings::get_singleton(), "internationalization/locale/translations", GLOBAL_GET("internationalization/locale/translations"));
|
||||
@ -111,6 +112,7 @@ void LocalizationEditor::_translation_delete(Object *p_item, int p_column, int p
|
||||
|
||||
translations.remove_at(idx);
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Remove Translation"));
|
||||
undo_redo->add_do_property(ProjectSettings::get_singleton(), "internationalization/locale/translations", translations);
|
||||
undo_redo->add_undo_property(ProjectSettings::get_singleton(), "internationalization/locale/translations", GLOBAL_GET("internationalization/locale/translations"));
|
||||
@ -141,6 +143,7 @@ void LocalizationEditor::_translation_res_add(const PackedStringArray &p_paths)
|
||||
}
|
||||
}
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(vformat(TTR("Translation Resource Remap: Add %d Path(s)"), p_paths.size()));
|
||||
undo_redo->add_do_property(ProjectSettings::get_singleton(), "internationalization/locale/translation_remaps", remaps);
|
||||
undo_redo->add_undo_property(ProjectSettings::get_singleton(), "internationalization/locale/translation_remaps", prev);
|
||||
@ -172,6 +175,7 @@ void LocalizationEditor::_translation_res_option_add(const PackedStringArray &p_
|
||||
}
|
||||
remaps[key] = r;
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(vformat(TTR("Translation Resource Remap: Add %d Remap(s)"), p_paths.size()));
|
||||
undo_redo->add_do_property(ProjectSettings::get_singleton(), "internationalization/locale/translation_remaps", remaps);
|
||||
undo_redo->add_undo_property(ProjectSettings::get_singleton(), "internationalization/locale/translation_remaps", GLOBAL_GET("internationalization/locale/translation_remaps"));
|
||||
@ -234,6 +238,8 @@ void LocalizationEditor::_translation_res_option_changed() {
|
||||
remaps[key] = r;
|
||||
|
||||
updating_translations = true;
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Change Resource Remap Language"));
|
||||
undo_redo->add_do_property(ProjectSettings::get_singleton(), "internationalization/locale/translation_remaps", remaps);
|
||||
undo_redo->add_undo_property(ProjectSettings::get_singleton(), "internationalization/locale/translation_remaps", GLOBAL_GET("internationalization/locale/translation_remaps"));
|
||||
@ -267,6 +273,7 @@ void LocalizationEditor::_translation_res_delete(Object *p_item, int p_column, i
|
||||
|
||||
remaps.erase(key);
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Remove Resource Remap"));
|
||||
undo_redo->add_do_property(ProjectSettings::get_singleton(), "internationalization/locale/translation_remaps", remaps);
|
||||
undo_redo->add_undo_property(ProjectSettings::get_singleton(), "internationalization/locale/translation_remaps", GLOBAL_GET("internationalization/locale/translation_remaps"));
|
||||
@ -306,6 +313,7 @@ void LocalizationEditor::_translation_res_option_delete(Object *p_item, int p_co
|
||||
r.remove_at(idx);
|
||||
remaps[key] = r;
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Remove Resource Remap Option"));
|
||||
undo_redo->add_do_property(ProjectSettings::get_singleton(), "internationalization/locale/translation_remaps", remaps);
|
||||
undo_redo->add_undo_property(ProjectSettings::get_singleton(), "internationalization/locale/translation_remaps", GLOBAL_GET("internationalization/locale/translation_remaps"));
|
||||
@ -324,6 +332,7 @@ void LocalizationEditor::_pot_add(const PackedStringArray &p_paths) {
|
||||
}
|
||||
}
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(vformat(TTR("Add %d file(s) for POT generation"), p_paths.size()));
|
||||
undo_redo->add_do_property(ProjectSettings::get_singleton(), "internationalization/locale/translations_pot_files", pot_translations);
|
||||
undo_redo->add_undo_property(ProjectSettings::get_singleton(), "internationalization/locale/translations_pot_files", GLOBAL_GET("internationalization/locale/translations_pot_files"));
|
||||
@ -350,6 +359,7 @@ void LocalizationEditor::_pot_delete(Object *p_item, int p_column, int p_button,
|
||||
|
||||
pot_translations.remove_at(idx);
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Remove file from POT generation"));
|
||||
undo_redo->add_do_property(ProjectSettings::get_singleton(), "internationalization/locale/translations_pot_files", pot_translations);
|
||||
undo_redo->add_undo_property(ProjectSettings::get_singleton(), "internationalization/locale/translations_pot_files", GLOBAL_GET("internationalization/locale/translations_pot_files"));
|
||||
@ -592,7 +602,6 @@ void LocalizationEditor::_bind_methods() {
|
||||
}
|
||||
|
||||
LocalizationEditor::LocalizationEditor() {
|
||||
undo_redo = EditorNode::get_undo_redo();
|
||||
localization_changed = "localization_changed";
|
||||
|
||||
TabContainer *translations = memnew(TabContainer);
|
||||
|
@ -31,7 +31,6 @@
|
||||
#ifndef LOCALIZATION_EDITOR_H
|
||||
#define LOCALIZATION_EDITOR_H
|
||||
|
||||
#include "core/object/undo_redo.h"
|
||||
#include "editor/editor_locale_dialog.h"
|
||||
#include "scene/gui/tree.h"
|
||||
|
||||
@ -56,7 +55,6 @@ class LocalizationEditor : public VBoxContainer {
|
||||
EditorFileDialog *pot_file_open_dialog = nullptr;
|
||||
EditorFileDialog *pot_generate_dialog = nullptr;
|
||||
|
||||
Ref<EditorUndoRedoManager> undo_redo;
|
||||
bool updating_translations = false;
|
||||
String localization_changed;
|
||||
|
||||
|
@ -117,13 +117,11 @@ NodeDock::NodeDock() {
|
||||
groups_button->connect("pressed", callable_mp(this, &NodeDock::show_groups));
|
||||
|
||||
connections = memnew(ConnectionsDock);
|
||||
connections->set_undo_redo(EditorNode::get_undo_redo());
|
||||
add_child(connections);
|
||||
connections->set_v_size_flags(SIZE_EXPAND_FILL);
|
||||
connections->hide();
|
||||
|
||||
groups = memnew(GroupsEditor);
|
||||
groups->set_undo_redo(EditorNode::get_undo_redo());
|
||||
add_child(groups);
|
||||
groups->set_v_size_flags(SIZE_EXPAND_FILL);
|
||||
groups->hide();
|
||||
|
@ -91,6 +91,7 @@ void AbstractPolygon2DEditor::_set_polygon(int p_idx, const Variant &p_polygon)
|
||||
|
||||
void AbstractPolygon2DEditor::_action_set_polygon(int p_idx, const Variant &p_previous, const Variant &p_polygon) {
|
||||
Node2D *node = _get_node();
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->add_do_method(node, "set_polygon", p_polygon);
|
||||
undo_redo->add_undo_method(node, "set_polygon", p_previous);
|
||||
}
|
||||
@ -100,6 +101,7 @@ Vector2 AbstractPolygon2DEditor::_get_offset(int p_idx) const {
|
||||
}
|
||||
|
||||
void AbstractPolygon2DEditor::_commit_action() {
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->add_do_method(canvas_item_editor, "update_viewport");
|
||||
undo_redo->add_undo_method(canvas_item_editor, "update_viewport");
|
||||
undo_redo->commit_action();
|
||||
@ -203,6 +205,7 @@ void AbstractPolygon2DEditor::_wip_close() {
|
||||
if (_is_line()) {
|
||||
_set_polygon(0, wip);
|
||||
} else if (wip.size() >= (_is_line() ? 2 : 3)) {
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Create Polygon"));
|
||||
_action_add_polygon(wip);
|
||||
if (_has_uv()) {
|
||||
@ -254,6 +257,7 @@ bool AbstractPolygon2DEditor::forward_gui_input(const Ref<InputEvent> &p_event)
|
||||
return false;
|
||||
}
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
Ref<InputEventMouseButton> mb = p_event;
|
||||
|
||||
if (!_has_resource()) {
|
||||
@ -611,6 +615,7 @@ void AbstractPolygon2DEditor::_bind_methods() {
|
||||
}
|
||||
|
||||
void AbstractPolygon2DEditor::remove_point(const Vertex &p_vertex) {
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
Vector<Vector2> vertices = _get_polygon(p_vertex.polygon);
|
||||
|
||||
if (vertices.size() > (_is_line() ? 2 : 3)) {
|
||||
@ -706,8 +711,6 @@ AbstractPolygon2DEditor::PosVertex AbstractPolygon2DEditor::closest_edge_point(c
|
||||
}
|
||||
|
||||
AbstractPolygon2DEditor::AbstractPolygon2DEditor(bool p_wip_destructive) {
|
||||
undo_redo = EditorNode::get_undo_redo();
|
||||
|
||||
edited_point = PosVertex();
|
||||
wip_destructive = p_wip_destructive;
|
||||
|
||||
|
@ -36,7 +36,6 @@
|
||||
#include "scene/gui/box_container.h"
|
||||
|
||||
class CanvasItemEditor;
|
||||
class EditorUndoRedoManager;
|
||||
|
||||
class AbstractPolygon2DEditor : public HBoxContainer {
|
||||
GDCLASS(AbstractPolygon2DEditor, HBoxContainer);
|
||||
@ -100,8 +99,6 @@ protected:
|
||||
|
||||
int mode = MODE_EDIT;
|
||||
|
||||
Ref<EditorUndoRedoManager> undo_redo;
|
||||
|
||||
virtual void _menu_option(int p_option);
|
||||
void _wip_changed();
|
||||
void _wip_close();
|
||||
|
@ -39,6 +39,7 @@
|
||||
#include "editor/editor_node.h"
|
||||
#include "editor/editor_scale.h"
|
||||
#include "editor/editor_settings.h"
|
||||
#include "editor/editor_undo_redo_manager.h"
|
||||
#include "editor/plugins/canvas_item_editor_plugin.h" // For onion skinning.
|
||||
#include "editor/plugins/node_3d_editor_plugin.h" // For onion skinning.
|
||||
#include "editor/scene_tree_dock.h"
|
||||
@ -167,6 +168,7 @@ void AnimationPlayerEditor::_autoplay_pressed() {
|
||||
return;
|
||||
}
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
String current = animation->get_item_text(animation->get_selected());
|
||||
if (player->get_autoplay() == current) {
|
||||
//unset
|
||||
@ -383,6 +385,7 @@ void AnimationPlayerEditor::_animation_remove_confirmed() {
|
||||
if (current.contains("/")) {
|
||||
current = current.get_slice("/", 1);
|
||||
}
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Remove Animation"));
|
||||
if (player->get_autoplay() == current) {
|
||||
undo_redo->add_do_method(player, "set_autoplay", "");
|
||||
@ -458,6 +461,7 @@ void AnimationPlayerEditor::_animation_name_edited() {
|
||||
return;
|
||||
}
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
switch (name_dialog_op) {
|
||||
case TOOL_RENAME_ANIM: {
|
||||
String current = animation->get_item_text(animation->get_selected());
|
||||
@ -592,6 +596,7 @@ void AnimationPlayerEditor::_blend_editor_next_changed(const int p_idx) {
|
||||
|
||||
String current = animation->get_item_text(animation->get_selected());
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Blend Next Changed"));
|
||||
undo_redo->add_do_method(player, "animation_set_next", current, blend_editor.next->get_item_text(p_idx));
|
||||
undo_redo->add_undo_method(player, "animation_set_next", current, player->animation_get_next(current));
|
||||
@ -678,6 +683,7 @@ void AnimationPlayerEditor::_blend_edited() {
|
||||
float blend_time = selected->get_range(1);
|
||||
float prev_blend_time = player->get_blend_time(current, to);
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Change Blend Time"));
|
||||
undo_redo->add_do_method(player, "set_blend_time", current, to, blend_time);
|
||||
undo_redo->add_undo_method(player, "set_blend_time", current, to, prev_blend_time);
|
||||
@ -984,10 +990,6 @@ void AnimationPlayerEditor::_update_name_dialog_library_dropdown() {
|
||||
}
|
||||
}
|
||||
|
||||
void AnimationPlayerEditor::set_undo_redo(Ref<EditorUndoRedoManager> p_undo_redo) {
|
||||
undo_redo = p_undo_redo;
|
||||
}
|
||||
|
||||
void AnimationPlayerEditor::edit(AnimationPlayer *p_player) {
|
||||
if (player && pin->is_pressed()) {
|
||||
return; // Ignore, pinned.
|
||||
@ -1894,7 +1896,6 @@ void AnimationPlayerEditorPlugin::_update_keying() {
|
||||
}
|
||||
|
||||
void AnimationPlayerEditorPlugin::edit(Object *p_object) {
|
||||
anim_editor->set_undo_redo(get_undo_redo());
|
||||
if (!p_object) {
|
||||
return;
|
||||
}
|
||||
@ -1915,7 +1916,6 @@ void AnimationPlayerEditorPlugin::make_visible(bool p_visible) {
|
||||
|
||||
AnimationPlayerEditorPlugin::AnimationPlayerEditorPlugin() {
|
||||
anim_editor = memnew(AnimationPlayerEditor(this));
|
||||
anim_editor->set_undo_redo(EditorNode::get_undo_redo());
|
||||
EditorNode::get_singleton()->add_bottom_panel_item(TTR("Animation"), anim_editor);
|
||||
}
|
||||
|
||||
|
@ -41,7 +41,6 @@
|
||||
#include "scene/gui/texture_button.h"
|
||||
#include "scene/gui/tree.h"
|
||||
|
||||
class EditorUndoRedoManager;
|
||||
class AnimationPlayerEditorPlugin;
|
||||
|
||||
class AnimationPlayerEditor : public VBoxContainer {
|
||||
@ -101,7 +100,6 @@ class AnimationPlayerEditor : public VBoxContainer {
|
||||
LineEdit *name = nullptr;
|
||||
OptionButton *library = nullptr;
|
||||
Label *name_title = nullptr;
|
||||
Ref<EditorUndoRedoManager> undo_redo;
|
||||
|
||||
Ref<Texture2D> autoplay_icon;
|
||||
Ref<Texture2D> reset_icon;
|
||||
@ -237,7 +235,6 @@ public:
|
||||
|
||||
void ensure_visibility();
|
||||
|
||||
void set_undo_redo(Ref<EditorUndoRedoManager> p_undo_redo);
|
||||
void edit(AnimationPlayer *p_player);
|
||||
void forward_force_draw_over_viewport(Control *p_overlay);
|
||||
|
||||
|
@ -868,6 +868,7 @@ void CanvasItemEditor::_commit_canvas_item_state(List<CanvasItem *> p_canvas_ite
|
||||
return;
|
||||
}
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(action_name);
|
||||
for (CanvasItem *ci : modified_canvas_items) {
|
||||
CanvasItemEditorSelectedItem *se = editor_selection->get_node_editor_data<CanvasItemEditorSelectedItem>(ci);
|
||||
@ -934,6 +935,7 @@ void CanvasItemEditor::_add_node_pressed(int p_result) {
|
||||
return;
|
||||
}
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Move Node(s) to Position"));
|
||||
for (Node *node : nodes_to_move) {
|
||||
CanvasItem *ci = Object::cast_to<CanvasItem>(node);
|
||||
@ -1022,6 +1024,7 @@ void CanvasItemEditor::_on_grid_menu_id_pressed(int p_id) {
|
||||
}
|
||||
|
||||
bool CanvasItemEditor::_gui_input_rulers_and_guides(const Ref<InputEvent> &p_event) {
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
Ref<InputEventMouseButton> b = p_event;
|
||||
Ref<InputEventMouseMotion> m = p_event;
|
||||
|
||||
@ -4000,10 +4003,6 @@ void CanvasItemEditor::_selection_changed() {
|
||||
selected_from_canvas = false;
|
||||
}
|
||||
|
||||
void CanvasItemEditor::set_undo_redo(Ref<EditorUndoRedoManager> p_undo_redo) {
|
||||
undo_redo = p_undo_redo;
|
||||
}
|
||||
|
||||
void CanvasItemEditor::edit(CanvasItem *p_canvas_item) {
|
||||
Array selection = editor_selection->get_selected_nodes();
|
||||
if (selection.size() != 1 || Object::cast_to<Node>(selection[0]) != p_canvas_item) {
|
||||
@ -4278,6 +4277,7 @@ void CanvasItemEditor::_update_override_camera_button(bool p_game_running) {
|
||||
}
|
||||
|
||||
void CanvasItemEditor::_popup_callback(int p_op) {
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
last_option = MenuOption(p_op);
|
||||
switch (p_op) {
|
||||
case SHOW_ORIGIN: {
|
||||
@ -4983,7 +4983,6 @@ CanvasItemEditor::CanvasItemEditor() {
|
||||
snap_target[0] = SNAP_TARGET_NONE;
|
||||
snap_target[1] = SNAP_TARGET_NONE;
|
||||
|
||||
undo_redo = EditorNode::get_singleton()->get_undo_redo();
|
||||
editor_selection = EditorNode::get_singleton()->get_editor_selection();
|
||||
editor_selection->add_editor_plugin(this);
|
||||
editor_selection->connect("selection_changed", callable_mp((CanvasItem *)this, &CanvasItem::queue_redraw));
|
||||
@ -5434,7 +5433,6 @@ CanvasItemEditor::CanvasItemEditor() {
|
||||
CanvasItemEditor *CanvasItemEditor::singleton = nullptr;
|
||||
|
||||
void CanvasItemEditorPlugin::edit(Object *p_object) {
|
||||
canvas_item_editor->set_undo_redo(EditorNode::get_undo_redo());
|
||||
canvas_item_editor->edit(Object::cast_to<CanvasItem>(p_object));
|
||||
}
|
||||
|
||||
@ -5581,37 +5579,38 @@ void CanvasItemEditorViewport::_create_nodes(Node *parent, Node *child, String &
|
||||
String name = path.get_file().get_basename();
|
||||
child->set_name(Node::adjust_name_casing(name));
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
Ref<Texture2D> texture = ResourceCache::get_ref(path);
|
||||
|
||||
if (parent) {
|
||||
editor_data->get_undo_redo()->add_do_method(parent, "add_child", child, true);
|
||||
editor_data->get_undo_redo()->add_do_method(child, "set_owner", EditorNode::get_singleton()->get_edited_scene());
|
||||
editor_data->get_undo_redo()->add_do_reference(child);
|
||||
editor_data->get_undo_redo()->add_undo_method(parent, "remove_child", child);
|
||||
undo_redo->add_do_method(parent, "add_child", child, true);
|
||||
undo_redo->add_do_method(child, "set_owner", EditorNode::get_singleton()->get_edited_scene());
|
||||
undo_redo->add_do_reference(child);
|
||||
undo_redo->add_undo_method(parent, "remove_child", child);
|
||||
} else { // If no parent is selected, set as root node of the scene.
|
||||
editor_data->get_undo_redo()->add_do_method(EditorNode::get_singleton(), "set_edited_scene", child);
|
||||
editor_data->get_undo_redo()->add_do_method(child, "set_owner", EditorNode::get_singleton()->get_edited_scene());
|
||||
editor_data->get_undo_redo()->add_do_reference(child);
|
||||
editor_data->get_undo_redo()->add_undo_method(EditorNode::get_singleton(), "set_edited_scene", (Object *)nullptr);
|
||||
undo_redo->add_do_method(EditorNode::get_singleton(), "set_edited_scene", child);
|
||||
undo_redo->add_do_method(child, "set_owner", EditorNode::get_singleton()->get_edited_scene());
|
||||
undo_redo->add_do_reference(child);
|
||||
undo_redo->add_undo_method(EditorNode::get_singleton(), "set_edited_scene", (Object *)nullptr);
|
||||
}
|
||||
|
||||
if (parent) {
|
||||
String new_name = parent->validate_child_name(child);
|
||||
EditorDebuggerNode *ed = EditorDebuggerNode::get_singleton();
|
||||
editor_data->get_undo_redo()->add_do_method(ed, "live_debug_create_node", EditorNode::get_singleton()->get_edited_scene()->get_path_to(parent), child->get_class(), new_name);
|
||||
editor_data->get_undo_redo()->add_undo_method(ed, "live_debug_remove_node", NodePath(String(EditorNode::get_singleton()->get_edited_scene()->get_path_to(parent)) + "/" + new_name));
|
||||
undo_redo->add_do_method(ed, "live_debug_create_node", EditorNode::get_singleton()->get_edited_scene()->get_path_to(parent), child->get_class(), new_name);
|
||||
undo_redo->add_undo_method(ed, "live_debug_remove_node", NodePath(String(EditorNode::get_singleton()->get_edited_scene()->get_path_to(parent)) + "/" + new_name));
|
||||
}
|
||||
|
||||
if (Object::cast_to<TouchScreenButton>(child) || Object::cast_to<TextureButton>(child)) {
|
||||
editor_data->get_undo_redo()->add_do_property(child, "texture_normal", texture);
|
||||
undo_redo->add_do_property(child, "texture_normal", texture);
|
||||
} else {
|
||||
editor_data->get_undo_redo()->add_do_property(child, "texture", texture);
|
||||
undo_redo->add_do_property(child, "texture", texture);
|
||||
}
|
||||
|
||||
// make visible for certain node type
|
||||
if (Object::cast_to<Control>(child)) {
|
||||
Size2 texture_size = texture->get_size();
|
||||
editor_data->get_undo_redo()->add_do_property(child, "rect_size", texture_size);
|
||||
undo_redo->add_do_property(child, "rect_size", texture_size);
|
||||
} else if (Object::cast_to<Polygon2D>(child)) {
|
||||
Size2 texture_size = texture->get_size();
|
||||
Vector<Vector2> list = {
|
||||
@ -5620,7 +5619,7 @@ void CanvasItemEditorViewport::_create_nodes(Node *parent, Node *child, String &
|
||||
Vector2(texture_size.width, texture_size.height),
|
||||
Vector2(0, texture_size.height)
|
||||
};
|
||||
editor_data->get_undo_redo()->add_do_property(child, "polygon", list);
|
||||
undo_redo->add_do_property(child, "polygon", list);
|
||||
}
|
||||
|
||||
// Compute the global position
|
||||
@ -5629,7 +5628,7 @@ void CanvasItemEditorViewport::_create_nodes(Node *parent, Node *child, String &
|
||||
|
||||
// there's nothing to be used as source position so snapping will work as absolute if enabled
|
||||
target_position = canvas_item_editor->snap_point(target_position);
|
||||
editor_data->get_undo_redo()->add_do_method(child, "set_global_position", target_position);
|
||||
undo_redo->add_do_method(child, "set_global_position", target_position);
|
||||
}
|
||||
|
||||
bool CanvasItemEditorViewport::_create_instance(Node *parent, String &path, const Point2 &p_point) {
|
||||
@ -5654,15 +5653,16 @@ bool CanvasItemEditorViewport::_create_instance(Node *parent, String &path, cons
|
||||
|
||||
instantiated_scene->set_scene_file_path(ProjectSettings::get_singleton()->localize_path(path));
|
||||
|
||||
editor_data->get_undo_redo()->add_do_method(parent, "add_child", instantiated_scene, true);
|
||||
editor_data->get_undo_redo()->add_do_method(instantiated_scene, "set_owner", edited_scene);
|
||||
editor_data->get_undo_redo()->add_do_reference(instantiated_scene);
|
||||
editor_data->get_undo_redo()->add_undo_method(parent, "remove_child", instantiated_scene);
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->add_do_method(parent, "add_child", instantiated_scene, true);
|
||||
undo_redo->add_do_method(instantiated_scene, "set_owner", edited_scene);
|
||||
undo_redo->add_do_reference(instantiated_scene);
|
||||
undo_redo->add_undo_method(parent, "remove_child", instantiated_scene);
|
||||
|
||||
String new_name = parent->validate_child_name(instantiated_scene);
|
||||
EditorDebuggerNode *ed = EditorDebuggerNode::get_singleton();
|
||||
editor_data->get_undo_redo()->add_do_method(ed, "live_debug_instance_node", edited_scene->get_path_to(parent), path, new_name);
|
||||
editor_data->get_undo_redo()->add_undo_method(ed, "live_debug_remove_node", NodePath(String(edited_scene->get_path_to(parent)) + "/" + new_name));
|
||||
undo_redo->add_do_method(ed, "live_debug_instance_node", edited_scene->get_path_to(parent), path, new_name);
|
||||
undo_redo->add_undo_method(ed, "live_debug_remove_node", NodePath(String(edited_scene->get_path_to(parent)) + "/" + new_name));
|
||||
|
||||
CanvasItem *instance_ci = Object::cast_to<CanvasItem>(instantiated_scene);
|
||||
if (instance_ci) {
|
||||
@ -5676,7 +5676,7 @@ bool CanvasItemEditorViewport::_create_instance(Node *parent, String &path, cons
|
||||
// Preserve instance position of the original scene.
|
||||
target_pos += instance_ci->_edit_get_position();
|
||||
|
||||
editor_data->get_undo_redo()->add_do_method(instantiated_scene, "set_position", target_pos);
|
||||
undo_redo->add_do_method(instantiated_scene, "set_position", target_pos);
|
||||
}
|
||||
|
||||
return true;
|
||||
@ -5694,7 +5694,8 @@ void CanvasItemEditorViewport::_perform_drop_data() {
|
||||
|
||||
Vector<String> error_files;
|
||||
|
||||
editor_data->get_undo_redo()->create_action(TTR("Create Node"));
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Create Node"));
|
||||
|
||||
for (int i = 0; i < selected_files.size(); i++) {
|
||||
String path = selected_files[i];
|
||||
@ -5725,7 +5726,7 @@ void CanvasItemEditorViewport::_perform_drop_data() {
|
||||
}
|
||||
}
|
||||
|
||||
editor_data->get_undo_redo()->commit_action();
|
||||
undo_redo->commit_action();
|
||||
|
||||
if (error_files.size() > 0) {
|
||||
String files_str;
|
||||
@ -5918,7 +5919,6 @@ CanvasItemEditorViewport::CanvasItemEditorViewport(CanvasItemEditor *p_canvas_it
|
||||
texture_node_types.push_back("NinePatchRect");
|
||||
|
||||
target_node = nullptr;
|
||||
editor_data = SceneTreeDock::get_singleton()->get_editor_data();
|
||||
canvas_item_editor = p_canvas_item_editor;
|
||||
preview_node = memnew(Control);
|
||||
|
||||
|
@ -45,7 +45,6 @@
|
||||
class EditorData;
|
||||
class CanvasItemEditorViewport;
|
||||
class ViewPanner;
|
||||
class EditorUndoRedoManager;
|
||||
|
||||
class CanvasItemEditorSelectedItem : public Object {
|
||||
GDCLASS(CanvasItemEditorSelectedItem, Object);
|
||||
@ -401,8 +400,6 @@ private:
|
||||
void _prepare_grid_menu();
|
||||
void _on_grid_menu_id_pressed(int p_id);
|
||||
|
||||
Ref<EditorUndoRedoManager> undo_redo;
|
||||
|
||||
List<CanvasItem *> _get_edited_canvas_items(bool retrieve_locked = false, bool remove_canvas_item_if_parent_in_selection = true);
|
||||
Rect2 _get_encompassing_rect_from_list(List<CanvasItem *> p_list);
|
||||
void _expand_encompassing_rect_using_children(Rect2 &r_rect, const Node *p_node, bool &r_first, const Transform2D &p_parent_xform = Transform2D(), const Transform2D &p_canvas_xform = Transform2D(), bool include_locked_nodes = true);
|
||||
@ -548,7 +545,6 @@ public:
|
||||
Tool get_current_tool() { return tool; }
|
||||
void set_current_tool(Tool p_tool);
|
||||
|
||||
void set_undo_redo(Ref<EditorUndoRedoManager> p_undo_redo);
|
||||
void edit(CanvasItem *p_canvas_item);
|
||||
|
||||
void focus_selection();
|
||||
@ -593,7 +589,6 @@ class CanvasItemEditorViewport : public Control {
|
||||
Node *target_node = nullptr;
|
||||
Point2 drop_pos;
|
||||
|
||||
EditorData *editor_data = nullptr;
|
||||
CanvasItemEditor *canvas_item_editor = nullptr;
|
||||
Control *preview_node = nullptr;
|
||||
AcceptDialog *accept = nullptr;
|
||||
|
@ -37,6 +37,7 @@
|
||||
#include "editor/editor_node.h"
|
||||
#include "editor/editor_scale.h"
|
||||
#include "editor/editor_settings.h"
|
||||
#include "editor/editor_undo_redo_manager.h"
|
||||
|
||||
CurveEditor::CurveEditor() {
|
||||
_selected_point = -1;
|
||||
@ -139,14 +140,13 @@ void CurveEditor::gui_input(const Ref<InputEvent> &p_event) {
|
||||
if (!mb.is_pressed() && _dragging && mb.get_button_index() == MouseButton::LEFT) {
|
||||
_dragging = false;
|
||||
if (_has_undo_data) {
|
||||
Ref<EditorUndoRedoManager> &ur = EditorNode::get_undo_redo();
|
||||
|
||||
ur->create_action(_selected_tangent == TANGENT_NONE ? TTR("Modify Curve Point") : TTR("Modify Curve Tangent"));
|
||||
ur->add_do_method(*_curve_ref, "_set_data", _curve_ref->get_data());
|
||||
ur->add_undo_method(*_curve_ref, "_set_data", _undo_data);
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(_selected_tangent == TANGENT_NONE ? TTR("Modify Curve Point") : TTR("Modify Curve Tangent"));
|
||||
undo_redo->add_do_method(*_curve_ref, "_set_data", _curve_ref->get_data());
|
||||
undo_redo->add_undo_method(*_curve_ref, "_set_data", _undo_data);
|
||||
// Note: this will trigger one more "changed" signal even if nothing changes,
|
||||
// but it's ok since it would have fired every frame during the drag anyways
|
||||
ur->commit_action();
|
||||
undo_redo->commit_action();
|
||||
|
||||
_has_undo_data = false;
|
||||
}
|
||||
@ -301,13 +301,11 @@ void CurveEditor::on_preset_item_selected(int preset_id) {
|
||||
break;
|
||||
}
|
||||
|
||||
Ref<EditorUndoRedoManager> &ur = EditorNode::get_undo_redo();
|
||||
ur->create_action(TTR("Load Curve Preset"));
|
||||
|
||||
ur->add_do_method(&curve, "_set_data", curve.get_data());
|
||||
ur->add_undo_method(&curve, "_set_data", previous_data);
|
||||
|
||||
ur->commit_action();
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Load Curve Preset"));
|
||||
undo_redo->add_do_method(&curve, "_set_data", curve.get_data());
|
||||
undo_redo->add_undo_method(&curve, "_set_data", previous_data);
|
||||
undo_redo->commit_action();
|
||||
}
|
||||
|
||||
void CurveEditor::_curve_changed() {
|
||||
@ -435,8 +433,8 @@ CurveEditor::TangentIndex CurveEditor::get_tangent_at(Vector2 pos) const {
|
||||
void CurveEditor::add_point(Vector2 pos) {
|
||||
ERR_FAIL_COND(_curve_ref.is_null());
|
||||
|
||||
Ref<EditorUndoRedoManager> &ur = EditorNode::get_undo_redo();
|
||||
ur->create_action(TTR("Remove Curve Point"));
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Remove Curve Point"));
|
||||
|
||||
Vector2 point_pos = get_world_pos(pos);
|
||||
if (point_pos.y < 0.0) {
|
||||
@ -449,22 +447,21 @@ void CurveEditor::add_point(Vector2 pos) {
|
||||
int i = _curve_ref->add_point(point_pos);
|
||||
_curve_ref->remove_point(i);
|
||||
|
||||
ur->add_do_method(*_curve_ref, "add_point", point_pos);
|
||||
ur->add_undo_method(*_curve_ref, "remove_point", i);
|
||||
|
||||
ur->commit_action();
|
||||
undo_redo->add_do_method(*_curve_ref, "add_point", point_pos);
|
||||
undo_redo->add_undo_method(*_curve_ref, "remove_point", i);
|
||||
undo_redo->commit_action();
|
||||
}
|
||||
|
||||
void CurveEditor::remove_point(int index) {
|
||||
ERR_FAIL_COND(_curve_ref.is_null());
|
||||
|
||||
Ref<EditorUndoRedoManager> &ur = EditorNode::get_undo_redo();
|
||||
ur->create_action(TTR("Remove Curve Point"));
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Remove Curve Point"));
|
||||
|
||||
Curve::Point p = _curve_ref->get_point(index);
|
||||
|
||||
ur->add_do_method(*_curve_ref, "remove_point", index);
|
||||
ur->add_undo_method(*_curve_ref, "add_point", p.position, p.left_tangent, p.right_tangent, p.left_mode, p.right_mode);
|
||||
undo_redo->add_do_method(*_curve_ref, "remove_point", index);
|
||||
undo_redo->add_undo_method(*_curve_ref, "add_point", p.position, p.left_tangent, p.right_tangent, p.left_mode, p.right_mode);
|
||||
|
||||
if (index == _selected_point) {
|
||||
set_selected_point(-1);
|
||||
@ -474,14 +471,14 @@ void CurveEditor::remove_point(int index) {
|
||||
set_hover_point_index(-1);
|
||||
}
|
||||
|
||||
ur->commit_action();
|
||||
undo_redo->commit_action();
|
||||
}
|
||||
|
||||
void CurveEditor::toggle_linear(TangentIndex tangent) {
|
||||
ERR_FAIL_COND(_curve_ref.is_null());
|
||||
|
||||
Ref<EditorUndoRedoManager> &ur = EditorNode::get_undo_redo();
|
||||
ur->create_action(TTR("Toggle Curve Linear Tangent"));
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Toggle Curve Linear Tangent"));
|
||||
|
||||
if (tangent == TANGENT_NONE) {
|
||||
tangent = _selected_tangent;
|
||||
@ -493,8 +490,8 @@ void CurveEditor::toggle_linear(TangentIndex tangent) {
|
||||
Curve::TangentMode prev_mode = _curve_ref->get_point_left_mode(_selected_point);
|
||||
Curve::TangentMode mode = is_linear ? Curve::TANGENT_FREE : Curve::TANGENT_LINEAR;
|
||||
|
||||
ur->add_do_method(*_curve_ref, "set_point_left_mode", _selected_point, mode);
|
||||
ur->add_undo_method(*_curve_ref, "set_point_left_mode", _selected_point, prev_mode);
|
||||
undo_redo->add_do_method(*_curve_ref, "set_point_left_mode", _selected_point, mode);
|
||||
undo_redo->add_undo_method(*_curve_ref, "set_point_left_mode", _selected_point, prev_mode);
|
||||
|
||||
} else {
|
||||
bool is_linear = _curve_ref->get_point_right_mode(_selected_point) == Curve::TANGENT_LINEAR;
|
||||
@ -502,11 +499,11 @@ void CurveEditor::toggle_linear(TangentIndex tangent) {
|
||||
Curve::TangentMode prev_mode = _curve_ref->get_point_right_mode(_selected_point);
|
||||
Curve::TangentMode mode = is_linear ? Curve::TANGENT_FREE : Curve::TANGENT_LINEAR;
|
||||
|
||||
ur->add_do_method(*_curve_ref, "set_point_right_mode", _selected_point, mode);
|
||||
ur->add_undo_method(*_curve_ref, "set_point_right_mode", _selected_point, prev_mode);
|
||||
undo_redo->add_do_method(*_curve_ref, "set_point_right_mode", _selected_point, mode);
|
||||
undo_redo->add_undo_method(*_curve_ref, "set_point_right_mode", _selected_point, prev_mode);
|
||||
}
|
||||
|
||||
ur->commit_action();
|
||||
undo_redo->commit_action();
|
||||
}
|
||||
|
||||
void CurveEditor::set_selected_point(int index) {
|
||||
|
@ -99,7 +99,7 @@ void GradientEditor::_gradient_changed() {
|
||||
|
||||
void GradientEditor::_ramp_changed() {
|
||||
editing = true;
|
||||
Ref<EditorUndoRedoManager> undo_redo = EditorNode::get_undo_redo();
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Gradient Edited"), UndoRedo::MERGE_ENDS);
|
||||
undo_redo->add_do_method(gradient.ptr(), "set_offsets", get_offsets());
|
||||
undo_redo->add_do_method(gradient.ptr(), "set_colors", get_colors());
|
||||
|
@ -30,6 +30,9 @@
|
||||
|
||||
#include "light_occluder_2d_editor_plugin.h"
|
||||
|
||||
#include "editor/editor_node.h"
|
||||
#include "editor/editor_undo_redo_manager.h"
|
||||
|
||||
Ref<OccluderPolygon2D> LightOccluder2DEditor::_ensure_occluder() const {
|
||||
Ref<OccluderPolygon2D> occluder = node->get_occluder_polygon();
|
||||
if (!occluder.is_valid()) {
|
||||
@ -81,6 +84,7 @@ void LightOccluder2DEditor::_set_polygon(int p_idx, const Variant &p_polygon) co
|
||||
|
||||
void LightOccluder2DEditor::_action_set_polygon(int p_idx, const Variant &p_previous, const Variant &p_polygon) {
|
||||
Ref<OccluderPolygon2D> occluder = _ensure_occluder();
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->add_do_method(occluder.ptr(), "set_polygon", p_polygon);
|
||||
undo_redo->add_undo_method(occluder.ptr(), "set_polygon", p_previous);
|
||||
}
|
||||
@ -94,6 +98,7 @@ void LightOccluder2DEditor::_create_resource() {
|
||||
return;
|
||||
}
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Create Occluder Polygon"));
|
||||
undo_redo->add_do_method(node, "set_occluder_polygon", Ref<OccluderPolygon2D>(memnew(OccluderPolygon2D)));
|
||||
undo_redo->add_undo_method(node, "set_occluder_polygon", Variant(Ref<RefCounted>()));
|
||||
|
@ -30,6 +30,9 @@
|
||||
|
||||
#include "line_2d_editor_plugin.h"
|
||||
|
||||
#include "editor/editor_node.h"
|
||||
#include "editor/editor_undo_redo_manager.h"
|
||||
|
||||
Node2D *Line2DEditor::_get_node() const {
|
||||
return node;
|
||||
}
|
||||
@ -52,6 +55,7 @@ void Line2DEditor::_set_polygon(int p_idx, const Variant &p_polygon) const {
|
||||
|
||||
void Line2DEditor::_action_set_polygon(int p_idx, const Variant &p_previous, const Variant &p_polygon) {
|
||||
Node2D *_node = _get_node();
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->add_do_method(_node, "set_points", p_polygon);
|
||||
undo_redo->add_undo_method(_node, "set_points", p_previous);
|
||||
}
|
||||
|
@ -30,6 +30,9 @@
|
||||
|
||||
#include "navigation_polygon_editor_plugin.h"
|
||||
|
||||
#include "editor/editor_node.h"
|
||||
#include "editor/editor_undo_redo_manager.h"
|
||||
|
||||
Ref<NavigationPolygon> NavigationPolygonEditor::_ensure_navpoly() const {
|
||||
Ref<NavigationPolygon> navpoly = node->get_navigation_polygon();
|
||||
if (!navpoly.is_valid()) {
|
||||
@ -73,6 +76,7 @@ void NavigationPolygonEditor::_set_polygon(int p_idx, const Variant &p_polygon)
|
||||
|
||||
void NavigationPolygonEditor::_action_add_polygon(const Variant &p_polygon) {
|
||||
Ref<NavigationPolygon> navpoly = _ensure_navpoly();
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->add_do_method(navpoly.ptr(), "add_outline", p_polygon);
|
||||
undo_redo->add_undo_method(navpoly.ptr(), "remove_outline", navpoly->get_outline_count());
|
||||
undo_redo->add_do_method(navpoly.ptr(), "make_polygons_from_outlines");
|
||||
@ -81,6 +85,7 @@ void NavigationPolygonEditor::_action_add_polygon(const Variant &p_polygon) {
|
||||
|
||||
void NavigationPolygonEditor::_action_remove_polygon(int p_idx) {
|
||||
Ref<NavigationPolygon> navpoly = _ensure_navpoly();
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->add_do_method(navpoly.ptr(), "remove_outline", p_idx);
|
||||
undo_redo->add_undo_method(navpoly.ptr(), "add_outline_at_index", navpoly->get_outline(p_idx), p_idx);
|
||||
undo_redo->add_do_method(navpoly.ptr(), "make_polygons_from_outlines");
|
||||
@ -89,6 +94,7 @@ void NavigationPolygonEditor::_action_remove_polygon(int p_idx) {
|
||||
|
||||
void NavigationPolygonEditor::_action_set_polygon(int p_idx, const Variant &p_previous, const Variant &p_polygon) {
|
||||
Ref<NavigationPolygon> navpoly = _ensure_navpoly();
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->add_do_method(navpoly.ptr(), "set_outline", p_idx, p_polygon);
|
||||
undo_redo->add_undo_method(navpoly.ptr(), "set_outline", p_idx, p_previous);
|
||||
undo_redo->add_do_method(navpoly.ptr(), "make_polygons_from_outlines");
|
||||
@ -104,6 +110,7 @@ void NavigationPolygonEditor::_create_resource() {
|
||||
return;
|
||||
}
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Create Navigation Polygon"));
|
||||
undo_redo->add_do_method(node, "set_navigation_polygon", Ref<NavigationPolygon>(memnew(NavigationPolygon)));
|
||||
undo_redo->add_undo_method(node, "set_navigation_polygon", Variant(Ref<RefCounted>()));
|
||||
|
@ -40,6 +40,7 @@
|
||||
#include "editor/debugger/editor_debugger_node.h"
|
||||
#include "editor/editor_node.h"
|
||||
#include "editor/editor_settings.h"
|
||||
#include "editor/editor_undo_redo_manager.h"
|
||||
#include "editor/plugins/animation_player_editor_plugin.h"
|
||||
#include "editor/plugins/node_3d_editor_gizmos.h"
|
||||
#include "editor/plugins/script_editor_plugin.h"
|
||||
@ -2898,6 +2899,7 @@ void Node3DEditorViewport::_draw() {
|
||||
}
|
||||
|
||||
void Node3DEditorViewport::_menu_option(int p_option) {
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
switch (p_option) {
|
||||
case VIEW_TOP: {
|
||||
cursor.y_rot = 0;
|
||||
@ -4048,15 +4050,16 @@ bool Node3DEditorViewport::_create_instance(Node *parent, String &path, const Po
|
||||
instantiated_scene->set_scene_file_path(ProjectSettings::get_singleton()->localize_path(path));
|
||||
}
|
||||
|
||||
editor_data->get_undo_redo()->add_do_method(parent, "add_child", instantiated_scene, true);
|
||||
editor_data->get_undo_redo()->add_do_method(instantiated_scene, "set_owner", EditorNode::get_singleton()->get_edited_scene());
|
||||
editor_data->get_undo_redo()->add_do_reference(instantiated_scene);
|
||||
editor_data->get_undo_redo()->add_undo_method(parent, "remove_child", instantiated_scene);
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->add_do_method(parent, "add_child", instantiated_scene, true);
|
||||
undo_redo->add_do_method(instantiated_scene, "set_owner", EditorNode::get_singleton()->get_edited_scene());
|
||||
undo_redo->add_do_reference(instantiated_scene);
|
||||
undo_redo->add_undo_method(parent, "remove_child", instantiated_scene);
|
||||
|
||||
String new_name = parent->validate_child_name(instantiated_scene);
|
||||
EditorDebuggerNode *ed = EditorDebuggerNode::get_singleton();
|
||||
editor_data->get_undo_redo()->add_do_method(ed, "live_debug_instance_node", EditorNode::get_singleton()->get_edited_scene()->get_path_to(parent), path, new_name);
|
||||
editor_data->get_undo_redo()->add_undo_method(ed, "live_debug_remove_node", NodePath(String(EditorNode::get_singleton()->get_edited_scene()->get_path_to(parent)) + "/" + new_name));
|
||||
undo_redo->add_do_method(ed, "live_debug_instance_node", EditorNode::get_singleton()->get_edited_scene()->get_path_to(parent), path, new_name);
|
||||
undo_redo->add_undo_method(ed, "live_debug_remove_node", NodePath(String(EditorNode::get_singleton()->get_edited_scene()->get_path_to(parent)) + "/" + new_name));
|
||||
|
||||
Node3D *node3d = Object::cast_to<Node3D>(instantiated_scene);
|
||||
if (node3d) {
|
||||
@ -4069,26 +4072,27 @@ bool Node3DEditorViewport::_create_instance(Node *parent, String &path, const Po
|
||||
gl_transform.origin = preview_node_pos;
|
||||
gl_transform.basis *= node3d->get_transform().basis;
|
||||
|
||||
editor_data->get_undo_redo()->add_do_method(instantiated_scene, "set_global_transform", gl_transform);
|
||||
undo_redo->add_do_method(instantiated_scene, "set_global_transform", gl_transform);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void Node3DEditorViewport::_perform_drop_data() {
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
if (spatial_editor->get_preview_material_target().is_valid()) {
|
||||
GeometryInstance3D *geometry_instance = Object::cast_to<GeometryInstance3D>(ObjectDB::get_instance(spatial_editor->get_preview_material_target()));
|
||||
MeshInstance3D *mesh_instance = Object::cast_to<MeshInstance3D>(ObjectDB::get_instance(spatial_editor->get_preview_material_target()));
|
||||
if (mesh_instance && spatial_editor->get_preview_material_surface() != -1) {
|
||||
editor_data->get_undo_redo()->create_action(vformat(TTR("Set Surface %d Override Material"), spatial_editor->get_preview_material_surface()));
|
||||
editor_data->get_undo_redo()->add_do_method(geometry_instance, "set_surface_override_material", spatial_editor->get_preview_material_surface(), spatial_editor->get_preview_material());
|
||||
editor_data->get_undo_redo()->add_undo_method(geometry_instance, "set_surface_override_material", spatial_editor->get_preview_material_surface(), spatial_editor->get_preview_reset_material());
|
||||
editor_data->get_undo_redo()->commit_action();
|
||||
undo_redo->create_action(vformat(TTR("Set Surface %d Override Material"), spatial_editor->get_preview_material_surface()));
|
||||
undo_redo->add_do_method(geometry_instance, "set_surface_override_material", spatial_editor->get_preview_material_surface(), spatial_editor->get_preview_material());
|
||||
undo_redo->add_undo_method(geometry_instance, "set_surface_override_material", spatial_editor->get_preview_material_surface(), spatial_editor->get_preview_reset_material());
|
||||
undo_redo->commit_action();
|
||||
} else if (geometry_instance) {
|
||||
editor_data->get_undo_redo()->create_action(TTR("Set Material Override"));
|
||||
editor_data->get_undo_redo()->add_do_method(geometry_instance, "set_material_override", spatial_editor->get_preview_material());
|
||||
editor_data->get_undo_redo()->add_undo_method(geometry_instance, "set_material_override", spatial_editor->get_preview_reset_material());
|
||||
editor_data->get_undo_redo()->commit_action();
|
||||
undo_redo->create_action(TTR("Set Material Override"));
|
||||
undo_redo->add_do_method(geometry_instance, "set_material_override", spatial_editor->get_preview_material());
|
||||
undo_redo->add_undo_method(geometry_instance, "set_material_override", spatial_editor->get_preview_reset_material());
|
||||
undo_redo->commit_action();
|
||||
}
|
||||
|
||||
_remove_preview_material();
|
||||
@ -4099,7 +4103,7 @@ void Node3DEditorViewport::_perform_drop_data() {
|
||||
|
||||
Vector<String> error_files;
|
||||
|
||||
editor_data->get_undo_redo()->create_action(TTR("Create Node"));
|
||||
undo_redo->create_action(TTR("Create Node"));
|
||||
|
||||
for (int i = 0; i < selected_files.size(); i++) {
|
||||
String path = selected_files[i];
|
||||
@ -4117,7 +4121,7 @@ void Node3DEditorViewport::_perform_drop_data() {
|
||||
}
|
||||
}
|
||||
|
||||
editor_data->get_undo_redo()->commit_action();
|
||||
undo_redo->commit_action();
|
||||
|
||||
if (error_files.size() > 0) {
|
||||
String files_str;
|
||||
@ -4285,6 +4289,7 @@ void Node3DEditorViewport::commit_transform() {
|
||||
TTRC("Translate"),
|
||||
TTRC("Scale"),
|
||||
};
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(_transform_name[_edit.mode]);
|
||||
|
||||
List<Node *> &selection = editor_selection->get_selected_node_list();
|
||||
@ -4690,9 +4695,7 @@ Node3DEditorViewport::Node3DEditorViewport(Node3DEditor *p_spatial_editor, int p
|
||||
_edit.gizmo_handle_secondary = false;
|
||||
|
||||
index = p_index;
|
||||
editor_data = SceneTreeDock::get_singleton()->get_editor_data();
|
||||
editor_selection = EditorNode::get_singleton()->get_editor_selection();
|
||||
undo_redo = EditorNode::get_singleton()->get_undo_redo();
|
||||
|
||||
orthogonal = false;
|
||||
auto_orthogonal = false;
|
||||
@ -5776,6 +5779,7 @@ void Node3DEditor::_xform_dialog_action() {
|
||||
t.basis.rotate(rotate);
|
||||
t.origin = translate;
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("XForm Dialog"));
|
||||
|
||||
const List<Node *> &selection = editor_selection->get_selected_node_list();
|
||||
@ -5887,6 +5891,7 @@ void Node3DEditor::_update_camera_override_viewport(Object *p_viewport) {
|
||||
}
|
||||
|
||||
void Node3DEditor::_menu_item_pressed(int p_option) {
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
switch (p_option) {
|
||||
case MENU_TOOL_SELECT:
|
||||
case MENU_TOOL_MOVE:
|
||||
@ -7072,6 +7077,7 @@ void Node3DEditor::_snap_selected_nodes_to_floor() {
|
||||
}
|
||||
|
||||
if (snapped_to_floor) {
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Snap Nodes to Floor"));
|
||||
|
||||
// Perform snapping if at least one node can be snapped
|
||||
@ -7141,6 +7147,7 @@ void Node3DEditor::_add_sun_to_scene(bool p_already_added_environment) {
|
||||
ERR_FAIL_COND(!base);
|
||||
Node *new_sun = preview_sun->duplicate();
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Add Preview Sun to Scene"));
|
||||
undo_redo->add_do_method(base, "add_child", new_sun, true);
|
||||
// Move to the beginning of the scene tree since more "global" nodes
|
||||
@ -7174,6 +7181,7 @@ void Node3DEditor::_add_environment_to_scene(bool p_already_added_sun) {
|
||||
new_env->set_camera_attributes(preview_environment->get_camera_attributes()->duplicate(true));
|
||||
}
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Add Preview Environment to Scene"));
|
||||
undo_redo->add_do_method(base, "add_child", new_env, true);
|
||||
// Move to the beginning of the scene tree since more "global" nodes
|
||||
@ -7313,14 +7321,6 @@ Vector<int> Node3DEditor::get_subgizmo_selection() {
|
||||
return ret;
|
||||
}
|
||||
|
||||
void Node3DEditor::set_undo_redo(Ref<EditorUndoRedoManager> p_undo_redo) {
|
||||
undo_redo = p_undo_redo;
|
||||
}
|
||||
|
||||
Ref<EditorUndoRedoManager> Node3DEditor::get_undo_redo() {
|
||||
return undo_redo;
|
||||
}
|
||||
|
||||
void Node3DEditor::add_control_to_menu_panel(Control *p_control) {
|
||||
context_menu_hbox->add_child(p_control);
|
||||
}
|
||||
@ -7771,7 +7771,6 @@ Node3DEditor::Node3DEditor() {
|
||||
gizmo.scale = 1.0;
|
||||
|
||||
viewport_environment = Ref<Environment>(memnew(Environment));
|
||||
undo_redo = EditorNode::get_singleton()->get_undo_redo();
|
||||
VBoxContainer *vbc = this;
|
||||
|
||||
custom_camera = nullptr;
|
||||
|
@ -53,7 +53,6 @@ class Node3DEditorViewport;
|
||||
class SubViewportContainer;
|
||||
class DirectionalLight3D;
|
||||
class WorldEnvironment;
|
||||
class EditorUndoRedoManager;
|
||||
|
||||
class ViewportRotationControl : public Control {
|
||||
GDCLASS(ViewportRotationControl, Control);
|
||||
@ -203,9 +202,7 @@ private:
|
||||
Node *target_node = nullptr;
|
||||
Point2 drop_pos;
|
||||
|
||||
EditorData *editor_data = nullptr;
|
||||
EditorSelection *editor_selection = nullptr;
|
||||
Ref<EditorUndoRedoManager> undo_redo;
|
||||
|
||||
CheckBox *preview_camera = nullptr;
|
||||
SubViewportContainer *subviewport_container = nullptr;
|
||||
@ -686,7 +683,6 @@ private:
|
||||
HBoxContainer *context_menu_hbox = nullptr;
|
||||
|
||||
void _generate_selection_boxes();
|
||||
Ref<EditorUndoRedoManager> undo_redo;
|
||||
|
||||
int camera_override_viewport_id;
|
||||
|
||||
@ -835,9 +831,6 @@ public:
|
||||
|
||||
Ref<Environment> get_viewport_environment() { return viewport_environment; }
|
||||
|
||||
void set_undo_redo(Ref<EditorUndoRedoManager> p_undo_redo);
|
||||
Ref<EditorUndoRedoManager> get_undo_redo();
|
||||
|
||||
void add_control_to_menu_panel(Control *p_control);
|
||||
void remove_control_from_menu_panel(Control *p_control);
|
||||
|
||||
|
@ -32,8 +32,10 @@
|
||||
|
||||
#include "core/input/input_event.h"
|
||||
#include "core/math/geometry_2d.h"
|
||||
#include "editor/editor_node.h"
|
||||
#include "editor/editor_scale.h"
|
||||
#include "editor/editor_settings.h"
|
||||
#include "editor/editor_undo_redo_manager.h"
|
||||
#include "editor/plugins/canvas_item_editor_plugin.h"
|
||||
#include "scene/2d/skeleton_2d.h"
|
||||
#include "scene/gui/menu_button.h"
|
||||
@ -150,6 +152,7 @@ void Polygon2DEditor::_sync_bones() {
|
||||
|
||||
Array new_bones = node->call("_get_bones");
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Sync Bones"));
|
||||
undo_redo->add_do_method(node, "_set_bones", new_bones);
|
||||
undo_redo->add_undo_method(node, "_set_bones", prev_bones);
|
||||
@ -279,6 +282,7 @@ void Polygon2DEditor::_uv_edit_popup_hide() {
|
||||
}
|
||||
|
||||
void Polygon2DEditor::_menu_option(int p_option) {
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
switch (p_option) {
|
||||
case MODE_EDIT_UV: {
|
||||
if (node->get_texture().is_null()) {
|
||||
@ -391,6 +395,7 @@ void Polygon2DEditor::_update_polygon_editing_state() {
|
||||
|
||||
void Polygon2DEditor::_commit_action() {
|
||||
// Makes that undo/redoing actions made outside of the UV editor still affect its polygon.
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->add_do_method(uv_edit_draw, "queue_redraw");
|
||||
undo_redo->add_undo_method(uv_edit_draw, "queue_redraw");
|
||||
undo_redo->add_do_method(CanvasItemEditor::get_singleton(), "update_viewport");
|
||||
@ -458,8 +463,9 @@ void Polygon2DEditor::_uv_input(const Ref<InputEvent> &p_input) {
|
||||
mtx.columns[2] = -uv_draw_ofs;
|
||||
mtx.scale_basis(Vector2(uv_draw_zoom, uv_draw_zoom));
|
||||
|
||||
Ref<InputEventMouseButton> mb = p_input;
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
|
||||
Ref<InputEventMouseButton> mb = p_input;
|
||||
if (mb.is_valid()) {
|
||||
if (mb->get_button_index() == MouseButton::LEFT) {
|
||||
if (mb->is_pressed()) {
|
||||
|
@ -36,6 +36,7 @@
|
||||
#include "editor/editor_node.h"
|
||||
#include "editor/editor_scale.h"
|
||||
#include "editor/editor_settings.h"
|
||||
#include "editor/editor_undo_redo_manager.h"
|
||||
|
||||
void ResourcePreloaderEditor::_notification(int p_what) {
|
||||
switch (p_what) {
|
||||
|
@ -32,6 +32,7 @@
|
||||
|
||||
#include "editor/editor_node.h"
|
||||
#include "editor/editor_scale.h"
|
||||
#include "editor/editor_undo_redo_manager.h"
|
||||
#include "editor/filesystem_dock.h"
|
||||
#include "editor/plugins/text_shader_editor.h"
|
||||
#include "editor/plugins/visual_shader_editor_plugin.h"
|
||||
@ -225,7 +226,7 @@ void ShaderEditorPlugin::_close_shader(int p_index) {
|
||||
memdelete(c);
|
||||
edited_shaders.remove_at(p_index);
|
||||
_update_shader_list();
|
||||
EditorNode::get_singleton()->get_undo_redo()->clear_history(); // To prevent undo on deleted graphs.
|
||||
EditorNode::get_undo_redo()->clear_history(); // To prevent undo on deleted graphs.
|
||||
}
|
||||
|
||||
void ShaderEditorPlugin::_resource_saved(Object *obj) {
|
||||
|
@ -33,7 +33,9 @@
|
||||
#include "tiles_editor_plugin.h"
|
||||
|
||||
#include "editor/editor_inspector.h"
|
||||
#include "editor/editor_node.h"
|
||||
#include "editor/editor_scale.h"
|
||||
#include "editor/editor_undo_redo_manager.h"
|
||||
#include "editor/progress_dialog.h"
|
||||
|
||||
#include "editor/editor_node.h"
|
||||
@ -1310,6 +1312,7 @@ void TileSetAtlasSourceEditor::_tile_atlas_control_gui_input(const Ref<InputEven
|
||||
}
|
||||
|
||||
void TileSetAtlasSourceEditor::_end_dragging() {
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
switch (drag_type) {
|
||||
case DRAG_TYPE_CREATE_TILES:
|
||||
undo_redo->create_action(TTR("Create tiles"));
|
||||
@ -1540,6 +1543,8 @@ HashMap<Vector2i, List<const PropertyInfo *>> TileSetAtlasSourceEditor::_group_p
|
||||
}
|
||||
|
||||
void TileSetAtlasSourceEditor::_menu_option(int p_option) {
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
|
||||
switch (p_option) {
|
||||
case TILE_DELETE: {
|
||||
List<PropertyInfo> list;
|
||||
@ -2198,6 +2203,7 @@ void TileSetAtlasSourceEditor::_auto_create_tiles() {
|
||||
Vector2i separation = tile_set_atlas_source->get_separation();
|
||||
Vector2i texture_region_size = tile_set_atlas_source->get_texture_region_size();
|
||||
Size2i grid_size = tile_set_atlas_source->get_atlas_grid_size();
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Create tiles in non-transparent texture regions"));
|
||||
for (int y = 0; y < grid_size.y; y++) {
|
||||
for (int x = 0; x < grid_size.x; x++) {
|
||||
@ -2243,6 +2249,7 @@ void TileSetAtlasSourceEditor::_auto_remove_tiles() {
|
||||
Vector2i texture_region_size = tile_set_atlas_source->get_texture_region_size();
|
||||
Vector2i grid_size = tile_set_atlas_source->get_atlas_grid_size();
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Remove tiles in fully transparent texture regions"));
|
||||
|
||||
List<PropertyInfo> list;
|
||||
@ -2336,8 +2343,6 @@ void TileSetAtlasSourceEditor::_bind_methods() {
|
||||
}
|
||||
|
||||
TileSetAtlasSourceEditor::TileSetAtlasSourceEditor() {
|
||||
undo_redo = EditorNode::get_undo_redo();
|
||||
|
||||
set_process_unhandled_key_input(true);
|
||||
set_process_internal(true);
|
||||
|
||||
@ -2366,7 +2371,6 @@ TileSetAtlasSourceEditor::TileSetAtlasSourceEditor() {
|
||||
tile_proxy_object->connect("changed", callable_mp(this, &TileSetAtlasSourceEditor::_tile_proxy_object_changed));
|
||||
|
||||
tile_inspector = memnew(EditorInspector);
|
||||
tile_inspector->set_undo_redo(undo_redo);
|
||||
tile_inspector->set_vertical_scroll_mode(ScrollContainer::SCROLL_MODE_DISABLED);
|
||||
tile_inspector->edit(tile_proxy_object);
|
||||
tile_inspector->set_use_folding(true);
|
||||
@ -2414,7 +2418,6 @@ TileSetAtlasSourceEditor::TileSetAtlasSourceEditor() {
|
||||
atlas_source_proxy_object->connect("changed", callable_mp(this, &TileSetAtlasSourceEditor::_atlas_source_proxy_object_changed));
|
||||
|
||||
atlas_source_inspector = memnew(EditorInspector);
|
||||
atlas_source_inspector->set_undo_redo(undo_redo);
|
||||
atlas_source_inspector->set_vertical_scroll_mode(ScrollContainer::SCROLL_MODE_DISABLED);
|
||||
atlas_source_inspector->edit(atlas_source_proxy_object);
|
||||
middle_vbox_container->add_child(atlas_source_inspector);
|
||||
|
@ -114,8 +114,6 @@ private:
|
||||
TileSetAtlasSource *tile_set_atlas_source = nullptr;
|
||||
int tile_set_atlas_source_id = TileSet::INVALID_SOURCE;
|
||||
|
||||
Ref<EditorUndoRedoManager> undo_redo;
|
||||
|
||||
bool tile_set_changed_needs_update = false;
|
||||
|
||||
// -- Properties painting --
|
||||
|
@ -35,6 +35,7 @@
|
||||
#include "editor/editor_resource_preview.h"
|
||||
#include "editor/editor_scale.h"
|
||||
#include "editor/editor_settings.h"
|
||||
#include "editor/editor_undo_redo_manager.h"
|
||||
|
||||
#include "scene/gui/item_list.h"
|
||||
|
||||
@ -235,6 +236,7 @@ void TileSetScenesCollectionSourceEditor::_scenes_list_item_activated(int p_inde
|
||||
|
||||
void TileSetScenesCollectionSourceEditor::_source_add_pressed() {
|
||||
int scene_id = tile_set_scenes_collection_source->get_next_scene_tile_id();
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Add a Scene Tile"));
|
||||
undo_redo->add_do_method(tile_set_scenes_collection_source, "create_scene_tile", Ref<PackedScene>(), scene_id);
|
||||
undo_redo->add_undo_method(tile_set_scenes_collection_source, "remove_scene_tile", scene_id);
|
||||
@ -249,6 +251,7 @@ void TileSetScenesCollectionSourceEditor::_source_delete_pressed() {
|
||||
ERR_FAIL_COND(selected_indices.size() <= 0);
|
||||
int scene_id = scene_tiles_list->get_item_metadata(selected_indices[0]);
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Remove a Scene Tile"));
|
||||
undo_redo->add_do_method(tile_set_scenes_collection_source, "remove_scene_tile", scene_id);
|
||||
undo_redo->add_undo_method(tile_set_scenes_collection_source, "create_scene_tile", tile_set_scenes_collection_source->get_scene_tile_scene(scene_id), scene_id);
|
||||
@ -400,6 +403,7 @@ void TileSetScenesCollectionSourceEditor::_drop_data_fw(const Point2 &p_point, c
|
||||
Ref<PackedScene> resource = ResourceLoader::load(files[i]);
|
||||
if (resource.is_valid()) {
|
||||
int scene_id = tile_set_scenes_collection_source->get_next_scene_tile_id();
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Add a Scene Tile"));
|
||||
undo_redo->add_do_method(tile_set_scenes_collection_source, "create_scene_tile", resource, scene_id);
|
||||
undo_redo->add_undo_method(tile_set_scenes_collection_source, "remove_scene_tile", scene_id);
|
||||
@ -453,8 +457,6 @@ void TileSetScenesCollectionSourceEditor::_bind_methods() {
|
||||
}
|
||||
|
||||
TileSetScenesCollectionSourceEditor::TileSetScenesCollectionSourceEditor() {
|
||||
undo_redo = EditorNode::get_undo_redo();
|
||||
|
||||
// -- Right side --
|
||||
HSplitContainer *split_container_right_side = memnew(HSplitContainer);
|
||||
split_container_right_side->set_h_size_flags(SIZE_EXPAND_FILL);
|
||||
@ -479,7 +481,6 @@ TileSetScenesCollectionSourceEditor::TileSetScenesCollectionSourceEditor() {
|
||||
scenes_collection_source_proxy_object->connect("changed", callable_mp(this, &TileSetScenesCollectionSourceEditor::_scenes_collection_source_proxy_object_changed));
|
||||
|
||||
scenes_collection_source_inspector = memnew(EditorInspector);
|
||||
scenes_collection_source_inspector->set_undo_redo(undo_redo);
|
||||
scenes_collection_source_inspector->set_vertical_scroll_mode(ScrollContainer::SCROLL_MODE_DISABLED);
|
||||
scenes_collection_source_inspector->edit(scenes_collection_source_proxy_object);
|
||||
middle_vbox_container->add_child(scenes_collection_source_inspector);
|
||||
@ -495,7 +496,6 @@ TileSetScenesCollectionSourceEditor::TileSetScenesCollectionSourceEditor() {
|
||||
tile_proxy_object->connect("changed", callable_mp(this, &TileSetScenesCollectionSourceEditor::_update_action_buttons).unbind(1));
|
||||
|
||||
tile_inspector = memnew(EditorInspector);
|
||||
tile_inspector->set_undo_redo(undo_redo);
|
||||
tile_inspector->set_vertical_scroll_mode(ScrollContainer::SCROLL_MODE_DISABLED);
|
||||
tile_inspector->edit(tile_proxy_object);
|
||||
tile_inspector->set_use_folding(true);
|
||||
|
@ -37,8 +37,6 @@
|
||||
#include "scene/gui/item_list.h"
|
||||
#include "scene/resources/tile_set.h"
|
||||
|
||||
class UndoRedo;
|
||||
|
||||
class TileSetScenesCollectionSourceEditor : public HBoxContainer {
|
||||
GDCLASS(TileSetScenesCollectionSourceEditor, HBoxContainer);
|
||||
|
||||
@ -97,8 +95,6 @@ private:
|
||||
TileSetScenesCollectionSource *tile_set_scenes_collection_source = nullptr;
|
||||
int tile_set_source_id = -1;
|
||||
|
||||
Ref<EditorUndoRedoManager> undo_redo;
|
||||
|
||||
bool tile_set_scenes_collection_source_changed_needs_update = false;
|
||||
|
||||
// Source inspector.
|
||||
|
@ -4062,7 +4062,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();
|
||||
Ref<EditorUndoRedoManager> &undo_redo_man = EditorNode::get_undo_redo();
|
||||
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);
|
||||
@ -4131,7 +4131,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();
|
||||
Ref<EditorUndoRedoManager> &undo_redo_man = EditorNode::get_undo_redo();
|
||||
undo_redo_man->create_action(TTR("ParameterRef Name Changed"));
|
||||
|
||||
undo_redo_man->add_do_method(p_parameter_ref.ptr(), "set_parameter_name", p_name);
|
||||
@ -4175,7 +4175,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();
|
||||
Ref<EditorUndoRedoManager> &undo_redo_man = EditorNode::get_undo_redo();
|
||||
undo_redo_man->create_action(TTR("Varying Name Changed"));
|
||||
|
||||
undo_redo_man->add_do_method(p_varying.ptr(), "set_varying_name", p_name);
|
||||
@ -5892,7 +5892,7 @@ public:
|
||||
return;
|
||||
}
|
||||
|
||||
Ref<EditorUndoRedoManager> undo_redo = EditorNode::get_undo_redo();
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
|
||||
updating = true;
|
||||
undo_redo->create_action(TTR("Edit Visual Property:") + " " + p_property, UndoRedo::MERGE_ENDS);
|
||||
@ -6094,7 +6094,7 @@ void EditorPropertyVisualShaderMode::_option_selected(int p_which) {
|
||||
return;
|
||||
}
|
||||
|
||||
Ref<EditorUndoRedoManager> undo_redo = EditorNode::get_undo_redo();
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Visual Shader Mode Changed"));
|
||||
//do is easy
|
||||
undo_redo->add_do_method(visual_shader.ptr(), "set_mode", p_which);
|
||||
|
@ -114,6 +114,7 @@ void ProjectSettingsEditor::_add_setting() {
|
||||
Variant value;
|
||||
Variant::construct(Variant::Type(type_box->get_selected_id()), value, nullptr, 0, ce);
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Add Project Setting"));
|
||||
undo_redo->add_do_property(ps, setting, value);
|
||||
undo_redo->add_undo_property(ps, setting, ps->has_setting(setting) ? ps->get(setting) : Variant());
|
||||
@ -133,6 +134,7 @@ void ProjectSettingsEditor::_delete_setting() {
|
||||
Variant value = ps->get(setting);
|
||||
int order = ps->get_order(setting);
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Delete Item"));
|
||||
|
||||
undo_redo->add_do_method(ps, "clear", setting);
|
||||
@ -221,9 +223,9 @@ void ProjectSettingsEditor::_select_type(Variant::Type p_type) {
|
||||
|
||||
void ProjectSettingsEditor::shortcut_input(const Ref<InputEvent> &p_event) {
|
||||
ERR_FAIL_COND(p_event.is_null());
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
|
||||
const Ref<InputEventKey> k = p_event;
|
||||
|
||||
if (k.is_valid() && k->is_pressed()) {
|
||||
bool handled = false;
|
||||
|
||||
@ -339,6 +341,7 @@ void ProjectSettingsEditor::_action_added(const String &p_name) {
|
||||
action["events"] = Array();
|
||||
action["deadzone"] = 0.5f;
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Add Input Action"));
|
||||
undo_redo->add_do_method(ProjectSettings::get_singleton(), "set", name, action);
|
||||
undo_redo->add_undo_method(ProjectSettings::get_singleton(), "clear", name);
|
||||
@ -354,6 +357,7 @@ void ProjectSettingsEditor::_action_edited(const String &p_name, const Dictionar
|
||||
const String property_name = "input/" + p_name;
|
||||
Dictionary old_val = GLOBAL_GET(property_name);
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
if (old_val["deadzone"] != p_action["deadzone"]) {
|
||||
// Deadzone Changed
|
||||
undo_redo->create_action(TTR("Change Action deadzone"));
|
||||
@ -390,6 +394,7 @@ void ProjectSettingsEditor::_action_removed(const String &p_name) {
|
||||
Dictionary old_val = GLOBAL_GET(property_name);
|
||||
int order = ProjectSettings::get_singleton()->get_order(property_name);
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Erase Input Action"));
|
||||
undo_redo->add_do_method(ProjectSettings::get_singleton(), "clear", property_name);
|
||||
undo_redo->add_undo_method(ProjectSettings::get_singleton(), "set", property_name, old_val);
|
||||
@ -412,6 +417,7 @@ void ProjectSettingsEditor::_action_renamed(const String &p_old_name, const Stri
|
||||
int order = ProjectSettings::get_singleton()->get_order(old_property_name);
|
||||
Dictionary action = GLOBAL_GET(old_property_name);
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Rename Input Action Event"));
|
||||
// Do: clear old, set new
|
||||
undo_redo->add_do_method(ProjectSettings::get_singleton(), "clear", old_property_name);
|
||||
@ -441,6 +447,7 @@ void ProjectSettingsEditor::_action_reordered(const String &p_action_name, const
|
||||
HashMap<String, Variant> action_values;
|
||||
ProjectSettings::get_singleton()->get_property_list(&props);
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Update Input Action Order"));
|
||||
|
||||
for (const PropertyInfo &prop : props) {
|
||||
@ -573,7 +580,6 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) {
|
||||
set_title(TTR("Project Settings (project.godot)"));
|
||||
|
||||
ps = ProjectSettings::get_singleton();
|
||||
undo_redo = p_data->get_undo_redo();
|
||||
data = p_data;
|
||||
|
||||
tab_container = memnew(TabContainer);
|
||||
@ -632,7 +638,6 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) {
|
||||
custom_properties->add_child(del_button);
|
||||
|
||||
general_settings_inspector = memnew(SectionedInspector);
|
||||
general_settings_inspector->get_inspector()->set_undo_redo(EditorNode::get_undo_redo());
|
||||
general_settings_inspector->set_v_size_flags(Control::SIZE_EXPAND_FILL);
|
||||
general_settings_inspector->register_search_box(search_box);
|
||||
general_settings_inspector->get_inspector()->set_use_filter(true);
|
||||
|
@ -42,7 +42,6 @@
|
||||
#include "editor/shader_globals_editor.h"
|
||||
#include "scene/gui/tab_container.h"
|
||||
|
||||
class EditorUndoRedoManager;
|
||||
class FileSystemDock;
|
||||
|
||||
class ProjectSettingsEditor : public AcceptDialog {
|
||||
@ -78,7 +77,6 @@ class ProjectSettingsEditor : public AcceptDialog {
|
||||
|
||||
ImportDefaultsEditor *import_defaults_editor = nullptr;
|
||||
EditorData *data = nullptr;
|
||||
Ref<EditorUndoRedoManager> undo_redo;
|
||||
|
||||
void _advanced_toggled(bool p_button_pressed);
|
||||
void _update_advanced(bool p_is_advanced);
|
||||
|
@ -42,6 +42,7 @@
|
||||
#include "editor/editor_paths.h"
|
||||
#include "editor/editor_scale.h"
|
||||
#include "editor/editor_settings.h"
|
||||
#include "editor/editor_undo_redo_manager.h"
|
||||
#include "editor/multi_node_edit.h"
|
||||
#include "editor/plugins/animation_player_editor_plugin.h"
|
||||
#include "editor/plugins/canvas_item_editor_plugin.h"
|
||||
@ -267,7 +268,7 @@ void SceneTreeDock::_replace_with_branch_scene(const String &p_file, Node *base)
|
||||
return;
|
||||
}
|
||||
|
||||
Ref<EditorUndoRedoManager> undo_redo = EditorNode::get_undo_redo();
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Replace with Branch Scene"));
|
||||
|
||||
Node *parent = base->get_parent();
|
||||
@ -3568,7 +3569,7 @@ SceneTreeDock::SceneTreeDock(Node *p_scene_root, EditorSelection *p_editor_selec
|
||||
|
||||
editor_selection->connect("selection_changed", callable_mp(this, &SceneTreeDock::_selection_changed));
|
||||
|
||||
scene_tree->set_undo_redo(editor_data->get_undo_redo());
|
||||
scene_tree->set_as_scene_tree_dock();
|
||||
scene_tree->set_editor_selection(editor_selection);
|
||||
|
||||
create_dialog = memnew(CreateDialog);
|
||||
|
@ -68,6 +68,7 @@ void SceneTreeEditor::_cell_button_pressed(Object *p_item, int p_column, int p_i
|
||||
Node *n = get_node(np);
|
||||
ERR_FAIL_COND(!n);
|
||||
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
if (p_id == BUTTON_SUBSCENE) {
|
||||
if (n == get_scene_node()) {
|
||||
if (n && n->get_scene_inherited_state().is_valid()) {
|
||||
@ -167,6 +168,7 @@ void SceneTreeEditor::_cell_button_pressed(Object *p_item, int p_column, int p_i
|
||||
void SceneTreeEditor::_toggle_visible(Node *p_node) {
|
||||
if (p_node->has_method("is_visible") && p_node->has_method("set_visible")) {
|
||||
bool v = bool(p_node->call("is_visible"));
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->add_do_method(p_node, "set_visible", !v);
|
||||
undo_redo->add_undo_method(p_node, "set_visible", v);
|
||||
}
|
||||
@ -379,8 +381,7 @@ void SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) {
|
||||
item->set_tooltip_text(0, tooltip);
|
||||
}
|
||||
|
||||
if (can_open_instance && undo_redo.is_valid()) { //Show buttons only when necessary(SceneTreeDock) to avoid crashes
|
||||
|
||||
if (can_open_instance && is_scene_tree_dock) { // Show buttons only when necessary (SceneTreeDock) to avoid crashes.
|
||||
if (!p_node->is_connected("script_changed", callable_mp(this, &SceneTreeEditor::_node_script_changed))) {
|
||||
p_node->connect("script_changed", callable_mp(this, &SceneTreeEditor::_node_script_changed).bind(p_node));
|
||||
}
|
||||
@ -997,11 +998,12 @@ void SceneTreeEditor::_renamed() {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!undo_redo.is_valid()) {
|
||||
if (!is_scene_tree_dock) {
|
||||
n->set_name(new_name);
|
||||
which->set_metadata(0, n->get_path());
|
||||
emit_signal(SNAME("node_renamed"));
|
||||
} else {
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Rename Node"));
|
||||
emit_signal(SNAME("node_prerename"), n, new_name);
|
||||
undo_redo->add_do_method(this, "_rename_node", n->get_instance_id(), new_name);
|
||||
@ -1045,8 +1047,8 @@ String SceneTreeEditor::get_filter_term_warning() {
|
||||
return filter_term_warning;
|
||||
}
|
||||
|
||||
void SceneTreeEditor::set_undo_redo(Ref<EditorUndoRedoManager> p_undo_redo) {
|
||||
undo_redo = p_undo_redo;
|
||||
void SceneTreeEditor::set_as_scene_tree_dock() {
|
||||
is_scene_tree_dock = true;
|
||||
}
|
||||
|
||||
void SceneTreeEditor::set_display_foreign_nodes(bool p_display) {
|
||||
|
@ -37,8 +37,6 @@
|
||||
#include "scene/gui/dialogs.h"
|
||||
#include "scene/gui/tree.h"
|
||||
|
||||
class EditorUndoRedoManager;
|
||||
|
||||
class SceneTreeEditor : public Control {
|
||||
GDCLASS(SceneTreeEditor, Control);
|
||||
|
||||
@ -98,9 +96,9 @@ class SceneTreeEditor : public Control {
|
||||
bool can_open_instance;
|
||||
bool updating_tree = false;
|
||||
bool show_enabled_subscene = false;
|
||||
bool is_scene_tree_dock = false;
|
||||
|
||||
void _renamed();
|
||||
Ref<EditorUndoRedoManager> undo_redo;
|
||||
|
||||
HashSet<Node *> marked;
|
||||
bool marked_selectable = false;
|
||||
@ -145,7 +143,7 @@ public:
|
||||
String get_filter() const;
|
||||
String get_filter_term_warning();
|
||||
|
||||
void set_undo_redo(Ref<EditorUndoRedoManager> p_undo_redo);
|
||||
void set_as_scene_tree_dock();
|
||||
void set_display_foreign_nodes(bool p_display);
|
||||
|
||||
void set_marked(const HashSet<Node *> &p_marked, bool p_selectable = false, bool p_children_selectable = true);
|
||||
|
@ -86,7 +86,7 @@ protected:
|
||||
return false;
|
||||
}
|
||||
|
||||
Ref<EditorUndoRedoManager> undo_redo = EditorNode::get_undo_redo();
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
|
||||
undo_redo->create_action(TTR("Set Shader Global Variable"));
|
||||
undo_redo->add_do_method(RS::get_singleton(), "global_shader_parameter_set", p_name, p_value);
|
||||
|
@ -355,7 +355,7 @@ void ReplicationEditor::_tree_item_edited() {
|
||||
int column = tree->get_edited_column();
|
||||
ERR_FAIL_COND(column < 1 || column > 2);
|
||||
const NodePath prop = ti->get_metadata(0);
|
||||
Ref<EditorUndoRedoManager> undo_redo = EditorNode::get_undo_redo();
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
bool value = ti->is_checked(column);
|
||||
String method;
|
||||
if (column == 1) {
|
||||
@ -395,7 +395,7 @@ void ReplicationEditor::_dialog_closed(bool p_confirmed) {
|
||||
int idx = config->property_get_index(prop);
|
||||
bool spawn = config->property_get_spawn(prop);
|
||||
bool sync = config->property_get_sync(prop);
|
||||
Ref<EditorUndoRedoManager> undo_redo = EditorNode::get_undo_redo();
|
||||
Ref<EditorUndoRedoManager> &undo_redo = EditorNode::get_undo_redo();
|
||||
undo_redo->create_action(TTR("Remove Property"));
|
||||
undo_redo->add_do_method(config.ptr(), "remove_property", prop);
|
||||
undo_redo->add_undo_method(config.ptr(), "add_property", prop, idx);
|
||||
|
Loading…
Reference in New Issue
Block a user