Add auto code completion (without press Ctrl+Space manually)
Disalbe auto code completion even there's only one option Hide auto-completion if only one completion option and it's been typed Support use tab key to accept code completion option
This commit is contained in:
parent
5044bead5f
commit
0771020c83
@ -1106,7 +1106,7 @@ void TextEdit::_input_event(const InputEvent& p_input_event) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (k.scancode==KEY_RETURN) {
|
if (k.scancode==KEY_RETURN || k.scancode==KEY_TAB) {
|
||||||
|
|
||||||
_confirm_completion();
|
_confirm_completion();
|
||||||
accept_event();
|
accept_event();
|
||||||
@ -2896,6 +2896,7 @@ void TextEdit::_update_completion_candidates() {
|
|||||||
|
|
||||||
completion_current=completion_options[completion_index];
|
completion_current=completion_options[completion_index];
|
||||||
|
|
||||||
|
#if 0 // even there's only one option, user still get the chance to choose using it or not
|
||||||
if (completion_options.size()==1) {
|
if (completion_options.size()==1) {
|
||||||
//one option to complete, just complete it automagically
|
//one option to complete, just complete it automagically
|
||||||
_confirm_completion();
|
_confirm_completion();
|
||||||
@ -2904,6 +2905,9 @@ void TextEdit::_update_completion_candidates() {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
if (completion_options.size()==1 && s==completion_options[0])
|
||||||
|
_cancel_completion();
|
||||||
|
|
||||||
completion_enabled=true;
|
completion_enabled=true;
|
||||||
|
|
||||||
|
@ -479,10 +479,15 @@ void CodeTextEditor::_line_col_changed() {
|
|||||||
|
|
||||||
void CodeTextEditor::_text_changed() {
|
void CodeTextEditor::_text_changed() {
|
||||||
|
|
||||||
|
code_complete_timer->start();
|
||||||
idle->start();
|
idle->start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CodeTextEditor::_code_complete_timer_timeout() {
|
||||||
|
|
||||||
|
text_editor->query_code_comple();
|
||||||
|
}
|
||||||
|
|
||||||
void CodeTextEditor::_complete_request(const String& p_request, int p_line) {
|
void CodeTextEditor::_complete_request(const String& p_request, int p_line) {
|
||||||
|
|
||||||
List<String> entries;
|
List<String> entries;
|
||||||
@ -551,6 +556,7 @@ void CodeTextEditor::_bind_methods() {
|
|||||||
ObjectTypeDB::bind_method("_text_changed",&CodeTextEditor::_text_changed);
|
ObjectTypeDB::bind_method("_text_changed",&CodeTextEditor::_text_changed);
|
||||||
ObjectTypeDB::bind_method("_on_settings_change",&CodeTextEditor::_on_settings_change);
|
ObjectTypeDB::bind_method("_on_settings_change",&CodeTextEditor::_on_settings_change);
|
||||||
ObjectTypeDB::bind_method("_text_changed_idle_timeout",&CodeTextEditor::_text_changed_idle_timeout);
|
ObjectTypeDB::bind_method("_text_changed_idle_timeout",&CodeTextEditor::_text_changed_idle_timeout);
|
||||||
|
ObjectTypeDB::bind_method("_code_complete_timer_timeout",&CodeTextEditor::_code_complete_timer_timeout);
|
||||||
ObjectTypeDB::bind_method("_complete_request",&CodeTextEditor::_complete_request);
|
ObjectTypeDB::bind_method("_complete_request",&CodeTextEditor::_complete_request);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -575,6 +581,11 @@ CodeTextEditor::CodeTextEditor() {
|
|||||||
idle->set_one_shot(true);
|
idle->set_one_shot(true);
|
||||||
idle->set_wait_time(EDITOR_DEF("text_editor/idle_parse_delay",2));
|
idle->set_wait_time(EDITOR_DEF("text_editor/idle_parse_delay",2));
|
||||||
|
|
||||||
|
code_complete_timer = memnew(Timer);
|
||||||
|
add_child(code_complete_timer);
|
||||||
|
code_complete_timer->set_one_shot(true);
|
||||||
|
code_complete_timer->set_wait_time(EDITOR_DEF("text_editor/code_complete_delay",.3f));
|
||||||
|
|
||||||
error = memnew( Label );
|
error = memnew( Label );
|
||||||
add_child(error);
|
add_child(error);
|
||||||
error->set_anchor_and_margin(MARGIN_LEFT,ANCHOR_BEGIN,5);
|
error->set_anchor_and_margin(MARGIN_LEFT,ANCHOR_BEGIN,5);
|
||||||
@ -593,6 +604,7 @@ CodeTextEditor::CodeTextEditor() {
|
|||||||
cs.push_back(".");
|
cs.push_back(".");
|
||||||
text_editor->set_completion(true,cs);
|
text_editor->set_completion(true,cs);
|
||||||
idle->connect("timeout", this,"_text_changed_idle_timeout");
|
idle->connect("timeout", this,"_text_changed_idle_timeout");
|
||||||
|
code_complete_timer->connect("timeout", this,"_code_complete_timer_timeout");
|
||||||
|
|
||||||
EditorSettings::get_singleton()->connect("settings_changed",this,"_on_settings_change");
|
EditorSettings::get_singleton()->connect("settings_changed",this,"_on_settings_change");
|
||||||
}
|
}
|
||||||
|
@ -128,6 +128,7 @@ class CodeTextEditor : public Control {
|
|||||||
Label *line_col;
|
Label *line_col;
|
||||||
Label *info;
|
Label *info;
|
||||||
Timer *idle;
|
Timer *idle;
|
||||||
|
Timer *code_complete_timer;
|
||||||
|
|
||||||
Label *error;
|
Label *error;
|
||||||
|
|
||||||
@ -145,6 +146,7 @@ protected:
|
|||||||
|
|
||||||
|
|
||||||
void _text_changed_idle_timeout();
|
void _text_changed_idle_timeout();
|
||||||
|
void _code_complete_timer_timeout();
|
||||||
void _text_changed();
|
void _text_changed();
|
||||||
void _line_col_changed();
|
void _line_col_changed();
|
||||||
void _notification(int);
|
void _notification(int);
|
||||||
|
Loading…
Reference in New Issue
Block a user