diff --git a/editor/find_in_files.cpp b/editor/find_in_files.cpp index 2d3f1a5b904..3bddc91b81a 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); } @@ -843,6 +849,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); @@ -1010,4 +1020,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 9121ca09b4c..6f1eef62ded 100644 --- a/editor/plugins/script_editor_plugin.cpp +++ b/editor/plugins/script_editor_plugin.cpp @@ -1716,18 +1716,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; } } @@ -3776,6 +3764,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); } } @@ -3790,6 +3779,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; @@ -3823,6 +3813,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); } @@ -3849,6 +3846,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; @@ -4203,6 +4205,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);