boronotes/pages/edit_note_page/edit_note_page.gd

59 lines
1.4 KiB
GDScript

class_name EditNotePage
extends PanelContainer
signal canceled()
signal saved(changed_notes: Array[ChangeNote])
@onready var page_title: Label = %PageTitle
@onready var notes_container: VBoxContainer = %NotesContainer
const EDIT_NOTE_ITEM = preload("res://components/edit_note_item/edit_note_item.tscn")
var _current_note_id: String
var _changes: Array[ChangeNote] = []
func display_notes():
for child in notes_container.get_children():
notes_container.remove_child(child)
for change_note in _changes:
if change_note.kind == ChangeNote.Kind.DELETED:
continue
var note_item = EDIT_NOTE_ITEM.instantiate()
note_item.note = change_note.note
notes_container.add_child(note_item)
note_item.deleted.connect(_on_edit_node_item_deleted)
func display(current_note_id: String, title: String, notes: Array[Note]):
_current_note_id = current_note_id
page_title.text = title
_changes = []
for note in notes:
_changes.append(ChangeNote.new(ChangeNote.Kind.CHANGED, note))
display_notes()
func _on_edit_node_item_deleted(note: Note):
for changed_note in _changes:
if changed_note.note == note:
changed_note.kind = ChangeNote.Kind.DELETED
display_notes()
break
func _on_cancel_button_pressed():
canceled.emit()
func _on_save_button_pressed():
saved.emit(_changes)
func _on_add_note_button_pressed():
_changes.append(ChangeNote.new(ChangeNote.Kind.ADDED, Note.create("", _current_note_id)))
display_notes()