-
Notifications
You must be signed in to change notification settings - Fork 0
/
tree.go
111 lines (85 loc) · 1.89 KB
/
tree.go
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
package gig
import (
"fmt"
"strconv"
"github.com/leonsal/gig/imgui"
)
type TreeNode struct {
Widget
strId imgui.CString
flags imgui.TreeNodeFlags
text imgui.CString
}
func NewTreeNode(format string, args ...interface{}) *TreeNode {
t := new(TreeNode)
t.Init(t, format, args...)
return t
}
func (t *TreeNode) Init(wi IWidget, format string, args ...interface{}) {
t.Widget.Init(wi)
t.strId.SetString(strconv.Itoa(t.ID()))
t.text.SetString(fmt.Sprintf(format, args...))
t.SetRender(func() {
if imgui.TreeNodeExStrIdCS(t.strId, t.flags, t.text) {
t.RenderChildren()
imgui.TreePop()
}
})
}
func (t *TreeNode) Flags() imgui.TreeNodeFlags {
return t.flags
}
func (t *TreeNode) SetFlags(flags imgui.TreeNodeFlags) *TreeNode {
t.flags = flags
return t
}
func (t *TreeNode) SetText(format string, args ...interface{}) *TreeNode {
t.text.SetString(fmt.Sprintf(format, args...))
return t
}
type CollapsingHeader struct {
Widget
label imgui.CString
flags imgui.TreeNodeFlags
open bool
popen *bool
}
func NewCollapsingHeader(label string) *CollapsingHeader {
h := new(CollapsingHeader)
h.Init(h)
h.label.SetString(label)
h.SetRender(func() {
if imgui.CollapsingHeaderPtrCS(h.label, h.popen, h.flags) {
h.RenderChildren()
}
if h.popen != nil && h.open == false {
h.visible = false
h.open = true
}
})
return h
}
func (h *CollapsingHeader) Save(ph **CollapsingHeader) *CollapsingHeader {
*ph = h
return h
}
func (h *CollapsingHeader) SetLabel(label string) *CollapsingHeader {
h.label.SetString(label)
return h
}
func (h *CollapsingHeader) Flags() imgui.TreeNodeFlags {
return h.flags
}
func (h *CollapsingHeader) SetFlags(flags imgui.TreeNodeFlags) *CollapsingHeader {
h.flags = flags
return h
}
func (h *CollapsingHeader) SetCanClose(canclose bool) *CollapsingHeader {
if canclose {
h.open = true
h.popen = &h.open
} else {
h.popen = nil
}
return h
}