summaryrefslogtreecommitdiffstats
path: root/Main.gd
blob: 3b52cee716772410593f1d6bb043f577dff8029c (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("TaskManager", DataHelpers, "dummy_data", [[]])