diff options
Diffstat (limited to 'editor/scene_tree_dock.cpp')
-rw-r--r-- | editor/scene_tree_dock.cpp | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/editor/scene_tree_dock.cpp b/editor/scene_tree_dock.cpp index bbedb4f033..894d606c9c 100644 --- a/editor/scene_tree_dock.cpp +++ b/editor/scene_tree_dock.cpp @@ -229,6 +229,9 @@ void SceneTreeDock::_perform_instance_scenes(const Vector<String> &p_files, Node editor_data->get_undo_redo().commit_action(); editor->push_item(instances[instances.size() - 1]); + for (int i = 0; i < instances.size(); i++) { + emit_signal("node_created", instances[i]); + } } void SceneTreeDock::_replace_with_branch_scene(const String &p_file, Node *base) { @@ -357,6 +360,11 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { break; } + if (reset_create_dialog) { + create_dialog->set_base_type("Node"); + reset_create_dialog = false; + } + // Prefer nodes that inherit from the current scene root. Node *current_edited_scene_root = EditorNode::get_singleton()->get_edited_scene(); if (current_edited_scene_root) { @@ -377,6 +385,9 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { } create_dialog->popup_create(true); + if (!p_confirm_override) { + emit_signal("add_node_used"); + } } break; case TOOL_INSTANCE: { if (!profile_allow_editing) { @@ -391,7 +402,9 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { quick_open->popup_dialog("PackedScene", true); quick_open->set_title(TTR("Instance Child Scene")); - + if (!p_confirm_override) { + emit_signal("add_node_used"); + } } break; case TOOL_EXPAND_COLLAPSE: { if (!scene_tree->get_selected()) { @@ -1984,6 +1997,8 @@ void SceneTreeDock::_do_create(Node *p_parent) { } ct->set_size(ms); } + + emit_signal("node_created", c); } void SceneTreeDock::_create() { @@ -2658,6 +2673,16 @@ void SceneTreeDock::open_script_dialog(Node *p_for_node, bool p_extend) { } } +void SceneTreeDock::open_add_child_dialog() { + create_dialog->set_base_type("CanvasItem"); + _tool_selected(TOOL_NEW, true); + reset_create_dialog = true; +} + +void SceneTreeDock::open_instance_child_dialog() { + _tool_selected(TOOL_INSTANCE, true); +} + void SceneTreeDock::add_remote_tree_editor(Control *p_remote) { ERR_FAIL_COND(remote_tree != nullptr); add_child(p_remote); @@ -2801,6 +2826,8 @@ void SceneTreeDock::_bind_methods() { ClassDB::bind_method(D_METHOD("replace_node"), &SceneTreeDock::replace_node); ADD_SIGNAL(MethodInfo("remote_tree_selected")); + ADD_SIGNAL(MethodInfo("add_node_used")); + ADD_SIGNAL(MethodInfo("node_created", PropertyInfo(Variant::OBJECT, "node", PROPERTY_HINT_RESOURCE_TYPE, "Node"))); } SceneTreeDock::SceneTreeDock(EditorNode *p_editor, Node *p_scene_root, EditorSelection *p_editor_selection, EditorData &p_editor_data) { |