Allow configuring the script filename casing rule

Defaults to "Auto", which detects the casing based on the
preference of the currently selected language (C# for example
prefers PascalCase whereas GDScript prefers snake_case).
This commit is contained in:
RedMser 2023-06-11 18:23:48 +02:00 committed by Rémi Verschelde
parent a07dd0d6a5
commit 2bd714e34e
No known key found for this signature in database
GPG key ID: C3336907360768E1
15 changed files with 103 additions and 57 deletions

View file

@ -125,7 +125,6 @@ void ScriptCreateDialog::_notification(int p_what) {
for (int i = 0; i < language_menu->get_item_count(); i++) {
if (language_menu->get_item_text(i) == last_language) {
language_menu->select(i);
current_language = i;
break;
}
}
@ -146,8 +145,8 @@ void ScriptCreateDialog::_notification(int p_what) {
void ScriptCreateDialog::_path_hbox_sorted() {
if (is_visible()) {
int filename_start_pos = initial_bp.rfind("/") + 1;
int filename_end_pos = initial_bp.length();
int filename_start_pos = file_path->get_text().rfind("/") + 1;
int filename_end_pos = file_path->get_text().length();
if (!is_built_in) {
file_path->select(filename_start_pos, filename_end_pos);
@ -166,26 +165,30 @@ bool ScriptCreateDialog::_can_be_built_in() {
return (supports_built_in && built_in_enabled);
}
String ScriptCreateDialog::_adjust_file_path(const String &p_base_path) const {
if (p_base_path.is_empty()) {
return p_base_path;
}
String base_dir = p_base_path.get_base_dir();
String file_name = p_base_path.get_file().get_basename();
file_name = EditorNode::adjust_script_name_casing(file_name, language->preferred_file_name_casing());
String extension = language->get_extension();
return base_dir.path_join(file_name + "." + extension);
}
void ScriptCreateDialog::config(const String &p_base_name, const String &p_base_path, bool p_built_in_enabled, bool p_load_enabled) {
parent_name->set_text(p_base_name);
parent_name->deselect();
built_in_name->set_text("");
if (!p_base_path.is_empty()) {
initial_bp = p_base_path.get_basename();
file_path->set_text(initial_bp + "." + ScriptServer::get_language(language_menu->get_selected())->get_extension());
current_language = language_menu->get_selected();
} else {
initial_bp = "";
file_path->set_text("");
}
file_path->set_text(p_base_path);
file_path->deselect();
built_in_enabled = p_built_in_enabled;
load_enabled = p_load_enabled;
_language_changed(current_language);
_path_changed(file_path->get_text());
_language_changed(language_menu->get_selected());
}
void ScriptCreateDialog::set_inheritance_base_type(const String &p_base) {
@ -388,38 +391,9 @@ void ScriptCreateDialog::_language_changed(int l) {
is_built_in = false;
}
String selected_ext = "." + language->get_extension();
String path = file_path->get_text();
String extension = "";
if (!path.is_empty()) {
if (path.contains(".")) {
extension = path.get_extension();
}
if (extension.length() == 0) {
// Add extension if none.
path += selected_ext;
_path_changed(path);
} else {
// Change extension by selected language.
List<String> extensions;
// Get all possible extensions for script.
for (int m = 0; m < language_menu->get_item_count(); m++) {
ScriptServer::get_language(m)->get_recognized_extensions(&extensions);
}
for (const String &E : extensions) {
if (E.nocasecmp_to(extension) == 0) {
path = path.get_basename() + selected_ext;
_path_changed(path);
break;
}
}
}
} else {
path = "class" + selected_ext;
_path_changed(path);
}
path = _adjust_file_path(path);
_path_changed(path);
file_path->set_text(path);
EditorSettings::get_singleton()->set_project_metadata("script_setup", "last_selected_language", language_menu->get_item_text(language_menu->get_selected()));
@ -896,7 +870,6 @@ ScriptCreateDialog::ScriptCreateDialog() {
if (default_language >= 0) {
language_menu->select(default_language);
}
current_language = default_language;
language_menu->connect("item_selected", callable_mp(this, &ScriptCreateDialog::_language_changed));