Merge pull request #42779 from volzhs/editor-file-dialog
Enhance editor file dialog
This commit is contained in:
commit
950dedbb68
|
@ -230,7 +230,6 @@ void EditorFileDialog::update_dir() {
|
||||||
|
|
||||||
void EditorFileDialog::_dir_entered(String p_dir) {
|
void EditorFileDialog::_dir_entered(String p_dir) {
|
||||||
dir_access->change_dir(p_dir);
|
dir_access->change_dir(p_dir);
|
||||||
file->set_text("");
|
|
||||||
invalidate();
|
invalidate();
|
||||||
update_dir();
|
update_dir();
|
||||||
_push_history();
|
_push_history();
|
||||||
|
@ -249,6 +248,14 @@ void EditorFileDialog::_save_confirm_pressed() {
|
||||||
|
|
||||||
void EditorFileDialog::_post_popup() {
|
void EditorFileDialog::_post_popup() {
|
||||||
ConfirmationDialog::_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) {
|
if (invalidated) {
|
||||||
update_file_list();
|
update_file_list();
|
||||||
invalidated = false;
|
invalidated = false;
|
||||||
|
@ -287,11 +294,17 @@ void EditorFileDialog::_post_popup() {
|
||||||
} else {
|
} else {
|
||||||
name = name.get_file() + "/";
|
name = name.get_file() + "/";
|
||||||
}
|
}
|
||||||
|
bool exists = dir_access->dir_exists(recentd[i]);
|
||||||
recent->add_item(name, folder);
|
if (!exists) {
|
||||||
recent->set_item_metadata(recent->get_item_count() - 1, recentd[i]);
|
// Remove invalid directory from the list of Recent directories.
|
||||||
recent->set_item_icon_modulate(recent->get_item_count() - 1, folder_color);
|
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.clear();
|
||||||
local_history_pos = -1;
|
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) {
|
if (!valid) {
|
||||||
exterr->popup_centered(Size2(250, 80) * EDSCALE);
|
int idx = filter->get_selected();
|
||||||
return;
|
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) {
|
if (dir_access->file_exists(f) && !disable_overwrite_warning) {
|
||||||
|
@ -1683,10 +1699,6 @@ EditorFileDialog::EditorFileDialog() {
|
||||||
mkdirerr->set_text(TTR("Could not create folder."));
|
mkdirerr->set_text(TTR("Could not create folder."));
|
||||||
add_child(mkdirerr);
|
add_child(mkdirerr);
|
||||||
|
|
||||||
exterr = memnew(AcceptDialog);
|
|
||||||
exterr->set_text(TTR("Must use a valid extension."));
|
|
||||||
add_child(exterr);
|
|
||||||
|
|
||||||
update_filters();
|
update_filters();
|
||||||
update_dir();
|
update_dir();
|
||||||
|
|
||||||
|
|
|
@ -110,7 +110,6 @@ private:
|
||||||
LineEdit *file;
|
LineEdit *file;
|
||||||
OptionButton *filter;
|
OptionButton *filter;
|
||||||
AcceptDialog *mkdirerr;
|
AcceptDialog *mkdirerr;
|
||||||
AcceptDialog *exterr;
|
|
||||||
DirAccess *dir_access;
|
DirAccess *dir_access;
|
||||||
ConfirmationDialog *confirm_save;
|
ConfirmationDialog *confirm_save;
|
||||||
DependencyRemoveDialog *remove_dialog;
|
DependencyRemoveDialog *remove_dialog;
|
||||||
|
|
|
@ -2313,7 +2313,7 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) {
|
||||||
int scene_idx = (p_option == FILE_SAVE_SCENE) ? -1 : tab_closing;
|
int scene_idx = (p_option == FILE_SAVE_SCENE) ? -1 : tab_closing;
|
||||||
|
|
||||||
Node *scene = editor_data.get_edited_scene_root(scene_idx);
|
Node *scene = editor_data.get_edited_scene_root(scene_idx);
|
||||||
if (scene && scene->get_filename() != "") {
|
if (scene && scene->get_filename() != "" && FileAccess::exists(scene->get_filename())) {
|
||||||
if (scene_idx != editor_data.get_edited_scene()) {
|
if (scene_idx != editor_data.get_edited_scene()) {
|
||||||
_save_scene_with_preview(scene->get_filename(), scene_idx);
|
_save_scene_with_preview(scene->get_filename(), scene_idx);
|
||||||
} else {
|
} else {
|
||||||
|
@ -2358,11 +2358,12 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (scene->get_filename() != "") {
|
if (scene->get_filename() != "") {
|
||||||
file->set_current_path(scene->get_filename());
|
String path = scene->get_filename();
|
||||||
|
file->set_current_path(path);
|
||||||
if (extensions.size()) {
|
if (extensions.size()) {
|
||||||
String ext = scene->get_filename().get_extension().to_lower();
|
String ext = path.get_extension().to_lower();
|
||||||
if (extensions.find(ext) == nullptr) {
|
if (extensions.find(ext) == nullptr) {
|
||||||
file->set_current_path(scene->get_filename().replacen("." + ext, "." + extensions.front()->get()));
|
file->set_current_path(path.replacen("." + ext, "." + extensions.front()->get()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in a new issue