extends Control class_name OptionSet export var placeholder: String var text: String setget set_text, get_text func set_text(var value: String): input.text = value func get_text() -> String: return input.text var selected_idx: int onready var input := get_node("input") as LineEdit onready var button := get_node("options") as Button # @DAM Maybe rename this. Also requires renaming on stage. onready var popup := get_node("/root/main/popup") as ModalPopup onready var options := get_node("/root/main/option_set_list") as OptionSetList func _ready(): assert(popup != null, "OptionSet failed to get 'popup' node.") input.placeholder_text = placeholder input.connect("focus_entered", input, "set", ["caret_position", input.max_length]) input.connect("focus_exited", input, "deselect") func show_options(options_array: Array): options.clear_items() var main = get_node("/root/main") main.remove_child(options) options.add_items(options_array) if options_array[selected_idx] == input.text: options.select(selected_idx) else: options.unselect() options.connect("item_selected", self, "option_selected", [], CONNECT_ONESHOT) popup.popup_control(input.placeholder_text, options) # popup.connect("item_selected", self, "option_selected", [], CONNECT_ONESHOT) # popup.clear_items() # popup_opt.visible = true # get_node("/root/main/popup/blur") # popup.add_items(options) func option_selected(index: int, text: String): selected_idx = index input.text = text input.caret_position = input.max_length button.release_focus() options.visible = false var main = get_node("/root/main") main.add_child(options)