29 lines
684 B
GDScript3
29 lines
684 B
GDScript3
|
extends Node
|
||
|
class_name ProxyDelegate
|
||
|
|
||
|
@export var delegate_scene: PackedScene
|
||
|
@export var model: Node:
|
||
|
set(val):
|
||
|
model = val
|
||
|
model.connect("child_entered_tree", source_item_added)
|
||
|
model.connect("child_exiting_tree", source_item_removed)
|
||
|
model.connect("child_order_changed", source_items_reordered)
|
||
|
|
||
|
var item_map: Dictionary = {}
|
||
|
|
||
|
|
||
|
func source_item_added(node: Node):
|
||
|
var delegate: Node = delegate_scene.instantiate()
|
||
|
item_map[node] = delegate
|
||
|
add_child(delegate)
|
||
|
delegate.item = node
|
||
|
|
||
|
func source_item_removed(node: Node):
|
||
|
var delegate: Node = item_map[node]
|
||
|
if delegate != null:
|
||
|
remove_child(delegate)
|
||
|
item_map.erase(node)
|
||
|
|
||
|
func source_items_reordered():
|
||
|
pass
|