瀏覽代碼

Some QOL and cleanup to EditorHelp's `FindBar`

Jayden Sipe 4 月之前
父節點
當前提交
201238168c
共有 3 個文件被更改,包括 45 次插入24 次删除
  1. 2 0
      editor/code_editor.cpp
  2. 39 21
      editor/editor_help.cpp
  3. 4 3
      editor/editor_help.h

+ 2 - 0
editor/code_editor.cpp

@@ -797,6 +797,7 @@ FindReplaceBar::FindReplaceBar() {
 
 	find_prev = memnew(Button);
 	find_prev->set_flat(true);
+	find_prev->set_disabled(results_count < 1);
 	find_prev->set_tooltip_text(TTR("Previous Match"));
 	find_prev->set_accessibility_name(TTRC("Previous Match"));
 	hbc_button_search->add_child(find_prev);
@@ -805,6 +806,7 @@ FindReplaceBar::FindReplaceBar() {
 
 	find_next = memnew(Button);
 	find_next->set_flat(true);
+	find_next->set_disabled(results_count < 1);
 	find_next->set_tooltip_text(TTR("Next Match"));
 	find_next->set_accessibility_name(TTRC("Next Match"));
 	hbc_button_search->add_child(find_next);

+ 39 - 21
editor/editor_help.cpp

@@ -4758,44 +4758,47 @@ EditorHelpHighlighter::~EditorHelpHighlighter() {
 
 FindBar::FindBar() {
 	search_text = memnew(LineEdit);
-	search_text->set_accessibility_name(TTRC("Search help"));
-	add_child(search_text);
 	search_text->set_keep_editing_on_text_submit(true);
+	add_child(search_text);
+	search_text->set_placeholder(TTR("Search"));
+	search_text->set_tooltip_text(TTR("Search"));
+	search_text->set_accessibility_name(TTRC("Search Documentation"));
 	search_text->set_custom_minimum_size(Size2(100 * EDSCALE, 0));
 	search_text->set_h_size_flags(SIZE_EXPAND_FILL);
 	search_text->connect(SceneStringName(text_changed), callable_mp(this, &FindBar::_search_text_changed));
 	search_text->connect(SceneStringName(text_submitted), callable_mp(this, &FindBar::_search_text_submitted));
 
 	matches_label = memnew(Label);
-	matches_label->set_focus_mode(FOCUS_ACCESSIBILITY);
 	add_child(matches_label);
+	matches_label->set_focus_mode(FOCUS_ACCESSIBILITY);
 	matches_label->hide();
 
 	find_prev = memnew(Button);
-	find_prev->set_accessibility_name(TTRC("Find Previous"));
 	find_prev->set_flat(true);
+	find_prev->set_disabled(results_count < 1);
+	find_prev->set_tooltip_text(TTR("Previous Match"));
+	find_prev->set_accessibility_name(TTRC("Previous Match"));
 	add_child(find_prev);
 	find_prev->set_focus_mode(FOCUS_NONE);
 	find_prev->connect(SceneStringName(pressed), callable_mp(this, &FindBar::search_prev));
 
 	find_next = memnew(Button);
-	find_next->set_accessibility_name(TTRC("Find Next"));
 	find_next->set_flat(true);
+	find_next->set_disabled(results_count < 1);
+	find_next->set_tooltip_text(TTR("Next Match"));
+	find_next->set_accessibility_name(TTRC("Next Match"));
 	add_child(find_next);
 	find_next->set_focus_mode(FOCUS_NONE);
 	find_next->connect(SceneStringName(pressed), callable_mp(this, &FindBar::search_next));
 
-	Control *space = memnew(Control);
-	add_child(space);
-	space->set_custom_minimum_size(Size2(4, 0) * EDSCALE);
-
-	hide_button = memnew(TextureButton);
-	add_child(hide_button);
+	hide_button = memnew(Button);
+	hide_button->set_flat(true);
+	hide_button->set_tooltip_text(TTR("Hide"));
 	hide_button->set_accessibility_name(TTRC("Hide"));
 	hide_button->set_focus_mode(FOCUS_NONE);
-	hide_button->set_ignore_texture_size(true);
-	hide_button->set_stretch_mode(TextureButton::STRETCH_KEEP_CENTERED);
 	hide_button->connect(SceneStringName(pressed), callable_mp(this, &FindBar::_hide_bar));
+	hide_button->set_v_size_flags(SIZE_SHRINK_CENTER);
+	add_child(hide_button);
 }
 
 void FindBar::popup_search() {
@@ -4820,10 +4823,7 @@ void FindBar::_notification(int p_what) {
 		case NOTIFICATION_THEME_CHANGED: {
 			find_prev->set_button_icon(get_editor_theme_icon(SNAME("MoveUp")));
 			find_next->set_button_icon(get_editor_theme_icon(SNAME("MoveDown")));
-			hide_button->set_texture_normal(get_editor_theme_icon(SNAME("Close")));
-			hide_button->set_texture_hover(get_editor_theme_icon(SNAME("Close")));
-			hide_button->set_texture_pressed(get_editor_theme_icon(SNAME("Close")));
-			hide_button->set_custom_minimum_size(hide_button->get_texture_normal()->get_size());
+			hide_button->set_button_icon(get_editor_theme_icon(SNAME("Close")));
 			matches_label->add_theme_color_override(SceneStringName(font_color), results_count > 0 ? get_theme_color(SceneStringName(font_color), SNAME("Label")) : get_theme_color(SNAME("error_color"), EditorStringName(Editor)));
 		} break;
 
@@ -4848,22 +4848,25 @@ bool FindBar::search_prev() {
 bool FindBar::_search(bool p_search_previous) {
 	String stext = search_text->get_text();
 	bool keep = prev_search == stext;
-
 	bool ret = rich_text_label->search(stext, keep, p_search_previous);
 
 	prev_search = stext;
+	if (!keep) {
+		results_count_to_current = 0;
+	}
 
 	if (ret) {
-		_update_results_count();
+		_update_results_count(p_search_previous);
 	} else {
 		results_count = 0;
+		results_count_to_current = 0;
 	}
 	_update_matches_label();
 
 	return ret;
 }
 
-void FindBar::_update_results_count() {
+void FindBar::_update_results_count(bool p_search_previous) {
 	results_count = 0;
 
 	String searched = search_text->get_text();
@@ -4884,6 +4887,13 @@ void FindBar::_update_results_count() {
 		results_count++;
 		from_pos = pos + searched.length();
 	}
+
+	results_count_to_current += (p_search_previous) ? -1 : 1;
+	if (results_count_to_current > results_count) {
+		results_count_to_current = results_count_to_current - results_count;
+	} else if (results_count_to_current <= 0) {
+		results_count_to_current = results_count;
+	}
 }
 
 void FindBar::_update_matches_label() {
@@ -4893,8 +4903,16 @@ void FindBar::_update_matches_label() {
 		matches_label->show();
 
 		matches_label->add_theme_color_override(SceneStringName(font_color), results_count > 0 ? get_theme_color(SceneStringName(font_color), SNAME("Label")) : get_theme_color(SNAME("error_color"), EditorStringName(Editor)));
-		matches_label->set_text(vformat(results_count == 1 ? TTR("%d match.") : TTR("%d matches."), results_count));
+		if (results_count == 0) {
+			matches_label->set_text(TTR("No match"));
+		} else if (results_count_to_current == 0) {
+			matches_label->set_text(vformat(TTRN("%d match", "%d matches", results_count), results_count));
+		} else {
+			matches_label->set_text(vformat(TTRN("%d of %d match", "%d of %d matches", results_count), results_count_to_current, results_count));
+		}
 	}
+	find_prev->set_disabled(results_count < 1);
+	find_next->set_disabled(results_count < 1);
 }
 
 void FindBar::_hide_bar() {

+ 4 - 3
editor/editor_help.h

@@ -47,12 +47,13 @@ class FindBar : public HBoxContainer {
 	Button *find_prev = nullptr;
 	Button *find_next = nullptr;
 	Label *matches_label = nullptr;
-	TextureButton *hide_button = nullptr;
-	String prev_search;
+	Button *hide_button = nullptr;
 
 	RichTextLabel *rich_text_label = nullptr;
 
+	String prev_search;
 	int results_count = 0;
+	int results_count_to_current = 0;
 
 	virtual void input(const Ref<InputEvent> &p_event) override;
 
@@ -61,7 +62,7 @@ class FindBar : public HBoxContainer {
 	void _search_text_changed(const String &p_text);
 	void _search_text_submitted(const String &p_text);
 
-	void _update_results_count();
+	void _update_results_count(bool p_search_previous);
 	void _update_matches_label();
 
 protected: