gduibasics/scenes/scripts/flexview_splitter.gd
2021-08-21 17:15:07 +02:00

39 lines
894 B
GDScript

extends SplitContainer
#############
# overrides #
#############
func add_child(child : Node, legible_unique_name := false) -> void:
.add_child(child, legible_unique_name)
child.connect("tree_exited", self, "_on_child_tree_exited")
#################
# private stuff #
#################
func __try_collapse() -> void:
var count := get_child_count()
if count == 0: # nothing left? I can go now
self.queue_free()
return
elif count > 1: # more than one? I have to stay
return
# exactly one? replace me with them
var child := get_child(0)
remove_child(child)
get_parent().add_child_below_node(self, child)
GDBUIUtility.copy_size(child, self)
self.queue_free()
###################
# signal handlers #
###################
func _on_child_tree_exited() -> void:
if !get_tree():
return
yield(get_tree(), "idle_frame") # wait until child is actually gone
__try_collapse()