diff options
Diffstat (limited to 'editor/editor_file_dialog.cpp')
-rw-r--r-- | editor/editor_file_dialog.cpp | 52 |
1 files changed, 32 insertions, 20 deletions
diff --git a/editor/editor_file_dialog.cpp b/editor/editor_file_dialog.cpp index 8ded47605c..01aad0c41b 100644 --- a/editor/editor_file_dialog.cpp +++ b/editor/editor_file_dialog.cpp @@ -5,8 +5,8 @@ /* GODOT ENGINE */ /* https://godotengine.org */ /*************************************************************************/ -/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). */ /* */ /* Permission is hereby granted, free of charge, to any person obtaining */ /* a copy of this software and associated documentation files (the */ @@ -230,7 +230,6 @@ void EditorFileDialog::update_dir() { void EditorFileDialog::_dir_entered(String p_dir) { dir_access->change_dir(p_dir); - file->set_text(""); invalidate(); update_dir(); _push_history(); @@ -249,6 +248,14 @@ void EditorFileDialog::_save_confirm_pressed() { void EditorFileDialog::_post_popup() { ConfirmationDialog::_post_popup(); + + // Check if the current path doesn't exist and correct it. + String current = dir_access->get_current_dir(); + while (!dir_access->dir_exists(current)) { + current = current.get_base_dir(); + } + set_current_dir(current); + if (invalidated) { update_file_list(); invalidated = false; @@ -287,11 +294,17 @@ void EditorFileDialog::_post_popup() { } else { name = name.get_file() + "/"; } - - recent->add_item(name, folder); - recent->set_item_metadata(recent->get_item_count() - 1, recentd[i]); - recent->set_item_icon_modulate(recent->get_item_count() - 1, folder_color); + bool exists = dir_access->dir_exists(recentd[i]); + if (!exists) { + // Remove invalid directory from the list of Recent directories. + recentd.remove(i--); + } else { + recent->add_item(name, folder); + recent->set_item_metadata(recent->get_item_count() - 1, recentd[i]); + recent->set_item_icon_modulate(recent->get_item_count() - 1, folder_color); + } } + EditorSettings::get_singleton()->set_recent_dirs(recentd); local_history.clear(); local_history_pos = -1; @@ -442,9 +455,12 @@ void EditorFileDialog::_action_pressed() { } } + // Add first extension of filter if no valid extension is found. if (!valid) { - exterr->popup_centered(Size2(250, 80) * EDSCALE); - return; + int idx = filter->get_selected(); + String flt = filters[idx].get_slice(";", 0); + String ext = flt.get_slice(",", 0).strip_edges().get_extension(); + f += "." + ext; } if (dir_access->file_exists(f) && !disable_overwrite_warning) { @@ -499,7 +515,7 @@ void EditorFileDialog::_multi_selected(int p_item, bool p_selected) { } void EditorFileDialog::_items_clear_selection() { - item_list->unselect_all(); + item_list->deselect_all(); // If nothing is selected, then block Open button. switch (mode) { @@ -595,7 +611,7 @@ void EditorFileDialog::_item_list_item_rmb_selected(int p_item, const Vector2 &p void EditorFileDialog::_item_list_rmb_clicked(const Vector2 &p_pos) { // Right click on folder background. Deselect all files so that actions are applied on the current folder. for (int i = 0; i < item_list->get_item_count(); i++) { - item_list->unselect(i); + item_list->deselect(i); } item_menu->clear(); @@ -758,7 +774,7 @@ void EditorFileDialog::update_file_list() { dirs.sort_custom<NaturalNoCaseComparator>(); files.sort_custom<NaturalNoCaseComparator>(); - while (!dirs.empty()) { + while (!dirs.is_empty()) { const String &dir_name = dirs.front()->get(); item_list->add_item(dir_name); @@ -806,8 +822,8 @@ void EditorFileDialog::update_file_list() { } } - while (!files.empty()) { - bool match = patterns.empty(); + while (!files.is_empty()) { + bool match = patterns.is_empty(); for (List<String>::Element *E = patterns.front(); E; E = E->next()) { if (files.front()->get().matchn(E->get())) { @@ -849,7 +865,7 @@ void EditorFileDialog::update_file_list() { } if (favorites->get_current() >= 0) { - favorites->unselect(favorites->get_current()); + favorites->deselect(favorites->get_current()); } favorite->set_pressed(false); @@ -1226,7 +1242,7 @@ void EditorFileDialog::_update_favorites() { if (setthis) { favorite->set_pressed(true); favorites->set_current(favorites->get_item_count() - 1); - recent->unselect_all(); + recent->deselect_all(); } } } @@ -1683,10 +1699,6 @@ EditorFileDialog::EditorFileDialog() { mkdirerr->set_text(TTR("Could not create folder.")); add_child(mkdirerr); - exterr = memnew(AcceptDialog); - exterr->set_text(TTR("Must use a valid extension.")); - add_child(exterr); - update_filters(); update_dir(); |