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
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))
|