pokemon-base/addons/imjp94.yafsm/scenes/PathViewer.gd
2025-01-26 20:23:56 +01:00

64 lines
1.4 KiB
GDScript

@tool
extends HBoxContainer
signal dir_pressed(dir, index)
func _init():
add_dir("root")
# Select parent dir & return its path
func back():
return select_dir(get_child(max(get_child_count()-1 - 1, 0)).name)
# Select dir & return its path
func select_dir(dir):
for i in get_child_count():
var child = get_child(i)
if child.name == dir:
remove_dir_until(i)
return get_dir_until(i)
# Add directory button
func add_dir(dir):
var button = Button.new()
button.name = dir
button.flat = true
button.text = dir
add_child(button)
button.pressed.connect(_on_button_pressed.bind(button))
return button
# Remove directory until index(exclusive)
func remove_dir_until(index):
var to_remove = []
for i in get_child_count():
if index == get_child_count()-1 - i:
break
var child = get_child(get_child_count()-1 - i)
to_remove.append(child)
for n in to_remove:
remove_child(n)
n.queue_free()
# Return current working directory
func get_cwd():
return get_dir_until(get_child_count()-1)
# Return path until index(inclusive) of directory
func get_dir_until(index):
var path = ""
for i in get_child_count():
if i > index:
break
var child = get_child(i)
if i == 0:
path = "root"
else:
path = str(path, "/", child.text)
return path
func _on_button_pressed(button):
var index = button.get_index()
var dir = button.name
emit_signal("dir_pressed", dir, index)