func _render(ctx: Component.Context): var list := ctx.use_array([ { text = "a", id = _generate_unique_id(), checked = false }, { text = "b", id = _generate_unique_id(), checked = false }, ]) var list_children = [] for item_i in list.size(): var item = list.at(item_i) list_children.append({ node_type = HBoxContainer, size_flags_horizontal = Control.SIZE_EXPAND_FILL, id = item.id, children = [ { node_type = CheckBox, button_pressed = item.checked, on_toggled = func(toggled_on: bool): list.set_at(item_i, list.at(item_i).merged({ checked = toggled_on }, true)), }, { node_type = Button, disabled = item_i == 0, text = "↑", on_pressed = func(): list.swap(item_i, item_i - 1), }, { node_type = Button, text = "↓", disabled = item_i >= list.size() - 1, on_pressed = func(): list.swap(item_i, item_i + 1), }, { node_type = LineEdit, editable = not item.checked, custom_minimum_size = Vector2(100, 0), size_flags_horizontal = Control.SIZE_EXPAND_FILL, text = item.text, on_text_changed = func(new_text): list.set_at(item_i, list.at(item_i).merged({ text = new_text }, true)), }, { node_type = Button, theme_type_variation = "RedButton", icon = IconTexture2D.create("delete_red"), on_pressed = func(): list.remove_at(item_i), }, ] }) return { node_type = VBoxContainer, init = func(e: VBoxContainer): e.set_anchors_and_offsets_preset(Control.PRESET_TOP_WIDE), children = list_children + [ { node_type = Button, text = "+", on_pressed = func(): list.append({ text = "newer item", id = _generate_unique_id(), checked = false, }), } ], }