taqin/src/FileList.gd

67 lines
1.6 KiB
GDScript

extends ItemList
signal file_selected(path)
signal texture_selected(texture)
var _parent_display_name := "<parent directory>"
var _sep := "/"
var _dir := Directory.new()
export var root_dir: String
export var walkable := false
export var folder_texture: Texture = null
export var parent_folder_texture: Texture = null
func _ready():
print_debug("root dir: ", root_dir)
if root_dir != null and not root_dir.empty():
populate(root_dir)
func populate(dir: String) -> void:
print_debug("populate ", dir)
clear()
if _dir.change_dir(dir) != OK:
print_debug("Cannot open path ", dir)
assert(false)
return
_dir.list_dir_begin()
var file_name := _dir.get_next()
while file_name != "":
if _dir.current_is_dir():
if not walkable:
pass
elif file_name == "..":
add_item(_parent_display_name, parent_folder_texture)
elif file_name.begins_with("."):
pass
else:
add_item(file_name, folder_texture)
else:
var ext := file_name.get_extension()
if ext == "jpeg" or ext == "jpg" or ext == "png":
var file_path := _dir.get_current_dir() + _sep + file_name
add_item(file_name, load(file_path))
file_name = _dir.get_next()
_dir.list_dir_end()
sort_items_by_text()
func _on_FileList_item_selected(index):
emit_signal("texture_selected", get_item_icon(index))
# if root_dir == null or root_dir.empty():
# emit_signal("texture_selected", get_item_icon(index))
# return
#
# var item_text := get_item_text(index)
# if item_text == _parent_display_name:
# item_text = ".."
# if _dir.dir_exists(item_text):
# populate(item_text)
# else:
# var full_path = root_dir + _sep + item_text
# emit_signal("file_selected", full_path)