blob: 2d32141ebc9430e8b79a77117427854bd9970cbb (
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("Schedule", TimeSlot, "get_by_schedule_name", ["default"])
|