xsivgnazlixs/addons/dev_console/autocomplete_line.ts
2025-04-30 21:51:53 -05:00

43 lines
1 KiB
TypeScript

import { Callable, Callable1, LineEdit, Variant } from 'godot'
import { export_, onready } from 'godot.annotations'
export default class AutocompleteLine extends LineEdit {
@export_(Variant.Type.TYPE_BOOL)
private auto_suggest: boolean = true
@onready("SuggestionLine")
private suggestion!: LineEdit
autocomplete_list: string[] = []
last_autocomplete: number = -1
_on_text_changed!: Callable1<string>
_ready(): void {
this._on_text_changed = Callable.create(this, this.suggest)
if (this.auto_suggest) {
this.text_changed.connect(this._on_text_changed)
}
}
suggest(value: string): boolean {
const item = this.fuzzy_find(value)
if (item > -1) {
this.suggestion.text = this.autocomplete_list[item]
return true
}
return false
}
autocomplete(value?: string) {
this.text = value || this.suggestion.text
this.suggestion.clear()
}
fuzzy_find(value: string): number {
return this.autocomplete_list.findIndex(text => text.startsWith(value))
}
}