Skip to content

Commit

Permalink
Display scene file extensions in the editor only if there's ambiguity
Browse files Browse the repository at this point in the history
This also simplifies the Editor Settings as the extension is now
automatically shown to avoid ambiguity.
  • Loading branch information
Calinou committed Mar 20, 2021
1 parent 6608d99 commit 218d124
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 218d124

Please sign in to comment.