diff options
author | Hugo Locurcio <hugo.locurcio@hugo.pro> | 2020-09-29 12:43:38 +0200 |
---|---|---|
committer | Hugo Locurcio <hugo.locurcio@hugo.pro> | 2020-09-29 12:46:49 +0200 |
commit | 6055db2a72f108fceb6eddd87c54274fffbb8646 (patch) | |
tree | 1cde8ac9c79c947071e364b43a483a275f682396 | |
parent | aed16c8f84b67626b9a989ef24284fb92d569814 (diff) |
Automatically start searching in the asset library when entering text
Entering text will now start searching automatically after 0.25 seconds
have passed (debounce delay).
This removes the need for a separate Search button.
-rw-r--r-- | editor/plugins/asset_library_editor_plugin.cpp | 19 | ||||
-rw-r--r-- | editor/plugins/asset_library_editor_plugin.h | 4 |
2 files changed, 17 insertions, 6 deletions
diff --git a/editor/plugins/asset_library_editor_plugin.cpp b/editor/plugins/asset_library_editor_plugin.cpp index 28ac85457b..5742becf3a 100644 --- a/editor/plugins/asset_library_editor_plugin.cpp +++ b/editor/plugins/asset_library_editor_plugin.cpp @@ -910,7 +910,11 @@ void EditorAssetLibrary::_search(int p_page) { _api_request("asset", REQUESTING_SEARCH, args); } -void EditorAssetLibrary::_search_text_entered(const String &p_text) { +void EditorAssetLibrary::_search_text_changed(const String &p_text) { + filter_debounce_timer->start(); +} + +void EditorAssetLibrary::_filter_debounce_timer_timeout() { _search(); } @@ -1299,10 +1303,15 @@ EditorAssetLibrary::EditorAssetLibrary(bool p_templates_only) { filter = memnew(LineEdit); search_hb->add_child(filter); filter->set_h_size_flags(Control::SIZE_EXPAND_FILL); - filter->connect("text_entered", callable_mp(this, &EditorAssetLibrary::_search_text_entered)); - search = memnew(Button(TTR("Search"))); - search->connect("pressed", callable_mp(this, &EditorAssetLibrary::_search), make_binds(0)); - search_hb->add_child(search); + filter->connect("text_changed", callable_mp(this, &EditorAssetLibrary::_search_text_changed)); + + // Perform a search automatically if the user hasn't entered any text for a certain duration. + // This way, the user doesn't need to press Enter to initiate their search. + filter_debounce_timer = memnew(Timer); + filter_debounce_timer->set_one_shot(true); + filter_debounce_timer->set_wait_time(0.25); + filter_debounce_timer->connect("timeout", callable_mp(this, &EditorAssetLibrary::_filter_debounce_timer_timeout)); + search_hb->add_child(filter_debounce_timer); if (!p_templates_only) { search_hb->add_child(memnew(VSeparator)); diff --git a/editor/plugins/asset_library_editor_plugin.h b/editor/plugins/asset_library_editor_plugin.h index 3fca8a1084..f7ad53f87b 100644 --- a/editor/plugins/asset_library_editor_plugin.h +++ b/editor/plugins/asset_library_editor_plugin.h @@ -183,10 +183,10 @@ class EditorAssetLibrary : public PanelContainer { Label *library_loading; Label *library_error; LineEdit *filter; + Timer *filter_debounce_timer; OptionButton *categories; OptionButton *repository; OptionButton *sort; - Button *search; HBoxContainer *error_hb; TextureRect *error_tr; Label *error_label; @@ -280,10 +280,12 @@ class EditorAssetLibrary : public PanelContainer { void _search(int p_page = 0); void _rerun_search(int p_ignore); + void _search_text_changed(const String &p_text = ""); void _search_text_entered(const String &p_text = ""); void _api_request(const String &p_request, RequestType p_request_type, const String &p_arguments = ""); void _http_request_completed(int p_status, int p_code, const PackedStringArray &headers, const PackedByteArray &p_data); void _http_download_completed(int p_status, int p_code, const PackedStringArray &headers, const PackedByteArray &p_data); + void _filter_debounce_timer_timeout(); void _repository_changed(int p_repository_id); void _support_toggled(int p_support); |