blob: 879fb3633304048241b55ff5803a3f292ecee162 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
class_name SettingsRow
extends PanelContainer
signal apply_preset
@onready var value_parent = $HBoxContainer/BoxContainer
@onready var label = $HBoxContainer/Label
var value_node
var description = tr("no value was given to the row")
func setup(key: String, dict: Dictionary, defaults: Dictionary):
var setting = dict[key]
description = setting["description"]
var value = setting["value"]
var default = defaults[key]["value"]
match setting["type"]:
"toggle":
value_node = CheckButton.new()
value_node.button_pressed = value
"line":
value_node = LineEdit.new()
value_node.text = value
value_node.placeholder_text = default
"dropdown":
value_node = OptionButton.new()
for i in setting["options"]:
value_node.add_item(i)
value_node.select(value)
"dropdown_preset":
value_node = OptionButton.new()
for i in setting["options"]:
value_node.add_item(i)
value_node.select(value)
value_node.connect("item_selected", apply.bind(Global.get(setting["apply"])))
"range":
value_node = HSlider.new()
value_node.min_value = setting["min"]
value_node.max_value = setting["max"]
value_node.tick_count = abs(setting["max"] - setting["min"])
value_node.value = value
_:
push_error("Could not set up SettingsRow: Unknown setting type \"%s\"" % setting["type"])
func _ready():
if value_node != null:
var c: Control = value_node
c.size_flags_vertical = Control.SIZE_EXPAND_FILL
c.size_flags_horizontal = Control.SIZE_EXPAND_FILL
label.text = description
value_parent.add_child(c)
func apply(idx: int, apply: Array):
emit_signal("apply_preset", apply[idx])
func get_value():
if value_node != null:
if value_node is CheckButton:
return value_node.button_pressed
elif value_node is LineEdit:
return value_node.text
elif value_node is OptionButton:
return value_node.selected
elif value_node is HSlider:
return value_node.value
else:
push_error("get_value() failed for unknown node type: %s" % value_node)
return null
else:
return null
|