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:
marynate
2014-05-04 11:22:49 +08:00
parent 5044bead5f
commit 0771020c83
3 changed files with 20 additions and 2 deletions

View File

@ -479,10 +479,15 @@ void CodeTextEditor::_line_col_changed() {
void CodeTextEditor::_text_changed() {
code_complete_timer->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) {
List<String> entries;
@ -551,6 +556,7 @@ void CodeTextEditor::_bind_methods() {
ObjectTypeDB::bind_method("_text_changed",&CodeTextEditor::_text_changed);
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("_code_complete_timer_timeout",&CodeTextEditor::_code_complete_timer_timeout);
ObjectTypeDB::bind_method("_complete_request",&CodeTextEditor::_complete_request);
}
@ -575,6 +581,11 @@ CodeTextEditor::CodeTextEditor() {
idle->set_one_shot(true);
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 );
add_child(error);
error->set_anchor_and_margin(MARGIN_LEFT,ANCHOR_BEGIN,5);
@ -593,6 +604,7 @@ CodeTextEditor::CodeTextEditor() {
cs.push_back(".");
text_editor->set_completion(true,cs);
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");
}