diff options
Diffstat (limited to 'tools/editor')
-rw-r--r-- | tools/editor/editor_data.cpp | 10 | ||||
-rw-r--r-- | tools/editor/editor_data.h | 1 | ||||
-rw-r--r-- | tools/editor/editor_node.cpp | 17 |
3 files changed, 26 insertions, 2 deletions
diff --git a/tools/editor/editor_data.cpp b/tools/editor/editor_data.cpp index 5e613c658b..c872b1c3ca 100644 --- a/tools/editor/editor_data.cpp +++ b/tools/editor/editor_data.cpp @@ -635,6 +635,16 @@ String EditorData::get_scene_type(int p_idx) const { return edited_scene[p_idx].root->get_type(); } +void EditorData::move_edited_scene_to_index(int p_idx) { + + ERR_FAIL_INDEX(current_edited_scene,edited_scene.size()); + ERR_FAIL_INDEX(p_idx,edited_scene.size()); + + EditedScene es=edited_scene[current_edited_scene]; + edited_scene.remove(current_edited_scene); + edited_scene.insert(p_idx,es); + current_edited_scene=p_idx; +} Ref<Script> EditorData::get_scene_root_script(int p_idx) const { diff --git a/tools/editor/editor_data.h b/tools/editor/editor_data.h index 7dafeeea04..fcc8ccef06 100644 --- a/tools/editor/editor_data.h +++ b/tools/editor/editor_data.h @@ -196,6 +196,7 @@ public: void set_edited_scene_live_edit_root(const NodePath& p_root); NodePath get_edited_scene_live_edit_root(); bool check_and_update_scene(int p_idx); + void move_edited_scene_to_index(int p_idx); void set_plugin_window_layout(Ref<ConfigFile> p_layout); diff --git a/tools/editor/editor_node.cpp b/tools/editor/editor_node.cpp index eae2d69dd9..8d5f5e8aca 100644 --- a/tools/editor/editor_node.cpp +++ b/tools/editor/editor_node.cpp @@ -2367,7 +2367,14 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) { if (!scene) break; - + + String filename = scene->get_filename(); + + if (filename==String()) { + show_warning("Can't reload a scene that was never saved.."); + break; + } + if (unsaved_cache && !p_confirmed) { confirmation->get_ok()->set_text("Revert"); confirmation->set_text("This action cannot be undone. Revert anyway?"); @@ -2375,7 +2382,13 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) { break; } - Error err = load_scene(scene->get_filename()); + + int cur_idx = editor_data.get_edited_scene(); + _remove_edited_scene(); + Error err = load_scene(filename); + editor_data.move_edited_scene_to_index(cur_idx); + get_undo_redo()->clear_history(); + scene_tabs->set_current_tab(cur_idx); } break; |