From 5cb66b2776910536ea61256f7488cefb6a1da7b2 Mon Sep 17 00:00:00 2001 From: Alexander Holland Date: Sat, 8 Sep 2018 14:20:45 +0200 Subject: [PATCH] Uncommenting a selection was not updating the selection. Also adds uncomment lines(ctrl+u) where # is not in first place --- scene/gui/text_edit.cpp | 33 ++++++++++++++++++++++++++------- scene/gui/text_edit.h | 1 + 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp index ec98b01ced1..3c1382ae6ae 100644 --- a/scene/gui/text_edit.cpp +++ b/scene/gui/text_edit.cpp @@ -3119,16 +3119,14 @@ void TextEdit::_gui_input(const Ref &p_gui_input) { if (selection.active) { int ini = selection.from_line; int end = selection.to_line; + for (int i = ini; i <= end; i++) { - if (get_line(i).begins_with("#")) - _remove_text(i, 0, i, 1); + _uncomment_line(i); } } else { - if (get_line(cursor.line).begins_with("#")) { - _remove_text(cursor.line, 0, cursor.line, 1); - if (cursor.column >= get_line(cursor.line).length()) { - cursor.column = MAX(0, get_line(cursor.line).length() - 1); - } + _uncomment_line(cursor.line); + if (cursor.column >= get_line(cursor.line).length()) { + cursor.column = MAX(0, get_line(cursor.line).length() - 1); } } update(); @@ -3208,6 +3206,24 @@ void TextEdit::_gui_input(const Ref &p_gui_input) { } } +void TextEdit::_uncomment_line(int p_line) { + String line_text = get_line(p_line); + for (int i = 0; i < line_text.length(); i++) { + if (line_text[i] == '#') { + _remove_text(p_line, i, p_line, i + 1); + if (p_line == selection.to_line && selection.to_column > line_text.length() - 1) { + selection.to_column -= 1; + if (selection.to_column >= selection.from_column) { + selection.active = false; + } + } + return; + } else if (line_text[i] != '\t' && line_text[i] != ' ') { + return; + } + } +} + void TextEdit::_scroll_up(real_t p_delta) { if (scrolling && smooth_scroll_enabled && SGN(target_v_scroll - v_scroll->get_value()) != SGN(-p_delta)) @@ -5910,6 +5926,9 @@ void TextEdit::set_line(int line, String new_text) { if (cursor.line == line) { cursor.column = MIN(cursor.column, new_text.length()); } + if (is_selection_active() && line == selection.to_line && selection.to_column > text[line].length()) { + selection.to_column = text[line].length(); + } } void TextEdit::insert_at(const String &p_text, int at) { diff --git a/scene/gui/text_edit.h b/scene/gui/text_edit.h index 19b5d574c6b..697dc3a5e08 100644 --- a/scene/gui/text_edit.h +++ b/scene/gui/text_edit.h @@ -373,6 +373,7 @@ private: void _update_selection_mode_word(); void _update_selection_mode_line(); + void _uncomment_line(int p_line); void _scroll_up(real_t p_delta); void _scroll_down(real_t p_delta);