godot-flashcards/scenes/ui/deck_manager/deck_manager.gd
2025-12-27 00:20:33 -05:00

89 lines
2.7 KiB
GDScript

extends Control
const DeckListItemScene = preload("res://scenes/ui/deck_manager/deck_list_item.tscn")
@onready var back_btn = $MarginContainer/VBoxContainer/Header/BackButton
@onready var browse_online_btn = $MarginContainer/VBoxContainer/Header/BrowseOnlineButton
@onready var create_deck_btn = $MarginContainer/VBoxContainer/Header/CreateDeckButton
@onready var deck_list_container = $MarginContainer/VBoxContainer/ScrollContainer/DeckListContainer
@onready var modal_overlay = $ModalOverlay
@onready var deck_editor = $DeckEditor
@onready var online_browser = $OnlineDeckBrowser
func _ready() -> void:
back_btn.pressed.connect(_on_back_pressed)
browse_online_btn.pressed.connect(_on_browse_online_pressed)
create_deck_btn.pressed.connect(_on_create_deck_pressed)
DataManager.decks_loaded.connect(_refresh_deck_list)
DataManager.deck_saved.connect(_on_deck_saved)
DataManager.deck_deleted.connect(_on_deck_deleted)
deck_editor.deck_saved.connect(_on_editor_deck_saved)
deck_editor.editor_closed.connect(_on_editor_closed)
online_browser.browser_closed.connect(_on_browser_closed)
_refresh_deck_list()
func _refresh_deck_list() -> void:
for child in deck_list_container.get_children():
child.queue_free()
for deck in DataManager.decks:
var item = DeckListItemScene.instantiate()
deck_list_container.add_child(item)
item.set_deck(deck)
item.study_requested.connect(_on_study_deck)
item.edit_requested.connect(_on_edit_deck)
item.delete_requested.connect(_on_delete_deck)
print("Refreshed deck list with %d deck(s)" % DataManager.decks.size())
func _on_back_pressed() -> void:
GameManager.return_to_main_menu()
func _on_create_deck_pressed() -> void:
var new_deck = Deck.new()
new_deck.name = "New Deck"
new_deck.description = "A new flashcard deck"
var sample_card = Flashcard.new()
sample_card.question_text = "Sample Question"
sample_card.answer_text = "Sample Answer"
new_deck.add_card(sample_card)
DataManager.save_deck(new_deck)
func _on_study_deck(deck: Deck) -> void:
GameManager.start_quiz(deck)
func _on_edit_deck(deck: Deck) -> void:
modal_overlay.show()
deck_editor.edit_deck(deck)
func _on_delete_deck(deck: Deck) -> void:
print("Deleting deck: " + deck.name)
DataManager.delete_deck(deck.id)
func _on_deck_saved(deck: Deck) -> void:
_refresh_deck_list()
func _on_deck_deleted(deck_id: String) -> void:
_refresh_deck_list()
func _on_editor_deck_saved(deck: Deck) -> void:
_refresh_deck_list()
func _on_editor_closed() -> void:
modal_overlay.hide()
func _on_browse_online_pressed() -> void:
modal_overlay.show()
online_browser.open_browser()
func _on_browser_closed() -> void:
modal_overlay.hide()
# Refresh the deck list in case new decks were downloaded
_refresh_deck_list()