summaryrefslogtreecommitdiff
path: root/toolkit/andlabs/tab.go
blob: 922515d274f33080a02a06f8b2eb4338fb583f10 (plain)
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
package toolkit

import (
	"log"
	"time"

	"github.com/andlabs/ui"
	_ "github.com/andlabs/ui/winmanifest"

)

/*
	This adds a tab

	andlabs/ui is goofy in the sense that you have to determine
	if the ui.Window already has a tab in it. If it does, then
	you need to add this tab and not run SetChild() on the window
	or instead it replaces the existing tab with the new one

	I work around this by always sending a Toolkit that is a tab
	once there is one. If you send a Window here, it will replace
	any existing tabs rather than adding a new one
*/
func (t *Toolkit) AddTab(name string) *Toolkit {
	var w *ui.Window
	var newt *Toolkit

	log.Println("gui.toolkit.AddTab() sleep 3")

	w = t.uiWindow
	if (w == nil) {
		log.Println("gui.toolkit.NewTab() node.UiWindow == nil. I can't add a tab without a window")
		return nil
	}

	if (t.uiTab == nil) {
		// this means you have to make a new tab
		log.Println("gui.toolkit.NewTab() GOOD. This should be the first tab:", name)
		newt = newTab(w, name)
		t.uiTab = newt.uiTab
	} else {
		log.Println("gui.toolkit.NewTab() GOOD. This should be an additional tab:", name)
		newt = t.appendTab(name)
		// this means you have to append a tab
	}
	log.Println("t:")
	t.Dump()
	log.Println("newt:")
	newt.Dump()

	return newt
}

func (t *Toolkit) SetTabBox(box *ui.Box) {
	var tab *ui.Tab

	log.Println("wit/gui/toolkit SetTabBox()")
	t.Dump()
	if (t.uiTab == nil) {
		log.Println("wit/gui/toolkit SetTabBox() got uiTab == nil")
		panic("fucknuts")
		return
	}
	if (t.uiBox == nil) {
		log.Println("wit/gui/toolkit SetTabBox() got uiBox == nil. Appending a new tab here")
		tab = t.uiTab
		tab.Append(t.Name, box)
		tabSetMargined(tab)
		return
	} else {
		log.Println("wit/gui/toolkit SetTabBox() got uiBox != nil. Appending the box to the existing box strechy = true")
		t.uiBox.Append(box, true) // strechy == true
		t.uiBox2 = box
		// t.uiBox.Append(box, false) // strechy == false
		return
	}

}

// This sets _all_ the tabs to Margin = true
//
// TODO: do proper tab tracking (will be complicated). low priority
func tabSetMargined(tab *ui.Tab) {
	c := tab.NumPages()
	for i := 0; i < c; i++ {
		tab.SetMargined(i, true)
	}
}

func newTab(w *ui.Window, name string) *Toolkit {
	log.Println("gui.toolkit.NewTab() ADD", name)
	var t Toolkit

	if (w == nil) {
		log.Println("gui.toolkit.NewTab() node.UiWindow == nil. I can't add a tab without a window")
		log.Println("gui.toolkit.NewTab() node.UiWindow == nil. I can't add a tab without a window")
		log.Println("gui.toolkit.NewTab() node.UiWindow == nil. I can't add a tab without a window")
		time.Sleep(1 * time.Second)
		return nil
	}
	log.Println("gui.toolkit.AddTab() START name =", name)
	// time.Sleep(2 * time.Second)
	tab := ui.NewTab()
	w.SetMargined(true)

	hbox := ui.NewHorizontalBox() // this makes everything go along the horizon
	// hbox := ui.NewVerticalBox()
	hbox.SetPadded(true)
	tab.Append(name, hbox)
	w.SetChild(tab)

	t.uiWindow = w
	t.uiTab = tab
	t.uiBox = hbox
	// tabSetMargined(newNode.uiTab)
	return &t
}

func (t *Toolkit) appendTab(name string) *Toolkit {
	log.Println("gui.toolkit.NewTab() ADD", name)
	var newT Toolkit

	if (t.uiWindow == nil) {
		log.Println("gui.toolkit.NewTab() node.UiWindow == nil. I can't add a tab without a window")
		log.Println("gui.toolkit.NewTab() node.UiWindow == nil. I can't add a tab without a window")
		log.Println("gui.toolkit.NewTab() node.UiWindow == nil. I can't add a tab without a window")
		time.Sleep(1 * time.Second)
		return nil
	}
	log.Println("gui.toolkit.AddTab() START name =", name)

	hbox := ui.NewHorizontalBox() // this makes everything go along the horizon
	// hbox := ui.NewVerticalBox()
	hbox.SetPadded(true)
	t.uiTab.Append(name, hbox)
	// w.SetChild(tab)

	newT.uiWindow = t.uiWindow
	newT.uiTab = t.uiTab
	newT.uiBox = hbox
	// tabSetMargined(newNode.uiTab)
	return &newT
}