diff options
Diffstat (limited to 'editor/scene_tree_editor.cpp')
-rw-r--r-- | editor/scene_tree_editor.cpp | 297 |
1 files changed, 146 insertions, 151 deletions
diff --git a/editor/scene_tree_editor.cpp b/editor/scene_tree_editor.cpp index 831b7b6775..1b818036e1 100644 --- a/editor/scene_tree_editor.cpp +++ b/editor/scene_tree_editor.cpp @@ -41,14 +41,12 @@ #include "scene/resources/packed_scene.h" Node *SceneTreeEditor::get_scene_node() { - - ERR_FAIL_COND_V(!is_inside_tree(), NULL); + ERR_FAIL_COND_V(!is_inside_tree(), nullptr); return get_tree()->get_edited_scene_root(); } void SceneTreeEditor::_cell_button_pressed(Object *p_item, int p_column, int p_id) { - if (connect_to_script_mode) { return; //don't do anything in this mode } @@ -71,14 +69,15 @@ void SceneTreeEditor::_cell_button_pressed(Object *p_item, int p_column, int p_i } } else if (p_id == BUTTON_SCRIPT) { Ref<Script> script_typed = n->get_script(); - if (!script_typed.is_null()) + if (!script_typed.is_null()) { emit_signal("open_script", script_typed); + } } else if (p_id == BUTTON_VISIBILITY) { undo_redo->create_action(TTR("Toggle Visible")); _toggle_visible(n); List<Node *> selection = editor_selection->get_selected_node_list(); - if (selection.size() > 1 && selection.find(n) != NULL) { + if (selection.size() > 1 && selection.find(n) != nullptr) { for (List<Node *>::Element *E = selection.front(); E; E = E->next()) { Node *nv = E->get(); ERR_FAIL_COND(!nv); @@ -93,7 +92,6 @@ void SceneTreeEditor::_cell_button_pressed(Object *p_item, int p_column, int p_i undo_redo->create_action(TTR("Unlock Node")); if (n->is_class("CanvasItem") || n->is_class("Node3D")) { - undo_redo->add_do_method(n, "remove_meta", "_edit_lock_"); undo_redo->add_undo_method(n, "set_meta", "_edit_lock_", true); undo_redo->add_do_method(this, "_update_tree", Variant()); @@ -103,7 +101,6 @@ void SceneTreeEditor::_cell_button_pressed(Object *p_item, int p_column, int p_i } undo_redo->commit_action(); } else if (p_id == BUTTON_PIN) { - if (n->is_class("AnimationPlayer")) { AnimationPlayerEditor::singleton->unpin(); _update_tree(); @@ -113,7 +110,6 @@ void SceneTreeEditor::_cell_button_pressed(Object *p_item, int p_column, int p_i undo_redo->create_action(TTR("Button Group")); if (n->is_class("CanvasItem") || n->is_class("Node3D")) { - undo_redo->add_do_method(n, "remove_meta", "_edit_group_"); undo_redo->add_undo_method(n, "set_meta", "_edit_group_", true); undo_redo->add_do_method(this, "_update_tree", Variant()); @@ -123,16 +119,15 @@ void SceneTreeEditor::_cell_button_pressed(Object *p_item, int p_column, int p_i } undo_redo->commit_action(); } else if (p_id == BUTTON_WARNING) { - String config_err = n->get_configuration_warning(); - if (config_err == String()) + if (config_err == String()) { return; + } config_err = config_err.word_wrap(80); warning->set_text(config_err); warning->popup_centered(); } else if (p_id == BUTTON_SIGNALS) { - editor_selection->clear(); editor_selection->add_node(n); @@ -142,7 +137,6 @@ void SceneTreeEditor::_cell_button_pressed(Object *p_item, int p_column, int p_i NodeDock::singleton->show_connections(); } else if (p_id == BUTTON_GROUPS) { - editor_selection->clear(); editor_selection->add_node(n); @@ -152,6 +146,7 @@ void SceneTreeEditor::_cell_button_pressed(Object *p_item, int p_column, int p_i NodeDock::singleton->show_groups(); } } + void SceneTreeEditor::_toggle_visible(Node *p_node) { if (p_node->has_method("is_visible") && p_node->has_method("set_visible")) { bool v = bool(p_node->call("is_visible")); @@ -161,9 +156,9 @@ void SceneTreeEditor::_toggle_visible(Node *p_node) { } bool SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) { - - if (!p_node) + if (!p_node) { return false; + } // only owned nodes are editable, since nodes can create their own (manually owned) child nodes, // which the editor needs not to know about. @@ -171,9 +166,7 @@ bool SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) { bool part_of_subscene = false; if (!display_foreign && p_node->get_owner() != get_scene_node() && p_node != get_scene_node()) { - if ((show_enabled_subscene || can_open_instance) && p_node->get_owner() && (get_scene_node()->is_editable_instance(p_node->get_owner()))) { - part_of_subscene = true; //allow } else { @@ -186,14 +179,16 @@ bool SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) { TreeItem *item = tree->create_item(p_parent); item->set_text(0, p_node->get_name()); - if (can_rename && !part_of_subscene) + if (can_rename && !part_of_subscene) { item->set_editable(0, true); + } item->set_selectable(0, true); if (can_rename) { bool collapsed = p_node->is_displayed_folded(); - if (collapsed) + if (collapsed) { item->set_collapsed(true); + } } Ref<Texture2D> icon = EditorNode::get_singleton()->get_object_icon(p_node, "Node"); @@ -229,12 +224,10 @@ bool SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) { item->set_custom_color(0, accent); } } else if (part_of_subscene) { - if (valid_types.size() == 0) { item->set_custom_color(0, get_theme_color("disabled_font_color", "Editor")); } } else if (marked.has(p_node)) { - String node_name = p_node->get_name(); if (connecting_signal) { node_name += " " + TTR("(Connecting From)"); @@ -243,7 +236,6 @@ bool SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) { item->set_selectable(0, marked_selectable); item->set_custom_color(0, get_theme_color("accent_color", "Editor")); } else if (!marked_selectable && !marked_children_selectable) { - Node *node = p_node; while (node) { if (marked.has(node)) { @@ -323,8 +315,9 @@ bool SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) { if (can_open_instance && undo_redo) { //Show buttons only when necessary(SceneTreeDock) to avoid crashes - if (!p_node->is_connected("script_changed", callable_mp(this, &SceneTreeEditor::_node_script_changed))) + 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), varray(p_node)); + } Ref<Script> script = p_node->get_script(); if (!script.is_null()) { @@ -335,47 +328,52 @@ bool SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) { } if (p_node->is_class("CanvasItem")) { - bool is_locked = p_node->has_meta("_edit_lock_"); //_edit_group_ - if (is_locked) + if (is_locked) { item->add_button(0, get_theme_icon("Lock", "EditorIcons"), BUTTON_LOCK, false, TTR("Node is locked.\nClick to unlock it.")); + } bool is_grouped = p_node->has_meta("_edit_group_"); - if (is_grouped) + if (is_grouped) { item->add_button(0, get_theme_icon("Group", "EditorIcons"), BUTTON_GROUP, false, TTR("Children are not selectable.\nClick to make selectable.")); + } bool v = p_node->call("is_visible"); - if (v) + if (v) { item->add_button(0, get_theme_icon("GuiVisibilityVisible", "EditorIcons"), BUTTON_VISIBILITY, false, TTR("Toggle Visibility")); - else + } else { item->add_button(0, get_theme_icon("GuiVisibilityHidden", "EditorIcons"), BUTTON_VISIBILITY, false, TTR("Toggle Visibility")); + } - if (!p_node->is_connected("visibility_changed", callable_mp(this, &SceneTreeEditor::_node_visibility_changed))) + if (!p_node->is_connected("visibility_changed", callable_mp(this, &SceneTreeEditor::_node_visibility_changed))) { p_node->connect("visibility_changed", callable_mp(this, &SceneTreeEditor::_node_visibility_changed), varray(p_node)); + } _update_visibility_color(p_node, item); } else if (p_node->is_class("Node3D")) { - bool is_locked = p_node->has_meta("_edit_lock_"); - if (is_locked) + if (is_locked) { item->add_button(0, get_theme_icon("Lock", "EditorIcons"), BUTTON_LOCK, false, TTR("Node is locked.\nClick to unlock it.")); + } bool is_grouped = p_node->has_meta("_edit_group_"); - if (is_grouped) + if (is_grouped) { item->add_button(0, get_theme_icon("Group", "EditorIcons"), BUTTON_GROUP, false, TTR("Children are not selectable.\nClick to make selectable.")); + } bool v = p_node->call("is_visible"); - if (v) + if (v) { item->add_button(0, get_theme_icon("GuiVisibilityVisible", "EditorIcons"), BUTTON_VISIBILITY, false, TTR("Toggle Visibility")); - else + } else { item->add_button(0, get_theme_icon("GuiVisibilityHidden", "EditorIcons"), BUTTON_VISIBILITY, false, TTR("Toggle Visibility")); + } - if (!p_node->is_connected("visibility_changed", callable_mp(this, &SceneTreeEditor::_node_visibility_changed))) + if (!p_node->is_connected("visibility_changed", callable_mp(this, &SceneTreeEditor::_node_visibility_changed))) { p_node->connect("visibility_changed", callable_mp(this, &SceneTreeEditor::_node_visibility_changed), varray(p_node)); + } _update_visibility_color(p_node, item); } else if (p_node->is_class("AnimationPlayer")) { - bool is_pinned = AnimationPlayerEditor::singleton->get_player() == p_node && AnimationPlayerEditor::singleton->is_pinned(); if (is_pinned) { @@ -386,21 +384,20 @@ bool SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) { if (editor_selection) { if (editor_selection->is_selected(p_node)) { - item->select(0); } } if (selected == p_node) { - if (!editor_selection) + if (!editor_selection) { item->select(0); + } item->set_as_cursor(0); } bool keep = (filter.is_subsequence_ofi(String(p_node->get_name()))); for (int i = 0; i < p_node->get_child_count(); i++) { - bool child_keep = _add_nodes(p_node->get_child(i), item); keep = keep || child_keep; @@ -437,9 +434,7 @@ bool SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) { } void SceneTreeEditor::_node_visibility_changed(Node *p_node) { - if (!p_node || (p_node != get_scene_node() && !p_node->get_owner())) { - return; } @@ -461,10 +456,11 @@ void SceneTreeEditor::_node_visibility_changed(Node *p_node) { visible = p_node->call("is_visible"); } - if (visible) + if (visible) { item->set_button(0, idx, get_theme_icon("GuiVisibilityVisible", "EditorIcons")); - else + } else { item->set_button(0, idx, get_theme_icon("GuiVisibilityHidden", "EditorIcons")); + } _update_visibility_color(p_node, item); } @@ -482,35 +478,36 @@ void SceneTreeEditor::_update_visibility_color(Node *p_node, TreeItem *p_item) { } void SceneTreeEditor::_node_script_changed(Node *p_node) { - - if (tree_dirty) + if (tree_dirty) { return; + } MessageQueue::get_singleton()->push_call(this, "_update_tree"); tree_dirty = true; } void SceneTreeEditor::_node_removed(Node *p_node) { - - if (EditorNode::get_singleton()->is_exiting()) + if (EditorNode::get_singleton()->is_exiting()) { return; //speed up exit + } - if (p_node->is_connected("script_changed", callable_mp(this, &SceneTreeEditor::_node_script_changed))) + 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_class("Node3D") || p_node->is_class("CanvasItem")) { - if (p_node->is_connected("visibility_changed", callable_mp(this, &SceneTreeEditor::_node_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 == selected) { - selected = NULL; + selected = nullptr; emit_signal("node_selected"); } } void SceneTreeEditor::_node_renamed(Node *p_node) { - emit_signal("node_renamed"); if (!tree_dirty) { @@ -520,7 +517,6 @@ void SceneTreeEditor::_node_renamed(Node *p_node) { } void SceneTreeEditor::_update_tree() { - if (!is_inside_tree()) { tree_dirty = false; return; @@ -529,7 +525,7 @@ void SceneTreeEditor::_update_tree() { updating_tree = true; tree->clear(); if (get_scene_node()) { - _add_nodes(get_scene_node(), NULL); + _add_nodes(get_scene_node(), nullptr); last_hash = hash_djb2_one_64(0); _compute_hash(get_scene_node(), last_hash); } @@ -539,61 +535,65 @@ void SceneTreeEditor::_update_tree() { } void SceneTreeEditor::_compute_hash(Node *p_node, uint64_t &hash) { - hash = hash_djb2_one_64(p_node->get_instance_id(), hash); - if (p_node->get_parent()) + if (p_node->get_parent()) { hash = hash_djb2_one_64(p_node->get_parent()->get_instance_id(), hash); //so a reparent still produces a different hash + } for (int i = 0; i < p_node->get_child_count(); i++) { - _compute_hash(p_node->get_child(i), hash); } } void SceneTreeEditor::_test_update_tree() { - pending_test_update = false; - if (!is_inside_tree()) + if (!is_inside_tree()) { return; + } - if (tree_dirty) + if (tree_dirty) { return; // don't even bother + } uint64_t hash = hash_djb2_one_64(0); - if (get_scene_node()) + if (get_scene_node()) { _compute_hash(get_scene_node(), hash); + } //test hash - if (hash == last_hash) + if (hash == last_hash) { return; // did not change + } MessageQueue::get_singleton()->push_call(this, "_update_tree"); tree_dirty = true; } void SceneTreeEditor::_tree_changed() { - - if (EditorNode::get_singleton()->is_exiting()) + if (EditorNode::get_singleton()->is_exiting()) { return; //speed up exit - if (pending_test_update) + } + if (pending_test_update) { return; - if (tree_dirty) + } + if (tree_dirty) { return; + } MessageQueue::get_singleton()->push_call(this, "_test_update_tree"); pending_test_update = true; } void SceneTreeEditor::_selected_changed() { - TreeItem *s = tree->get_selected(); ERR_FAIL_COND(!s); NodePath np = s->get_metadata(0); Node *n = get_node(np); - if (n == selected) + if (n == selected) { return; + } selected = get_node(np); @@ -603,7 +603,6 @@ void SceneTreeEditor::_selected_changed() { } void SceneTreeEditor::_deselect_items() { - // Clear currently elected items in scene tree dock. if (editor_selection) { editor_selection->clear(); @@ -612,7 +611,6 @@ void SceneTreeEditor::_deselect_items() { } void SceneTreeEditor::_cell_multi_selected(Object *p_object, int p_cell, bool p_selected) { - TreeItem *item = Object::cast_to<TreeItem>(p_object); ERR_FAIL_COND(!item); @@ -620,11 +618,13 @@ void SceneTreeEditor::_cell_multi_selected(Object *p_object, int p_cell, bool p_ Node *n = get_node(np); - if (!n) + if (!n) { return; + } - if (!editor_selection) + if (!editor_selection) { return; + } if (p_selected) { editor_selection->add_node(n); @@ -636,10 +636,8 @@ void SceneTreeEditor::_cell_multi_selected(Object *p_object, int p_cell, bool p_ } void SceneTreeEditor::_notification(int p_what) { - switch (p_what) { case NOTIFICATION_ENTER_TREE: { - get_tree()->connect("tree_changed", callable_mp(this, &SceneTreeEditor::_tree_changed)); get_tree()->connect("node_removed", callable_mp(this, &SceneTreeEditor::_node_removed)); get_tree()->connect("node_renamed", callable_mp(this, &SceneTreeEditor::_node_renamed)); @@ -650,7 +648,6 @@ void SceneTreeEditor::_notification(int p_what) { _update_tree(); } break; case NOTIFICATION_EXIT_TREE: { - get_tree()->disconnect("tree_changed", callable_mp(this, &SceneTreeEditor::_tree_changed)); get_tree()->disconnect("node_removed", callable_mp(this, &SceneTreeEditor::_node_removed)); get_tree()->disconnect("node_renamed", callable_mp(this, &SceneTreeEditor::_node_renamed)); @@ -658,46 +655,48 @@ void SceneTreeEditor::_notification(int p_what) { get_tree()->disconnect("node_configuration_warning_changed", callable_mp(this, &SceneTreeEditor::_warning_changed)); } break; case NOTIFICATION_THEME_CHANGED: { - _update_tree(); } break; } } TreeItem *SceneTreeEditor::_find(TreeItem *p_node, const NodePath &p_path) { - - if (!p_node) - return NULL; + if (!p_node) { + return nullptr; + } NodePath np = p_node->get_metadata(0); - if (np == p_path) + if (np == p_path) { return p_node; + } TreeItem *children = p_node->get_children(); while (children) { - TreeItem *n = _find(children, p_path); - if (n) + if (n) { return n; + } children = children->get_next(); } - return NULL; + return nullptr; } void SceneTreeEditor::set_selected(Node *p_node, bool p_emit_selected) { - ERR_FAIL_COND(blocked > 0); - if (pending_test_update) + if (pending_test_update) { _test_update_tree(); - if (tree_dirty) + } + if (tree_dirty) { _update_tree(); + } - if (selected == p_node) + if (selected == p_node) { return; + } - TreeItem *item = p_node ? _find(tree->get_root(), p_node->get_path()) : NULL; + TreeItem *item = p_node ? _find(tree->get_root(), p_node->get_path()) : nullptr; if (item) { // make visible when it's collapsed @@ -712,8 +711,9 @@ void SceneTreeEditor::set_selected(Node *p_node, bool p_emit_selected) { tree->ensure_cursor_is_visible(); } else { - if (!p_node) - selected = NULL; + if (!p_node) { + selected = nullptr; + } _update_tree(); selected = p_node; } @@ -724,7 +724,6 @@ void SceneTreeEditor::set_selected(Node *p_node, bool p_emit_selected) { } void SceneTreeEditor::_rename_node(ObjectID p_node, const String &p_name) { - Object *o = ObjectDB::get_instance(p_node); ERR_FAIL_COND(!o); Node *n = Object::cast_to<Node>(o); @@ -738,7 +737,6 @@ void SceneTreeEditor::_rename_node(ObjectID p_node, const String &p_name) { } void SceneTreeEditor::_renamed() { - TreeItem *which = tree->get_edited(); ERR_FAIL_COND(!which); @@ -755,7 +753,6 @@ void SceneTreeEditor::_renamed() { String new_name = which->get_text(0); if (!Node::_validate_node_name(new_name)) { - error->set_text(TTR("Invalid node name, the following characters are not allowed:") + "\n" + Node::invalid_character); error->popup_centered(); @@ -767,8 +764,9 @@ void SceneTreeEditor::_renamed() { which->set_text(0, new_name); } - if (new_name == n->get_name()) + if (new_name == n->get_name()) { return; + } if (!undo_redo) { n->set_name(new_name); @@ -784,14 +782,13 @@ void SceneTreeEditor::_renamed() { } Node *SceneTreeEditor::get_selected() { - return selected; } void SceneTreeEditor::set_marked(const Set<Node *> &p_marked, bool p_selectable, bool p_children_selectable) { - - if (tree_dirty) + if (tree_dirty) { _update_tree(); + } marked = p_marked; marked_selectable = p_selectable; marked_children_selectable = p_children_selectable; @@ -799,31 +796,28 @@ void SceneTreeEditor::set_marked(const Set<Node *> &p_marked, bool p_selectable, } void SceneTreeEditor::set_marked(Node *p_marked, bool p_selectable, bool p_children_selectable) { - Set<Node *> s; - if (p_marked) + if (p_marked) { s.insert(p_marked); + } set_marked(s, p_selectable, p_children_selectable); } void SceneTreeEditor::set_filter(const String &p_filter) { - filter = p_filter; _update_tree(); } String SceneTreeEditor::get_filter() const { - return filter; } void SceneTreeEditor::set_display_foreign_nodes(bool p_display) { - display_foreign = p_display; _update_tree(); } -bool SceneTreeEditor::get_display_foreign_nodes() const { +bool SceneTreeEditor::get_display_foreign_nodes() const { return display_foreign; } @@ -832,7 +826,6 @@ void SceneTreeEditor::set_valid_types(const Vector<StringName> &p_valid) { } void SceneTreeEditor::set_editor_selection(EditorSelection *p_selection) { - editor_selection = p_selection; tree->set_select_mode(Tree::SELECT_MULTI); tree->set_cursor_can_exit_tree(false); @@ -840,55 +833,59 @@ void SceneTreeEditor::set_editor_selection(EditorSelection *p_selection) { } void SceneTreeEditor::_update_selection(TreeItem *item) { - ERR_FAIL_COND(!item); NodePath np = item->get_metadata(0); - if (!has_node(np)) + if (!has_node(np)) { return; + } Node *n = get_node(np); - if (!n) + if (!n) { return; + } - if (editor_selection->is_selected(n)) + if (editor_selection->is_selected(n)) { item->select(0); - else + } else { item->deselect(0); + } TreeItem *c = item->get_children(); while (c) { - _update_selection(c); c = c->get_next(); } } void SceneTreeEditor::_selection_changed() { - - if (!editor_selection) + if (!editor_selection) { return; + } TreeItem *root = tree->get_root(); - if (!root) + if (!root) { return; + } _update_selection(root); } void SceneTreeEditor::_cell_collapsed(Object *p_obj) { - - if (updating_tree) + if (updating_tree) { return; - if (!can_rename) + } + if (!can_rename) { return; + } TreeItem *ti = Object::cast_to<TreeItem>(p_obj); - if (!ti) + if (!ti) { return; + } bool collapsed = ti->is_collapsed(); @@ -901,14 +898,14 @@ void SceneTreeEditor::_cell_collapsed(Object *p_obj) { } Variant SceneTreeEditor::get_drag_data_fw(const Point2 &p_point, Control *p_from) { - if (!can_rename) + if (!can_rename) { return Variant(); //not editable tree + } Vector<Node *> selected; Vector<Ref<Texture2D>> icons; - TreeItem *next = tree->get_next_selected(NULL); + TreeItem *next = tree->get_next_selected(nullptr); while (next) { - NodePath np = next->get_metadata(0); Node *n = get_node(np); @@ -922,8 +919,9 @@ Variant SceneTreeEditor::get_drag_data_fw(const Point2 &p_point, Control *p_from next = tree->get_next_selected(next); } - if (selected.empty()) + if (selected.empty()) { return Variant(); + } VBoxContainer *vb = memnew(VBoxContainer); Array objs; @@ -931,7 +929,6 @@ Variant SceneTreeEditor::get_drag_data_fw(const Point2 &p_point, Control *p_from float opacity_step = 1.0f / list_max; float opacity_item = 1.0f; for (int i = 0; i < selected.size(); i++) { - if (i < list_max) { HBoxContainer *hb = memnew(HBoxContainer); TextureRect *tf = memnew(TextureRect); @@ -964,30 +961,34 @@ bool SceneTreeEditor::_is_script_type(const StringName &p_type) const { } bool SceneTreeEditor::can_drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) const { - - if (!can_rename) + if (!can_rename) { return false; //not editable tree - if (filter != String()) + } + if (filter != String()) { return false; //can't rearrange tree with filter turned on + } Dictionary d = p_data; - if (!d.has("type")) + if (!d.has("type")) { return false; + } TreeItem *item = tree->get_item_at_position(p_point); - if (!item) + if (!item) { return false; + } int section = tree->get_drop_section_at_position(p_point); - if (section < -1 || (section == -1 && !item->get_parent())) + if (section < -1 || (section == -1 && !item->get_parent())) { return false; + } if (String(d["type"]) == "files") { - Vector<String> files = d["files"]; - if (files.size() == 0) + if (files.size() == 0) { return false; //weird + } if (_is_script_type(EditorFileSystem::get_singleton()->get_file_type(files[0]))) { tree->set_drop_mode_flags(Tree::DROP_MODE_ON_ITEM); @@ -997,8 +998,9 @@ bool SceneTreeEditor::can_drop_data_fw(const Point2 &p_point, const Variant &p_d for (int i = 0; i < files.size(); i++) { String file = files[i]; String ftype = EditorFileSystem::get_singleton()->get_file_type(file); - if (ftype != "PackedScene") + if (ftype != "PackedScene") { return false; + } } tree->set_drop_mode_flags(Tree::DROP_MODE_INBETWEEN | Tree::DROP_MODE_ON_ITEM); //so it works.. @@ -1019,22 +1021,26 @@ bool SceneTreeEditor::can_drop_data_fw(const Point2 &p_point, const Variant &p_d return String(d["type"]) == "nodes"; } -void SceneTreeEditor::drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) { - if (!can_drop_data_fw(p_point, p_data, p_from)) +void SceneTreeEditor::drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) { + if (!can_drop_data_fw(p_point, p_data, p_from)) { return; + } TreeItem *item = tree->get_item_at_position(p_point); - if (!item) + if (!item) { return; + } int section = tree->get_drop_section_at_position(p_point); - if (section < -1) + if (section < -1) { return; + } NodePath np = item->get_metadata(0); Node *n = get_node(np); - if (!n) + if (!n) { return; + } Dictionary d = p_data; @@ -1044,7 +1050,6 @@ void SceneTreeEditor::drop_data_fw(const Point2 &p_point, const Variant &p_data, } if (String(d["type"]) == "files") { - Vector<String> files = d["files"]; String ftype = EditorFileSystem::get_singleton()->get_file_type(files[0]); @@ -1067,12 +1072,10 @@ void SceneTreeEditor::drop_data_fw(const Point2 &p_point, const Variant &p_data, } void SceneTreeEditor::_rmb_select(const Vector2 &p_pos) { - emit_signal("rmb_pressed", tree->get_global_transform().xform(p_pos)); } void SceneTreeEditor::_warning_changed(Node *p_for_node) { - //should use a timer update_timer->start(); } @@ -1088,7 +1091,6 @@ void SceneTreeEditor::set_connecting_signal(bool p_enable) { } void SceneTreeEditor::_bind_methods() { - ClassDB::bind_method("_update_tree", &SceneTreeEditor::_update_tree); // Still used by some connect_compat. ClassDB::bind_method("_rename_node", &SceneTreeEditor::_rename_node); ClassDB::bind_method("_test_update_tree", &SceneTreeEditor::_test_update_tree); @@ -1114,19 +1116,18 @@ void SceneTreeEditor::_bind_methods() { } SceneTreeEditor::SceneTreeEditor(bool p_label, bool p_can_rename, bool p_can_open_instance) { - connect_to_script_mode = false; connecting_signal = false; - undo_redo = NULL; + undo_redo = nullptr; tree_dirty = true; - selected = NULL; + selected = nullptr; marked_selectable = false; marked_children_selectable = false; can_rename = p_can_rename; can_open_instance = p_can_open_instance; display_foreign = false; - editor_selection = NULL; + editor_selection = nullptr; if (p_label) { Label *label = memnew(Label); @@ -1184,19 +1185,17 @@ SceneTreeEditor::SceneTreeEditor(bool p_label, bool p_can_rename, bool p_can_ope } SceneTreeEditor::~SceneTreeEditor() { - memdelete(script_types); } /******** DIALOG *********/ void SceneTreeDialog::_notification(int p_what) { - switch (p_what) { case NOTIFICATION_VISIBILITY_CHANGED: { - - if (is_visible()) + if (is_visible()) { tree->update_tree(); + } } break; case NOTIFICATION_ENTER_TREE: { connect("confirmed", callable_mp(this, &SceneTreeDialog::_select)); @@ -1210,11 +1209,10 @@ void SceneTreeDialog::_notification(int p_what) { } void SceneTreeDialog::_cancel() { - hide(); } -void SceneTreeDialog::_select() { +void SceneTreeDialog::_select() { if (tree->get_selected()) { emit_signal("selected", tree->get_selected()->get_path()); hide(); @@ -1222,19 +1220,16 @@ void SceneTreeDialog::_select() { } void SceneTreeDialog::_filter_changed(const String &p_filter) { - tree->set_filter(p_filter); } void SceneTreeDialog::_bind_methods() { - ClassDB::bind_method("_cancel", &SceneTreeDialog::_cancel); ADD_SIGNAL(MethodInfo("selected", PropertyInfo(Variant::NODE_PATH, "path"))); } SceneTreeDialog::SceneTreeDialog() { - set_title(TTR("Select a Node")); VBoxContainer *vbc = memnew(VBoxContainer); add_child(vbc); |