summaryrefslogtreecommitdiffstats
path: root/editor/filesystem_dock.cpp
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2023-04-25 09:59:31 +0200
committerRémi Verschelde <rverschelde@gmail.com>2023-04-25 09:59:31 +0200
commit7b2d14280897a696b051d75fefda364f78b7b5fd (patch)
treeb7c64fbb2ee376b5e105e95ce5294ccf46c53e03 /editor/filesystem_dock.cpp
parent8cc1762398b7cb810a966721c0c8bd5678f9837e (diff)
parent9f38a68a59b6056fcb6a5c8c54ab5f88f66f4fad (diff)
downloadredot-engine-7b2d14280897a696b051d75fefda364f78b7b5fd.tar.gz
Merge pull request #76084 from timothyqiu/nested-folders
Make create folder popup support nested folders
Diffstat (limited to 'editor/filesystem_dock.cpp')
-rw-r--r--editor/filesystem_dock.cpp59
1 files changed, 9 insertions, 50 deletions
diff --git a/editor/filesystem_dock.cpp b/editor/filesystem_dock.cpp
index 445a54e346..169e78c0f5 100644
--- a/editor/filesystem_dock.cpp
+++ b/editor/filesystem_dock.cpp
@@ -38,6 +38,7 @@
#include "core/os/os.h"
#include "core/templates/list.h"
#include "editor/create_dialog.h"
+#include "editor/directory_create_dialog.h"
#include "editor/editor_feature_profile.h"
#include "editor/editor_node.h"
#include "editor/editor_resource_preview.h"
@@ -1514,43 +1515,6 @@ void FileSystemDock::_save_scenes_after_move(const HashMap<String, String> &p_re
EditorNode::get_singleton()->save_scene_list(new_filenames);
}
-void FileSystemDock::_make_dir_confirm() {
- String dir_name = make_dir_dialog_text->get_text().strip_edges();
-
- if (dir_name.length() == 0) {
- EditorNode::get_singleton()->show_warning(TTR("No name provided."));
- return;
- } else if (dir_name.contains("/") || dir_name.contains("\\") || dir_name.contains(":") || dir_name.contains("*") ||
- dir_name.contains("|") || dir_name.contains(">") || dir_name.ends_with(".") || dir_name.ends_with(" ")) {
- EditorNode::get_singleton()->show_warning(TTR("Provided name contains invalid characters."));
- return;
- }
-
- String directory = path;
- if (!directory.ends_with("/")) {
- directory = directory.get_base_dir();
- }
-
- print_verbose("Making folder " + dir_name + " in " + directory);
- Ref<DirAccess> da = DirAccess::create(DirAccess::ACCESS_RESOURCES);
- Error err = da->change_dir(directory);
- ERR_FAIL_COND_MSG(err != OK, "Cannot open directory '" + directory + "'.");
-
- if (da->dir_exists(dir_name)) {
- EditorNode::get_singleton()->show_warning(TTR("Could not create folder. File with that name already exists."));
- return;
- }
-
- err = da->make_dir(dir_name);
-
- if (err == OK) {
- print_verbose("FileSystem: calling rescan.");
- _rescan();
- } else {
- EditorNode::get_singleton()->show_warning(TTR("Could not create folder."));
- }
-}
-
void FileSystemDock::_make_scene_confirm() {
const String scene_path = make_scene_dialog->get_scene_path();
@@ -2105,10 +2069,12 @@ void FileSystemDock::_file_option(int p_option, const Vector<String> &p_selected
} break;
case FILE_NEW_FOLDER: {
- make_dir_dialog_text->set_text("new folder");
- make_dir_dialog_text->select_all();
- make_dir_dialog->popup_centered(Size2(250, 80) * EDSCALE);
- make_dir_dialog_text->grab_focus();
+ String directory = path;
+ if (!directory.ends_with("/")) {
+ directory = directory.get_base_dir();
+ }
+ make_dir_dialog->config(directory);
+ make_dir_dialog->popup_centered();
} break;
case FILE_NEW_SCENE: {
@@ -3349,16 +3315,9 @@ FileSystemDock::FileSystemDock() {
duplicate_dialog->register_text_enter(duplicate_dialog_text);
duplicate_dialog->connect("confirmed", callable_mp(this, &FileSystemDock::_duplicate_operation_confirm));
- make_dir_dialog = memnew(ConfirmationDialog);
- make_dir_dialog->set_title(TTR("Create Folder"));
- VBoxContainer *make_folder_dialog_vb = memnew(VBoxContainer);
- make_dir_dialog->add_child(make_folder_dialog_vb);
-
- make_dir_dialog_text = memnew(LineEdit);
- make_folder_dialog_vb->add_margin_child(TTR("Name:"), make_dir_dialog_text);
+ make_dir_dialog = memnew(DirectoryCreateDialog);
add_child(make_dir_dialog);
- make_dir_dialog->register_text_enter(make_dir_dialog_text);
- make_dir_dialog->connect("confirmed", callable_mp(this, &FileSystemDock::_make_dir_confirm));
+ make_dir_dialog->connect("dir_created", callable_mp(this, &FileSystemDock::_rescan));
make_scene_dialog = memnew(SceneCreateDialog);
add_child(make_scene_dialog);