void FindInFilesDialog::_on_search_text_modified(String text) { ERR_FAIL_COND(!_find_button); ERR_FAIL_COND(!_replace_button); _find_button->set_disabled(get_search_text().empty()); _replace_button->set_disabled(get_search_text().empty()); }
bool FindReplaceBar::search_next() { uint32_t flags = 0; String text = get_search_text(); if (is_whole_words()) flags |= TextEdit::SEARCH_WHOLE_WORDS; if (is_case_sensitive()) flags |= TextEdit::SEARCH_MATCH_CASE; int line, col; _get_search_from(line, col); if (line == result_line && col == result_col) { col += text.length(); if (col > text_edit->get_line(line).length()) { line += 1; if (line >= text_edit->get_line_count()) line = 0; col = 0; } } return _search(flags, line, col); }
bool FindReplaceBar::search_prev() { uint32_t flags = 0; String text = get_search_text(); if (is_whole_words()) flags |= TextEdit::SEARCH_WHOLE_WORDS; if (is_case_sensitive()) flags |= TextEdit::SEARCH_MATCH_CASE; flags |= TextEdit::SEARCH_BACKWARDS; int line, col; _get_search_from(line, col); col -= text.length(); if (col < 0) { line -= 1; if (line < 0) line = text_edit->get_line_count() - 1; col = text_edit->get_line(line).length(); } return _search(flags, line, col); }
bool FindReplaceBar::_search(uint32_t p_flags, int p_from_line, int p_from_col) { int line, col; String text = get_search_text(); bool found = text_edit->search(text, p_flags, p_from_line, p_from_col, line, col); if (found) { if (!preserve_cursor) { text_edit->cursor_set_line(line, false); text_edit->cursor_set_column(col + text.length(), false); text_edit->center_viewport_to_cursor(); } text_edit->set_search_text(text); text_edit->set_search_flags(p_flags); text_edit->set_current_search_result(line, col); result_line = line; result_col = col; set_error(""); } else { result_line = -1; result_col = -1; text_edit->set_search_text(""); set_error(text.empty() ? "" : TTR("No Matches")); } return found; }
bool FindReplaceDialog::_search() { String text=get_search_text(); uint32_t flags=0; if (is_whole_words()) flags|=TextEdit::SEARCH_WHOLE_WORDS; if (is_case_sensitive()) flags|=TextEdit::SEARCH_MATCH_CASE; if (is_backwards()) flags|=TextEdit::SEARCH_BACKWARDS; int line,col; bool found = text_edit->search(text,flags,text_edit->cursor_get_line(),text_edit->cursor_get_column(),line,col); if (found) { print_line("found"); text_edit->cursor_set_line(line); text_edit->cursor_set_column(col+text.length()); text_edit->select(line,col,line,col+text.length()); set_error(""); return true; } else { set_error("Not Found!"); return false; } }
void FindReplaceBar::_replace() { if (result_line != -1 && result_col != -1) { text_edit->begin_complex_operation(); text_edit->select(result_line, result_col, result_line, result_col + get_search_text().length()); text_edit->insert_text_at_cursor(get_replace_text()); text_edit->end_complex_operation(); } search_current(); }
void FindReplaceBar::_get_search_from(int &r_line, int &r_col) { r_line = text_edit->cursor_get_line(); r_col = text_edit->cursor_get_column(); if (text_edit->is_selection_active() && !replace_all_mode) { int selection_line = text_edit->get_selection_from_line(); if (text_edit->get_selection_text() == get_search_text() && r_line == selection_line) { int selection_from_col = text_edit->get_selection_from_column(); if (r_col >= selection_from_col && r_col <= text_edit->get_selection_to_column()) { r_col = selection_from_col; } } } if (r_line == result_line && r_col >= result_col && r_col <= result_col + get_search_text().length()) { r_col = result_col; } }
void FindReplaceBar::_show_search() { show(); search_text->grab_focus(); if (text_edit->is_selection_active() && !selection_only->is_pressed()) { search_text->set_text(text_edit->get_selection_text()); } if (!get_search_text().empty()) { search_text->select_all(); search_text->set_cursor_position(search_text->get_text().length()); search_current(); } }
bool FindReplaceDialog::_search() { String text = get_search_text(); uint32_t flags = 0; if (is_whole_words()) flags |= TextEdit::SEARCH_WHOLE_WORDS; if (is_case_sensitive()) flags |= TextEdit::SEARCH_MATCH_CASE; if (is_backwards()) flags |= TextEdit::SEARCH_BACKWARDS; int line = text_edit->cursor_get_line(), col = text_edit->cursor_get_column(); if (is_backwards()) { col -= 1; if (col < 0) { line -= 1; if (line < 0) { line = text_edit->get_line_count() - 1; } col = text_edit->get_line(line).length(); } } bool found = text_edit->search(text, flags, line, col, line, col); if (found) { // print_line("found"); text_edit->unfold_line(line); text_edit->cursor_set_line(line); if (is_backwards()) text_edit->cursor_set_column(col); else text_edit->cursor_set_column(col + text.length()); text_edit->select(line, col, line, col + text.length()); set_error(""); return true; } else { set_error(TTR("Not found!")); return false; } }
void FindReplaceDialog::_replace() { if (is_replace_all_mode()) { //line as x so it gets priority in comparison, column as y Point2i orig_cursor(text_edit->cursor_get_line(),text_edit->cursor_get_column()); Point2i prev_match=Point2(-1,-1); bool selection_enabled = text_edit->is_selection_active(); Point2i selection_begin,selection_end; if (selection_enabled) { selection_begin=Point2i(text_edit->get_selection_from_line(),text_edit->get_selection_from_column()); selection_end=Point2i(text_edit->get_selection_to_line(),text_edit->get_selection_to_column()); } int vsval = text_edit->get_v_scroll(); //int hsval = text_edit->get_h_scroll(); text_edit->cursor_set_line(0); text_edit->cursor_set_column(0); int rc=0; while(_search()) { if (!text_edit->is_selection_active()) { //search selects break; } //replace area Point2i match_from(text_edit->get_selection_from_line(),text_edit->get_selection_from_column()); Point2i match_to(text_edit->get_selection_to_line(),text_edit->get_selection_to_column()); if (match_from < prev_match) break; //done prev_match=match_to; if (selection_enabled && is_replace_selection_only()) { if (match_from<selection_begin || match_to>selection_end) continue; //replace but adjust selection bounds text_edit->insert_text_at_cursor(get_replace_text()); if (match_to.x==selection_end.x) selection_end.y+=get_replace_text().length() - get_search_text().length(); } else { //just replace text_edit->insert_text_at_cursor(get_replace_text()); } rc++; } //restore editor state (selection, cursor, scroll) text_edit->cursor_set_line(orig_cursor.x); text_edit->cursor_set_column(orig_cursor.y); if (selection_enabled && is_replace_selection_only()) { //reselect text_edit->select(selection_begin.x,selection_begin.y,selection_end.x,selection_end.y); } else { text_edit->deselect(); } text_edit->set_v_scroll(vsval); // text_edit->set_h_scroll(hsval); error_label->set_text("Replaced "+itos(rc)+" ocurrence(s)."); //hide(); } else { if (text_edit->get_selection_text()==get_search_text()) { text_edit->insert_text_at_cursor(get_replace_text()); } _search(); } }
void FindReplaceBar::_replace_all() { // line as x so it gets priority in comparison, column as y Point2i orig_cursor(text_edit->cursor_get_line(), text_edit->cursor_get_column()); Point2i prev_match = Point2(-1, -1); bool selection_enabled = text_edit->is_selection_active(); Point2i selection_begin, selection_end; if (selection_enabled) { selection_begin = Point2i(text_edit->get_selection_from_line(), text_edit->get_selection_from_column()); selection_end = Point2i(text_edit->get_selection_to_line(), text_edit->get_selection_to_column()); } int vsval = text_edit->get_v_scroll(); text_edit->cursor_set_line(0); text_edit->cursor_set_column(0); String replace_text = get_replace_text(); int search_text_len = get_search_text().length(); int rc = 0; replace_all_mode = true; text_edit->begin_complex_operation(); while (search_next()) { // replace area Point2i match_from(result_line, result_col); Point2i match_to(result_line, result_col + search_text_len); if (match_from < prev_match) break; // done prev_match = Point2i(result_line, result_col + replace_text.length()); text_edit->select(result_line, result_col, result_line, match_to.y); if (selection_enabled && is_selection_only()) { if (match_from < selection_begin || match_to > selection_end) continue; // replace but adjust selection bounds text_edit->insert_text_at_cursor(replace_text); if (match_to.x == selection_end.x) selection_end.y += replace_text.length() - search_text_len; } else { // just replace text_edit->insert_text_at_cursor(replace_text); } rc++; } text_edit->end_complex_operation(); replace_all_mode = false; // restore editor state (selection, cursor, scroll) text_edit->cursor_set_line(orig_cursor.x); text_edit->cursor_set_column(orig_cursor.y); if (selection_enabled && is_selection_only()) { // reselect text_edit->select(selection_begin.x, selection_begin.y, selection_end.x, selection_end.y); } else { text_edit->deselect(); } text_edit->set_v_scroll(vsval); set_error(vformat(TTR("Replaced %d occurrence(s)."), rc)); }