浏览代码

Merge pull request #47201 from LightningAA/delete-from-project-manager-3.x

[3.x] Add the ability to remove project contents from the remove project dialog
Rémi Verschelde 4 年之前
父节点
当前提交
7968208b0a
共有 2 个文件被更改,包括 25 次插入6 次删除
  1. 21 6
      editor/project_manager.cpp
  2. 4 0
      editor/project_manager.h

+ 21 - 6
editor/project_manager.cpp

@@ -1029,7 +1029,7 @@ public:
 	void sort_projects();
 	int get_project_count() const;
 	void select_project(int p_index);
-	void erase_selected_projects();
+	void erase_selected_projects(bool p_delete_project_contents);
 	Vector<Item> get_selected_projects() const;
 	const Set<String> &get_selected_project_keys() const;
 	void ensure_project_visible(int p_index);
@@ -1633,7 +1633,7 @@ void ProjectList::toggle_select(int p_index) {
 	item.control->update();
 }
 
-void ProjectList::erase_selected_projects() {
+void ProjectList::erase_selected_projects(bool p_delete_project_contents) {
 	if (_selected_project_keys.size() == 0) {
 		return;
 	}
@@ -1644,6 +1644,10 @@ void ProjectList::erase_selected_projects() {
 			EditorSettings::get_singleton()->erase("projects/" + item.project_key);
 			EditorSettings::get_singleton()->erase("favorite_projects/" + item.project_key);
 
+			if (p_delete_project_contents) {
+				OS::get_singleton()->move_to_trash(item.path);
+			}
+
 			memdelete(item.control);
 			_projects.remove(i);
 			--i;
@@ -2179,7 +2183,7 @@ void ProjectManager::_rename_project() {
 }
 
 void ProjectManager::_erase_project_confirm() {
-	_project_list->erase_selected_projects();
+	_project_list->erase_selected_projects(delete_project_contents->is_pressed());
 	_update_project_buttons();
 }
 
@@ -2197,12 +2201,13 @@ void ProjectManager::_erase_project() {
 
 	String confirm_message;
 	if (selected_list.size() >= 2) {
-		confirm_message = vformat(TTR("Remove %d projects from the list?\nThe project folders' contents won't be modified."), selected_list.size());
+		confirm_message = vformat(TTR("Remove %d projects from the list?"), selected_list.size());
 	} else {
-		confirm_message = TTR("Remove this project from the list?\nThe project folder's contents won't be modified.");
+		confirm_message = TTR("Remove this project from the list?");
 	}
 
-	erase_ask->set_text(confirm_message);
+	erase_ask_label->set_text(confirm_message);
+	delete_project_contents->set_pressed(false);
 	erase_ask->popup_centered_minsize();
 }
 
@@ -2661,6 +2666,16 @@ ProjectManager::ProjectManager() {
 	erase_ask->get_ok()->connect("pressed", this, "_erase_project_confirm");
 	gui_base->add_child(erase_ask);
 
+	VBoxContainer *erase_ask_vb = memnew(VBoxContainer);
+	erase_ask->add_child(erase_ask_vb);
+
+	erase_ask_label = memnew(Label);
+	erase_ask_vb->add_child(erase_ask_label);
+
+	delete_project_contents = memnew(CheckBox);
+	delete_project_contents->set_text(TTR("Also delete project contents (no undo!)"));
+	erase_ask_vb->add_child(delete_project_contents);
+
 	multi_open_ask = memnew(ConfirmationDialog);
 	multi_open_ask->get_ok()->set_text(TTR("Edit"));
 	multi_open_ask->get_ok()->connect("pressed", this, "_open_selected_projects");

+ 4 - 0
editor/project_manager.h

@@ -61,7 +61,11 @@ class ProjectManager : public Control {
 
 	FileDialog *scan_dir;
 	ConfirmationDialog *language_restart_ask;
+
 	ConfirmationDialog *erase_ask;
+	Label *erase_ask_label;
+	CheckBox *delete_project_contents;
+
 	ConfirmationDialog *erase_missing_ask;
 	ConfirmationDialog *multi_open_ask;
 	ConfirmationDialog *multi_run_ask;