diff options
Diffstat (limited to 'editor/gui/scene_tree_editor.cpp')
-rw-r--r-- | editor/gui/scene_tree_editor.cpp | 53 |
1 files changed, 33 insertions, 20 deletions
diff --git a/editor/gui/scene_tree_editor.cpp b/editor/gui/scene_tree_editor.cpp index 361ae2a945..ddf22c46e6 100644 --- a/editor/gui/scene_tree_editor.cpp +++ b/editor/gui/scene_tree_editor.cpp @@ -373,8 +373,8 @@ void SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) { } if (can_open_instance && is_scene_tree_dock) { // Show buttons only when necessary (SceneTreeDock) to avoid crashes. - if (!p_node->is_connected("script_changed", callable_mp(this, &SceneTreeEditor::_node_script_changed))) { - p_node->connect("script_changed", callable_mp(this, &SceneTreeEditor::_node_script_changed).bind(p_node)); + if (!p_node->is_connected(CoreStringName(script_changed), callable_mp(this, &SceneTreeEditor::_node_script_changed))) { + p_node->connect(CoreStringName(script_changed), callable_mp(this, &SceneTreeEditor::_node_script_changed).bind(p_node)); } Ref<Script> scr = p_node->get_script(); @@ -394,7 +394,7 @@ void SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) { item->set_button_color(0, item->get_button_count(0) - 1, button_color); } - if (p_node->has_method("is_visible") && p_node->has_method("set_visible") && p_node->has_signal("visibility_changed")) { + if (p_node->has_method("is_visible") && p_node->has_method("set_visible") && p_node->has_signal(SceneStringName(visibility_changed))) { bool is_visible = p_node->call("is_visible"); if (is_visible) { item->add_button(0, get_editor_theme_icon(SNAME("GuiVisibilityVisible")), BUTTON_VISIBILITY, false, TTR("Toggle Visibility")); @@ -402,8 +402,8 @@ void SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) { item->add_button(0, get_editor_theme_icon(SNAME("GuiVisibilityHidden")), BUTTON_VISIBILITY, false, TTR("Toggle Visibility")); } const Callable vis_changed = callable_mp(this, &SceneTreeEditor::_node_visibility_changed); - if (!p_node->is_connected("visibility_changed", vis_changed)) { - p_node->connect("visibility_changed", vis_changed.bind(p_node)); + if (!p_node->is_connected(SceneStringName(visibility_changed), vis_changed)) { + p_node->connect(SceneStringName(visibility_changed), vis_changed.bind(p_node)); } _update_visibility_color(p_node, item); } @@ -573,13 +573,13 @@ void SceneTreeEditor::_node_removed(Node *p_node) { return; //speed up exit } - if (p_node->is_connected("script_changed", callable_mp(this, &SceneTreeEditor::_node_script_changed))) { - p_node->disconnect("script_changed", callable_mp(this, &SceneTreeEditor::_node_script_changed)); + if (p_node->is_connected(CoreStringName(script_changed), callable_mp(this, &SceneTreeEditor::_node_script_changed))) { + p_node->disconnect(CoreStringName(script_changed), callable_mp(this, &SceneTreeEditor::_node_script_changed)); } - if (p_node->has_signal("visibility_changed")) { - if (p_node->is_connected("visibility_changed", callable_mp(this, &SceneTreeEditor::_node_visibility_changed))) { - p_node->disconnect("visibility_changed", callable_mp(this, &SceneTreeEditor::_node_visibility_changed)); + if (p_node->has_signal(SceneStringName(visibility_changed))) { + if (p_node->is_connected(SceneStringName(visibility_changed), callable_mp(this, &SceneTreeEditor::_node_visibility_changed))) { + p_node->disconnect(SceneStringName(visibility_changed), callable_mp(this, &SceneTreeEditor::_node_visibility_changed)); } } @@ -614,9 +614,9 @@ void SceneTreeEditor::_update_tree(bool p_scroll_to_selected) { updating_tree = true; tree->clear(); + last_hash = hash_djb2_one_64(0); if (get_scene_node()) { _add_nodes(get_scene_node(), nullptr); - last_hash = hash_djb2_one_64(0); _compute_hash(get_scene_node(), last_hash); } updating_tree = false; @@ -755,11 +755,11 @@ bool SceneTreeEditor::_item_matches_all_terms(TreeItem *p_item, const PackedStri node->get_groups(&group_info_list); bool term_in_groups = false; - for (int j = 0; j < group_info_list.size(); j++) { - if (!group_info_list[j].persistent) { + for (const Node::GroupInfo &group_info : group_info_list) { + if (!group_info.persistent) { continue; // Ignore internal groups. } - if (String(group_info_list[j].name).to_lower().contains(argument)) { + if (String(group_info.name).to_lower().contains(argument)) { term_in_groups = true; break; } @@ -912,7 +912,7 @@ void SceneTreeEditor::_notification(int p_what) { get_tree()->connect("tree_process_mode_changed", callable_mp(this, &SceneTreeEditor::_tree_process_mode_changed)); get_tree()->connect("node_removed", callable_mp(this, &SceneTreeEditor::_node_removed)); get_tree()->connect("node_renamed", callable_mp(this, &SceneTreeEditor::_node_renamed)); - get_tree()->connect("node_configuration_warning_changed", callable_mp(this, &SceneTreeEditor::_warning_changed)); + get_tree()->connect(SceneStringName(node_configuration_warning_changed), callable_mp(this, &SceneTreeEditor::_warning_changed)); tree->connect("item_collapsed", callable_mp(this, &SceneTreeEditor::_cell_collapsed)); @@ -925,7 +925,7 @@ void SceneTreeEditor::_notification(int p_what) { get_tree()->disconnect("node_removed", callable_mp(this, &SceneTreeEditor::_node_removed)); get_tree()->disconnect("node_renamed", callable_mp(this, &SceneTreeEditor::_node_renamed)); tree->disconnect("item_collapsed", callable_mp(this, &SceneTreeEditor::_cell_collapsed)); - get_tree()->disconnect("node_configuration_warning_changed", callable_mp(this, &SceneTreeEditor::_warning_changed)); + get_tree()->disconnect(SceneStringName(node_configuration_warning_changed), callable_mp(this, &SceneTreeEditor::_warning_changed)); } break; case NOTIFICATION_THEME_CHANGED: { @@ -1368,22 +1368,35 @@ bool SceneTreeEditor::can_drop_data_fw(const Point2 &p_point, const Variant &p_d } bool scene_drop = true; + bool audio_drop = true; for (int i = 0; i < files.size(); i++) { String ftype = EditorFileSystem::get_singleton()->get_file_type(files[i]); if (ftype != "PackedScene") { scene_drop = false; - break; + } + if (audio_drop && !ClassDB::is_parent_class(ftype, "AudioStream")) { + audio_drop = false; } } if (scene_drop) { tree->set_drop_mode_flags(Tree::DROP_MODE_INBETWEEN | Tree::DROP_MODE_ON_ITEM); - } else { + return true; + } + + if (audio_drop) { if (files.size() > 1) { - return false; + tree->set_drop_mode_flags(Tree::DROP_MODE_INBETWEEN); + } else { + tree->set_drop_mode_flags(Tree::DROP_MODE_INBETWEEN | Tree::DROP_MODE_ON_ITEM); } - tree->set_drop_mode_flags(Tree::DROP_MODE_ON_ITEM); + return true; + } + + if (files.size() > 1) { + return false; } + tree->set_drop_mode_flags(Tree::DROP_MODE_ON_ITEM); return true; } |