mj177/addons/cyclops_level_builder/controls/tree/cyclops_tree.gd
2025-02-03 19:17:20 +01:00

65 lines
1.6 KiB
GDScript

@tool
extends PanelContainer
class_name CyclopsTree
@export var node_display_component:PackedScene
var model:AbstractCyclopsTreeModel:
get:
return model
set(value):
if model == value:
return
if model:
model.tree_nodes_inserted.disconnect(on_tree_nodes_inserted)
model.tree_nodes_removed.disconnect(on_tree_nodes_removed)
model.refresh_node.disconnect(on_refresh_node)
model.tree_node_changed.disconnect(on_tree_node_changed)
model.tree_structure_changed.disconnect(on_tree_structure_changed)
model = value
if model:
model.tree_nodes_inserted.connect(on_tree_nodes_inserted)
model.tree_nodes_removed.connect(on_tree_nodes_removed)
model.refresh_node.connect(on_refresh_node)
model.tree_node_changed.connect(on_tree_node_changed)
model.tree_structure_changed.connect(on_tree_structure_changed)
rebuild_tree()
func on_tree_nodes_inserted(parent_node:Object, child_nodes:Array[Object], child_node_indices:PackedInt32Array):
pass
func on_tree_nodes_removed(parent_node:Object, child_nodes:Array[Object], child_node_indices:PackedInt32Array):
pass
func on_refresh_node(old_node:Object, new_node:Object):
pass
func on_tree_node_changed(node:Object):
pass
func on_tree_structure_changed():
rebuild_tree()
func rebuild_tree():
for child in get_children():
remove_child(child)
child.queue_free()
if !model:
return
model.get_root()
pass
# Called when the node enters the scene tree for the first time.
func _ready():
pass # Replace with function body.
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
pass