Merge pull request #42402 from Calinou/assetlib-search-auto-debounce

Automatically start searching in the asset library when entering text
This commit is contained in:
Rémi Verschelde 2020-09-29 13:14:47 +02:00 committed by GitHub
commit 74da12b1a2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 6 deletions

View file

@ -910,7 +910,11 @@ void EditorAssetLibrary::_search(int p_page) {
_api_request("asset", REQUESTING_SEARCH, args); _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(); _search();
} }
@ -1299,10 +1303,15 @@ EditorAssetLibrary::EditorAssetLibrary(bool p_templates_only) {
filter = memnew(LineEdit); filter = memnew(LineEdit);
search_hb->add_child(filter); search_hb->add_child(filter);
filter->set_h_size_flags(Control::SIZE_EXPAND_FILL); filter->set_h_size_flags(Control::SIZE_EXPAND_FILL);
filter->connect("text_entered", callable_mp(this, &EditorAssetLibrary::_search_text_entered)); filter->connect("text_changed", callable_mp(this, &EditorAssetLibrary::_search_text_changed));
search = memnew(Button(TTR("Search")));
search->connect("pressed", callable_mp(this, &EditorAssetLibrary::_search), make_binds(0)); // Perform a search automatically if the user hasn't entered any text for a certain duration.
search_hb->add_child(search); // 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) { if (!p_templates_only) {
search_hb->add_child(memnew(VSeparator)); search_hb->add_child(memnew(VSeparator));

View file

@ -183,10 +183,10 @@ class EditorAssetLibrary : public PanelContainer {
Label *library_loading; Label *library_loading;
Label *library_error; Label *library_error;
LineEdit *filter; LineEdit *filter;
Timer *filter_debounce_timer;
OptionButton *categories; OptionButton *categories;
OptionButton *repository; OptionButton *repository;
OptionButton *sort; OptionButton *sort;
Button *search;
HBoxContainer *error_hb; HBoxContainer *error_hb;
TextureRect *error_tr; TextureRect *error_tr;
Label *error_label; Label *error_label;
@ -280,10 +280,12 @@ class EditorAssetLibrary : public PanelContainer {
void _search(int p_page = 0); void _search(int p_page = 0);
void _rerun_search(int p_ignore); void _rerun_search(int p_ignore);
void _search_text_changed(const String &p_text = "");
void _search_text_entered(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 _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_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 _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 _repository_changed(int p_repository_id);
void _support_toggled(int p_support); void _support_toggled(int p_support);