Add right click option to create folders.

This commit is contained in:
MillionOstrich 2017-10-01 23:33:43 +01:00
parent 40d1866b05
commit 0939c0a9ce
2 changed files with 58 additions and 0 deletions

View file

@ -808,6 +808,33 @@ void FileSystemDock::_update_dependencies_after_move(const Map<String, String> &
} }
} }
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.find("/") != -1 || dir_name.find("\\") != -1 || dir_name.find(":") != -1) {
EditorNode::get_singleton()->show_warning(TTR("Provided name contains invalid characters"));
return;
}
print_line("Making folder " + dir_name + " in " + path);
DirAccess *da = DirAccess::create(DirAccess::ACCESS_RESOURCES);
Error err = da->change_dir(path);
if (err == OK) {
err = da->make_dir(dir_name);
}
memdelete(da);
if (err == OK) {
print_line("call rescan!");
_rescan();
} else {
EditorNode::get_singleton()->show_warning(TTR("Could not create folder."));
}
}
void FileSystemDock::_rename_operation_confirm() { void FileSystemDock::_rename_operation_confirm() {
String new_name = rename_dialog_text->get_text().strip_edges(); String new_name = rename_dialog_text->get_text().strip_edges();
@ -993,6 +1020,12 @@ void FileSystemDock::_file_option(int p_option) {
} }
*/ */
} break; } break;
case FILE_NEW_FOLDER: {
make_dir_dialog_text->set_text("new folder");
make_dir_dialog_text->select_all();
make_dir_dialog->popup_centered_minsize(Size2(250, 80) * EDSCALE);
make_dir_dialog_text->grab_focus();
} break;
case FILE_COPY_PATH: { case FILE_COPY_PATH: {
int idx = files->get_current(); int idx = files->get_current();
if (idx < 0 || idx >= files->get_item_count()) if (idx < 0 || idx >= files->get_item_count())
@ -1052,6 +1085,12 @@ void FileSystemDock::_folder_option(int p_option) {
remove_dialog->show(remove_folders, remove_files); remove_dialog->show(remove_folders, remove_files);
} }
} break; } break;
case FOLDER_NEW_FOLDER: {
make_dir_dialog_text->set_text("new folder");
make_dir_dialog_text->select_all();
make_dir_dialog->popup_centered_minsize(Size2(250, 80) * EDSCALE);
make_dir_dialog_text->grab_focus();
} break;
case FOLDER_COPY_PATH: { case FOLDER_COPY_PATH: {
String path = item->get_metadata(tree->get_selected_column()); String path = item->get_metadata(tree->get_selected_column());
OS::get_singleton()->set_clipboard(path); OS::get_singleton()->set_clipboard(path);
@ -1110,6 +1149,7 @@ void FileSystemDock::_dir_rmb_pressed(const Vector2 &p_pos) {
folder_options->add_item(TTR("Delete"), FOLDER_REMOVE); folder_options->add_item(TTR("Delete"), FOLDER_REMOVE);
} }
folder_options->add_separator(); folder_options->add_separator();
folder_options->add_item(TTR("New Folder.."), FOLDER_NEW_FOLDER);
folder_options->add_item(TTR("Show In File Manager"), FOLDER_SHOW_IN_EXPLORER); folder_options->add_item(TTR("Show In File Manager"), FOLDER_SHOW_IN_EXPLORER);
} }
folder_options->set_position(tree->get_global_position() + p_pos); folder_options->set_position(tree->get_global_position() + p_pos);
@ -1496,6 +1536,7 @@ void FileSystemDock::_files_list_rmb_select(int p_item, const Vector2 &p_pos) {
file_options->add_separator(); file_options->add_separator();
} }
file_options->add_item(TTR("New Folder.."), FILE_NEW_FOLDER);
file_options->add_item(TTR("Show In File Manager"), FILE_SHOW_IN_EXPLORER); file_options->add_item(TTR("Show In File Manager"), FILE_SHOW_IN_EXPLORER);
file_options->set_position(files->get_global_position() + p_pos); file_options->set_position(files->get_global_position() + p_pos);
@ -1582,6 +1623,7 @@ void FileSystemDock::_bind_methods() {
ClassDB::bind_method(D_METHOD("_dir_selected"), &FileSystemDock::_dir_selected); ClassDB::bind_method(D_METHOD("_dir_selected"), &FileSystemDock::_dir_selected);
ClassDB::bind_method(D_METHOD("_file_option"), &FileSystemDock::_file_option); ClassDB::bind_method(D_METHOD("_file_option"), &FileSystemDock::_file_option);
ClassDB::bind_method(D_METHOD("_folder_option"), &FileSystemDock::_folder_option); 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_operation_confirm"), &FileSystemDock::_move_operation_confirm);
ClassDB::bind_method(D_METHOD("_rename_operation_confirm"), &FileSystemDock::_rename_operation_confirm); ClassDB::bind_method(D_METHOD("_rename_operation_confirm"), &FileSystemDock::_rename_operation_confirm);
@ -1752,6 +1794,17 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) {
rename_dialog->register_text_enter(rename_dialog_text); rename_dialog->register_text_enter(rename_dialog_text);
rename_dialog->connect("confirmed", this, "_rename_operation_confirm"); rename_dialog->connect("confirmed", this, "_rename_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);
add_child(make_dir_dialog);
make_dir_dialog->register_text_enter(make_dir_dialog_text);
make_dir_dialog->connect("confirmed", this, "_make_dir_confirm");
updating_tree = false; updating_tree = false;
initialized = false; initialized = false;

View file

@ -72,6 +72,7 @@ private:
FILE_REMOVE, FILE_REMOVE,
FILE_REIMPORT, FILE_REIMPORT,
FILE_INFO, FILE_INFO,
FILE_NEW_FOLDER,
FILE_SHOW_IN_EXPLORER, FILE_SHOW_IN_EXPLORER,
FILE_COPY_PATH FILE_COPY_PATH
}; };
@ -82,6 +83,7 @@ private:
FOLDER_MOVE, FOLDER_MOVE,
FOLDER_RENAME, FOLDER_RENAME,
FOLDER_REMOVE, FOLDER_REMOVE,
FOLDER_NEW_FOLDER,
FOLDER_SHOW_IN_EXPLORER, FOLDER_SHOW_IN_EXPLORER,
FOLDER_COPY_PATH FOLDER_COPY_PATH
}; };
@ -118,6 +120,8 @@ private:
EditorDirDialog *move_dialog; EditorDirDialog *move_dialog;
ConfirmationDialog *rename_dialog; ConfirmationDialog *rename_dialog;
LineEdit *rename_dialog_text; LineEdit *rename_dialog_text;
ConfirmationDialog *make_dir_dialog;
LineEdit *make_dir_dialog_text;
class FileOrFolder { class FileOrFolder {
public: public:
@ -158,6 +162,7 @@ private:
void _try_move_item(const FileOrFolder &p_item, const String &p_new_path, Map<String, String> &p_renames) const; void _try_move_item(const FileOrFolder &p_item, const String &p_new_path, Map<String, String> &p_renames) const;
void _update_dependencies_after_move(const Map<String, String> &p_renames) const; void _update_dependencies_after_move(const Map<String, String> &p_renames) const;
void _make_dir_confirm();
void _rename_operation_confirm(); void _rename_operation_confirm();
void _move_operation_confirm(const String &p_to_path); void _move_operation_confirm(const String &p_to_path);