2
0
Эх сурвалжийг харах

Merge pull request #10704 from Noshyaar/pr-scene

EditorNode: enhance open scene error dialog
Rémi Verschelde 8 жил өмнө
parent
commit
61acc0762c

+ 41 - 11
editor/editor_node.cpp

@@ -559,7 +559,7 @@ void EditorNode::_menu_confirm_current() {
 	_menu_option_confirm(current_option, true);
 }
 
-void EditorNode::_dialog_display_file_error(String p_file, Error p_error) {
+void EditorNode::_dialog_display_save_error(String p_file, Error p_error) {
 
 	if (p_error) {
 
@@ -586,6 +586,41 @@ void EditorNode::_dialog_display_file_error(String p_file, Error p_error) {
 	}
 }
 
+void EditorNode::_dialog_display_load_error(String p_file, Error p_error) {
+
+	if (p_error) {
+
+		current_option = -1;
+		accept->get_ok()->set_text(TTR("I see.."));
+
+		switch (p_error) {
+
+			case ERR_CANT_OPEN: {
+
+				accept->set_text(vformat(TTR("Can't open '%s'."), p_file.get_file()));
+			} break;
+			case ERR_PARSE_ERROR: {
+
+				accept->set_text(vformat(TTR("Error while parsing '%s'."), p_file.get_file()));
+			} break;
+			case ERR_FILE_CORRUPT: {
+
+				accept->set_text(vformat(TTR("Unexpected end of file '%s'."), p_file.get_file()));
+			} break;
+			case ERR_FILE_NOT_FOUND: {
+
+				accept->set_text(vformat(TTR("Missing '%s' or its dependencies."), p_file.get_file()));
+			} break;
+			default: {
+
+				accept->set_text(vformat(TTR("Error while loading '%s'."), p_file.get_file()));
+			} break;
+		}
+
+		accept->popup_centered_minsize();
+	}
+}
+
 void EditorNode::_get_scene_metadata(const String &p_file) {
 
 	Node *scene = editor_data.get_edited_scene_root();
@@ -899,7 +934,7 @@ void EditorNode::_save_scene(String p_file, int idx) {
 		_update_scene_tabs();
 	} else {
 
-		_dialog_display_file_error(p_file, err);
+		_dialog_display_save_error(p_file, err);
 	}
 }
 
@@ -2785,13 +2820,11 @@ Error EditorNode::load_scene(const String &p_scene, bool p_ignore_broken_deps, b
 
 	dependency_errors.clear();
 
-	Ref<PackedScene> sdata = ResourceLoader::load(lpath, "", true);
+	Error err;
+	Ref<PackedScene> sdata = ResourceLoader::load(lpath, "", true, &err);
 	if (!sdata.is_valid()) {
 
-		current_option = -1;
-		accept->get_ok()->set_text(TTR("Ugh"));
-		accept->set_text(TTR("Error loading scene."));
-		accept->popup_centered_minsize();
+		_dialog_display_load_error(lpath, err);
 		opening_prev = false;
 
 		if (prev != -1) {
@@ -2848,10 +2881,7 @@ Error EditorNode::load_scene(const String &p_scene, bool p_ignore_broken_deps, b
 	if (!new_scene) {
 
 		sdata.unref();
-		current_option = -1;
-		accept->get_ok()->set_text(TTR("Ugh"));
-		accept->set_text(TTR("Error loading scene."));
-		accept->popup_centered_minsize();
+		_dialog_display_load_error(lpath, ERR_FILE_NOT_FOUND);
 		opening_prev = false;
 		if (prev != -1) {
 			set_current_scene(prev);

+ 2 - 1
editor/editor_node.h

@@ -404,7 +404,8 @@ private:
 	void _dialog_action(String p_file);
 
 	void _edit_current();
-	void _dialog_display_file_error(String p_file, Error p_error);
+	void _dialog_display_save_error(String p_file, Error p_error);
+	void _dialog_display_load_error(String p_file, Error p_error);
 
 	int current_option;
 	void _resource_created();