GodotProjects/Sprout/addons/dialogic/Editor/Events/Fields/OptionSelector.gd
2023-01-03 16:54:53 -07:00

58 lines
1.9 KiB
GDScript

@tool
extends Control
var property_name : String
signal value_changed
var options : Array = []
var disabled = false:
get:
return disabled
set(_disabled):
disabled = _disabled
$MenuButton.disabled = disabled
$MenuButton.focus_mode = FOCUS_NONE
func _ready():
$MenuButton.add_theme_stylebox_override("normal", get_theme_stylebox("normal", "LineEdit"))
$MenuButton.add_theme_stylebox_override("hover", get_theme_stylebox("normal", "LineEdit"))
$MenuButton.add_theme_stylebox_override("focus", get_theme_stylebox("focus", "LineEdit"))
$MenuButton.add_theme_stylebox_override("disabled", get_theme_stylebox("normal", "LineEdit"))
$MenuButton.add_theme_color_override("font_disabled_color", get_theme_color("font_color", "MenuButton"))
$MenuButton.about_to_popup.connect(insert_options)
$MenuButton.get_popup().index_pressed.connect(index_pressed)
set_left_text('')
set_right_text('')
func set_right_text(value:String):
$RightText.text = str(value)
$RightText.visible = !value.is_empty()
func set_left_text(value:String):
$LeftText.text = str(value)
$LeftText.visible = !value.is_empty()
func set_value(value):
for option in options:
if option['value'] == value:
$MenuButton.text = option['label']
$MenuButton.icon = option.get('icon', load("res://addons/dialogic/Editor/Images/Dropdown/default.svg"))
func get_value():
return $MenuButton.text
func insert_options():
$MenuButton.get_popup().clear()
var idx = 0
for option in options:
$MenuButton.get_popup().add_icon_item(option.get('icon',load("res://addons/dialogic/Editor/Images/Dropdown/default.svg")), option['label'])
$MenuButton.get_popup().set_item_metadata(idx, option['value'])
idx += 1
func index_pressed(idx):
$MenuButton.text = $MenuButton.get_popup().get_item_text(idx)
$MenuButton.icon = $MenuButton.get_popup().get_item_icon(idx)
emit_signal("value_changed", property_name, $MenuButton.get_popup().get_item_metadata(idx))