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