67 lines
1.6 KiB
GDScript
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)
|