material-maker/material_maker/windows/file_dialog/file_dialog.gd

57 lines
1.6 KiB
GDScript

extends FileDialog
var left_panel = null
var volume_option = null
signal return_paths(path_list)
func _ready() -> void:
var vbox = get_child(3)
var hbox = HSplitContainer.new()
add_child(hbox)
remove_child(vbox)
left_panel = preload("res://material_maker/windows/file_dialog/left_panel.tscn").instance()
hbox.add_child(left_panel)
left_panel.connect("open_directory", self, "set_current_dir")
hbox.add_child(vbox)
vbox.size_flags_horizontal = SIZE_EXPAND_FILL
var fav_button = preload("res://material_maker/windows/file_dialog/fav_button.tscn").instance()
vbox.get_child(0).add_child(fav_button)
fav_button.connect("pressed", self, "add_favorite")
if OS.get_name() == "Windows":
volume_option = vbox.get_child(0).get_child(3)
if ! volume_option is OptionButton:
volume_option = null
func get_full_current_dir() -> String:
var prefix = ""
if volume_option != null and volume_option.visible:
prefix = volume_option.get_item_text(volume_option.selected)
return prefix+get_current_dir()
func _on_FileDialog_file_selected(path) -> void:
left_panel.add_recent(get_full_current_dir())
emit_signal("return_paths", [ path ])
func _on_FileDialog_files_selected(paths) -> void:
left_panel.add_recent(get_full_current_dir())
emit_signal("return_paths", paths)
func _on_FileDialog_dir_selected(dir) -> void:
emit_signal("return_paths", [ dir ])
func _on_FileDialog_popup_hide() -> void:
emit_signal("return_paths", [ ])
func select_files() -> Array:
popup_centered()
var result = yield(self, "return_paths")
queue_free()
return result
func add_favorite():
left_panel.add_favorite(get_full_current_dir())