Browse Source

Add better alert dialogs if directory already exists

Signed-off-by: Daniel Kříž <[email protected]>
Daniel Kříž 3 years ago
parent
commit
2a6cb29a0f
3 changed files with 19 additions and 1 deletions
  1. 6 1
      editor/editor_dir_dialog.cpp
  2. 7 0
      editor/editor_file_dialog.cpp
  3. 6 0
      editor/filesystem_dock.cpp

+ 6 - 1
editor/editor_dir_dialog.cpp

@@ -156,10 +156,15 @@ void EditorDirDialog::_make_dir_confirm() {
 
 	String dir = ti->get_metadata(0);
 
+	if (EditorFileSystem::get_singleton()->get_filesystem_path(dir + makedirname->get_text())) {
+		mkdirerr->set_text(TTR("Could not create folder. File with that name already exists."));
+		mkdirerr->popup_centered();
+		return;
+	}
+
 	DirAccessRef d = DirAccess::open(dir);
 	ERR_FAIL_COND_MSG(!d, "Cannot open directory '" + dir + "'.");
 	Error err = d->make_dir(makedirname->get_text());
-
 	if (err != OK) {
 		mkdirerr->popup_centered(Size2(250, 80) * EDSCALE);
 	} else {

+ 7 - 0
editor/editor_file_dialog.cpp

@@ -1092,6 +1092,13 @@ EditorFileDialog::Access EditorFileDialog::get_access() const {
 }
 
 void EditorFileDialog::_make_dir_confirm() {
+	if (EditorFileSystem::get_singleton()->get_filesystem_path(makedirname->get_text().strip_edges())) {
+		error_dialog->set_text(TTR("Could not create folder. File with that name already exists."));
+		error_dialog->popup_centered(Size2(250, 50) * EDSCALE);
+		makedirname->set_text(""); // Reset label.
+		return;
+	}
+
 	Error err = dir_access->make_dir(makedirname->get_text().strip_edges());
 	if (err == OK) {
 		dir_access->change_dir(makedirname->get_text().strip_edges());

+ 6 - 0
editor/filesystem_dock.cpp

@@ -1413,6 +1413,12 @@ void FileSystemDock::_make_dir_confirm() {
 	if (!directory.ends_with("/")) {
 		directory = directory.get_base_dir();
 	}
+
+	if (EditorFileSystem::get_singleton()->get_filesystem_path(directory + dir_name)) {
+		EditorNode::get_singleton()->show_warning(TTR("Could not create folder. File with that name already exists."));
+		return;
+	}
+
 	print_verbose("Making folder " + dir_name + " in " + directory);
 	DirAccessRef da = DirAccess::create(DirAccess::ACCESS_RESOURCES);
 	Error err = da->change_dir(directory);