1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-09 12:50:35 +00:00

Merge pull request #52573 from e8newallm/Save_Scene-52078

This commit is contained in:
Rémi Verschelde
2021-09-29 09:15:14 +02:00
committed by GitHub
2 changed files with 29 additions and 12 deletions

View File

@@ -1757,13 +1757,15 @@ void EditorNode::restart_editor() {
void EditorNode::_save_all_scenes() { void EditorNode::_save_all_scenes() {
for (int i = 0; i < editor_data.get_edited_scene_count(); i++) { for (int i = 0; i < editor_data.get_edited_scene_count(); i++) {
Node *scene = editor_data.get_edited_scene_root(i); Node *scene = editor_data.get_edited_scene_root(i);
if (scene && scene->get_filename() != "") { if (scene && scene->get_filename() != "" && DirAccess::exists(scene->get_filename().get_base_dir())) {
if (i != editor_data.get_edited_scene()) { if (i != editor_data.get_edited_scene()) {
_save_scene(scene->get_filename(), i); _save_scene(scene->get_filename(), i);
} else { } else {
_save_scene_with_preview(scene->get_filename()); _save_scene_with_preview(scene->get_filename());
} }
} // else: ignore new scenes } else {
show_warning(TTR("Could not save one or more scenes!"), TTR("Save All Scenes"));
}
} }
_save_default_environment(); _save_default_environment();
@@ -2484,9 +2486,9 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) {
case SCENE_TAB_CLOSE: case SCENE_TAB_CLOSE:
case FILE_SAVE_SCENE: { case FILE_SAVE_SCENE: {
int scene_idx = (p_option == FILE_SAVE_SCENE) ? -1 : tab_closing; int scene_idx = (p_option == FILE_SAVE_SCENE) ? -1 : tab_closing;
Node *scene = editor_data.get_edited_scene_root(scene_idx); Node *scene = editor_data.get_edited_scene_root(scene_idx);
if (scene && scene->get_filename() != "") { if (scene && scene->get_filename() != "") {
if (DirAccess::exists(scene->get_filename().get_base_dir())) {
if (scene_idx != editor_data.get_edited_scene()) { if (scene_idx != editor_data.get_edited_scene()) {
_save_scene_with_preview(scene->get_filename(), scene_idx); _save_scene_with_preview(scene->get_filename(), scene_idx);
} else { } else {
@@ -2497,7 +2499,9 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) {
_discard_changes(); _discard_changes();
} }
save_layout(); save_layout();
} else {
show_save_accept(vformat(TTR("%s no longer exists! Please specify a new save location."), scene->get_filename().get_base_dir()), TTR("OK"));
}
break; break;
} }
[[fallthrough]]; [[fallthrough]];
@@ -4150,6 +4154,13 @@ void EditorNode::show_accept(const String &p_text, const String &p_title) {
accept->popup_centered(); accept->popup_centered();
} }
void EditorNode::show_save_accept(const String &p_text, const String &p_title) {
current_option = -1;
save_accept->get_ok_button()->set_text(p_title);
save_accept->set_text(p_text);
save_accept->popup_centered();
}
void EditorNode::show_warning(const String &p_text, const String &p_title) { void EditorNode::show_warning(const String &p_text, const String &p_title) {
if (warning->is_inside_tree()) { if (warning->is_inside_tree()) {
warning->set_text(p_text); warning->set_text(p_text);
@@ -6263,6 +6274,10 @@ EditorNode::EditorNode() {
gui_base->add_child(accept); gui_base->add_child(accept);
accept->connect("confirmed", callable_mp(this, &EditorNode::_menu_confirm_current)); accept->connect("confirmed", callable_mp(this, &EditorNode::_menu_confirm_current));
save_accept = memnew(AcceptDialog);
gui_base->add_child(save_accept);
save_accept->connect("confirmed", callable_mp(this, &EditorNode::_menu_option), make_binds((int)MenuOptions::FILE_SAVE_AS_SCENE));
project_export = memnew(ProjectExportDialog); project_export = memnew(ProjectExportDialog);
gui_base->add_child(project_export); gui_base->add_child(project_export);

View File

@@ -308,6 +308,7 @@ private:
ConfirmationDialog *pick_main_scene; ConfirmationDialog *pick_main_scene;
Button *select_current_scene_button; Button *select_current_scene_button;
AcceptDialog *accept; AcceptDialog *accept;
AcceptDialog *save_accept;
EditorAbout *about; EditorAbout *about;
AcceptDialog *warning; AcceptDialog *warning;
@@ -814,6 +815,7 @@ public:
Ref<Texture2D> get_class_icon(const String &p_class, const String &p_fallback = "Object") const; Ref<Texture2D> get_class_icon(const String &p_class, const String &p_fallback = "Object") const;
void show_accept(const String &p_text, const String &p_title); void show_accept(const String &p_text, const String &p_title);
void show_save_accept(const String &p_text, const String &p_title);
void show_warning(const String &p_text, const String &p_title = TTR("Warning!")); void show_warning(const String &p_text, const String &p_title = TTR("Warning!"));
void _copy_warning(const String &p_str); void _copy_warning(const String &p_str);