mirror of
https://github.com/mr0xb/godot-flashcards.git
synced 2026-08-28 13:04:56 -04:00
106 lines
3.3 KiB
GDScript
106 lines
3.3 KiB
GDScript
extends Panel
|
|
|
|
signal deck_saved(deck: Deck)
|
|
signal editor_closed()
|
|
|
|
var current_deck: Deck
|
|
|
|
@onready var deck_name_edit = $MarginContainer/VBoxContainer/DeckInfoSection/DeckNameEdit
|
|
@onready var deck_desc_edit = $MarginContainer/VBoxContainer/DeckInfoSection/DeckDescEdit
|
|
@onready var color_picker = $MarginContainer/VBoxContainer/DeckInfoSection/ColorPicker
|
|
@onready var cards_list = $MarginContainer/VBoxContainer/CardsSection/ScrollContainer/CardsList
|
|
@onready var save_btn = $MarginContainer/VBoxContainer/ButtonsSection/SaveButton
|
|
@onready var cancel_btn = $MarginContainer/VBoxContainer/ButtonsSection/CancelButton
|
|
@onready var add_card_btn = $MarginContainer/VBoxContainer/CardsSection/AddCardButton
|
|
|
|
func _ready() -> void:
|
|
save_btn.pressed.connect(_on_save_pressed)
|
|
cancel_btn.pressed.connect(_on_cancel_pressed)
|
|
add_card_btn.pressed.connect(_on_add_card_pressed)
|
|
hide()
|
|
|
|
func edit_deck(deck: Deck) -> void:
|
|
current_deck = deck
|
|
|
|
deck_name_edit.text = deck.name
|
|
deck_desc_edit.text = deck.description
|
|
color_picker.color = deck.color_theme
|
|
|
|
_refresh_cards_list()
|
|
|
|
show()
|
|
|
|
func _refresh_cards_list() -> void:
|
|
for child in cards_list.get_children():
|
|
child.queue_free()
|
|
|
|
for i in range(current_deck.cards.size()):
|
|
var card = current_deck.cards[i]
|
|
_add_card_ui_entry(card, i)
|
|
|
|
func _add_card_ui_entry(card: Flashcard, index: int) -> void:
|
|
var card_panel = PanelContainer.new()
|
|
var margin = MarginContainer.new()
|
|
margin.add_theme_constant_override("margin_left", 10)
|
|
margin.add_theme_constant_override("margin_top", 10)
|
|
margin.add_theme_constant_override("margin_right", 10)
|
|
margin.add_theme_constant_override("margin_bottom", 10)
|
|
card_panel.add_child(margin)
|
|
|
|
var vbox = VBoxContainer.new()
|
|
margin.add_child(vbox)
|
|
|
|
var q_hbox = HBoxContainer.new()
|
|
vbox.add_child(q_hbox)
|
|
var q_label = Label.new()
|
|
q_label.text = "Q: "
|
|
q_hbox.add_child(q_label)
|
|
var q_edit = LineEdit.new()
|
|
q_edit.text = card.question_text
|
|
q_edit.size_flags_horizontal = Control.SIZE_EXPAND_FILL
|
|
q_edit.text_changed.connect(func(new_text): card.question_text = new_text)
|
|
q_hbox.add_child(q_edit)
|
|
|
|
var a_hbox = HBoxContainer.new()
|
|
vbox.add_child(a_hbox)
|
|
var a_label = Label.new()
|
|
a_label.text = "A: "
|
|
a_hbox.add_child(a_label)
|
|
var a_edit = LineEdit.new()
|
|
a_edit.text = card.answer_text
|
|
a_edit.size_flags_horizontal = Control.SIZE_EXPAND_FILL
|
|
a_edit.text_changed.connect(func(new_text): card.answer_text = new_text)
|
|
a_hbox.add_child(a_edit)
|
|
|
|
var delete_btn = Button.new()
|
|
delete_btn.text = "Delete"
|
|
delete_btn.pressed.connect(func(): _on_delete_card_pressed(index))
|
|
vbox.add_child(delete_btn)
|
|
|
|
cards_list.add_child(card_panel)
|
|
|
|
func _on_add_card_pressed() -> void:
|
|
var new_card = Flashcard.new()
|
|
new_card.question_text = "New Question"
|
|
new_card.answer_text = "New Answer"
|
|
current_deck.add_card(new_card)
|
|
_refresh_cards_list()
|
|
|
|
func _on_delete_card_pressed(index: int) -> void:
|
|
if index >= 0 and index < current_deck.cards.size():
|
|
current_deck.cards.remove_at(index)
|
|
_refresh_cards_list()
|
|
|
|
func _on_save_pressed() -> void:
|
|
current_deck.name = deck_name_edit.text
|
|
current_deck.description = deck_desc_edit.text
|
|
current_deck.color_theme = color_picker.color
|
|
|
|
DataManager.save_deck(current_deck)
|
|
|
|
deck_saved.emit(current_deck)
|
|
hide()
|
|
|
|
func _on_cancel_pressed() -> void:
|
|
editor_closed.emit()
|
|
hide()
|