aboutsummaryrefslogtreecommitdiff
path: root/client/menu/settings_row.gd
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