You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

63 lines
1.7 KiB

6 months ago
@tool
extends DialogicVisualEditorField
## Event block field for constant options. For varying options use ComplexPicker.
var options : Array = []
## if true, only the symbol will be displayed. In the dropdown text will be visible.
## Useful for making UI simpler
var symbol_only := false:
set(value):
symbol_only = value
if value: self.text = ""
var current_value: Variant = -1
func _ready() -> void:
add_theme_color_override("font_disabled_color", get_theme_color("font_color", "MenuButton"))
self.about_to_popup.connect(insert_options)
call("get_popup").index_pressed.connect(index_pressed)
func _load_display_info(info:Dictionary) -> void:
options = info.get('options', [])
self.disabled = info.get('disabled', false)
symbol_only = info.get('symbol_only', false)
func _set_value(value:Variant) -> void:
for option in options:
if option['value'] == value:
if typeof(option.get('icon')) == TYPE_ARRAY:
option.icon = callv('get_theme_icon', option.get('icon'))
if !symbol_only:
self.text = option['label']
self.icon = option.get('icon', null)
current_value = value
func get_value() -> Variant:
return current_value
func insert_options() -> void:
call("get_popup").clear()
var idx := 0
for option in options:
if typeof(option.get('icon')) == TYPE_ARRAY:
option.icon = callv('get_theme_icon', option.get('icon'))
call("get_popup").add_icon_item(option.get('icon', null), option['label'])
call("get_popup").set_item_metadata(idx, option['value'])
idx += 1
func index_pressed(idx:int) -> void:
current_value = idx
if !symbol_only:
self.text = call("get_popup").get_item_text(idx)
self.icon =call("get_popup").get_item_icon(idx)
value_changed.emit(property_name, call("get_popup").get_item_metadata(idx))