61 lines
1.5 KiB
GDScript
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)
|