Skip to content

Commit

Permalink
Merge pull request #35320 from Calinou/edited-scene-extension-if-ambi…
Browse files Browse the repository at this point in the history
…guous

Display scene file extensions in the editor only if there's ambiguity
  • Loading branch information
akien-mga authored Mar 23, 2021
2 parents 70eff30 + 218d124 commit ecfa2f8
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 9 deletions.
28 changes: 22 additions & 6 deletions editor/editor_data.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -741,20 +741,36 @@ Ref<Script> EditorData::get_scene_root_script(int p_idx) const {
return s;
}

String EditorData::get_scene_title(int p_idx) const {
String EditorData::get_scene_title(int p_idx, bool p_always_strip_extension) const {
ERR_FAIL_INDEX_V(p_idx, edited_scene.size(), String());
if (!edited_scene[p_idx].root) {
return TTR("[empty]");
}
if (edited_scene[p_idx].root->get_filename() == "") {
return TTR("[unsaved]");
}
bool show_ext = EDITOR_DEF("interface/scene_tabs/show_extension", false);
String name = edited_scene[p_idx].root->get_filename().get_file();
if (!show_ext) {
name = name.get_basename();

const String filename = edited_scene[p_idx].root->get_filename().get_file();
const String basename = filename.get_basename();

if (p_always_strip_extension) {
return basename;
}

// Return the filename including the extension if there's ambiguity (e.g. both `foo.tscn` and `foo.scn` are being edited).
for (int i = 0; i < edited_scene.size(); i++) {
if (i == p_idx) {
// Don't compare the edited scene against itself.
continue;
}

if (edited_scene[i].root && basename == edited_scene[i].root->get_filename().get_file().get_basename()) {
return filename;
}
}
return name;

// Else, return just the basename as there's no ambiguity.
return basename;
}

void EditorData::set_scene_path(int p_idx, const String &p_path) {
Expand Down
2 changes: 1 addition & 1 deletion editor/editor_data.h
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,7 @@ class EditorData {
Node *get_edited_scene_root(int p_idx = -1);
int get_edited_scene_count() const;
Vector<EditedScene> get_edited_scenes() const;
String get_scene_title(int p_idx) const;
String get_scene_title(int p_idx, bool p_always_strip_extension = false) const;
String get_scene_path(int p_idx) const;
String get_scene_type(int p_idx) const;
void set_scene_path(int p_idx, const String &p_path);
Expand Down
1 change: 0 additions & 1 deletion editor/editor_settings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -460,7 +460,6 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
hints["interface/theme/custom_theme"] = PropertyInfo(Variant::STRING, "interface/theme/custom_theme", PROPERTY_HINT_GLOBAL_FILE, "*.res,*.tres,*.theme", PROPERTY_USAGE_DEFAULT);

// Scene tabs
_initial_set("interface/scene_tabs/show_extension", false);
_initial_set("interface/scene_tabs/show_thumbnail_on_hover", true);
_initial_set("interface/scene_tabs/resize_if_many_tabs", true);
_initial_set("interface/scene_tabs/minimum_width", 50);
Expand Down
5 changes: 4 additions & 1 deletion editor/rename_dialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -434,7 +434,10 @@ String RenameDialog::_substitute(const String &subject, const Node *node, int co
}

int current = EditorNode::get_singleton()->get_editor_data().get_edited_scene();
result = result.replace("${SCENE}", EditorNode::get_singleton()->get_editor_data().get_scene_title(current));
// Always request the scene title with the extension stripped.
// Otherwise, the result could vary depending on whether a scene with the same name
// (but different extension) is currently open.
result = result.replace("${SCENE}", EditorNode::get_singleton()->get_editor_data().get_scene_title(current, true));

Node *root_node = SceneTree::get_singleton()->get_edited_scene_root();
if (root_node) {
Expand Down

0 comments on commit ecfa2f8

Please sign in to comment.