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