Browse Source

Merge pull request #39954 from hinlopen/delete-nodes-msg

Delete Nodes message
Rémi Verschelde 5 years ago
parent
commit
435a4c117e
1 changed files with 19 additions and 8 deletions
  1. 19 8
      editor/scene_tree_dock.cpp

+ 19 - 8
editor/scene_tree_dock.cpp

@@ -741,17 +741,28 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) {
 				_delete_confirm();
 
 			} else {
-				if (remove_list.size() >= 2) {
-					delete_dialog->set_text(vformat(TTR("Delete %d nodes?"), remove_list.size()));
-				} else if (remove_list.size() == 1 && remove_list[0] == editor_data->get_edited_scene_root()) {
-					delete_dialog->set_text(vformat(TTR("Delete the root node \"%s\"?"), remove_list[0]->get_name()));
-				} else if (remove_list.size() == 1 && remove_list[0]->get_filename() == "" && remove_list[0]->get_child_count() >= 1) {
-					// Display this message only for non-instanced scenes
-					delete_dialog->set_text(vformat(TTR("Delete node \"%s\" and its children?"), remove_list[0]->get_name()));
+				String msg;
+				if (remove_list.size() > 1) {
+					bool any_children = false;
+					for (int i = 0; !any_children && i < remove_list.size(); i++) {
+						any_children = remove_list[i]->get_child_count() > 0;
+					}
+
+					msg = vformat(any_children ? TTR("Delete %d nodes and any children?") : TTR("Delete %d nodes?"), remove_list.size());
 				} else {
-					delete_dialog->set_text(vformat(TTR("Delete node \"%s\"?"), remove_list[0]->get_name()));
+					Node *node = remove_list[0];
+					if (node == editor_data->get_edited_scene_root()) {
+						msg = vformat(TTR("Delete the root node \"%s\"?"), node->get_name());
+					} else if (node->get_filename() == "" && node->get_child_count() > 0) {
+						// Display this message only for non-instanced scenes
+						msg = vformat(TTR("Delete node \"%s\" and its children?"), node->get_name());
+					} else {
+						msg = vformat(TTR("Delete node \"%s\"?"), node->get_name());
+					}
 				}
 
+				delete_dialog->set_text(msg);
+
 				// Resize the dialog to its minimum size.
 				// This prevents the dialog from being too wide after displaying
 				// a deletion confirmation for a node with a long name.