From 5cf6f3c77944e9ac953a331066755ea0c239fb1a Mon Sep 17 00:00:00 2001 From: AeioMuch <75151379+AeioMuch@users.noreply.github.com> Date: Sun, 25 Feb 2024 15:40:39 +0100 Subject: [PATCH] Hide Search Results by default. Show it on first search and push it at the end. Add a close button to hide it back. Also switch to Script Editor if a searched line is clicked. --- editor/find_in_files.cpp | 12 +++++++++++ editor/find_in_files.h | 3 +++ editor/plugins/script_editor_plugin.cpp | 27 ++++++++++++++----------- editor/plugins/script_editor_plugin.h | 1 + 4 files changed, 31 insertions(+), 12 deletions(-) diff --git a/editor/find_in_files.cpp b/editor/find_in_files.cpp index 965cb39df30..cbf7da839ec 100644 --- a/editor/find_in_files.cpp +++ b/editor/find_in_files.cpp @@ -566,6 +566,7 @@ void FindInFilesDialog::_bind_methods() { //----------------------------------------------------------------------------- const char *FindInFilesPanel::SIGNAL_RESULT_SELECTED = "result_selected"; const char *FindInFilesPanel::SIGNAL_FILES_MODIFIED = "files_modified"; +const char *FindInFilesPanel::SIGNAL_CLOSE_BUTTON_CLICKED = "close_button_clicked"; FindInFilesPanel::FindInFilesPanel() { _finder = memnew(FindInFiles); @@ -611,6 +612,11 @@ FindInFilesPanel::FindInFilesPanel() { _cancel_button->hide(); hbc->add_child(_cancel_button); + _close_button = memnew(Button); + _close_button->set_text(TTR("Close")); + _close_button->connect("pressed", callable_mp(this, &FindInFilesPanel::_on_close_button_clicked)); + hbc->add_child(_close_button); + vbc->add_child(hbc); } @@ -842,6 +848,10 @@ void FindInFilesPanel::_on_cancel_button_clicked() { stop_search(); } +void FindInFilesPanel::_on_close_button_clicked() { + emit_signal(SNAME(SIGNAL_CLOSE_BUTTON_CLICKED)); +} + void FindInFilesPanel::_on_result_selected() { TreeItem *item = _results_display->get_selected(); HashMap::Iterator E = _result_items.find(item); @@ -1009,4 +1019,6 @@ void FindInFilesPanel::_bind_methods() { PropertyInfo(Variant::INT, "end"))); ADD_SIGNAL(MethodInfo(SIGNAL_FILES_MODIFIED, PropertyInfo(Variant::STRING, "paths"))); + + ADD_SIGNAL(MethodInfo(SIGNAL_CLOSE_BUTTON_CLICKED)); } diff --git a/editor/find_in_files.h b/editor/find_in_files.h index 78859315147..ac336b4e358 100644 --- a/editor/find_in_files.h +++ b/editor/find_in_files.h @@ -159,6 +159,7 @@ class FindInFilesPanel : public Control { public: static const char *SIGNAL_RESULT_SELECTED; static const char *SIGNAL_FILES_MODIFIED; + static const char *SIGNAL_CLOSE_BUTTON_CLICKED; FindInFilesPanel(); @@ -180,6 +181,7 @@ private: void _on_finished(); void _on_refresh_button_clicked(); void _on_cancel_button_clicked(); + void _on_close_button_clicked(); void _on_result_selected(); void _on_item_edited(); void _on_replace_text_changed(const String &text); @@ -207,6 +209,7 @@ private: Label *_status_label = nullptr; Button *_refresh_button = nullptr; Button *_cancel_button = nullptr; + Button *_close_button = nullptr; ProgressBar *_progress_bar = nullptr; HashMap _file_items; HashMap _result_items; diff --git a/editor/plugins/script_editor_plugin.cpp b/editor/plugins/script_editor_plugin.cpp index edec4af0941..8daa2077075 100644 --- a/editor/plugins/script_editor_plugin.cpp +++ b/editor/plugins/script_editor_plugin.cpp @@ -1715,18 +1715,6 @@ void ScriptEditor::_notification(int p_what) { _test_script_times_on_disk(); _update_modified_scripts_for_external_editor(); } break; - - case CanvasItem::NOTIFICATION_VISIBILITY_CHANGED: { - if (is_visible()) { - find_in_files_button->show(); - } else { - if (find_in_files->is_visible_in_tree()) { - EditorNode::get_bottom_panel()->hide_bottom_panel(); - } - find_in_files_button->hide(); - } - - } break; } } @@ -3775,6 +3763,7 @@ void ScriptEditor::_on_find_in_files_result_selected(const String &fpath, int li ScriptTextEditor *ste = Object::cast_to(_get_current_editor()); if (ste) { + EditorInterface::get_singleton()->set_main_screen_editor("Script"); ste->goto_line_selection(line_number, begin, end); } } @@ -3789,6 +3778,7 @@ void ScriptEditor::_on_find_in_files_result_selected(const String &fpath, int li ScriptTextEditor *ste = Object::cast_to(_get_current_editor()); if (ste) { + EditorInterface::get_singleton()->set_main_screen_editor("Script"); ste->goto_line_selection(line_number - 1, begin, end); } return; @@ -3822,6 +3812,13 @@ void ScriptEditor::_start_find_in_files(bool with_replace) { find_in_files->set_replace_text(find_in_files_dialog->get_replace_text()); find_in_files->start_search(); + if (find_in_files_button->get_index() != find_in_files_button->get_parent()->get_child_count()) { + find_in_files_button->get_parent()->move_child(find_in_files_button, -1); + } + if (!find_in_files_button->is_visible()) { + find_in_files_button->show(); + } + EditorNode::get_bottom_panel()->make_item_visible(find_in_files); } @@ -3848,6 +3845,11 @@ void ScriptEditor::_set_zoom_factor(float p_zoom_factor) { } } +void ScriptEditor::_on_find_in_files_close_button_clicked() { + EditorNode::get_bottom_panel()->hide_bottom_panel(); + find_in_files_button->hide(); +} + void ScriptEditor::_window_changed(bool p_visible) { make_floating->set_visible(!p_visible); is_floating = p_visible; @@ -4201,6 +4203,7 @@ ScriptEditor::ScriptEditor(WindowWrapper *p_wrapper) { find_in_files->set_custom_minimum_size(Size2(0, 200) * EDSCALE); find_in_files->connect(FindInFilesPanel::SIGNAL_RESULT_SELECTED, callable_mp(this, &ScriptEditor::_on_find_in_files_result_selected)); find_in_files->connect(FindInFilesPanel::SIGNAL_FILES_MODIFIED, callable_mp(this, &ScriptEditor::_on_find_in_files_modified_files)); + find_in_files->connect(FindInFilesPanel::SIGNAL_CLOSE_BUTTON_CLICKED, callable_mp(this, &ScriptEditor::_on_find_in_files_close_button_clicked)); find_in_files->hide(); find_in_files_button->hide(); diff --git a/editor/plugins/script_editor_plugin.h b/editor/plugins/script_editor_plugin.h index d5c33c73b4e..4fff7248668 100644 --- a/editor/plugins/script_editor_plugin.h +++ b/editor/plugins/script_editor_plugin.h @@ -496,6 +496,7 @@ class ScriptEditor : public PanelContainer { void _on_find_in_files_result_selected(const String &fpath, int line_number, int begin, int end); void _start_find_in_files(bool with_replace); void _on_find_in_files_modified_files(const PackedStringArray &paths); + void _on_find_in_files_close_button_clicked(); void _set_zoom_factor(float p_zoom_factor);