97 lines
2.0 KiB
GDScript
97 lines
2.0 KiB
GDScript
class_name Main
|
|
extends Control
|
|
|
|
@onready var note_page: NotePage = %NotePage
|
|
@onready var edit_note_page: EditNotePage = %EditNotePage
|
|
@onready var save_manager = $Utils/SaveManager
|
|
|
|
var editing: bool = false :
|
|
set(value):
|
|
editing = value
|
|
note_page.visible = not editing
|
|
edit_note_page.visible = editing
|
|
|
|
var notes: Array[Note] = []
|
|
var previous_notes: Array[Note] = []
|
|
var current_note: Note
|
|
|
|
|
|
func display_page() -> void:
|
|
var note_title = current_note.title if current_note else "Главная"
|
|
var display_notes = notes.filter(func (note): return note.parent_id == (current_note.id if current_note else ""))
|
|
if editing:
|
|
edit_note_page.display(
|
|
current_note.id if current_note else "",
|
|
note_title,
|
|
display_notes
|
|
)
|
|
else:
|
|
note_page.display(note_title, display_notes)
|
|
|
|
|
|
func _ready():
|
|
save_manager.load_data()
|
|
|
|
display_page()
|
|
|
|
|
|
func _on_note_page_back_pressed():
|
|
current_note = previous_notes.pop_back()
|
|
note_page.back_button.disabled = previous_notes.size() == 0
|
|
display_page()
|
|
|
|
|
|
func _on_note_page_edit_pressed():
|
|
editing = true
|
|
display_page()
|
|
|
|
|
|
func _on_note_page_note_pressed(note: Note) -> void:
|
|
previous_notes.append(current_note)
|
|
current_note = note
|
|
note_page.back_button.disabled = false
|
|
display_page()
|
|
|
|
|
|
func _on_save_manager_load_notes(loaded_notes):
|
|
editing = false
|
|
notes = loaded_notes
|
|
print(loaded_notes)
|
|
display_page()
|
|
|
|
|
|
func _on_edit_button_pressed():
|
|
editing = true
|
|
display_page()
|
|
|
|
|
|
func _on_edit_note_page_canceled():
|
|
editing = false
|
|
|
|
|
|
func _on_edit_note_page_saved(changed_notes: Array[ChangeNote]):
|
|
editing = false
|
|
for changed_note in changed_notes:
|
|
match changed_note.kind:
|
|
ChangeNote.Kind.ADDED:
|
|
if changed_note.note.title.strip_edges():
|
|
notes.append(changed_note.note)
|
|
ChangeNote.Kind.DELETED:
|
|
notes.erase(changed_note.note)
|
|
display_page()
|
|
save_manager.save_data(notes)
|
|
|
|
|
|
func _notification(what: int) -> void:
|
|
match what:
|
|
NOTIFICATION_WM_GO_BACK_REQUEST:
|
|
if editing:
|
|
editing = false
|
|
elif previous_notes.size():
|
|
_on_note_page_back_pressed()
|
|
else:
|
|
get_tree().quit()
|
|
|
|
|
|
|