78 lines
1.5 KiB
GDScript
78 lines
1.5 KiB
GDScript
tool
|
|
extends Control
|
|
|
|
enum Type {
|
|
STRING,
|
|
INT,
|
|
REAL
|
|
}
|
|
|
|
onready var edt_text := $edt_text
|
|
onready var spin_number := $spin_number
|
|
|
|
export var value = "" setget _set_value
|
|
export(Type) var type = Type.STRING setget _set_type
|
|
|
|
func _ready():
|
|
__setup_type()
|
|
|
|
func __setup_type():
|
|
match type:
|
|
Type.STRING:
|
|
edt_text.visible = true
|
|
Type.INT, Type.REAL:
|
|
spin_number.visible = true
|
|
_set_value(convert(value, __type_id()))
|
|
__fill_value()
|
|
emit_signal("value_changed")
|
|
|
|
func __fill_value():
|
|
match type:
|
|
Type.STRING:
|
|
edt_text.text = str(value)
|
|
Type.INT, Type.REAL:
|
|
spin_number.value = float(value)
|
|
|
|
func __type_id() -> int:
|
|
match type:
|
|
Type.STRING:
|
|
return TYPE_STRING
|
|
Type.INT:
|
|
return TYPE_INT
|
|
Type.REAL:
|
|
return TYPE_REAL
|
|
_:
|
|
assert(false)
|
|
return TYPE_STRING
|
|
|
|
func _set_value(val):
|
|
val = convert(val, __type_id())
|
|
if typeof(value) != __type_id() || value != val:
|
|
value = val
|
|
__fill_value()
|
|
|
|
func _set_type(value : int):
|
|
if value != type:
|
|
type = value
|
|
for child in get_children():
|
|
child.visible = false
|
|
__setup_type()
|
|
|
|
func _on_edt_text_text_changed(new_text : String):
|
|
assert(type == Type.STRING)
|
|
if !value is String || value != new_text:
|
|
value = new_text
|
|
emit_signal("value_changed")
|
|
|
|
func _on_spin_number_value_changed(value_ : float):
|
|
assert(type == Type.INT || type == Type.REAL)
|
|
if type == Type.INT:
|
|
value_ = int(value_)
|
|
if typeof(value) != __type_id() || value != value_:
|
|
value = value_
|
|
emit_signal("value_changed")
|
|
|
|
signal value_changed()
|
|
|
|
|