Browse Source

Merge pull request #65806 from akien-mga/pm-improve-conversion-dialog

Clarify text in project conversion dialogs
Rémi Verschelde 3 years ago
parent
commit
51082d6e47
2 changed files with 32 additions and 23 deletions
  1. 31 23
      editor/project_manager.cpp
  2. 1 0
      editor/project_manager.h

+ 31 - 23
editor/project_manager.cpp

@@ -2164,9 +2164,11 @@ void ProjectManager::_open_selected_projects_ask() {
 		return;
 	}
 
+	const Size2i popup_min_width = Size2i(600.0 * EDSCALE, 0);
+
 	if (selected_list.size() > 1) {
-		multi_open_ask->set_text(TTR("Are you sure to open more than one project?"));
-		multi_open_ask->popup_centered();
+		multi_open_ask->set_text(vformat(TTR("You requested to open %d projects in parallel. Do you confirm?\nNote that usual checks for engine version compatibility will be bypassed."), selected_list.size()));
+		multi_open_ask->popup_centered(popup_min_width);
 		return;
 	}
 
@@ -2175,8 +2177,7 @@ void ProjectManager::_open_selected_projects_ask() {
 		return;
 	}
 
-	// Update the project settings or don't open
-	const String conf = project.path.path_join("project.godot");
+	// Update the project settings or don't open.
 	const int config_version = project.version;
 	PackedStringArray unsupported_features = project.unsupported_features;
 
@@ -2186,26 +2187,30 @@ void ProjectManager::_open_selected_projects_ask() {
 
 	ask_update_settings->get_ok_button()->set_text("OK");
 
-	// Check if the config_version property was empty or 0
+	// Check if the config_version property was empty or 0.
 	if (config_version == 0) {
-		ask_update_settings->set_text(vformat(TTR("The following project settings file does not specify the version of Godot through which it was created.\n\n%s\n\nIf you proceed with opening it, it will be converted to Godot's current configuration file format.\nWarning: You won't be able to open the project with previous versions of the engine anymore."), conf));
-		ask_update_settings->popup_centered();
+		ask_update_settings->set_text(vformat(TTR("The selected project \"%s\" does not specify its supported Godot version in its configuration file (\"project.godot\").\n\nProject path: %s\n\nIf you proceed with opening it, it will be converted to Godot's current configuration file format.\n\nWarning: You won't be able to open the project with previous versions of the engine anymore."), project.project_name, project.path));
+		ask_update_settings->popup_centered(popup_min_width);
 		return;
 	}
-	// Check if we need to convert project settings from an earlier engine version
+	// Check if we need to convert project settings from an earlier engine version.
 	if (config_version < ProjectSettings::CONFIG_VERSION) {
 		if (config_version == GODOT4_CONFIG_VERSION - 1 && ProjectSettings::CONFIG_VERSION == GODOT4_CONFIG_VERSION) { // Conversion from Godot 3 to 4.
 			full_convert_button->show();
+			ask_update_settings->set_text(vformat(TTR("The selected project \"%s\" was generated by Godot 3.x, and needs to be converted for Godot 4.x.\n\nProject path: %s\n\nYou have three options:\n- Convert only the configuration file (\"project.godot\"). Use this to open the project without attempting to convert its scenes, resources and scripts.\n- Convert the entire project including its scenes, resources and scripts (recommended if you are upgrading).\n- Do nothing and go back.\n\nWarning: If you select a conversion option, you won't be able to open the project with previous versions of the engine anymore."), project.project_name, project.path));
+			ask_update_settings->get_ok_button()->set_text(TTR("Convert project.godot Only"));
+		} else {
+			ask_update_settings->set_text(vformat(TTR("The selected project \"%s\" was generated by an older engine version, and needs to be converted for this version.\n\nProject path: %s\n\nDo you want to convert it?\n\nWarning: You won't be able to open the project with previous versions of the engine anymore."), project.project_name, project.path));
+			ask_update_settings->get_ok_button()->set_text(TTR("Convert project.godot"));
 		}
-		ask_update_settings->set_text(vformat(TTR("The following project settings file was generated by an older engine version, and needs to be converted for this version:\n\n%s\n\nDo you want to convert it? You can also convert the entire project (recommended if you are upgrading).\nWarning: You won't be able to open the project with previous versions of the engine anymore."), conf));
-		ask_update_settings->get_ok_button()->set_text(TTR("Convert project.godot"));
-		ask_update_settings->popup_centered();
+		ask_update_settings->popup_centered(popup_min_width);
+		ask_update_settings->get_cancel_button()->grab_focus(); // To prevent accidents.
 		return;
 	}
-	// Check if the file was generated by a newer, incompatible engine version
+	// Check if the file was generated by a newer, incompatible engine version.
 	if (config_version > ProjectSettings::CONFIG_VERSION) {
-		dialog_error->set_text(vformat(TTR("Can't open project at '%s'.") + "\n" + TTR("The project settings were created by a newer engine version, whose settings are not compatible with this version."), project.path));
-		dialog_error->popup_centered();
+		dialog_error->set_text(vformat(TTR("Can't open project \"%s\" at the following path:\n\n%s\n\nThe project settings were created by a newer engine version, whose settings are not compatible with this version."), project.project_name, project.path));
+		dialog_error->popup_centered(popup_min_width);
 		return;
 	}
 	// Check if the project is using features not supported by this build of Godot.
@@ -2234,14 +2239,20 @@ void ProjectManager::_open_selected_projects_ask() {
 		warning_message += TTR("Open anyway? Project will be modified.");
 		ask_update_label->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER);
 		ask_update_settings->set_text(warning_message);
-		ask_update_settings->popup_centered();
+		ask_update_settings->popup_centered(popup_min_width);
 		return;
 	}
 
-	// Open if the project is up-to-date
+	// Open if the project is up-to-date.
 	_open_selected_projects();
 }
 
+void ProjectManager::_full_convert_button_pressed() {
+	ask_update_settings->hide();
+	ask_full_convert_dialog->popup_centered(Size2i(600.0 * EDSCALE, 0));
+	ask_full_convert_dialog->get_cancel_button()->grab_focus();
+}
+
 void ProjectManager::_perform_full_project_conversion() {
 	Vector<ProjectList::Item> selected_list = _project_list->get_selected_projects();
 	if (selected_list.is_empty()) {
@@ -2869,21 +2880,18 @@ ProjectManager::ProjectManager() {
 		add_child(multi_scan_ask);
 
 		ask_update_settings = memnew(ConfirmationDialog);
+		ask_update_settings->set_autowrap(true);
 		ask_update_settings->get_ok_button()->connect("pressed", callable_mp(this, &ProjectManager::_confirm_update_settings));
-		full_convert_button = ask_update_settings->add_button("Perform Full Project Conversion", false);
+		full_convert_button = ask_update_settings->add_button("Convert Full Project", !GLOBAL_GET("gui/common/swap_cancel_ok"));
+		full_convert_button->connect("pressed", callable_mp(this, &ProjectManager::_full_convert_button_pressed));
 		add_child(ask_update_settings);
 
 		ask_full_convert_dialog = memnew(ConfirmationDialog);
 		ask_full_convert_dialog->set_autowrap(true);
-		ask_full_convert_dialog->set_text(TTR(R"(This option will perform full project conversion, updating scenes and scripts from Godot 3.x to work in Godot 4.0. Note that this is a best-effort conversion, i.e. it makes upgrading the project easier, but it will not open out-of-the-box and will still require manual adjustments.
-
-IMPORTANT: Make sure to backup your project before converting, as this operation makes it impossible to open in older versions of Godot.)"));
+		ask_full_convert_dialog->set_text(TTR("This option will perform full project conversion, updating scenes, resources and scripts from Godot 3.x to work in Godot 4.0.\n\nNote that this is a best-effort conversion, i.e. it makes upgrading the project easier, but it will not open out-of-the-box and will still require manual adjustments.\n\nIMPORTANT: Make sure to backup your project before converting, as this operation makes it impossible to open it in older versions of Godot."));
 		ask_full_convert_dialog->connect("confirmed", callable_mp(this, &ProjectManager::_perform_full_project_conversion));
 		add_child(ask_full_convert_dialog);
 
-		full_convert_button->connect("pressed", callable_mp((Window *)ask_update_settings, &ConfirmationDialog::hide));
-		full_convert_button->connect("pressed", callable_mp((Window *)ask_full_convert_dialog, &ConfirmationDialog::popup_centered_ratio).bind(0.2));
-
 		npdialog = memnew(ProjectDialog);
 		npdialog->connect("projects_updated", callable_mp(this, &ProjectManager::_on_projects_updated));
 		npdialog->connect("project_created", callable_mp(this, &ProjectManager::_on_project_created));

+ 1 - 0
editor/project_manager.h

@@ -108,6 +108,7 @@ class ProjectManager : public Control {
 	void _run_project_confirm();
 	void _open_selected_projects();
 	void _open_selected_projects_ask();
+	void _full_convert_button_pressed();
 	void _perform_full_project_conversion();
 	void _import_project();
 	void _new_project();