summaryrefslogtreecommitdiff
path: root/toolkit/widget.go
blob: fcb6d31f78fc2d17afa547ba7cb6593bab901537 (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
package toolkit

// passes information between the toolkit library (plugin)
//
// All Toolkit interactions should be done via a channel or Queue()
// TODO: FIND THIS NOTE AND FIGURE OUT HOW TO IMPLEMENT IT
//
// This is the only thing that is passed between the toolkit plugin
//
// what names should be used? This is not part of [[Graphical Widget]]
// Event() seems like a good name.
// Could a protobuf be used here? (Can functions be passed?)
type Widget struct {
	Name   string   // "New", "Delete", "Set", aka something to do
	Action string   // "New", "Delete", "Set", aka something to do
	// Type   string	// after lots of back and forth, a simple string
	Type  WidgetType

	// This is how the values are passed back and forth
	// values from things like checkboxes & dropdown's
	// The string is also used to set the button name
	B	bool
	I	int
	// maybe safe if there is correctly working Custom() between goroutines
	// (still probably not, almost certainly not)
	S	string // not safe to have 'S'

	// This GUI is intended for simple things
	// We are not laying out PDF's here
	// This is used for things like a slider(0,100)
	Width  int
	Height int
	X      int
	Y      int

	// Put space around elements to improve look & feel
	Margin	bool

	// Make widgets fill up the space available
	Expand	bool

	// latest attempt. seems to work so far (2023/02/28)
	// Hopefully this will be the barrier between the goroutines
	Custom    func()
}

type WidgetType int

// https://ieftimov.com/post/golang-datastructures-trees/
const (
	Unknown WidgetType = iota
	Window
	Tab
	Group
	Frame
	Button
	Checkbox
	Dropdown
	Label
	Textbox
	Slider
	Spinner
)

func (s WidgetType) String() string {
	switch s {
	case Window:
		return "Window"
	case Tab:
		return "Tab"
	case Group:
		return "Group"
	case Frame:
		return "Frame"
	case Button:
		return "Button"
	case Checkbox:
		return "Checkbox"
	case Dropdown:
		return "Dropdown"
	case Label:
		return "Label"
	case Textbox:
		return "Textbox"
	case Slider:
		return "Slider"
	case Spinner:
		return "Spinner"
	case Unknown:
		return "Unknown"
	}
	return "GuiToolkitTUndefinedType"
}