taqin/src/FileList.gd

61 lines
1.5 KiB
GDScript

extends ItemList
signal file_selected(path)
var _parent_display_name := "<parent directory>"
var _sep := "/"
var _dir := Directory.new()
export var root_dir: String = OS.get_system_dir(OS.SYSTEM_DIR_PICTURES)
export var walkable := false
export var folder_texture: Texture = null
export var parent_folder_texture: Texture = null
# Called when the node enters the scene tree for the first time.
func _ready():
if root_dir != null:
populate(root_dir)
func populate(dir: String) -> void:
print_debug(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):
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
print_debug(full_path)
emit_signal("file_selected", full_path)