1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-19 14:31:59 +00:00

Some QOL and cleanup to EditorHelp's FindBar

This commit is contained in:
Jayden Sipe
2025-04-30 21:43:05 -04:00
parent 32eafc18b4
commit 201238168c
3 changed files with 45 additions and 24 deletions

View File

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

View File

@@ -4758,44 +4758,47 @@ EditorHelpHighlighter::~EditorHelpHighlighter() {
FindBar::FindBar() { FindBar::FindBar() {
search_text = memnew(LineEdit); 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); 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_custom_minimum_size(Size2(100 * EDSCALE, 0));
search_text->set_h_size_flags(SIZE_EXPAND_FILL); 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_changed), callable_mp(this, &FindBar::_search_text_changed));
search_text->connect(SceneStringName(text_submitted), callable_mp(this, &FindBar::_search_text_submitted)); search_text->connect(SceneStringName(text_submitted), callable_mp(this, &FindBar::_search_text_submitted));
matches_label = memnew(Label); matches_label = memnew(Label);
matches_label->set_focus_mode(FOCUS_ACCESSIBILITY);
add_child(matches_label); add_child(matches_label);
matches_label->set_focus_mode(FOCUS_ACCESSIBILITY);
matches_label->hide(); matches_label->hide();
find_prev = memnew(Button); find_prev = memnew(Button);
find_prev->set_accessibility_name(TTRC("Find Previous"));
find_prev->set_flat(true); 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); add_child(find_prev);
find_prev->set_focus_mode(FOCUS_NONE); find_prev->set_focus_mode(FOCUS_NONE);
find_prev->connect(SceneStringName(pressed), callable_mp(this, &FindBar::search_prev)); find_prev->connect(SceneStringName(pressed), callable_mp(this, &FindBar::search_prev));
find_next = memnew(Button); find_next = memnew(Button);
find_next->set_accessibility_name(TTRC("Find Next"));
find_next->set_flat(true); 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); add_child(find_next);
find_next->set_focus_mode(FOCUS_NONE); find_next->set_focus_mode(FOCUS_NONE);
find_next->connect(SceneStringName(pressed), callable_mp(this, &FindBar::search_next)); find_next->connect(SceneStringName(pressed), callable_mp(this, &FindBar::search_next));
Control *space = memnew(Control); hide_button = memnew(Button);
add_child(space); hide_button->set_flat(true);
space->set_custom_minimum_size(Size2(4, 0) * EDSCALE); hide_button->set_tooltip_text(TTR("Hide"));
hide_button = memnew(TextureButton);
add_child(hide_button);
hide_button->set_accessibility_name(TTRC("Hide")); hide_button->set_accessibility_name(TTRC("Hide"));
hide_button->set_focus_mode(FOCUS_NONE); 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->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() { void FindBar::popup_search() {
@@ -4820,10 +4823,7 @@ void FindBar::_notification(int p_what) {
case NOTIFICATION_THEME_CHANGED: { case NOTIFICATION_THEME_CHANGED: {
find_prev->set_button_icon(get_editor_theme_icon(SNAME("MoveUp"))); find_prev->set_button_icon(get_editor_theme_icon(SNAME("MoveUp")));
find_next->set_button_icon(get_editor_theme_icon(SNAME("MoveDown"))); 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_button_icon(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());
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->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; } break;
@@ -4848,22 +4848,25 @@ bool FindBar::search_prev() {
bool FindBar::_search(bool p_search_previous) { bool FindBar::_search(bool p_search_previous) {
String stext = search_text->get_text(); String stext = search_text->get_text();
bool keep = prev_search == stext; bool keep = prev_search == stext;
bool ret = rich_text_label->search(stext, keep, p_search_previous); bool ret = rich_text_label->search(stext, keep, p_search_previous);
prev_search = stext; prev_search = stext;
if (!keep) {
results_count_to_current = 0;
}
if (ret) { if (ret) {
_update_results_count(); _update_results_count(p_search_previous);
} else { } else {
results_count = 0; results_count = 0;
results_count_to_current = 0;
} }
_update_matches_label(); _update_matches_label();
return ret; return ret;
} }
void FindBar::_update_results_count() { void FindBar::_update_results_count(bool p_search_previous) {
results_count = 0; results_count = 0;
String searched = search_text->get_text(); String searched = search_text->get_text();
@@ -4884,6 +4887,13 @@ void FindBar::_update_results_count() {
results_count++; results_count++;
from_pos = pos + searched.length(); 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() { void FindBar::_update_matches_label() {
@@ -4893,8 +4903,16 @@ void FindBar::_update_matches_label() {
matches_label->show(); 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->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() { void FindBar::_hide_bar() {

View File

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