diff --git a/editor/task_tree.cpp b/editor/task_tree.cpp index b71468d..5e56271 100644 --- a/editor/task_tree.cpp +++ b/editor/task_tree.cpp @@ -533,14 +533,15 @@ void TaskTree::_notification(int p_what) { tree->connect("multi_selected", callable_mp(this, &TaskTree::_on_item_selected).unbind(3), CONNECT_DEFERRED); tree->connect("item_activated", callable_mp(this, &TaskTree::_on_item_activated)); tree->connect("item_collapsed", callable_mp(this, &TaskTree::_on_item_collapsed)); - tree_search->search_panel->connect("update_requested", callable_mp(this, &TaskTree::_update_tree)); - tree_search->search_panel->connect("visibility_changed", callable_mp(this, &TaskTree::_update_tree)); + tree_search_panel->connect("update_requested", callable_mp(this, &TaskTree::_update_tree)); + tree_search_panel->connect("visibility_changed", callable_mp(this, &TaskTree::_update_tree)); } break; case NOTIFICATION_THEME_CHANGED: { _do_update_theme_item_cache(); _update_tree(); } break; } + } void TaskTree::_bind_methods() { @@ -568,7 +569,8 @@ void TaskTree::_bind_methods() { } void TaskTree::tree_search_show_and_focus() { - tree_search->search_panel->show_and_focus(); + ERR_FAIL_NULL(tree_search); + tree_search_panel->show_and_focus(); } TaskTree::TaskTree() { @@ -595,8 +597,9 @@ TaskTree::TaskTree() { tree->set_drag_forwarding(callable_mp(this, &TaskTree::_get_drag_data_fw), callable_mp(this, &TaskTree::_can_drop_data_fw), callable_mp(this, &TaskTree::_drop_data_fw)); - tree_search.instantiate(); - vbox_container->add_child(tree_search->search_panel); + tree_search_panel = memnew(TreeSearchPanel); + tree_search = Ref(memnew(TreeSearch(tree_search_panel))); + vbox_container->add_child(tree_search_panel); } TaskTree::~TaskTree() { diff --git a/editor/task_tree.h b/editor/task_tree.h index 30564c6..2373e7f 100644 --- a/editor/task_tree.h +++ b/editor/task_tree.h @@ -46,7 +46,9 @@ private: bool editable; bool updating_tree; HashMap probability_rect_cache; + Ref tree_search; + TreeSearchPanel *tree_search_panel; struct ThemeCache { Ref comment_font; @@ -109,7 +111,6 @@ public: bool selected_has_probability() const; virtual bool editor_can_reload_from_file() { return false; } - TaskTree(); ~TaskTree(); diff --git a/editor/tree_search.cpp b/editor/tree_search.cpp index 1bce795..4916ad7 100644 --- a/editor/tree_search.cpp +++ b/editor/tree_search.cpp @@ -367,15 +367,14 @@ TreeSearch::StringSearchIndices TreeSearch::_substring_bounds(const String &p_se void TreeSearch::_select_item(TreeItem *p_item) { if (!p_item) return; + ERR_FAIL_COND(!tree_reference || p_item->get_tree() != tree_reference); // first unfold ancestors TreeItem *ancestor = p_item->get_parent(); - ancestor = ancestor->get_parent(); while (ancestor) { ancestor->set_collapsed(false); ancestor = ancestor->get_parent(); } - //then scroll to [item] tree_reference->scroll_to_item(p_item); @@ -476,10 +475,11 @@ void TreeSearch::update_search(Tree *p_tree) { if (search_mode == TreeSearchMode::FILTER) { _filter_tree(search_mask); } + } -TreeSearch::TreeSearch() { - search_panel = memnew(TreeSearchPanel); +TreeSearch::TreeSearch(TreeSearchPanel *p_search_panel) { + search_panel = p_search_panel; } /* !TreeSearch */ diff --git a/editor/tree_search.h b/editor/tree_search.h index 3980070..24ceae2 100644 --- a/editor/tree_search.h +++ b/editor/tree_search.h @@ -81,8 +81,10 @@ private: } }; - Tree *tree_reference; + TreeSearchPanel *search_panel; + // These variables are updated every time the update_search method is called. + Tree *tree_reference; Vector ordered_tree_items; Vector matching_entries; HashMap number_matches; @@ -112,9 +114,9 @@ public: // we will add everything from TaskTree.h void update_search(Tree *p_tree); void on_item_edited(TreeItem *p_item); - TreeSearchPanel *search_panel; - TreeSearch(); + TreeSearch(){ERR_FAIL_MSG("TreeSearch needs a TreeSearchPanel to work properly");} + TreeSearch(TreeSearchPanel * p_search_panel); }; #endif // TREE_SEARCH_H