summaryrefslogtreecommitdiffstats
path: root/editor/code_editor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'editor/code_editor.cpp')
-rw-r--r--editor/code_editor.cpp76
1 files changed, 52 insertions, 24 deletions
diff --git a/editor/code_editor.cpp b/editor/code_editor.cpp
index d24b1edd70..59783c58b5 100644
--- a/editor/code_editor.cpp
+++ b/editor/code_editor.cpp
@@ -108,6 +108,7 @@ void FindReplaceBar::_notification(int p_what) {
hide_button->set_texture_hover(get_editor_theme_icon(SNAME("Close")));
hide_button->set_texture_pressed(get_editor_theme_icon(SNAME("Close")));
hide_button->set_custom_minimum_size(hide_button->get_texture_normal()->get_size());
+ _update_toggle_replace_button(replace_text->is_visible_in_tree());
} break;
case NOTIFICATION_VISIBILITY_CHANGED: {
@@ -539,6 +540,14 @@ void FindReplaceBar::_hide_bar(bool p_force_focus) {
hide();
}
+void FindReplaceBar::_update_toggle_replace_button(bool p_replace_visible) {
+ String tooltip = p_replace_visible ? TTR("Hide Replace") : TTR("Show Replace");
+ String shortcut = ED_GET_SHORTCUT(p_replace_visible ? "script_text_editor/find" : "script_text_editor/replace")->get_as_text();
+ toggle_replace_button->set_tooltip_text(vformat("%s (%s)", tooltip, shortcut));
+ StringName rtl_compliant_arrow = is_layout_rtl() ? SNAME("GuiTreeArrowLeft") : SNAME("GuiTreeArrowRight");
+ toggle_replace_button->set_icon(get_editor_theme_icon(p_replace_visible ? SNAME("GuiTreeArrowDown") : rtl_compliant_arrow));
+}
+
void FindReplaceBar::_show_search(bool p_with_replace, bool p_show_only) {
show();
if (p_show_only) {
@@ -582,6 +591,7 @@ void FindReplaceBar::popup_search(bool p_show_only) {
hbc_button_replace->hide();
hbc_option_replace->hide();
selection_only->set_pressed(false);
+ _update_toggle_replace_button(false);
_show_search(false, p_show_only);
}
@@ -591,6 +601,7 @@ void FindReplaceBar::popup_replace() {
replace_text->show();
hbc_button_replace->show();
hbc_option_replace->show();
+ _update_toggle_replace_button(true);
}
selection_only->set_pressed(text_editor->has_selection(0) && text_editor->get_selection_from_line(0) < text_editor->get_selection_to_line(0));
@@ -644,6 +655,11 @@ void FindReplaceBar::_replace_text_submitted(const String &p_text) {
}
}
+void FindReplaceBar::_toggle_replace_pressed() {
+ bool replace_visible = replace_text->is_visible_in_tree();
+ replace_visible ? popup_search(true) : popup_replace();
+}
+
String FindReplaceBar::get_search_text() const {
return search_text->get_text();
}
@@ -702,6 +718,12 @@ void FindReplaceBar::_bind_methods() {
}
FindReplaceBar::FindReplaceBar() {
+ toggle_replace_button = memnew(Button);
+ add_child(toggle_replace_button);
+ toggle_replace_button->set_flat(true);
+ toggle_replace_button->set_focus_mode(FOCUS_NONE);
+ toggle_replace_button->connect(SceneStringName(pressed), callable_mp(this, &FindReplaceBar::_toggle_replace_pressed));
+
vbc_lineedit = memnew(VBoxContainer);
add_child(vbc_lineedit);
vbc_lineedit->set_alignment(BoxContainer::ALIGNMENT_CENTER);
@@ -755,13 +777,13 @@ FindReplaceBar::FindReplaceBar() {
hbc_option_search->add_child(case_sensitive);
case_sensitive->set_text(TTR("Match Case"));
case_sensitive->set_focus_mode(FOCUS_NONE);
- case_sensitive->connect("toggled", callable_mp(this, &FindReplaceBar::_search_options_changed));
+ case_sensitive->connect(SceneStringName(toggled), callable_mp(this, &FindReplaceBar::_search_options_changed));
whole_words = memnew(CheckBox);
hbc_option_search->add_child(whole_words);
whole_words->set_text(TTR("Whole Words"));
whole_words->set_focus_mode(FOCUS_NONE);
- whole_words->connect("toggled", callable_mp(this, &FindReplaceBar::_search_options_changed));
+ whole_words->connect(SceneStringName(toggled), callable_mp(this, &FindReplaceBar::_search_options_changed));
// Replace toolbar
replace_text = memnew(LineEdit);
@@ -786,7 +808,7 @@ FindReplaceBar::FindReplaceBar() {
hbc_option_replace->add_child(selection_only);
selection_only->set_text(TTR("Selection Only"));
selection_only->set_focus_mode(FOCUS_NONE);
- selection_only->connect("toggled", callable_mp(this, &FindReplaceBar::_search_options_changed));
+ selection_only->connect(SceneStringName(toggled), callable_mp(this, &FindReplaceBar::_search_options_changed));
hide_button = memnew(TextureButton);
add_child(hide_button);
@@ -994,6 +1016,9 @@ Ref<Texture2D> CodeTextEditor::_get_completion_icon(const ScriptLanguage::CodeCo
tex = get_editor_theme_icon(p_option.display);
} else {
tex = EditorNode::get_singleton()->get_class_icon(p_option.display);
+ if (!tex.is_valid()) {
+ tex = get_editor_theme_icon(SNAME("Object"));
+ }
}
} break;
case ScriptLanguage::CODE_COMPLETION_KIND_ENUM:
@@ -1296,23 +1321,29 @@ void CodeTextEditor::toggle_inline_comment(const String &delimiter) {
text_editor->end_complex_operation();
}
-void CodeTextEditor::goto_line(int p_line) {
+void CodeTextEditor::goto_line(int p_line, int p_column) {
text_editor->remove_secondary_carets();
text_editor->deselect();
- text_editor->unfold_line(p_line);
- callable_mp((TextEdit *)text_editor, &TextEdit::set_caret_line).call_deferred(p_line, true, true, 0, 0);
+ text_editor->unfold_line(CLAMP(p_line, 0, text_editor->get_line_count() - 1));
+ text_editor->set_caret_line(p_line, false);
+ text_editor->set_caret_column(p_column, false);
+ // Defer in case the CodeEdit was just created and needs to be resized.
+ callable_mp((TextEdit *)text_editor, &TextEdit::adjust_viewport_to_caret).call_deferred(0);
}
void CodeTextEditor::goto_line_selection(int p_line, int p_begin, int p_end) {
text_editor->remove_secondary_carets();
- text_editor->unfold_line(p_line);
- callable_mp((TextEdit *)text_editor, &TextEdit::set_caret_line).call_deferred(p_line, true, true, 0, 0);
- callable_mp((TextEdit *)text_editor, &TextEdit::set_caret_column).call_deferred(p_begin, true, 0);
+ text_editor->unfold_line(CLAMP(p_line, 0, text_editor->get_line_count() - 1));
text_editor->select(p_line, p_begin, p_line, p_end);
+ callable_mp((TextEdit *)text_editor, &TextEdit::adjust_viewport_to_caret).call_deferred(0);
}
-void CodeTextEditor::goto_line_centered(int p_line) {
- goto_line(p_line);
+void CodeTextEditor::goto_line_centered(int p_line, int p_column) {
+ text_editor->remove_secondary_carets();
+ text_editor->deselect();
+ text_editor->unfold_line(CLAMP(p_line, 0, text_editor->get_line_count() - 1));
+ text_editor->set_caret_line(p_line, false);
+ text_editor->set_caret_column(p_column, false);
callable_mp((TextEdit *)text_editor, &TextEdit::center_viewport_to_caret).call_deferred(0);
}
@@ -1440,13 +1471,7 @@ void CodeTextEditor::goto_error() {
corrected_column -= tab_count * (indent_size - 1);
}
- if (text_editor->get_line_count() != error_line) {
- text_editor->unfold_line(error_line);
- }
- text_editor->remove_secondary_carets();
- text_editor->set_caret_line(error_line);
- text_editor->set_caret_column(corrected_column);
- text_editor->center_viewport_to_caret();
+ goto_line_centered(error_line, corrected_column);
}
}
@@ -1545,7 +1570,8 @@ void CodeTextEditor::_set_show_warnings_panel(bool p_show) {
}
void CodeTextEditor::_toggle_scripts_pressed() {
- ScriptEditor::get_singleton()->toggle_scripts_panel();
+ ERR_FAIL_NULL(toggle_scripts_list);
+ toggle_scripts_list->set_visible(!toggle_scripts_list->is_visible());
update_toggle_scripts_button();
}
@@ -1720,16 +1746,18 @@ void CodeTextEditor::set_code_complete_func(CodeTextEditorCodeCompleteFunc p_cod
code_complete_ud = p_ud;
}
+void CodeTextEditor::set_toggle_list_control(Control *p_control) {
+ toggle_scripts_list = p_control;
+}
+
void CodeTextEditor::show_toggle_scripts_button() {
toggle_scripts_button->show();
}
void CodeTextEditor::update_toggle_scripts_button() {
- if (is_layout_rtl()) {
- toggle_scripts_button->set_icon(get_editor_theme_icon(ScriptEditor::get_singleton()->is_scripts_panel_toggled() ? SNAME("Forward") : SNAME("Back")));
- } else {
- toggle_scripts_button->set_icon(get_editor_theme_icon(ScriptEditor::get_singleton()->is_scripts_panel_toggled() ? SNAME("Back") : SNAME("Forward")));
- }
+ ERR_FAIL_NULL(toggle_scripts_list);
+ bool forward = toggle_scripts_list->is_visible() == is_layout_rtl();
+ toggle_scripts_button->set_icon(get_editor_theme_icon(forward ? SNAME("Forward") : SNAME("Back")));
toggle_scripts_button->set_tooltip_text(vformat("%s (%s)", TTR("Toggle Scripts Panel"), ED_GET_SHORTCUT("script_editor/toggle_scripts_panel")->get_as_text()));
}