diff options
Diffstat (limited to 'editor/find_in_files.cpp')
-rw-r--r-- | editor/find_in_files.cpp | 71 |
1 files changed, 68 insertions, 3 deletions
diff --git a/editor/find_in_files.cpp b/editor/find_in_files.cpp index b24a5c38f2..095e1b804a 100644 --- a/editor/find_in_files.cpp +++ b/editor/find_in_files.cpp @@ -323,6 +323,17 @@ FindInFilesDialog::FindInFilesDialog() { _search_text_line_edit->connect("text_entered", this, "_on_search_text_entered"); gc->add_child(_search_text_line_edit); + _replace_label = memnew(Label); + _replace_label->set_text(TTR("Replace:")); + _replace_label->hide(); + gc->add_child(_replace_label); + + _replace_text_line_edit = memnew(LineEdit); + _replace_text_line_edit->set_h_size_flags(SIZE_EXPAND_FILL); + _replace_text_line_edit->connect("text_entered", this, "_on_replace_text_entered"); + _replace_text_line_edit->hide(); + gc->add_child(_replace_text_line_edit); + gc->add_child(memnew(Control)); // Space to maintain the grid aligned. { @@ -383,6 +394,8 @@ FindInFilesDialog::FindInFilesDialog() { Button *cancel_button = get_ok(); cancel_button->set_text(TTR("Cancel")); + + _mode = SEARCH_MODE; } void FindInFilesDialog::set_search_text(String text) { @@ -390,11 +403,40 @@ void FindInFilesDialog::set_search_text(String text) { _on_search_text_modified(text); } +void FindInFilesDialog::set_replace_text(String text) { + _replace_text_line_edit->set_text(text); +} + +void FindInFilesDialog::set_find_in_files_mode(FindInFilesMode p_mode) { + + if (_mode == p_mode) + return; + + _mode = p_mode; + + if (p_mode == SEARCH_MODE) { + set_title(TTR("Find in Files")); + _replace_label->hide(); + _replace_text_line_edit->hide(); + } else if (p_mode == REPLACE_MODE) { + set_title(TTR("Replace in Files")); + _replace_label->show(); + _replace_text_line_edit->show(); + } + + // After hiding some child controls, let's recalculate proper Dialog size + set_size(Size2(get_size().x, 0)); +} + String FindInFilesDialog::get_search_text() const { String text = _search_text_line_edit->get_text(); return text.strip_edges(); } +String FindInFilesDialog::get_replace_text() const { + return _replace_text_line_edit->get_text(); +} + bool FindInFilesDialog::is_match_case() const { return _match_case_checkbox->is_pressed(); } @@ -473,8 +515,26 @@ void FindInFilesDialog::_on_search_text_modified(String text) { void FindInFilesDialog::_on_search_text_entered(String text) { // This allows to trigger a global search without leaving the keyboard - if (!_find_button->is_disabled()) - custom_action("find"); + if (!_find_button->is_disabled()) { + if (_mode == SEARCH_MODE) { + custom_action("find"); + } + } + + if (!_replace_button->is_disabled()) { + if (_mode == REPLACE_MODE) { + custom_action("replace"); + } + } +} + +void FindInFilesDialog::_on_replace_text_entered(String text) { + // This allows to trigger a global search without leaving the keyboard + if (!_replace_button->is_disabled()) { + if (_mode == REPLACE_MODE) { + custom_action("replace"); + } + } } void FindInFilesDialog::_on_folder_selected(String path) { @@ -490,6 +550,7 @@ void FindInFilesDialog::_bind_methods() { ClassDB::bind_method("_on_folder_selected", &FindInFilesDialog::_on_folder_selected); ClassDB::bind_method("_on_search_text_modified", &FindInFilesDialog::_on_search_text_modified); ClassDB::bind_method("_on_search_text_entered", &FindInFilesDialog::_on_search_text_entered); + ClassDB::bind_method("_on_replace_text_entered", &FindInFilesDialog::_on_replace_text_entered); ADD_SIGNAL(MethodInfo(SIGNAL_FIND_REQUESTED)); ADD_SIGNAL(MethodInfo(SIGNAL_REPLACE_REQUESTED)); @@ -596,6 +657,10 @@ void FindInFilesPanel::set_with_replace(bool with_replace) { } } +void FindInFilesPanel::set_replace_text(String text) { + _replace_line_edit->set_text(text); +} + void FindInFilesPanel::clear() { _file_items.clear(); _result_items.clear(); @@ -886,7 +951,7 @@ void FindInFilesPanel::apply_replaces_in_file(String fpath, const Vector<Result> } String FindInFilesPanel::get_replace_text() { - return _replace_line_edit->get_text().strip_edges(); + return _replace_line_edit->get_text(); } void FindInFilesPanel::update_replace_buttons() { |