Przeglądaj źródła

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

Automatically start searching in the asset library when entering text
Rémi Verschelde 5 lat temu
rodzic
commit
74da12b1a2

+ 14 - 5
editor/plugins/asset_library_editor_plugin.cpp

@@ -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));
-	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) {
 	if (!p_templates_only) {
 		search_hb->add_child(memnew(VSeparator));
 		search_hb->add_child(memnew(VSeparator));

+ 3 - 1
editor/plugins/asset_library_editor_plugin.h

@@ -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);