diff options
Diffstat (limited to 'editor/project_manager.cpp')
| -rw-r--r-- | editor/project_manager.cpp | 54 | 
1 files changed, 31 insertions, 23 deletions
diff --git a/editor/project_manager.cpp b/editor/project_manager.cpp index f11874a994..69a2670418 100644 --- a/editor/project_manager.cpp +++ b/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));  |