extends ItemList signal file_selected(path) var _parent_display_name := "" 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)