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)); }