Fixed block indent inconsistency, fixes issue 3803
(cherry picked from commit 93700676b5
)
This commit is contained in:
parent
00566a8592
commit
b3891246e5
|
@ -1229,6 +1229,66 @@ void TextEdit::backspace_at_cursor() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TextEdit::indent_selection_right() {
|
||||||
|
|
||||||
|
if (!is_selection_active()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
begin_complex_operation();
|
||||||
|
int start_line = get_selection_from_line();
|
||||||
|
int end_line = get_selection_to_line();
|
||||||
|
|
||||||
|
// ignore if the cursor is not past the first column
|
||||||
|
if (get_selection_to_column() == 0) {
|
||||||
|
end_line--;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = start_line; i <= end_line; i++) {
|
||||||
|
String line_text = get_line(i);
|
||||||
|
line_text = '\t' + line_text;
|
||||||
|
set_line(i, line_text);
|
||||||
|
}
|
||||||
|
|
||||||
|
// fix selection being off by one on the last line
|
||||||
|
selection.to_column++;
|
||||||
|
end_complex_operation();
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TextEdit::indent_selection_left() {
|
||||||
|
|
||||||
|
if (!is_selection_active()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
begin_complex_operation();
|
||||||
|
int start_line = get_selection_from_line();
|
||||||
|
int end_line = get_selection_to_line();
|
||||||
|
|
||||||
|
// ignore if the cursor is not past the first column
|
||||||
|
if (get_selection_to_column() == 0) {
|
||||||
|
end_line--;
|
||||||
|
}
|
||||||
|
String last_line_text = get_line(end_line);
|
||||||
|
|
||||||
|
for (int i = start_line; i <= end_line; i++) {
|
||||||
|
String line_text = get_line(i);
|
||||||
|
|
||||||
|
if (line_text.begins_with("\t")) {
|
||||||
|
line_text = line_text.substr(1, line_text.length());
|
||||||
|
set_line(i, line_text);
|
||||||
|
} else if (line_text.begins_with(" ")) {
|
||||||
|
line_text = line_text.substr(4, line_text.length());
|
||||||
|
set_line(i, line_text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// fix selection being off by one on the last line
|
||||||
|
if (last_line_text != get_line(end_line) && selection.to_column > 0) {
|
||||||
|
selection.to_column--;
|
||||||
|
}
|
||||||
|
end_complex_operation();
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
void TextEdit::_get_mouse_pos(const Point2i& p_mouse, int &r_row, int &r_col) const {
|
void TextEdit::_get_mouse_pos(const Point2i& p_mouse, int &r_row, int &r_col) const {
|
||||||
|
|
||||||
|
@ -1656,51 +1716,13 @@ void TextEdit::_input_event(const InputEvent& p_input_event) {
|
||||||
switch(k.scancode) {
|
switch(k.scancode) {
|
||||||
|
|
||||||
case KEY_TAB: {
|
case KEY_TAB: {
|
||||||
|
|
||||||
String txt = _base_get_text(selection.from_line,selection.from_column,selection.to_line,selection.to_column);
|
|
||||||
String prev_txt=txt;
|
|
||||||
|
|
||||||
if (k.mod.shift) {
|
if (k.mod.shift) {
|
||||||
|
indent_selection_left();
|
||||||
for(int i=0;i<txt.length();i++) {
|
|
||||||
if (((i>0 && txt[i-1]=='\n') || (i==0 /*&& selection.from_column==0*/)) && (txt[i]=='\t' || txt[i]==' ')) {
|
|
||||||
txt.remove(i);
|
|
||||||
//i--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
|
indent_selection_right();
|
||||||
for(int i=0;i<txt.length();i++) {
|
|
||||||
|
|
||||||
if (((i>0 && txt[i-1]=='\n') || (i==0 /*&& selection.from_column==0*/))) {
|
|
||||||
txt=txt.insert(i,"\t");
|
|
||||||
//i--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (txt!=prev_txt) {
|
|
||||||
|
|
||||||
int sel_line=selection.from_line;
|
|
||||||
int sel_column=selection.from_column;
|
|
||||||
|
|
||||||
cursor_set_line(selection.from_line);
|
|
||||||
cursor_set_column(selection.from_column);
|
|
||||||
begin_complex_operation();
|
|
||||||
_remove_text(selection.from_line,selection.from_column,selection.to_line,selection.to_column);
|
|
||||||
_insert_text_at_cursor(txt);
|
|
||||||
end_complex_operation();
|
|
||||||
selection.active=true;
|
|
||||||
selection.from_column=sel_column;
|
|
||||||
selection.from_line=sel_line;
|
|
||||||
selection.to_column=cursor.column;
|
|
||||||
selection.to_line=cursor.line;
|
|
||||||
update();
|
|
||||||
}
|
|
||||||
|
|
||||||
dobreak=true;
|
dobreak=true;
|
||||||
accept_event();
|
accept_event();
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
case KEY_X:
|
case KEY_X:
|
||||||
case KEY_C:
|
case KEY_C:
|
||||||
|
|
|
@ -332,6 +332,9 @@ public:
|
||||||
void set_line(int line, String new_text);
|
void set_line(int line, String new_text);
|
||||||
void backspace_at_cursor();
|
void backspace_at_cursor();
|
||||||
|
|
||||||
|
void indent_selection_left();
|
||||||
|
void indent_selection_right();
|
||||||
|
|
||||||
inline void set_scroll_pass_end_of_file(bool p_enabled) {
|
inline void set_scroll_pass_end_of_file(bool p_enabled) {
|
||||||
scroll_past_end_of_file_enabled = p_enabled;
|
scroll_past_end_of_file_enabled = p_enabled;
|
||||||
update();
|
update();
|
||||||
|
|
|
@ -1160,24 +1160,7 @@ void ScriptEditor::_menu_option(int p_option) {
|
||||||
tx->begin_complex_operation();
|
tx->begin_complex_operation();
|
||||||
if (tx->is_selection_active())
|
if (tx->is_selection_active())
|
||||||
{
|
{
|
||||||
int begin = tx->get_selection_from_line();
|
tx->indent_selection_left();
|
||||||
int end = tx->get_selection_to_line();
|
|
||||||
for (int i = begin; i <= end; i++)
|
|
||||||
{
|
|
||||||
String line_text = tx->get_line(i);
|
|
||||||
// begins with tab
|
|
||||||
if (line_text.begins_with("\t"))
|
|
||||||
{
|
|
||||||
line_text = line_text.substr(1, line_text.length());
|
|
||||||
tx->set_line(i, line_text);
|
|
||||||
}
|
|
||||||
// begins with 4 spaces
|
|
||||||
else if (line_text.begins_with(" "))
|
|
||||||
{
|
|
||||||
line_text = line_text.substr(4, line_text.length());
|
|
||||||
tx->set_line(i, line_text);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1211,14 +1194,7 @@ void ScriptEditor::_menu_option(int p_option) {
|
||||||
tx->begin_complex_operation();
|
tx->begin_complex_operation();
|
||||||
if (tx->is_selection_active())
|
if (tx->is_selection_active())
|
||||||
{
|
{
|
||||||
int begin = tx->get_selection_from_line();
|
tx->indent_selection_right();
|
||||||
int end = tx->get_selection_to_line();
|
|
||||||
for (int i = begin; i <= end; i++)
|
|
||||||
{
|
|
||||||
String line_text = tx->get_line(i);
|
|
||||||
line_text = '\t' + line_text;
|
|
||||||
tx->set_line(i, line_text);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue