From 8948b36f0d516d55ccf9511b89941eec97b6614b Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Tue, 18 Jan 2022 17:12:39 +0100 Subject: [PATCH] Add project setting to change scene file casing The default behavior is unchanged (the root node name is used as-is). --- editor/editor_node.cpp | 23 +++++++++++++++++------ editor/editor_node.h | 6 ++++++ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index e59fc26aaa2..e7f163c5b91 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -2432,13 +2432,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_centered_ratio(); file->set_title(TTR("Save Scene As...")); @@ -5575,6 +5583,9 @@ void EditorNode::_feature_profile_changed() { } void EditorNode::_bind_methods() { + GLOBAL_DEF("editor/scene/scene_naming", SCENE_NAME_CASING_AUTO); + 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("_menu_option", &EditorNode::_menu_option); ClassDB::bind_method("_tool_menu_option", &EditorNode::_tool_menu_option); ClassDB::bind_method("_menu_confirm_current", &EditorNode::_menu_confirm_current); diff --git a/editor/editor_node.h b/editor/editor_node.h index 6cec3c333c8..b6b0ba2a32b 100644 --- a/editor/editor_node.h +++ b/editor/editor_node.h @@ -217,6 +217,12 @@ private: TOOL_MENU_BASE = 1000 }; + enum ScriptNameCasing { + SCENE_NAME_CASING_AUTO, + SCENE_NAME_CASING_PASCAL_CASE, + SCENE_NAME_CASING_SNAKE_CASE + }; + Viewport *scene_root; //root of the scene being edited PanelContainer *scene_root_parent;