diff options
author | Max Hilbrunner <mhilbrunner@users.noreply.github.com> | 2018-07-05 00:30:06 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-07-05 00:30:06 +0200 |
commit | 4f39d330cf1c6434988fffa5b01428d86d1e3d4c (patch) | |
tree | d20c8a83bfbd5e678fa4e368f04c35bf0db02566 /editor | |
parent | dc2d8d4dee22ca870dffb7a7a4508dabb18a9988 (diff) | |
parent | 8ae652bd592c519373d8423a6e337b99940643e3 (diff) |
Merge pull request #19245 from swarnimarun/overwrite_fix
Fix overwrite of file/folder of same name without warning
Diffstat (limited to 'editor')
-rw-r--r-- | editor/filesystem_dock.cpp | 42 | ||||
-rw-r--r-- | editor/filesystem_dock.h | 6 |
2 files changed, 46 insertions, 2 deletions
diff --git a/editor/filesystem_dock.cpp b/editor/filesystem_dock.cpp index 9a0432ad58..f2a8ffdafc 100644 --- a/editor/filesystem_dock.cpp +++ b/editor/filesystem_dock.cpp @@ -1054,7 +1054,40 @@ void FileSystemDock::_duplicate_operation_confirm() { _rescan(); } -void FileSystemDock::_move_operation_confirm(const String &p_to_path) { +void FileSystemDock::_move_with_overwrite() { + _move_operation_confirm(to_move_path, true); +} + +bool FileSystemDock::_check_existing() { + String &p_to_path = to_move_path; + for (int i = 0; i < to_move.size(); i++) { + String ol_pth = to_move[i].path.ends_with("/") ? to_move[i].path.substr(0, to_move[i].path.length() - 1) : to_move[i].path; + String p_new_path = p_to_path.plus_file(ol_pth.get_file()); + FileOrFolder p_item = to_move[i]; + + String old_path = (p_item.is_file || p_item.path.ends_with("/")) ? p_item.path : (p_item.path + "/"); + String new_path = (p_item.is_file || p_new_path.ends_with("/")) ? p_new_path : (p_new_path + "/"); + + if (p_item.is_file && FileAccess::exists(new_path)) { + return false; + } else if (!p_item.is_file && DirAccess::exists(new_path)) { + return false; + } + } + return true; +} + +void FileSystemDock::_move_operation_confirm(const String &p_to_path, bool overwrite) { + if (!overwrite) { + to_move_path = p_to_path; + bool can_move = _check_existing(); + if (!can_move) { + //ask to do something + overwrite_dialog->popup_centered_minsize(); + overwrite_dialog->grab_focus(); + return; + } + } Map<String, String> file_renames; Map<String, String> folder_renames; @@ -1813,6 +1846,7 @@ void FileSystemDock::_bind_methods() { ClassDB::bind_method(D_METHOD("_folder_option"), &FileSystemDock::_folder_option); ClassDB::bind_method(D_METHOD("_make_dir_confirm"), &FileSystemDock::_make_dir_confirm); ClassDB::bind_method(D_METHOD("_move_operation_confirm"), &FileSystemDock::_move_operation_confirm); + ClassDB::bind_method(D_METHOD("_move_with_overwrite"), &FileSystemDock::_move_with_overwrite); ClassDB::bind_method(D_METHOD("_rename_operation_confirm"), &FileSystemDock::_rename_operation_confirm); ClassDB::bind_method(D_METHOD("_duplicate_operation_confirm"), &FileSystemDock::_duplicate_operation_confirm); @@ -2004,6 +2038,12 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) { rename_dialog->register_text_enter(rename_dialog_text); rename_dialog->connect("confirmed", this, "_rename_operation_confirm"); + overwrite_dialog = memnew(ConfirmationDialog); + overwrite_dialog->set_text(TTR("There is already file or folder with the same name in this location.")); + overwrite_dialog->get_ok()->set_text(TTR("Overwrite")); + add_child(overwrite_dialog); + overwrite_dialog->connect("confirmed", this, "_move_with_overwrite"); + duplicate_dialog = memnew(ConfirmationDialog); VBoxContainer *duplicate_dialog_vb = memnew(VBoxContainer); duplicate_dialog->add_child(duplicate_dialog_vb); diff --git a/editor/filesystem_dock.h b/editor/filesystem_dock.h index 53f77b64f9..96b81fd229 100644 --- a/editor/filesystem_dock.h +++ b/editor/filesystem_dock.h @@ -129,6 +129,7 @@ private: LineEdit *duplicate_dialog_text; ConfirmationDialog *make_dir_dialog; LineEdit *make_dir_dialog_text; + ConfirmationDialog *overwrite_dialog; ScriptCreateDialog *make_script_dialog_text; class FileOrFolder { @@ -146,6 +147,7 @@ private: FileOrFolder to_rename; FileOrFolder to_duplicate; Vector<FileOrFolder> to_move; + String to_move_path; Vector<String> history; int history_pos; @@ -191,7 +193,9 @@ private: void _make_dir_confirm(); void _rename_operation_confirm(); void _duplicate_operation_confirm(); - void _move_operation_confirm(const String &p_to_path); + void _move_with_overwrite(); + bool _check_existing(); + void _move_operation_confirm(const String &p_to_path, bool overwrite = false); void _file_option(int p_option); void _folder_option(int p_option); |