summaryrefslogtreecommitdiff
path: root/editor/code_editor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'editor/code_editor.cpp')
-rw-r--r--editor/code_editor.cpp88
1 files changed, 43 insertions, 45 deletions
diff --git a/editor/code_editor.cpp b/editor/code_editor.cpp
index 927d915bcd..e9580ae0d1 100644
--- a/editor/code_editor.cpp
+++ b/editor/code_editor.cpp
@@ -99,9 +99,6 @@ void FindReplaceBar::_notification(int p_what) {
} else if (p_what == NOTIFICATION_VISIBILITY_CHANGED) {
set_process_unhandled_input(is_visible_in_tree());
- if (is_visible_in_tree()) {
- _update_size();
- }
} else if (p_what == EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED) {
find_prev->set_icon(get_icon("MoveUp", "EditorIcons"));
@@ -390,7 +387,6 @@ void FindReplaceBar::_show_search() {
search_text->set_cursor_position(search_text->get_text().length());
search_current();
}
- call_deferred("_update_size");
}
void FindReplaceBar::popup_search() {
@@ -483,11 +479,6 @@ void FindReplaceBar::set_text_edit(TextEdit *p_text_edit) {
text_edit->connect("text_changed", this, "_editor_text_changed");
}
-void FindReplaceBar::_update_size() {
-
- container->set_size(Size2(hbc->get_size().width, 1));
-}
-
void FindReplaceBar::_bind_methods() {
ClassDB::bind_method("_unhandled_input", &FindReplaceBar::_unhandled_input);
@@ -503,7 +494,6 @@ void FindReplaceBar::_bind_methods() {
ClassDB::bind_method("_replace_all_pressed", &FindReplaceBar::_replace_all);
ClassDB::bind_method("_search_options_changed", &FindReplaceBar::_search_options_changed);
ClassDB::bind_method("_hide_pressed", &FindReplaceBar::_hide_bar);
- ClassDB::bind_method("_update_size", &FindReplaceBar::_update_size);
ADD_SIGNAL(MethodInfo("search"));
ADD_SIGNAL(MethodInfo("error"));
@@ -511,26 +501,16 @@ void FindReplaceBar::_bind_methods() {
FindReplaceBar::FindReplaceBar() {
- container = memnew(MarginContainer);
- container->add_constant_override("margin_bottom", 5 * EDSCALE);
- add_child(container);
- container->set_clip_contents(true);
- container->set_h_size_flags(SIZE_EXPAND_FILL);
-
replace_all_mode = false;
preserve_cursor = false;
- hbc = memnew(HBoxContainer);
- container->add_child(hbc);
- hbc->set_anchor_and_margin(MARGIN_RIGHT, 1, 0);
-
vbc_lineedit = memnew(VBoxContainer);
- hbc->add_child(vbc_lineedit);
+ add_child(vbc_lineedit);
vbc_lineedit->set_h_size_flags(SIZE_EXPAND_FILL);
VBoxContainer *vbc_button = memnew(VBoxContainer);
- hbc->add_child(vbc_button);
+ add_child(vbc_button);
VBoxContainer *vbc_option = memnew(VBoxContainer);
- hbc->add_child(vbc_option);
+ add_child(vbc_option);
HBoxContainer *hbc_button_search = memnew(HBoxContainer);
vbc_button->add_child(hbc_button_search);
@@ -1062,35 +1042,43 @@ void CodeTextEditor::delete_lines() {
}
void CodeTextEditor::clone_lines_down() {
+ const int cursor_column = text_editor->cursor_get_column();
int from_line = text_editor->cursor_get_line();
int to_line = text_editor->cursor_get_line();
- int column = text_editor->cursor_get_column();
-
+ int from_column = 0;
+ int to_column = 0;
+ int cursor_new_line = to_line + 1;
+ int cursor_new_column = text_editor->cursor_get_column();
+ String new_text = "\n" + text_editor->get_line(from_line);
+ bool selection_active = false;
+
+ text_editor->cursor_set_column(text_editor->get_line(from_line).length());
if (text_editor->is_selection_active()) {
+ from_column = text_editor->get_selection_from_column();
+ to_column = text_editor->get_selection_to_column();
+
from_line = text_editor->get_selection_from_line();
to_line = text_editor->get_selection_to_line();
- column = text_editor->cursor_get_column();
+ cursor_new_line = to_line + text_editor->cursor_get_line() - from_line;
+ cursor_new_column = to_column == cursor_column ? 2 * to_column - from_column : to_column;
+ new_text = text_editor->get_selection_text();
+ selection_active = true;
+
+ text_editor->cursor_set_line(to_line);
+ text_editor->cursor_set_column(to_column);
}
- int next_line = to_line + 1;
- bool caret_at_start = text_editor->cursor_get_line() == from_line;
text_editor->begin_complex_operation();
+
for (int i = from_line; i <= to_line; i++) {
text_editor->unfold_line(i);
- text_editor->set_line(next_line - 1, text_editor->get_line(next_line - 1) + "\n");
- text_editor->set_line(next_line, text_editor->get_line(i));
- next_line++;
}
-
- if (caret_at_start) {
- text_editor->cursor_set_line(to_line + 1);
- } else {
- text_editor->cursor_set_line(next_line - 1);
- }
-
- text_editor->cursor_set_column(column);
- if (text_editor->is_selection_active()) {
- text_editor->select(to_line + 1, text_editor->get_selection_from_column(), next_line - 1, text_editor->get_selection_to_column());
+ text_editor->deselect();
+ text_editor->insert_text_at_cursor(new_text);
+ text_editor->cursor_set_line(cursor_new_line);
+ text_editor->cursor_set_column(cursor_new_column);
+ if (selection_active) {
+ text_editor->select(to_line, to_column, 2 * to_line - from_line, 2 * to_column - from_column);
}
text_editor->end_complex_operation();
@@ -1197,7 +1185,12 @@ void CodeTextEditor::_warning_label_gui_input(const Ref<InputEvent> &p_event) {
}
void CodeTextEditor::_warning_button_pressed() {
- emit_signal("warning_pressed");
+ _set_show_warnings_panel(!is_warnings_panel_opened);
+}
+
+void CodeTextEditor::_set_show_warnings_panel(bool p_show) {
+ is_warnings_panel_opened = p_show;
+ emit_signal("show_warnings_panel", p_show);
}
void CodeTextEditor::_error_pressed(const Ref<InputEvent> &p_event) {
@@ -1219,6 +1212,7 @@ void CodeTextEditor::_notification(int p_what) {
} break;
case NOTIFICATION_ENTER_TREE: {
warning_button->set_icon(get_icon("NodeWarning", "EditorIcons"));
+ add_constant_override("separation", 4 * EDSCALE);
} break;
default:
break;
@@ -1229,6 +1223,8 @@ void CodeTextEditor::set_warning_nb(int p_warning_nb) {
warning_count_label->set_text(itos(p_warning_nb));
warning_count_label->set_visible(p_warning_nb > 0);
warning_button->set_visible(p_warning_nb > 0);
+ if (!p_warning_nb)
+ _set_show_warnings_panel(false);
}
void CodeTextEditor::_bind_methods() {
@@ -1247,7 +1243,7 @@ void CodeTextEditor::_bind_methods() {
ADD_SIGNAL(MethodInfo("validate_script"));
ADD_SIGNAL(MethodInfo("load_theme_settings"));
- ADD_SIGNAL(MethodInfo("warning_pressed"));
+ ADD_SIGNAL(MethodInfo("show_warnings_panel"));
ADD_SIGNAL(MethodInfo("error_pressed"));
}
@@ -1267,7 +1263,7 @@ CodeTextEditor::CodeTextEditor() {
add_child(text_editor);
text_editor->set_v_size_flags(SIZE_EXPAND_FILL);
- // Added second to it opens at the bottom, so it won't shift the entire text editor when opening
+ // Added second so it opens at the bottom, so it won't shift the entire text editor when opening.
find_replace_bar = memnew(FindReplaceBar);
add_child(find_replace_bar);
find_replace_bar->set_h_size_flags(SIZE_EXPAND_FILL);
@@ -1282,6 +1278,7 @@ CodeTextEditor::CodeTextEditor() {
status_bar = memnew(HBoxContainer);
add_child(status_bar);
status_bar->set_h_size_flags(SIZE_EXPAND_FILL);
+ status_bar->set_custom_minimum_size(Size2(0, 24 * EDSCALE)); // Adjust for the height of the warning icon.
idle = memnew(Timer);
add_child(idle);
@@ -1331,6 +1328,7 @@ CodeTextEditor::CodeTextEditor() {
warning_count_label->add_font_override("font", EditorNode::get_singleton()->get_gui_base()->get_font("status_source", "EditorFonts"));
warning_count_label->connect("gui_input", this, "_warning_label_gui_input");
+ is_warnings_panel_opened = false;
set_warning_nb(0);
// Line and column
@@ -1338,7 +1336,7 @@ CodeTextEditor::CodeTextEditor() {
status_bar->add_child(line_and_col_txt);
line_and_col_txt->set_v_size_flags(SIZE_EXPAND | SIZE_SHRINK_CENTER);
line_and_col_txt->add_font_override("font", EditorNode::get_singleton()->get_gui_base()->get_font("status_source", "EditorFonts"));
- line_and_col_txt->set_tooltip(TTR("Line and column numbers"));
+ line_and_col_txt->set_tooltip(TTR("Line and column numbers."));
line_and_col_txt->set_mouse_filter(MOUSE_FILTER_STOP);
text_editor->connect("gui_input", this, "_text_editor_gui_input");