Pārlūkot izejas kodu

Merge pull request #23071 from bfhobbes/use_quickopen_for_instance_child

Use EditorQuickOpen dialog instead of EditorFileDialog when instancing a child scene.
Rémi Verschelde 6 gadi atpakaļ
vecāks
revīzija
8e391c1e22
2 mainītis faili ar 16 papildinājumiem un 14 dzēšanām
  1. 13 13
      editor/scene_tree_dock.cpp
  2. 3 1
      editor/scene_tree_dock.h

+ 13 - 13
editor/scene_tree_dock.cpp

@@ -53,6 +53,13 @@ void SceneTreeDock::_nodes_drag_begin() {
 	}
 }
 
+void SceneTreeDock::_quick_open() {
+	Vector<String> files = quick_open->get_selected_files();
+	for (int i = 0; i < files.size(); i++) {
+		instance(files[i]);
+	}
+}
+
 void SceneTreeDock::_input(Ref<InputEvent> p_event) {
 
 	Ref<InputEventMouseButton> mb = p_event;
@@ -319,16 +326,8 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) {
 				break;
 			}
 
-			file->set_mode(EditorFileDialog::MODE_OPEN_FILE);
-			List<String> extensions;
-			ResourceLoader::get_recognized_extensions_for_type("PackedScene", &extensions);
-			file->clear_filters();
-			for (int i = 0; i < extensions.size(); i++) {
-
-				file->add_filter("*." + extensions[i] + " ; " + extensions[i].to_upper());
-			}
-
-			file->popup_centered_ratio();
+			quick_open->popup_dialog("PackedScene", true);
+			quick_open->set_title(TTR("Instance Child Scene"));
 
 		} break;
 		case TOOL_REPLACE: {
@@ -2303,6 +2302,7 @@ void SceneTreeDock::_bind_methods() {
 	ClassDB::bind_method(D_METHOD("_new_scene_from"), &SceneTreeDock::_new_scene_from);
 	ClassDB::bind_method(D_METHOD("_nodes_dragged"), &SceneTreeDock::_nodes_dragged);
 	ClassDB::bind_method(D_METHOD("_files_dropped"), &SceneTreeDock::_files_dropped);
+	ClassDB::bind_method(D_METHOD("_quick_open"), &SceneTreeDock::_quick_open);
 	ClassDB::bind_method(D_METHOD("_script_dropped"), &SceneTreeDock::_script_dropped);
 	ClassDB::bind_method(D_METHOD("_tree_rmb"), &SceneTreeDock::_tree_rmb);
 	ClassDB::bind_method(D_METHOD("_filter_changed"), &SceneTreeDock::_filter_changed);
@@ -2452,9 +2452,9 @@ SceneTreeDock::SceneTreeDock(EditorNode *p_editor, Node *p_scene_root, EditorSel
 	accept = memnew(AcceptDialog);
 	add_child(accept);
 
-	file = memnew(EditorFileDialog);
-	add_child(file);
-	file->connect("file_selected", this, "instance");
+	quick_open = memnew(EditorQuickOpen);
+	add_child(quick_open);
+	quick_open->connect("quick_open", this, "_quick_open");
 	set_process_unhandled_key_input(true);
 
 	delete_dialog = memnew(ConfirmationDialog);

+ 3 - 1
editor/scene_tree_dock.h

@@ -36,6 +36,7 @@
 #include "editor/editor_data.h"
 #include "editor/editor_sub_scene.h"
 #include "editor/groups_editor.h"
+#include "editor/quick_open.h"
 #include "editor/rename_dialog.h"
 #include "editor/reparent_dialog.h"
 #include "editor/script_create_dialog.h"
@@ -125,7 +126,7 @@ class SceneTreeDock : public VBoxContainer {
 	ConfirmationDialog *editable_instance_remove_dialog;
 
 	ReparentDialog *reparent_dialog;
-	EditorFileDialog *file;
+	EditorQuickOpen *quick_open;
 	EditorSubScene *import_subscene_dialog;
 	EditorFileDialog *new_scene_from_dialog;
 
@@ -194,6 +195,7 @@ class SceneTreeDock : public VBoxContainer {
 	void _nodes_dragged(Array p_nodes, NodePath p_to, int p_type);
 	void _files_dropped(Vector<String> p_files, NodePath p_to, int p_type);
 	void _script_dropped(String p_file, NodePath p_to);
+	void _quick_open();
 
 	void _tree_rmb(const Vector2 &p_menu_pos);