summaryrefslogtreecommitdiffstats
path: root/Main.gd
blob: 1037b1db2375c19c95cf748da91e3c710209e6ad (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
extends Control

onready var header_container = $"%HeaderContent"
onready var body_container = $"%BodyContent"

var nav_history = []
class nav_history_item:
	var screen_name
	var data_model_type
	var lookup_method
	var lookup_args
	func _init(screen_name, data_model_type, lookup_method, lookup_args):
		self.screen_name = screen_name
		self.data_model_type = data_model_type
		self.lookup_method = lookup_method
		self.lookup_args = lookup_args

func nav_screen(screen_name, data_model_type, lookup_method, lookup_args):
	var screen = nav_history_item.new(screen_name, data_model_type, lookup_method, lookup_args)
	nav_history.push_back(screen)
	swap_screen(screen)

func nav_back():
	if nav_history.size() > 1:
		nav_history.pop_back()
		swap_screen(nav_history[-1])

func swap_screen(screen):
	#queue cleanup of old screen
	if header_container.get_child_count() > 0:
		header_container.get_child(0).queue_free()
	if body_container.get_child_count() > 0:
		body_container.get_child(0).queue_free()
	#load new screen
	var header = load("res://screens/"+screen.screen_name+"/Header.tscn").instance()
	var body = load("res://screens/"+screen.screen_name+"/Body.tscn").instance()
	#load data
	var data = screen.data_model_type.callv(screen.lookup_method,screen.lookup_args)
	header.populate(data)
	body.populate(data)
	#set new screen
	header_container.add_child(header)
	body_container.add_child(body)

func _ready():
	nav_screen("TimeSlot", TimeSlot, "get_by_id", [2])