Merge pull request #52597 from Jummit/scene_casing_setting

This commit is contained in:
Rémi Verschelde 2022-01-18 13:24:58 +01:00 committed by GitHub
commit 0a67b46396
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 6 deletions

View file

@ -2593,13 +2593,21 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) {
file->set_current_path(path.replacen("." + ext, "." + extensions.front()->get()));
}
}
} else {
String existing;
if (extensions.size()) {
String root_name(scene->get_name());
existing = root_name + "." + extensions.front()->get().to_lower();
} else if (extensions.size()) {
String root_name = scene->get_name();
// Very similar to node naming logic.
switch (ProjectSettings::get_singleton()->get("editor/scene/scene_naming").operator int()) {
case SCENE_NAME_CASING_AUTO:
// Use casing of the root node.
break;
case SCENE_NAME_CASING_PASCAL_CASE: {
root_name = root_name.capitalize().replace(" ", "");
} break;
case SCENE_NAME_CASING_SNAKE_CASE:
root_name = root_name.capitalize().replace(" ", "").replace("-", "_").camelcase_to_underscore();
break;
}
file->set_current_path(existing);
file->set_current_path(root_name + "." + extensions.front()->get().to_lower());
}
file->popup_file_dialog();
file->set_title(TTR("Save Scene As..."));
@ -5673,6 +5681,8 @@ void EditorNode::_feature_profile_changed() {
}
void EditorNode::_bind_methods() {
GLOBAL_DEF("editor/scene/scene_naming", SCENE_NAME_CASING_SNAKE_CASE);
ProjectSettings::get_singleton()->set_custom_property_info("editor/scene/scene_naming", PropertyInfo(Variant::INT, "editor/scene/scene_naming", PROPERTY_HINT_ENUM, "Auto,PascalCase,snake_case"));
ClassDB::bind_method("_editor_select", &EditorNode::_editor_select);
ClassDB::bind_method("_node_renamed", &EditorNode::_node_renamed);
ClassDB::bind_method("edit_node", &EditorNode::edit_node);

View file

@ -216,6 +216,12 @@ private:
TOOL_MENU_BASE = 1000
};
enum ScriptNameCasing {
SCENE_NAME_CASING_AUTO,
SCENE_NAME_CASING_PASCAL_CASE,
SCENE_NAME_CASING_SNAKE_CASE
};
SubViewport *scene_root; // root of the scene being edited
PanelContainer *scene_root_parent;