60 lines
1.9 KiB
GDScript
60 lines
1.9 KiB
GDScript
@tool
|
|
extends Control
|
|
|
|
|
|
const __Singletons := preload("../../plugin_singleton/singletons.gd")
|
|
const __EditContext := preload("../edit_context.gd")
|
|
|
|
signal create_board()
|
|
signal open_board(path: String)
|
|
|
|
@onready var create_board_button: LinkButton = %CreateBoard
|
|
@onready var open_board_button: LinkButton = %OpenBoard
|
|
@onready var recent_board_holder: VBoxContainer = %RecentBoardHolder
|
|
@onready var delete_from_recent_dialog: ConfirmationDialog = %DeleteFromRecent
|
|
|
|
|
|
func _ready() -> void:
|
|
create_board_button.pressed.connect(func(): create_board.emit())
|
|
open_board_button.pressed.connect(func(): open_board.emit(""))
|
|
await get_tree().create_timer(0.0).timeout
|
|
await get_tree().create_timer(0.0).timeout
|
|
var ctx: __EditContext = __Singletons.instance_of(__EditContext, self)
|
|
ctx.settings.changed.connect(update)
|
|
update()
|
|
|
|
|
|
func update() -> void:
|
|
var ctx: __EditContext = __Singletons.instance_of(__EditContext, self)
|
|
|
|
for child in recent_board_holder.get_children():
|
|
child.queue_free()
|
|
|
|
for board in ctx.settings.recent_files:
|
|
var button := LinkButton.new()
|
|
button.underline = LinkButton.UNDERLINE_MODE_NEVER
|
|
button.text = board
|
|
button.add_theme_color_override(&"font_color", Color(1, 1, 1, 0.2))
|
|
button.pressed.connect(__on_open_recent.bind(board))
|
|
recent_board_holder.add_child(button)
|
|
|
|
|
|
func __delete_from_recent(path: String) -> void:
|
|
var ctx: __EditContext = __Singletons.instance_of(__EditContext, self) as __EditContext
|
|
|
|
var recent = ctx.settings.recent_files
|
|
var i = recent.find(path)
|
|
if i >= 0:
|
|
recent.remove_at(i)
|
|
ctx.settings.recent_files = recent
|
|
|
|
|
|
func __on_open_recent(path: String) -> void:
|
|
if not FileAccess.file_exists(path):
|
|
if delete_from_recent_dialog.confirmed.is_connected(__delete_from_recent):
|
|
delete_from_recent_dialog.confirmed.disconnect(__delete_from_recent)
|
|
delete_from_recent_dialog.confirmed.connect(__delete_from_recent.bind(path))
|
|
delete_from_recent_dialog.popup_centered()
|
|
return
|
|
open_board.emit(path)
|