summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README-goreadme.md36
-rw-r--r--checkbox.go6
-rw-r--r--cmds/buttonplugin/main.go6
-rw-r--r--cmds/textbox/Makefile4
-rw-r--r--common.go24
-rw-r--r--debug.go80
-rw-r--r--debugFlags.go (renamed from debug_flags.go)16
-rw-r--r--debugGochan.go107
-rw-r--r--debugGolang.go (renamed from debug_golang.go)16
-rw-r--r--debugWidget.go (renamed from debug_widget.go)169
-rw-r--r--debugWindow.go (renamed from debug_window.go)50
-rw-r--r--dropdown.go35
-rw-r--r--grid.go16
-rw-r--r--int.go8
-rw-r--r--main.go6
-rw-r--r--plugin.go84
-rw-r--r--structs.go3
-rw-r--r--toolkit/andlabs/append.go103
-rw-r--r--toolkit/andlabs/box.go14
-rw-r--r--toolkit/andlabs/checkbox.go24
-rw-r--r--toolkit/andlabs/combobox.go100
-rw-r--r--toolkit/andlabs/common.go143
-rw-r--r--toolkit/andlabs/debug.go102
-rw-r--r--toolkit/andlabs/dropdown.go73
-rw-r--r--toolkit/andlabs/grid.go102
-rw-r--r--toolkit/andlabs/group.go33
-rw-r--r--toolkit/andlabs/icon.go27
-rw-r--r--toolkit/andlabs/label.go3
-rw-r--r--toolkit/andlabs/main.go7
-rw-r--r--toolkit/andlabs/plugin.go38
-rw-r--r--toolkit/andlabs/resources/ping6.broken.pngbin0 -> 9486 bytes
-rw-r--r--toolkit/andlabs/resources/ping6.pure-bright.pngbin0 -> 11989 bytes
-rw-r--r--toolkit/andlabs/resources/ping6.pure.pngbin0 -> 9072 bytes
-rw-r--r--toolkit/andlabs/resources/ping6.working.pngbin0 -> 3654 bytes
-rw-r--r--toolkit/andlabs/slider.go3
-rw-r--r--toolkit/andlabs/spinner.go3
-rw-r--r--toolkit/andlabs/structs.go2
-rw-r--r--toolkit/andlabs/tab.go10
-rw-r--r--toolkit/andlabs/textbox.go62
-rw-r--r--toolkit/widget.go9
40 files changed, 1062 insertions, 462 deletions
diff --git a/README-goreadme.md b/README-goreadme.md
index a051b8a..fd4ec74 100644
--- a/README-goreadme.md
+++ b/README-goreadme.md
@@ -145,41 +145,41 @@ var WARN bool
## Functions
-### func [DebugWidgetWindow](/debug_widget.go#L7)
+### func [DebugWidgetWindow](/debugWidget.go#L107)
`func DebugWidgetWindow(w *Node)`
-### func [DebugWindow](/debug_window.go#L9)
+### func [DebugWindow](/debugWindow.go#L9)
`func DebugWindow()`
Creates a window helpful for debugging this package
-### func [Delete](/common.go#L66)
+### func [Delete](/common.go#L90)
`func Delete(c *Node)`
-### func [Indent](/debug.go#L123)
+### func [Indent](/debug.go#L101)
`func Indent(a ...interface{})`
-### func [InitPlugins](/main.go#L46)
+### func [InitPlugins](/main.go#L50)
`func InitPlugins(names []string)`
-### func [LoadToolkit](/plugin.go#L56)
+### func [LoadToolkit](/plugin.go#L43)
`func LoadToolkit(name string) bool`
loads and initializes a toolkit (andlabs/ui, gocui, etc)
-### func [Main](/main.go#L87)
+### func [Main](/main.go#L91)
`func Main(f func())`
This should not pass a function
-### func [Queue](/main.go#L117)
+### func [Queue](/main.go#L121)
`func Queue(f func())`
@@ -190,27 +190,19 @@ other goroutines. This is due to the nature of how
Linux, MacOS and Windows work (they all work differently. suprise. surprise.)
For example: gui.Queue(NewWindow())
-### func [SetDebug](/debug.go#L24)
+### func [SetDebug](/debug.go#L27)
`func SetDebug(s bool)`
-### func [SetDebugChange](/debug.go#L58)
+### func [SetFlag](/debug.go#L41)
-`func SetDebugChange(s bool)`
+`func SetFlag(s string, b bool)`
-This passes the debugChange flag to the toolkit plugin
-
-### func [SetDebugToolkit](/debug.go#L43)
-
-`func SetDebugToolkit(s bool)`
-
-This passes the debugToolkit flag to the toolkit plugin
-
-### func [ShowDebugValues](/debug.go#L72)
+### func [ShowDebugValues](/debug.go#L62)
`func ShowDebugValues()`
-### func [StandardExit](/main.go#L136)
+### func [StandardExit](/main.go#L140)
`func StandardExit()`
@@ -243,7 +235,7 @@ This struct can be used with the go-arg package
var Config GuiConfig
```
-### type [Node](/structs.go#L54)
+### type [Node](/structs.go#L57)
`type Node struct { ... }`
diff --git a/checkbox.go b/checkbox.go
index 068be7b..186f3a8 100644
--- a/checkbox.go
+++ b/checkbox.go
@@ -12,9 +12,3 @@ func (n *Node) NewCheckbox(name string) *Node {
send(n, newNode)
return newNode
}
-
-func (n *Node) NewThing(name string) *Node {
- newNode := n.New(name, toolkit.Button, nil)
- send(n, newNode)
- return newNode
-}
diff --git a/cmds/buttonplugin/main.go b/cmds/buttonplugin/main.go
index 9ed47fa..0c72c3f 100644
--- a/cmds/buttonplugin/main.go
+++ b/cmds/buttonplugin/main.go
@@ -81,12 +81,6 @@ func buttonWindow() {
gui.DebugWindow()
})
- g.NewButton("gui.GolangDebugWindow()", func () {
- // make a seperate window out of this
- // w.GolangDebugWindow(false)
- w.GolangDebugWindow(true)
- })
-
g.NewButton("LoadToolkit(andlabs)", func () {
gui.LoadToolkit("andlabs")
})
diff --git a/cmds/textbox/Makefile b/cmds/textbox/Makefile
index 7b0e57d..6ca4329 100644
--- a/cmds/textbox/Makefile
+++ b/cmds/textbox/Makefile
@@ -1,5 +1,5 @@
run: build
- ./textbox --gui-debug
+ GOTRACEBACK=all ./textbox --gui-debug
build-release:
go get -v -u -x .
@@ -7,7 +7,7 @@ build-release:
build:
GO111MODULE="off" go get -v -x .
- GO111MODULE="off" go build
+ GO111MODULE="off" GOTRACEBACK=all go build
update:
GO111MODULE="off" go get -v -u -x .
diff --git a/common.go b/common.go
index 22e4319..1518bc8 100644
--- a/common.go
+++ b/common.go
@@ -8,6 +8,13 @@ import (
// functions for handling text related GUI elements
+func (n *Node) Add(str string) {
+ log(debugGui, "gui.Add() value =", str)
+ n.widget.Action = "Add"
+ n.widget.S = str
+ send(n.parent, n)
+}
+
func (n *Node) SetText(str string) bool {
log(debugChange, "gui.SetText() value =", str)
n.widget.Action = "Set"
@@ -16,6 +23,23 @@ func (n *Node) SetText(str string) bool {
return true
}
+func (n *Node) Set(a any) bool {
+ log(debugChange, "gui.Set() value =", a)
+ n.widget.Action = "Set"
+ switch v := a.(type) {
+ case bool:
+ n.widget.B = a.(bool)
+ case string:
+ n.widget.S = a.(string)
+ case int:
+ n.widget.I = a.(int)
+ default:
+ log(debugError, "gui.Set() unknown type =", v, "a =", a)
+ }
+ send(n.parent, n)
+ return true
+}
+
func (n *Node) AppendText(str string) bool {
n.widget.Action = "Set"
tmp := n.widget.S + str
diff --git a/debug.go b/debug.go
index 7fe9a6a..de78d89 100644
--- a/debug.go
+++ b/debug.go
@@ -10,69 +10,60 @@ import (
// various debugging flags
var debugGui bool = false
+var debugError bool = false
var debugDump bool = false
var debugNode bool = false
var debugTabs bool = false
+var debugFlags bool = false
var debugChange bool = false // shows user events like mouse and keyboard
var debugPlugin bool = false
var debugToolkit bool = false
-// func GetDebug () bool {
-// return debugGui
-// }
+// for printing out the binary tree
+var listChildrenParent *Node
+var listChildrenDepth int = 0
+var defaultPadding = " "
func SetDebug (s bool) {
debugGui = s
- debugChange = s
debugDump = s
debugTabs = s
debugPlugin = s
debugNode = s
debugToolkit = s
- SetDebugChange(s)
- SetDebugToolkit(s)
-}
-/*
-func GetDebugToolkit () bool {
- return debugToolkit
+ SetFlag("Flags", s)
+ SetFlag("Toolkit", s)
+ SetFlag("Change", s)
+ SetFlag("Error", s)
}
-*/
-// This passes the debugToolkit flag to the toolkit plugin
-func SetDebugToolkit (s bool) {
- debugToolkit = s
- for _, aplug := range allPlugins {
- log(debugPlugin, "gui.SetDebugToolkit() aplug =", aplug.name)
- if (aplug.SetDebugToolkit == nil) {
- log(debugPlugin, "\tgui.SetDebugToolkit() = nil", aplug.name)
- continue
- }
- aplug.SetDebugToolkit(s)
- return
+func SetFlag (s string, b bool) {
+ switch s {
+ case "Error":
+ debugError = b
+ case "Change":
+ debugChange = b
+ case "Show":
+ // print them here? For now, just used to print settings in the plugins
+ default:
+ log(debugError, "Can't set unknown flag", s)
}
- log(debugPlugin, "\tgui.SetDebugToolkit() = nil in all plugins")
-}
-// This passes the debugChange flag to the toolkit plugin
-func SetDebugChange (s bool) {
- // debugToolkit = s
- for _, aplug := range allPlugins {
- log(debugPlugin, "gui.SetDebugChange() aplug =", aplug.name)
- if (aplug.SetDebugChange == nil) {
- log(debugPlugin, "\tgui.SetDebugChange() = nil", aplug.name)
- continue
- }
- aplug.SetDebugChange(s)
- return
- }
- log(debugPlugin, "\tgui.SetDebugChange() = nil in all plugins")
+ // send the flag to the toolkit
+ n := Config.flag
+ log(debugChange, "Set() toolkit flag", s, "to", b)
+ n.widget.Action = "Set"
+ n.widget.S = s
+ n.widget.B = b
+ send(nil, n)
}
func ShowDebugValues() {
// The order here should match the order in the GUI
// TODO: get the order from the node binary tree
log(true, "Debug =", debugGui)
+ log(true, "DebugError =", debugError)
log(true, "DebugChange =", debugChange)
log(true, "DebugDump =", debugDump)
log(true, "DebugTabs =", debugTabs)
@@ -80,16 +71,7 @@ func ShowDebugValues() {
log(true, "DebugNode =", debugNode)
log(true, "DebugToolkit =", debugToolkit)
- // dump out the debugging flags for the plugins
- for _, aplug := range allPlugins {
- log(debugPlugin, "gui.ShowDebug() aplug =", aplug.name)
- if (aplug.ShowDebug == nil) {
- log(debugPlugin, "\tgui.ShowDebug() = nil", aplug.name)
- continue
- }
- aplug.ShowDebug()
- return
- }
+ SetFlag("Show", true)
}
func (n *Node) Dump() {
@@ -116,10 +98,6 @@ func (n *Node) Dump() {
Indent("NODE DUMP END")
}
-var listChildrenParent *Node
-var listChildrenDepth int = 0
-var defaultPadding = " "
-
func Indent(a ...interface{}) {
logindent(listChildrenDepth, defaultPadding, a...)
}
diff --git a/debug_flags.go b/debugFlags.go
index ea535c4..08aa766 100644
--- a/debug_flags.go
+++ b/debugFlags.go
@@ -15,7 +15,7 @@ func (n *Node) debugFlags(makeWindow bool) {
w = NewWindow()
w.Custom = w.StandardClose
} else {
- w = n.NewTab("Debug Flags")
+ w = n.NewTab("Flags")
}
w.Dump()
@@ -36,12 +36,19 @@ func (n *Node) debugFlags(makeWindow bool) {
log(debugGui, "Custom() n.widget =", cb1.widget.Name, cb1.widget.B)
}
+ // errors. by default these always output somewhere
+ cbE := g.NewCheckbox("debugError")
+ cbE.Custom = func() {
+ debugError = cbE.widget.B
+ SetFlag("Error", debugError)
+ }
+
// debugging that will show you things like mouse clicks, user inputing text, etc
// also set toolkit.DebugChange
cb2 := g.NewCheckbox("debugChange")
cb2.Custom = func() {
debugChange = cb2.widget.B
- SetDebugChange(cb2.widget.B)
+ SetFlag("Change", debugChange)
log(debugGui, "Custom() n.widget =", cb2.widget.Name, cb2.widget.B)
}
@@ -74,8 +81,9 @@ func (n *Node) debugFlags(makeWindow bool) {
// turns on debugging inside the plugin toolkit
cb7 := g.NewCheckbox("debugToolkit")
cb7.Custom = func() {
- SetDebugToolkit(cb7.widget.B)
- log(debugGui, "Custom() n.widget =", cb7.widget.Name, cb7.widget.B)
+ // SetDebugToolkit(cb7.widget.B)
+ SetFlag("Toolkit", cb7.widget.B)
+ log(debugFlags, "Custom() n.widget =", cb7.widget.Name, cb7.widget.B)
}
g.NewButton("Dump Debug Flags", func () {
diff --git a/debugGochan.go b/debugGochan.go
new file mode 100644
index 0000000..3183bdb
--- /dev/null
+++ b/debugGochan.go
@@ -0,0 +1,107 @@
+// https://www.digitalocean.com/community/tutorials/how-to-run-multiple-functions-concurrently-in-go
+// who came up with the idea of making community tutorials. that was a good idea!
+
+package gui
+
+import (
+ "fmt"
+ "sync"
+)
+
+var debugWG *sync.WaitGroup
+var debugNumberChan chan int
+
+func (n *Node) debugGoChannels(makeWindow bool) {
+ var w, g *Node
+
+ // Either:
+ // make a new window
+ // make a new tab in the existing window
+ if (makeWindow) {
+ Config.Title = "Debug GO Channels"
+ Config.Width = 300
+ Config.Height = 400
+ w = NewWindow()
+ w.Custom = w.StandardClose
+ } else {
+ w = n.NewTab("Chan")
+ }
+ w.Dump()
+
+ g = w.NewGroup("Channel stuff")
+
+ // var debugWG sync.WaitGroup
+ g.NewButton("init()", func () {
+ if (debugNumberChan == nil) {
+ log("making debugNumberChan channel")
+ debugNumberChan = make(chan int)
+ } else {
+ log("debugNumberChan already made")
+ }
+ debugWG = new(sync.WaitGroup)
+ })
+ g.NewButton("go printInt(x) (read x values off the channel)", func () {
+ debugWG.Add(1)
+ go printInt(2, "routine1")
+ debugWG.Add(1)
+ go printInt(2, "routine2")
+ })
+ g.NewButton("sendNumber(2) (chan <- 2, 4)", func () {
+ debugWG.Add(1)
+ debugWG.Add(1)
+ go sendNumber(2)
+ go sendNumber(4)
+ })
+ g.NewButton("sendNumber(1) (chan <- 7)", func () {
+ debugWG.Add(1)
+ go sendNumber(7)
+ })
+ g.NewButton("send 4 numbers (chan <- int)", func () {
+ log("generateNumbers(4)")
+ go generateNumbers(4)
+ })
+ g.NewButton("debugWG.Done()", func () {
+ log("ran debugWG.Done()")
+ debugWG.Done()
+ })
+ g.NewButton("close chan", func () {
+ close(debugNumberChan)
+ })
+ g.NewButton("print", func () {
+ log("waitgroup counter is ?")
+ })
+}
+func sendNumber(i int) {
+ log("START debugNumberChan <-", i, " (sending", i, "to channel)")
+ debugNumberChan <- i
+ debugWG.Wait()
+ log("END debugNumberChan sendNumber() done", i)
+}
+
+func generateNumbers(total int) {
+ fmt.Printf("START generateNumbers()\n")
+ for idx := 1; idx <= total; idx++ {
+ log("ran debugNumberChan <= idx where idx =", idx)
+ fmt.Printf("S generateNumbers() sending %d to channel\n", idx)
+ debugNumberChan <- idx
+ // res, err := (<-r)()
+ fmt.Printf("E generateNumbers() sending %d to channel\n", idx)
+ }
+ debugWG.Wait()
+ fmt.Printf("END generateNumbers()\n")
+}
+
+// i equals the number of times to read values from the channel
+func printInt(i int, name string) {
+ tmp := 1
+ log("START printInt", name, "read debugNumberChan()")
+ for num := range debugNumberChan {
+ log("printInt()",name, "read", num, "from channel")
+ debugWG.Done()
+ if (tmp == i) {
+ return
+ }
+ tmp += 1
+ }
+ fmt.Printf("END printInt()", name, "read debugNumberChan\n")
+}
diff --git a/debug_golang.go b/debugGolang.go
index 87ccdb5..0a6edda 100644
--- a/debug_golang.go
+++ b/debugGolang.go
@@ -9,7 +9,7 @@ import (
"runtime/pprof"
)
-func (n *Node) GolangDebugWindow(makeWindow bool) {
+func (n *Node) debugGolangWindow(makeWindow bool) {
var w, g, og, outputTextbox *Node
// Either:
@@ -22,7 +22,7 @@ func (n *Node) GolangDebugWindow(makeWindow bool) {
w = NewWindow()
w.Custom = w.StandardClose
} else {
- w = n.NewTab("GO")
+ w = n.NewTab("GOLANG")
}
w.Dump()
@@ -93,6 +93,11 @@ func (n *Node) GolangDebugWindow(makeWindow bool) {
g.NewLabel("TODO:")
+ g.NewButton("runtime.Stack(true)", func () {
+ // TODO: https://stackoverflow.com/questions/61127053/how-to-list-all-the-running-goroutines-in-a-go-program
+ // func Stack(buf []byte, all bool) int
+ })
+
g.NewButton("debug.SetMemoryLimit(int)", func () {
// TODO:
//debug.SetMemoryLimit(1024 * 1024 * 100)
@@ -109,6 +114,13 @@ func (n *Node) GolangDebugWindow(makeWindow bool) {
g.NewButton("debug.SetTraceback('all')", func () {
debug.SetTraceback("all")
})
+ g.NewButton("runtime.NumGoroutine()", func () {
+ buf := new(bytes.Buffer)
+ pprof.Lookup("goroutine").WriteTo(buf, 1)
+ outputTextbox.SetText(buf.String())
+
+ outputTextbox.AppendText(fmt.Sprintln("runtime.NumGoroutine() = ", runtime.NumGoroutine()))
+ })
// deprecated (probably) by String() implementation within golang
g.NewButton("dumpModuleInfo() (deprecate)", func () {
diff --git a/debug_widget.go b/debugWidget.go
index da15706..d76b554 100644
--- a/debug_widget.go
+++ b/debugWidget.go
@@ -4,55 +4,7 @@ import (
"strconv"
)
-func DebugWidgetWindow(w *Node) {
- var win, g *Node
-
- title := "ID =" + strconv.Itoa(w.id) + " " + w.widget.Name
-
- Config.Title = title
- Config.Width = 300
- Config.Height = 400
- win = NewWindow()
- win.Custom = w.StandardClose
-
- g = win.NewGroup("Actions")
-
- g.NewLabel(title)
- g.NewButton("Dump()", func () {
- w.Dump()
- })
- g.NewButton("Disable()", func () {
- w.widget.Action = "Disable"
- send(w.parent, w)
- })
- g.NewButton("Enable()", func () {
- w.widget.Action = "Enable"
- send(w.parent, w)
- })
- g.NewButton("Show()", func () {
- w.widget.Action = "Show"
- send(w.parent, w)
- })
- g.NewButton("Hide()", func () {
- w.widget.Action = "Hide"
- send(w.parent, w)
- })
- g.NewButton("Value()", func () {
- log("w.B =", w.widget.B)
- log("w.I =", w.widget.I)
- log("w.S =", w.widget.S)
- })
- g.NewButton("Set Value(20)", func () {
- w.widget.Action = "Set"
- w.widget.B = true
- w.widget.I = 20
- w.widget.S = "Set Value(20)"
- send(w.parent, w)
- })
- g.NewButton("Delete()", func () {
- Delete(w)
- })
-}
+var debugGrid *Node
func (n *Node) debugWidgets(makeWindow bool) {
var w, gList, gShow *Node
@@ -61,7 +13,7 @@ func (n *Node) debugWidgets(makeWindow bool) {
// make a new window
// make a new tab in the existing window
if (makeWindow) {
- Config.Title = "Widgets"
+ Config.Title = "Debug Widgets"
Config.Width = 300
Config.Height = 400
w = NewWindow()
@@ -75,9 +27,11 @@ func (n *Node) debugWidgets(makeWindow bool) {
gShow = w.NewGroup("Added Widgets go here")
gList.NewButton("Button", func () {
+ SetDebug(true)
a := gShow.NewButton("myButton", func () {
log("this code is more better")
})
+ SetDebug(false)
DebugWidgetWindow(a)
})
gList.NewButton("Checkbox", func () {
@@ -101,15 +55,126 @@ func (n *Node) debugWidgets(makeWindow bool) {
gList.NewButton("Slider", func () {
a := gShow.NewSlider("tmp slider", 10, 55)
a.Custom = func () {
- log("custom slider() a =", a.widget.S, a.id)
+ log("custom slider() a =", a.widget.I, a.id)
}
DebugWidgetWindow(a)
})
gList.NewButton("Spinner", func () {
a := gShow.NewSpinner("tmp spinner", 6, 32)
a.Custom = func () {
- log("custom spinner() a =", a.widget.S, a.id)
+ log("custom spinner() a =", a.widget.I, a.id)
+ }
+ DebugWidgetWindow(a)
+ })
+ gList.NewButton("Dropdown", func () {
+ a := gShow.NewDropdown("tmp dropdown")
+ a.AddDropdownName("this is better than tcl/tk")
+ a.AddDropdownName("make something for tim")
+ a.AddDropdownName("for qflow")
+ a.Add("and for riscv")
+ a.Custom = func () {
+ log("custom dropdown() a =", a.widget.Name, a.widget.S)
}
DebugWidgetWindow(a)
})
+ gList.NewButton("Combobox", func () {
+ a := gShow.NewCombobox("tmp combobox")
+ a.Add("mirrors.wit.com")
+ a.Add("go.wit.org")
+ a.Custom = func () {
+ log("custom combobox() a =", a.widget.Name, a.widget.S)
+ }
+ DebugWidgetWindow(a)
+ })
+ gList.NewButton("Grid", func () {
+ // Grid numbering by (X,Y)
+ // -----------------------------
+ // -- (1,1) -- (2,1) -- (3,1) --
+ // -- (1,2) -- (2,1) -- (3,1) --
+ // -----------------------------
+ SetDebug(true)
+ debugGrid = gShow.NewGrid("tmp grid", 2, 3)
+ debugGrid.NewLabel("mirrors.wit.com")
+ SetDebug(false)
+ DebugWidgetWindow(debugGrid)
+ })
+ gList.NewButton("Image", func () {
+ a := gShow.NewTextbox("image")
+ DebugWidgetWindow(a)
+ })
+}
+
+func DebugWidgetWindow(w *Node) {
+ var win, g *Node
+
+ title := "ID =" + strconv.Itoa(w.id) + " " + w.widget.Name
+
+ Config.Title = title
+ Config.Width = 300
+ Config.Height = 400
+ win = NewWindow()
+ win.Custom = w.StandardClose
+
+ g = win.NewGroup("Actions")
+
+ g.NewLabel(title)
+ g.NewButton("Dump()", func () {
+ w.Dump()
+ })
+ g.NewButton("Disable()", func () {
+ w.widget.Action = "Disable"
+ send(w.parent, w)
+ })
+ g.NewButton("Enable()", func () {
+ w.widget.Action = "Enable"
+ send(w.parent, w)
+ })
+ g.NewButton("Show()", func () {
+ w.widget.Action = "Show"
+ send(w.parent, w)
+ })
+ g.NewButton("Hide()", func () {
+ w.widget.Action = "Hide"
+ send(w.parent, w)
+ })
+ g.NewButton("Value()", func () {
+ log("w.B =", w.widget.B)
+ log("w.I =", w.widget.I)
+ log("w.S =", w.widget.S)
+ })
+ g.NewButton("Set Value(20)", func () {
+ w.widget.Action = "Set"
+ w.widget.B = true
+ w.widget.I = 20
+ w.widget.S = "Set Value(20)"
+ send(w.parent, w)
+ })
+ g.NewButton("Add('foo')", func () {
+ w.widget.Action = "Add"
+ w.widget.S = "foo"
+ send(w.parent, w)
+ })
+ g.NewButton("Delete('foo')", func () {
+ w.widget.Action = "Delete"
+ w.widget.S = "foo"
+ send(w.parent, w)
+ })
+ g.NewButton("SetMargin(true)", func () {
+ w.widget.Action = "SetMargin"
+ w.widget.B = true
+ send(w.parent, w)
+ })
+ g.NewButton("SetMargin(false)", func () {
+ w.widget.Action = "SetMargin"
+ w.widget.B = false
+ send(w.parent, w)
+ })
+ g.NewButton("Add button to (1,1)", func () {
+ w.widget.Action = "AddGrid"
+ w.widget.B = false
+ send(w.parent, w)
+ })
+ g.NewButton("Delete()", func () {
+ Delete(w)
+ })
}
diff --git a/debug_window.go b/debugWindow.go
index 0ee2271..a831869 100644
--- a/debug_window.go
+++ b/debugWindow.go
@@ -19,37 +19,28 @@ var checkd, checkdn, checkdt, checkdtk, lb1, lb2 *Node
var myButton *Node
func (n *Node) DebugTab(title string) *Node {
- var newN, gog, g1, g2, g3, dd, junk, newThing *Node
+ var newN, gog, g1, g2, g3, dd *Node
// time.Sleep(1 * time.Second)
newN = n.NewTab(title)
newN.Dump()
//////////////////////// main debug things //////////////////////////////////
- gog = newN.NewGroup("GOLANG")
- gog.NewLabel("go language")
- gog.NewButton("GO Language Debug", func () {
- newN.GolangDebugWindow(false)
- })
+ gog = newN.NewGroup("Debugging")
+
gog.NewButton("Debug Flags", func () {
newN.debugFlags(false)
})
gog.NewButton("Debug Widgets", func () {
newN.debugWidgets(false)
})
-
- gog.NewLabel("wit/gui package")
- gog.NewButton("Demo toolkit andlabs/ui", func () {
- // DemoToolkitWindow()
+ gog.NewButton("GO Language Internals", func () {
+ newN.debugGolangWindow(false)
})
-
- junk = gog.NewButton("junk", func () {
- log("click junk, get junk")
+ gog.NewButton("GO Channels debug", func () {
+ newN.debugGoChannels(false)
})
- gog.NewLabel("tmp label")
-
-
//////////////////////// window debugging things //////////////////////////////////
g1 = newN.NewGroup("Current Windows")
dd = g1.NewDropdown("Window Dropdown")
@@ -83,33 +74,6 @@ func (n *Node) DebugTab(title string) *Node {
mapWindows[child.Name] = child
}
dd.SetDropdownName(last)
- dd.NewButton("Delete(junk)", func () {
- Delete(junk)
- })
- dd.NewButton("myButton", func () {
- gog.NewButton("myButton", func () {
- log("this code is better")
- })
- })
- dd.NewButton("add Hope", func () {
- var i int = 1
- log("add hope?", i)
- gog.NewButton("hope", func () {
- i += 1
- log("write better code", i)
- })
- })
- dd.NewButton("add newThing", func () {
- var i, j int = 1, 1
- newThing = gog.NewThing("NewThing")
- newThing.Custom = func() {
- f := i + j
- log("newThing!!! n.widget =", newThing.widget.Name, newThing.widget.B, f)
- j = i
- i = f
- }
- log("newThing!!! n.widget")
- })
g2 = newN.NewGroup("Debug Window")
g2.NewButton("SetMargined(tab)", func () {
diff --git a/dropdown.go b/dropdown.go
index 214cc5a..81746c6 100644
--- a/dropdown.go
+++ b/dropdown.go
@@ -6,41 +6,22 @@ import (
// add a new entry to the dropdown name
func (n *Node) AddDropdownName(name string) {
- for _, aplug := range allPlugins {
- log(debugPlugin, "AddDropdownName() aplug =", aplug.name, "name =", name)
- if (aplug.AddDropdownName == nil) {
- log(debugPlugin, "\taplug.AddDropdownName() = nil")
- continue
- }
- aplug.AddDropdownName(&n.widget, name)
- }
+ n.Add(name)
}
// Set the dropdown menu to 'name'
func (n *Node) SetDropdownName(name string) {
- log(debugGui, "SetDropdownName() work. name =", name)
- for _, aplug := range allPlugins {
- log(debugPlugin, "SetDropdownName() aplug =", aplug.name, "name =", name)
- if (aplug.SetDropdownName == nil) {
- log(true, "\taplug.SetDropdownName() aplug = nil")
- continue
- }
- aplug.SetDropdownName(&n.widget, name)
- }
+ n.SetText(name)
}
func (n *Node) NewDropdown(name string) *Node {
newNode := n.New(name, toolkit.Dropdown, nil)
+ send(n, newNode)
+ return newNode
+}
- for _, aplug := range allPlugins {
- log(debugGui, "gui.NewDropdown() aplug =", aplug.name, "name =", newNode.widget.Name)
- if (aplug.NewDropdown == nil) {
- log(debugGui, "\tgui.NewDropdown() aplug.NewDropdown = nil", aplug.name)
- continue
- }
- aplug.NewDropdown(&n.widget, &newNode.widget)
- }
-
- // TODO, this doesn't work for some reason (over-written by plugin?)
+func (n *Node) NewCombobox(name string) *Node {
+ newNode := n.New(name, toolkit.Combobox, nil)
+ send(n, newNode)
return newNode
}
diff --git a/grid.go b/grid.go
new file mode 100644
index 0000000..d0158fd
--- /dev/null
+++ b/grid.go
@@ -0,0 +1,16 @@
+package gui
+
+import (
+ "git.wit.org/wit/gui/toolkit"
+)
+
+func (n *Node) NewGrid(name string, x int, y int) *Node {
+ newNode := n.New(name, toolkit.Grid, func() {
+ log(debugChange, "click() NewGrid not defined =", name)
+ })
+ newNode.widget.X = x
+ newNode.widget.Y = y
+
+ send(n, newNode)
+ return newNode
+}
diff --git a/int.go b/int.go
index a7880dc..ff38afb 100644
--- a/int.go
+++ b/int.go
@@ -13,13 +13,7 @@ package gui
Is it "has to go" or "should go"? Probably it makes sense to strictly inforce it. No "callback" functions. IPC only (go channels)
*/
func (n *Node) Int() int {
- log(debugToolkit, "gui.Node.Int() for node name =", n.Name)
- log(debugToolkit, SPEW, n)
-
- // FIXME: this needs to be redone
- // i := n.toolkit.Value()
- i := 3333
- return i
+ return n.widget.I
}
// which name to use?
diff --git a/main.go b/main.go
index d05f334..cc5bfcf 100644
--- a/main.go
+++ b/main.go
@@ -2,6 +2,7 @@ package gui
import (
"embed"
+ "git.wit.org/wit/gui/toolkit"
)
// Windows doesn't support plugins. How can I keep andlabs and only compile it on windows?
@@ -26,7 +27,8 @@ func init() {
// Populates the top of the binary tree
Config.master = addNode("guiBinaryTree")
- go doGuiChan()
+ // used to pass debugging flags to the toolkit plugins
+ Config.flag = Config.master.New("flag", toolkit.Flag, nil)
}
func doGuiChan() {
@@ -39,7 +41,9 @@ func doGuiChan() {
log(true, "CHANNEL ACTION 2 !!!!!")
return
default:
+ log(true, "doGuiChan() nothing")
}
+ log(true, "doGuiChan() for()")
}
}
diff --git a/plugin.go b/plugin.go
index 3b558f5..72005ca 100644
--- a/plugin.go
+++ b/plugin.go
@@ -35,19 +35,6 @@ type aplug struct {
// simplifies passing to the plugin
Send func(*toolkit.Widget, *toolkit.Widget)
-
- NewButton func(*toolkit.Widget, *toolkit.Widget)
- NewGroup func(*toolkit.Widget, *toolkit.Widget)
- NewCheckbox func(*toolkit.Widget, *toolkit.Widget)
- NewTab func(*toolkit.Widget, *toolkit.Widget)
-
- NewDropdown func(*toolkit.Widget, *toolkit.Widget)
- AddDropdownName func(*toolkit.Widget, string)
- SetDropdownName func(*toolkit.Widget, string)
-
- SetDebugToolkit func(bool)
- SetDebugChange func(bool)
- ShowDebug func()
}
var allPlugins []*aplug
@@ -71,6 +58,7 @@ func LoadToolkit(name string) bool {
filename := name + ".so"
loadPlugin(&newPlug, filename)
if (newPlug.plug == nil) {
+ log(true, "attempt to find plugin", filename, "failed")
return false
}
// newPlug.Ok = true
@@ -92,19 +80,9 @@ func LoadToolkit(name string) bool {
// This includes instructions like "Add", "Delete", "Disable", etc
newPlug.Send = loadFunc2(&newPlug, "Send")
- // newPlug.NewGroup = loadFunc2(&newPlug, "NewGroup")
-
- newPlug.NewDropdown = loadFunc2(&newPlug, "NewDropdown")
- newPlug.AddDropdownName = loadFuncS(&newPlug, "AddDropdownName")
- newPlug.SetDropdownName = loadFuncS(&newPlug, "SetDropdownName")
-
- newPlug.SetDebugToolkit = loadFuncB(&newPlug, "SetDebugToolkit")
- newPlug.SetDebugChange = loadFuncB(&newPlug, "SetDebugChange")
- newPlug.ShowDebug = loadFuncE(&newPlug, "ShowDebug")
-
allPlugins = append(allPlugins, &newPlug)
- log(debugGui, "gui.LoadToolkit() END", newPlug.name, filename)
+ log(debugPlugin, "gui.LoadToolkit() END", newPlug.name, filename)
newPlug.Init()
newPlug.LoadOk = true
return true
@@ -131,63 +109,6 @@ func loadFuncE(p *aplug, funcName string) func() {
return newfunc
}
-func loadFunc1(p *aplug, funcName string) func(*toolkit.Widget) {
- var newfunc func(*toolkit.Widget)
- var ok bool
- var test plugin.Symbol
-
- test, err = p.plug.Lookup(funcName)
- if err != nil {
- log(debugGui, "DID NOT FIND: name =", test, "err =", err)
- return nil
- }
-
- newfunc, ok = test.(func(*toolkit.Widget))
- if !ok {
- log(debugGui, "function name =", funcName, "names didn't map correctly. Fix the plugin name =", p.name)
- return nil
- }
- return newfunc
-}
-
-func loadFuncS(p *aplug, funcName string) func(*toolkit.Widget, string) {
- var newfunc func(*toolkit.Widget, string)
- var ok bool
- var test plugin.Symbol
-
- test, err = p.plug.Lookup(funcName)
- if err != nil {
- log(debugGui, "DID NOT FIND: name =", test, "err =", err)
- return nil
- }
-
- newfunc, ok = test.(func(*toolkit.Widget, string))
- if !ok {
- log(debugGui, "function name =", funcName, "names didn't map correctly. Fix the plugin name =", p.name)
- return nil
- }
- return newfunc
-}
-
-func loadFuncB(p *aplug, funcName string) func(bool) {
- var newfunc func(bool)
- var ok bool
- var test plugin.Symbol
-
- test, err = p.plug.Lookup(funcName)
- if err != nil {
- log(debugGui, "DID NOT FIND: name =", test, "err =", err)
- return nil
- }
-
- newfunc, ok = test.(func(bool))
- if !ok {
- log(debugGui, "function name =", funcName, "names didn't map correctly. Fix the plugin name =", p.name)
- return nil
- }
- return newfunc
-}
-
func loadFunc2(p *aplug, funcName string) func(*toolkit.Widget, *toolkit.Widget) {
var newfunc func(*toolkit.Widget, *toolkit.Widget)
var ok bool
@@ -276,6 +197,7 @@ func loadfile(filename string) *plugin.Plugin {
return nil
}
log(debugGui, "plugin WORKED =", filename)
+ log(true, "loading plugin", filename, "worked")
return plug
}
diff --git a/structs.go b/structs.go
index b3589af..819464a 100644
--- a/structs.go
+++ b/structs.go
@@ -34,6 +34,9 @@ type GuiConfig struct {
// This is the master node. The Binary Tree starts here
master *Node
+ // A node off of master for passing debugging flags
+ flag *Node
+
// These are shortcuts to pass default values to make a new window
Title string
Width int
diff --git a/toolkit/andlabs/append.go b/toolkit/andlabs/append.go
new file mode 100644
index 0000000..811ffbc
--- /dev/null
+++ b/toolkit/andlabs/append.go
@@ -0,0 +1,103 @@
+package main
+
+import (
+ "git.wit.org/wit/gui/toolkit"
+
+ "github.com/andlabs/ui"
+ _ "github.com/andlabs/ui/winmanifest"
+)
+
+// make new Group here
+func (t *andlabsT) doAppend(newt *andlabsT, c *ui.Control) {
+
+ if (newt.tw != nil) {
+ if (newt.tw.Type == toolkit.Grid) {
+ log(true, "doAppend() going to attempt uiGrid")
+ // hack to add shit to a grid
+ button1 := ui.NewButton("a(0,2)")
+ newt.uiGrid.Append(button1,
+ 0, 2, 1, 1,
+ false, ui.AlignFill, false, ui.AlignFill)
+ button2 := ui.NewButton("a(1,2)")
+ newt.uiGrid.Append(button2,
+ 1, 2, 1, 1,
+ false, ui.AlignFill, false, ui.AlignFill)
+
+ if (t.uiBox != nil) {
+ log(true, "doAppend() on uiGrid to a uiBox")
+ if (newt.Name == "output") {
+ t.uiBox.Append(newt.uiGrid, true)
+ } else {
+ t.uiBox.Append(newt.uiGrid, stretchy)
+ }
+ return
+ }
+ log(true, "doAppend() on uiGrid failed")
+ return
+ }
+ } else {
+ log(true, "doAppend() newt.tw == nil ERROR on newt.Name =", newt.Name)
+ }
+
+ // hack to pass a group
+ if (c == nil) {
+ log(true, "attempting to doAppend() on a uiGroup")
+ if (t.uiBox != nil) {
+ if (newt.Name == "output") {
+ t.uiBox.Append(newt.uiGroup, true)
+ } else {
+ t.uiBox.Append(newt.uiGroup, stretchy)
+ }
+ return
+ }
+
+ if (t.uiWindow != nil) {
+ log(true, "This is a raw window without a box. probably make a box here and add the group to that")
+ t.Dump(true)
+ newt.Dump(true)
+ t.uiBox = ui.NewHorizontalBox()
+ t.uiWindow.SetChild(t.uiBox)
+ log(true, "tried to make a box", t.uiBox)
+ if (newt.Name == "output") {
+ log(true, "tried to t.uiBox.Append(*c, true)")
+ if (t.uiBox == nil) {
+ log(true, "tried to t.uiBox.Append(*c, true)")
+ }
+ t.uiBox.Append(newt.uiGroup, true)
+ } else {
+ log(true, "tried to t.uiBox.Append(*c, stretchy)")
+ t.uiBox.Append(newt.uiGroup, stretchy)
+ }
+ return
+ }
+
+ log(debugError, "NewGroup() node.UiBox == nil. I can't add a range UI element without a place to put it")
+ log(debugError, "probably could just make a box here?")
+ exit("internal wit/gui error")
+ }
+ if (t.uiBox != nil) {
+ // TODO: temporary hack to make the output textbox 'fullscreen'
+ if (newt.Name == "output") {
+ t.uiBox.Append(*c, true)
+ } else {
+ t.uiBox.Append(*c, stretchy)
+ }
+ return
+ }
+ if (t.uiWindow != nil) {
+ log(true, "This is a raw window without a box. probably make a box here and add the group to that")
+ t.uiBox = ui.NewHorizontalBox()
+ t.uiWindow.SetChild(t.uiBox)
+ log(true, "tried to make a box")
+ if (newt.Name == "output") {
+ t.uiBox.Append(*c, true)
+ } else {
+ t.uiBox.Append(*c, stretchy)
+ }
+ return
+ }
+
+ log(debugError, "NewGroup() node.UiBox == nil. I can't add a range UI element without a place to put it")
+ log(debugError, "probably could just make a box here?")
+ exit("internal wit/gui error")
+}
diff --git a/toolkit/andlabs/box.go b/toolkit/andlabs/box.go
index 430e78e..265d7c8 100644
--- a/toolkit/andlabs/box.go
+++ b/toolkit/andlabs/box.go
@@ -4,16 +4,16 @@ import "github.com/andlabs/ui"
import _ "github.com/andlabs/ui/winmanifest"
// create a new box
-func (t *andlabsT) GetBox() *ui.Box {
+func (t *andlabsT) getBox() *ui.Box {
return t.uiBox
}
// create a new box
-func (t *andlabsT) NewBox() *andlabsT {
- log(debugToolkit, "gui.Toolbox.NewBox() START create default")
+func (t *andlabsT) newBox() *andlabsT {
+ log(debugToolkit, "newBox() START create default")
t.Dump(debugToolkit)
if (t.uiGroup != nil) {
- log(debugToolkit, "\tgui.Toolbox.NewBox() is a Group")
+ log(debugToolkit, "\tnewBox() is a Group")
var newTK andlabsT
vbox := ui.NewVerticalBox()
@@ -24,7 +24,7 @@ func (t *andlabsT) NewBox() *andlabsT {
return &newTK
}
if (t.uiBox != nil) {
- log(debugToolkit, "\tgui.Toolbox.NewBox() is a Box")
+ log(debugToolkit, "\tnewBox() is a Box")
var newTK andlabsT
vbox := ui.NewVerticalBox()
@@ -36,7 +36,7 @@ func (t *andlabsT) NewBox() *andlabsT {
return &newTK
}
if (t.uiWindow != nil) {
- log(debugToolkit, "\tgui.Toolbox.NewBox() is a Window")
+ log(debugToolkit, "\tnewBox() is a Window")
var newT andlabsT
vbox := ui.NewVerticalBox()
@@ -48,7 +48,7 @@ func (t *andlabsT) NewBox() *andlabsT {
// panic("WTF")
return &newT
}
- log(debugToolkit, "\tgui.Toolbox.NewBox() FAILED. Couldn't figure out where to make a box")
+ log(debugToolkit, "\tnewBox() FAILED. Couldn't figure out where to make a box")
t.Dump(debugToolkit)
return nil
}
diff --git a/toolkit/andlabs/checkbox.go b/toolkit/andlabs/checkbox.go
index 29a8e4d..16e4eed 100644
--- a/toolkit/andlabs/checkbox.go
+++ b/toolkit/andlabs/checkbox.go
@@ -6,8 +6,8 @@ import (
_ "github.com/andlabs/ui/winmanifest"
)
-func (t andlabsT) NewCheckbox(w *toolkit.Widget) *andlabsT {
- log(debugToolkit, "NewCheckbox()", w.Name, w.Type)
+func (t *andlabsT) newCheckbox(w *toolkit.Widget) *andlabsT {
+ log(debugToolkit, "newCheckbox()", w.Name, w.Type)
var newt andlabsT
newt.tw = w
@@ -15,13 +15,13 @@ func (t andlabsT) NewCheckbox(w *toolkit.Widget) *andlabsT {
return nil
}
- c := ui.NewCheckbox(w.Name)
- newt.uiCheckbox = c
+ newt.uiCheckbox = ui.NewCheckbox(w.Name)
newt.uiBox = t.uiBox
- t.uiBox.Append(c, stretchy)
+ // t.doAppend(&newt, *newt.uiCheckbox)
+ t.uiBox.Append(newt.uiCheckbox, stretchy)
- c.OnToggled(func(spin *ui.Checkbox) {
- newt.tw.B = newt.Checked()
+ newt.uiCheckbox.OnToggled(func(spin *ui.Checkbox) {
+ newt.tw.B = newt.checked()
log(debugChange, "val =", newt.tw.B)
newt.commonChange(newt.tw)
})
@@ -29,7 +29,7 @@ func (t andlabsT) NewCheckbox(w *toolkit.Widget) *andlabsT {
return &newt
}
-func (t andlabsT) Checked() bool {
+func (t *andlabsT) checked() bool {
if t.broken() {
return false
}
@@ -37,15 +37,15 @@ func (t andlabsT) Checked() bool {
return t.uiCheckbox.Checked()
}
-func NewCheckbox(parentW *toolkit.Widget, w *toolkit.Widget) {
- log(debugToolkit, "NewCheckbox()", w.Name)
+func newCheckbox(parentW *toolkit.Widget, w *toolkit.Widget) {
+ log(debugToolkit, "newCheckbox()", w.Name)
t := mapToolkits[parentW]
if (t == nil) {
listMap(debugError)
return
}
- newt := t.NewCheckbox(w)
+ newt := t.newCheckbox(w)
mapWidgetsToolkits(w, newt)
}
@@ -54,7 +54,7 @@ func doCheckbox(p *toolkit.Widget, c *toolkit.Widget) {
return
}
if (c.Action == "New") {
- NewCheckbox(p, c)
+ newCheckbox(p, c)
return
}
ct := mapToolkits[c]
diff --git a/toolkit/andlabs/combobox.go b/toolkit/andlabs/combobox.go
new file mode 100644
index 0000000..08e7148
--- /dev/null
+++ b/toolkit/andlabs/combobox.go
@@ -0,0 +1,100 @@
+package main
+
+import (
+ "github.com/andlabs/ui"
+ _ "github.com/andlabs/ui/winmanifest"
+ "git.wit.org/wit/gui/toolkit"
+)
+
+func (t *andlabsT) newCombobox(w *toolkit.Widget) *andlabsT {
+ var newt andlabsT
+ log(debugToolkit, "newCombobox() START", w.Name)
+
+ if t.broken() {
+ return nil
+ }
+
+ newt.tw = w
+ s := ui.NewEditableCombobox()
+ newt.uiEditableCombobox = s
+ newt.uiBox = t.uiBox
+ t.uiBox.Append(s, stretchy)
+
+ // initialize the index
+ newt.c = 0
+ newt.val = make(map[int]string)
+
+ s.OnChanged(func(spin *ui.EditableCombobox) {
+ newt.tw.S = spin.Text()
+ newt.commonChange(newt.tw)
+ })
+
+ return &newt
+}
+
+func (t *andlabsT) AddComboboxName(title string) {
+ t.uiEditableCombobox.Append(title)
+ if (t.val == nil) {
+ log(debugToolkit, "make map didn't work")
+ return
+ }
+ t.val[t.c] = title
+
+ // If this is the first menu added, set the dropdown to it
+ // if (t.c == 0) {
+ // }
+ t.c = t.c + 1
+}
+
+func newCombobox(parentW *toolkit.Widget, w *toolkit.Widget) {
+ log(debugToolkit, "newCombobox()", w.Name)
+
+ t := mapToolkits[parentW]
+ if (t == nil) {
+ log(debugToolkit, "newCombobox() toolkit struct == nil. name=", parentW.Name, w.Name)
+ listMap(debugToolkit)
+ return
+ }
+ newt := t.newCombobox(w)
+ mapWidgetsToolkits(w, newt)
+}
+
+func doCombobox(p *toolkit.Widget, c *toolkit.Widget) {
+ if broken(c) {
+ return
+ }
+ if (c.Action == "New") {
+ newCombobox(p, c)
+ return
+ }
+ ct := mapToolkits[c]
+ if (ct == nil) {
+ log(true, "Trying to do something on a widget that doesn't work or doesn't exist or something", c)
+ return
+ }
+ if ct.broken() {
+ log(true, "Combobox() ct.broken", ct)
+ return
+ }
+ if (ct.uiEditableCombobox == nil) {
+ log(true, "Combobox() uiEditableCombobox == nil", ct)
+ return
+ }
+ log(true, "Going to attempt:", c.Action)
+ switch c.Action {
+ case "Add":
+ ct.AddComboboxName(c.S)
+ case "Enable":
+ ct.uiEditableCombobox.Enable()
+ case "Disable":
+ ct.uiEditableCombobox.Disable()
+ case "Show":
+ ct.uiEditableCombobox.Show()
+ case "Hide":
+ ct.uiEditableCombobox.Hide()
+ case "Set":
+ ct.uiEditableCombobox.SetText(c.S)
+ default:
+ log(true, "Can't do", c.Action, "to a Combobox")
+ }
+}
diff --git a/toolkit/andlabs/common.go b/toolkit/andlabs/common.go
index 31b73e6..d2811cb 100644
--- a/toolkit/andlabs/common.go
+++ b/toolkit/andlabs/common.go
@@ -2,6 +2,7 @@ package main
import (
"git.wit.org/wit/gui/toolkit"
+ "github.com/davecgh/go-spew/spew"
)
// This is important. This sets the defaults for the gui. Without this, there isn't correct padding, etc
@@ -11,7 +12,7 @@ func init() {
setDefaultBehavior(true)
}
-func (t andlabsT) commonChange(tw *toolkit.Widget) {
+func (t *andlabsT) commonChange(tw *toolkit.Widget) {
log(debugChange, "commonChange() START widget =", t.Name, t.Type)
if (tw == nil) {
log(true, "commonChange() What the fuck. there is no widget t.tw == nil")
@@ -35,7 +36,7 @@ func (t *andlabsT) broken() bool {
if (t.uiBox == nil) {
if (t.uiWindow != nil) {
log(debugToolkit, "UiBox == nil. This is an empty window. Try to add a box")
- t.NewBox()
+ t.newBox()
return false
}
log(true, "UiBox == nil. I can't add a widget without a place to put it")
@@ -60,3 +61,141 @@ func broken(w *toolkit.Widget) bool {
}
return false
}
+
+func dump(p *toolkit.Widget, c *toolkit.Widget, b bool) {
+ log(b, "Parent:")
+ pt := mapToolkits[p]
+ if (pt == nil) {
+ log(b, "Trying to do something on a widget that doesn't work or doesn't exist or something", c)
+ return
+ }
+ pt.Dump(b)
+
+ log(b, "Child:")
+ ct := mapToolkits[c]
+ if (ct == nil) {
+ log(b, "Trying to do something on a widget that doesn't work or doesn't exist or something", c)
+ return
+ }
+ ct.Dump(b)
+}
+
+func setMarginNew(w *toolkit.Widget, b bool) {
+ wt := mapToolkits[w]
+ log(true, "START setMarginNew", w.Name)
+ if (wt == nil) {
+ return
+ }
+ if (wt.uiGroup != nil) {
+ log(true, "uiGroup.SetMargined(true)")
+ wt.uiGroup.SetMargined(b)
+ }
+ if (wt.uiTab != nil) {
+ i := wt.uiTab.NumPages()
+ log(true, "tab.NumPages() =", i)
+ for i > 0 {
+ i -= 1
+ log(true, "uiTab.SetMargined(true) for i =", i)
+ wt.uiTab.SetMargined(i, b)
+ }
+ } else {
+ log(true, "no uitab")
+ }
+ if (wt.uiWindow != nil) {
+ log(true, "uiWindow.SetMargined(true)")
+ wt.uiWindow.SetMargined(b)
+ }
+ log(true, "END setMarginNew", w.Name)
+}
+
+func setMargin(p *toolkit.Widget, c *toolkit.Widget, b bool) {
+ log(true, "Starting to implement SetMargin here")
+ dump(p, c, true)
+
+ setMarginNew(c, b)
+ setMarginNew(p, b)
+}
+
+func (t *andlabsT) String() string {
+ return t.GetText()
+}
+
+func (t *andlabsT) GetText() string {
+ log(debugToolkit, "GetText() Enter debugToolkit=", debugToolkit)
+ if (t.uiEntry != nil) {
+ log(debugToolkit, "uiEntry.Text() =", t.uiEntry.Text())
+ return t.uiEntry.Text()
+ }
+ if (t.uiMultilineEntry != nil) {
+ log(debugToolkit, "uiMultilineEntry.Text() =", t.uiMultilineEntry.Text())
+ text := t.uiMultilineEntry.Text()
+ log(debugToolkit, "uiMultilineEntry.Text() =", text)
+ t.text = text
+ return text
+ }
+ if (t.uiCombobox != nil) {
+ log(debugToolkit, "uiCombobox() =", t.text)
+ return t.text
+ }
+ return ""
+}
+
+func (t *andlabsT) SetText(s string) bool {
+ log(debugToolkit, "Text() SetText() Enter")
+ if (t.uiEntry != nil) {
+ log(debugToolkit, "Value() =", t.uiEntry.Text)
+ t.uiEntry.SetText(s)
+ return true
+ }
+ if (t.uiMultilineEntry != nil) {
+ log(debugToolkit, "Value() =", t.uiMultilineEntry.Text)
+ t.uiMultilineEntry.SetText(s)
+ return true
+ }
+ return false
+}
+
+func sanity(t *andlabsT) bool {
+ if (debugToolkit) {
+ log(debugToolkit, "Value() Enter")
+ scs := spew.ConfigState{MaxDepth: 1}
+ scs.Dump(t)
+ }
+ if (t.uiEntry == nil) {
+ log(debugToolkit, "Value() =", t.uiEntry.Text)
+ return false
+ }
+ return true
+}
+
+func (t *andlabsT) SetValue(i int) bool {
+ log(debugToolkit, "SetValue() START")
+ if (sanity(t)) {
+ return false
+ }
+ t.Dump(debugToolkit)
+ // panic("got to toolkit.SetValue")
+ return true
+}
+
+func (t *andlabsT) Value() int {
+ if (debugToolkit) {
+ log(debugToolkit, "Value() Enter")
+ scs := spew.ConfigState{MaxDepth: 1}
+ scs.Dump(t)
+ }
+ if (t == nil) {
+ log(debugToolkit, "Value() can not get value t == nil")
+ return 0
+ }
+ if (t.uiSlider != nil) {
+ log(debugToolkit, "Value() =", t.uiSlider.Value)
+ return t.uiSlider.Value()
+ }
+ if (t.uiSpinbox != nil) {
+ log(debugToolkit, "Value() =", t.uiSpinbox.Value)
+ return t.uiSpinbox.Value()
+ }
+ log(debugToolkit, "Value() Could not find a ui element to get a value from")
+ return 0
+}
diff --git a/toolkit/andlabs/debug.go b/toolkit/andlabs/debug.go
index befbaa0..8b11f8c 100644
--- a/toolkit/andlabs/debug.go
+++ b/toolkit/andlabs/debug.go
@@ -2,7 +2,7 @@ package main
import "git.wit.org/wit/gui/toolkit"
-import "github.com/davecgh/go-spew/spew"
+// import "github.com/davecgh/go-spew/spew"
var defaultBehavior bool = true
@@ -16,6 +16,7 @@ var margin bool // add space around the frames of windows
var debugToolkit bool
var debugChange bool
var debugPlugin bool
+var debugFlag bool
var debugError bool = true
// var DebugToolkit bool
@@ -36,6 +37,7 @@ func setDefaultBehavior(s bool) {
}
}
+/*
func SetDebugToolkit (s bool) {
debugToolkit = s
log(true, "debugToolkit =", debugToolkit)
@@ -47,98 +49,12 @@ func SetDebugChange (s bool) {
log(true, "debugToolkit =", debugToolkit)
log(true, "debugChange =", debugChange)
}
+*/
func ShowDebug () {
log(true, "debugToolkit =", debugToolkit)
- log(true, "debugChange =", debugChange)
-}
-
-func GetDebugToolkit () bool {
- return debugToolkit
-}
-
-func (t *andlabsT) String() string {
- return t.GetText()
-}
-
-func (t *andlabsT) GetText() string {
- log(debugToolkit, "GetText() Enter debugToolkit=", debugToolkit)
- if (t.uiEntry != nil) {
- log(debugToolkit, "uiEntry.Text() =", t.uiEntry.Text())
- return t.uiEntry.Text()
- }
- if (t.uiMultilineEntry != nil) {
- log(debugToolkit, "uiMultilineEntry.Text() =", t.uiMultilineEntry.Text())
- text := t.uiMultilineEntry.Text()
- log(debugToolkit, "uiMultilineEntry.Text() =", text)
- t.text = text
- return text
- }
- if (t.uiCombobox != nil) {
- log(debugToolkit, "uiCombobox() =", t.text)
- return t.text
- }
- return ""
-}
-
-func (t *andlabsT) SetText(s string) bool {
- log(debugToolkit, "Text() SetText() Enter")
- if (t.uiEntry != nil) {
- log(debugToolkit, "Value() =", t.uiEntry.Text)
- t.uiEntry.SetText(s)
- return true
- }
- if (t.uiMultilineEntry != nil) {
- log(debugToolkit, "Value() =", t.uiMultilineEntry.Text)
- t.uiMultilineEntry.SetText(s)
- return true
- }
- return false
-}
-
-func sanity(t *andlabsT) bool {
- if (debugToolkit) {
- log(debugToolkit, "Value() Enter")
- scs := spew.ConfigState{MaxDepth: 1}
- scs.Dump(t)
- }
- if (t.uiEntry == nil) {
- log(debugToolkit, "Value() =", t.uiEntry.Text)
- return false
- }
- return true
-}
-
-func (t *andlabsT) SetValue(i int) bool {
- log(debugToolkit, "SetValue() START")
- if (sanity(t)) {
- return false
- }
- t.Dump(debugToolkit)
- // panic("got to toolkit.SetValue")
- return true
-}
-
-func (t *andlabsT) Value() int {
- if (debugToolkit) {
- log(debugToolkit, "Value() Enter")
- scs := spew.ConfigState{MaxDepth: 1}
- scs.Dump(t)
- }
- if (t == nil) {
- log(debugToolkit, "Value() can not get value t == nil")
- return 0
- }
- if (t.uiSlider != nil) {
- log(debugToolkit, "Value() =", t.uiSlider.Value)
- return t.uiSlider.Value()
- }
- if (t.uiSpinbox != nil) {
- log(debugToolkit, "Value() =", t.uiSpinbox.Value)
- return t.uiSpinbox.Value()
- }
- log(debugToolkit, "Value() Could not find a ui element to get a value from")
- return 0
+ log(true, "debugError =", debugError)
+ log(true, "debugChange =", debugChange)
}
func (t *andlabsT) Dump(b bool) {
@@ -196,3 +112,9 @@ func widgetDump(b bool, w *toolkit.Widget) {
log(b, "widget.X =", w.X)
log(b, "widget.Y =", w.Y)
}
+
+/*
+func GetDebugToolkit () bool {
+ return debugToolkit
+}
+*/
diff --git a/toolkit/andlabs/dropdown.go b/toolkit/andlabs/dropdown.go
index 935741c..57642e0 100644
--- a/toolkit/andlabs/dropdown.go
+++ b/toolkit/andlabs/dropdown.go
@@ -6,9 +6,9 @@ import (
"git.wit.org/wit/gui/toolkit"
)
-func (t *andlabsT) NewDropdown(w *toolkit.Widget) *andlabsT {
+func (t *andlabsT) newDropdown(w *toolkit.Widget) *andlabsT {
var newt andlabsT
- log(debugToolkit, "gui.Toolbox.NewDropdown() START", w.Name)
+ log(debugToolkit, "gui.Toolbox.newDropdown() START", w.Name)
if t.broken() {
return nil
@@ -53,23 +53,10 @@ func (t *andlabsT) AddDropdownName(title string) {
t.c = t.c + 1
}
-func (t andlabsT) SetDropdown(i int) {
+func (t *andlabsT) SetDropdown(i int) {
t.uiCombobox.SetSelected(i)
}
-func NewDropdown(parentW *toolkit.Widget, w *toolkit.Widget) {
- log(debugToolkit, "gui.andlabs.NewDropdown()", w.Name)
-
- t := mapToolkits[parentW]
- if (t == nil) {
- log(debugToolkit, "go.andlabs.NewDropdown() toolkit struct == nil. name=", parentW.Name, w.Name)
- listMap(debugToolkit)
- return
- }
- newt := t.NewDropdown(w)
- mapWidgetsToolkits(w, newt)
-}
-
func AddDropdownName(w *toolkit.Widget, s string) {
log(debugToolkit, "gui.andlabs.AddDropdownName()", w.Name, "add:", s)
@@ -94,3 +81,57 @@ func SetDropdownName(w *toolkit.Widget, s string) {
t.SetDropdown(1)
t.tw.S = s
}
+
+func newDropdown(parentW *toolkit.Widget, w *toolkit.Widget) {
+ log(debugToolkit, "gui.andlabs.newDropdown()", w.Name)
+
+ t := mapToolkits[parentW]
+ if (t == nil) {
+ log(debugToolkit, "go.andlabs.newDropdown() toolkit struct == nil. name=", parentW.Name, w.Name)
+ listMap(debugToolkit)
+ return
+ }
+ newt := t.newDropdown(w)
+ mapWidgetsToolkits(w, newt)
+}
+
+func doDropdown(p *toolkit.Widget, c *toolkit.Widget) {
+ if broken(c) {
+ return
+ }
+ if (c.Action == "New") {
+ newDropdown(p, c)
+ return
+ }
+ ct := mapToolkits[c]
+ if (ct == nil) {
+ log(true, "Trying to do something on a widget that doesn't work or doesn't exist or something", c)
+ return
+ }
+ if ct.broken() {
+ log(true, "Dropdown() ct.broken", ct)
+ return
+ }
+ if (ct.uiCombobox == nil) {
+ log(true, "Dropdown() uiCombobox == nil", ct)
+ return
+ }
+ log(true, "Going to attempt:", c.Action)
+ switch c.Action {
+ case "Add":
+ ct.AddDropdownName(c.S)
+ // ct.uiCombobox.Enable()
+ case "Enable":
+ ct.uiCombobox.Enable()
+ case "Disable":
+ ct.uiCombobox.Disable()
+ case "Show":
+ ct.uiCombobox.Show()
+ case "Hide":
+ ct.uiCombobox.Hide()
+ case "Set":
+ ct.uiCombobox.SetSelected(1)
+ default:
+ log(true, "Can't do", c.Action, "to a Dropdown")
+ }
+}
diff --git a/toolkit/andlabs/grid.go b/toolkit/andlabs/grid.go
new file mode 100644
index 0000000..8d09152
--- /dev/null
+++ b/toolkit/andlabs/grid.go
@@ -0,0 +1,102 @@
+package main
+
+import (
+ "github.com/andlabs/ui"
+ _ "github.com/andlabs/ui/winmanifest"
+
+ "git.wit.org/wit/gui/toolkit"
+)
+
+// Grid numbering by (X,Y)
+// -----------------------------
+// -- (1,1) -- (2,1) -- (3,1) --
+// -- (1,2) -- (2,1) -- (3,1) --
+// -----------------------------
+func newGrid(parentW *toolkit.Widget, w *toolkit.Widget) {
+ var newt *andlabsT
+ log(debugToolkit, "NewGrid()", w.Name)
+
+ t := mapToolkits[parentW]
+ if (t == nil) {
+ listMap(debugError)
+ log(debugError, "ERROR newGrid() listMap()")
+ log(debugError, "ERROR FFFFFFFFFFFF listMap()")
+ log(debugError, "ERROR FFFFFFFFFFFF listMap()")
+ return
+ }
+
+ log(debugToolkit, "NewGrid()", w.Name)
+ if t.broken() {
+ return
+ }
+
+ newt = new(andlabsT)
+
+ c := ui.NewGrid()
+ newt.uiGrid = c
+ newt.uiBox = t.uiBox
+ newt.tw = w
+ t.doAppend(newt, nil)
+ /*
+ if (defaultBehavior) {
+ t.uiBox.Append(c, stretchy)
+ }
+
+ button1 := ui.NewButton("a(0,0)")
+ c.Append(button1,
+ 0, 0, 1, 1,
+ false, ui.AlignFill, false, ui.AlignFill)
+
+ button2 := ui.NewButton("a(1,0)")
+ c.Append(button2,
+ 1, 0, 1, 1,
+ false, ui.AlignFill, false, ui.AlignFill)
+ */
+
+ // Append(child Control,
+ // left, top int,
+ // xspan, yspan int,
+ // hexpand bool, halign Align,
+ // vexpand bool, valign Align) {
+
+ mapWidgetsToolkits(w, newt)
+}
+
+func doGrid(p *toolkit.Widget, c *toolkit.Widget) {
+ if broken(c) {
+ return
+ }
+ if (c.Action == "New") {
+ newGrid(p, c)
+ return
+ }
+ ct := mapToolkits[c]
+ if (ct == nil) {
+ log(true, "Trying to do something on a widget that doesn't work or doesn't exist or something", c)
+ return
+ }
+ if ct.broken() {
+ log(true, "Grid() ct.broken", ct)
+ return
+ }
+ if (ct.uiGrid == nil) {
+
+ log(true, "Grid() uiGrid == nil", ct)
+ return
+ }
+ log(true, "Going to attempt:", c.Action)
+ switch c.Action {
+ case "Enable":
+ ct.uiGrid.Enable()
+ case "Disable":
+ ct.uiGrid.Disable()
+ case "Show":
+ ct.uiGrid.Show()
+ case "Hide":
+ ct.uiGrid.Hide()
+ case "Set":
+ log(true, "Can I use 'Set' to place a *Node in a Grid?")
+ default:
+ log(true, "Can't do", c.Action, "to a Grid")
+ }
+}
diff --git a/toolkit/andlabs/group.go b/toolkit/andlabs/group.go
index 613efb6..903cb4f 100644
--- a/toolkit/andlabs/group.go
+++ b/toolkit/andlabs/group.go
@@ -8,49 +8,62 @@ import (
)
func newGroup(parentW *toolkit.Widget, w *toolkit.Widget) {
- log(debugToolkit, "gui.andlabs.NewGroup()", w.Name)
+ // log(debugToolkit, "gui.andlabs.NewGroup()", w.Name)
+ log(true, "NewGroup()", w.Name)
t := mapToolkits[parentW]
if (t == nil) {
- log(debugToolkit, "go.andlabs.NewGroup() toolkit struct == nil. name=", parentW.Name, w.Name)
+ log(debugToolkit, "NewGroup() toolkit struct == nil. name=", parentW.Name, w.Name)
listMap(debugToolkit)
}
- newt := t.NewGroup(w.Name)
+ newt := t.rawGroup(w.Name)
mapWidgetsToolkits(w, newt)
}
// make new Group here
-func (t andlabsT) NewGroup(title string) *andlabsT {
+func (t *andlabsT) rawGroup(title string) *andlabsT {
var newt andlabsT
+ newt.Name = title
- log(debugToolkit, "NewGroup() create", title)
+ log(debugToolkit, "NewGroup() create", newt.Name)
- g := ui.NewGroup(title)
+ g := ui.NewGroup(newt.Name)
g.SetMargined(margin)
+ newt.uiGroup = g
+ t.doAppend(&newt, nil)
+ /*
if (t.uiBox != nil) {
// TODO: temporary hack to make the output textbox 'fullscreen'
- if (title == "output") {
+ if (newt.Name == "output") {
t.uiBox.Append(g, true)
} else {
t.uiBox.Append(g, stretchy)
}
} else if (t.uiWindow != nil) {
- t.uiWindow.SetChild(g)
+ log(true, "This is a raw window without a box. probably make a box here and add the group to that")
+ t.uiBox = ui.NewHorizontalBox()
+ t.uiWindow.SetChild(t.uiBox)
+ log(true, "tried to make a box")
+ if (newt.Name == "output") {
+ t.uiBox.Append(g, true)
+ } else {
+ t.uiBox.Append(g, stretchy)
+ }
} else {
log(debugError, "NewGroup() node.UiBox == nil. I can't add a range UI element without a place to put it")
log(debugError, "probably could just make a box here?")
exit("internal wit/gui error")
}
+ */
hbox := ui.NewVerticalBox()
hbox.SetPadded(padded)
g.SetChild(hbox)
- newt.uiGroup = g
newt.uiBox = hbox
newt.uiWindow = t.uiWindow
- newt.Name = title
+ newt.uiTab = t.uiTab
return &newt
}
diff --git a/toolkit/andlabs/icon.go b/toolkit/andlabs/icon.go
new file mode 100644
index 0000000..00c25f6
--- /dev/null
+++ b/toolkit/andlabs/icon.go
@@ -0,0 +1,27 @@
+package main
+
+var rawImage = []byte{
+ 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
+ 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10,
+ 0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0xf3, 0xff, 0x61, 0x00, 0x00, 0x00,
+ 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00,
+ 0x00, 0xca, 0x49, 0x44, 0x41, 0x54, 0x38, 0x11, 0xa5, 0x93, 0xb1, 0x0d,
+ 0xc2, 0x40, 0x0c, 0x45, 0x1d, 0xc4, 0x14, 0x0c, 0x12, 0x41, 0x0f, 0x62,
+ 0x12, 0x46, 0x80, 0x8a, 0x2e, 0x15, 0x30, 0x02, 0x93, 0x20, 0x68, 0x11,
+ 0x51, 0x06, 0x61, 0x0d, 0x88, 0x2d, 0x7f, 0xdb, 0x07, 0x87, 0x08, 0xdc,
+ 0x49, 0x91, 0x7d, 0xf6, 0xf7, 0xf3, 0x4f, 0xa4, 0x54, 0xbb, 0xeb, 0xf6,
+ 0x41, 0x05, 0x67, 0xcc, 0xb3, 0x9b, 0xfa, 0xf6, 0x17, 0x62, 0xdf, 0xcd,
+ 0x48, 0x00, 0x32, 0xbd, 0xa8, 0x1d, 0x72, 0xee, 0x3c, 0x47, 0x16, 0xfb,
+ 0x5c, 0x53, 0x8d, 0x03, 0x30, 0x14, 0x84, 0xf7, 0xd5, 0x89, 0x26, 0xc7,
+ 0x25, 0x10, 0x36, 0xe4, 0x05, 0xa2, 0x51, 0xbc, 0xc4, 0x1c, 0xc3, 0x1c,
+ 0xed, 0x30, 0x1c, 0x8f, 0x16, 0x3f, 0x02, 0x78, 0x33, 0x20, 0x06, 0x60,
+ 0x97, 0x70, 0xaa, 0x45, 0x7f, 0x85, 0x60, 0x5d, 0xb6, 0xf4, 0xc2, 0xc4,
+ 0x3e, 0x0f, 0x44, 0xcd, 0x1b, 0x20, 0x90, 0x0f, 0xed, 0x85, 0xa8, 0x55,
+ 0x05, 0x42, 0x43, 0xb4, 0x9e, 0xce, 0x71, 0xb3, 0xe8, 0x0e, 0xb4, 0xc4,
+ 0xc3, 0x39, 0x21, 0xb7, 0x73, 0xbd, 0xe4, 0x1b, 0xe4, 0x04, 0xb6, 0xaa,
+ 0x4f, 0x18, 0x2c, 0xee, 0x42, 0x31, 0x01, 0x84, 0xfa, 0xe0, 0xd4, 0x00,
+ 0xdf, 0xb6, 0x83, 0xf8, 0xea, 0xc2, 0x00, 0x10, 0xfc, 0x1a, 0x05, 0x30,
+ 0x74, 0x3b, 0xe0, 0xd1, 0x45, 0xb1, 0x83, 0xaa, 0xf4, 0x77, 0x7e, 0x02,
+ 0x87, 0x1f, 0x42, 0x7f, 0x9e, 0x2b, 0xe8, 0xdf, 0x00, 0x00, 0x00, 0x00,
+ 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
+}
diff --git a/toolkit/andlabs/label.go b/toolkit/andlabs/label.go
index 6bdd9b2..fca9abb 100644
--- a/toolkit/andlabs/label.go
+++ b/toolkit/andlabs/label.go
@@ -27,7 +27,7 @@ func newLabel(parentW *toolkit.Widget, w *toolkit.Widget) {
newt = new(andlabsT)
- c := ui.NewLabel(w.Name + " FIX")
+ c := ui.NewLabel(w.Name)
newt.uiLabel = c
newt.uiBox = t.uiBox
@@ -39,7 +39,6 @@ func newLabel(parentW *toolkit.Widget, w *toolkit.Widget) {
mapWidgetsToolkits(w, newt)
}
-
func doLabel(p *toolkit.Widget, c *toolkit.Widget) {
if broken(c) {
return
diff --git a/toolkit/andlabs/main.go b/toolkit/andlabs/main.go
index a72821a..20bbd8b 100644
--- a/toolkit/andlabs/main.go
+++ b/toolkit/andlabs/main.go
@@ -1,6 +1,7 @@
package main
import (
+ "embed"
"git.wit.org/wit/gui/toolkit"
"github.com/andlabs/ui"
@@ -8,6 +9,9 @@ import (
_ "github.com/andlabs/ui/winmanifest"
)
+//go:embed resources
+var res embed.FS
+
func Main(f func()) {
log(debugToolkit, "Starting gui.Main() (using gtk via andlabs/ui)")
ui.Main( func() {
@@ -33,9 +37,8 @@ func Main(f func()) {
//
func Queue(f func()) {
log(debugToolkit, "Sending function to ui.QueueMain()")
- log(true, "THIS DOES BREAK. TODO: wrap this")
+ log(true, "using gui.Queue() in this plugin DOES BREAK. TODO: wrap this")
ui.QueueMain(f)
- // f()
}
func Init() {
diff --git a/toolkit/andlabs/plugin.go b/toolkit/andlabs/plugin.go
index 5bc40a0..8b75766 100644
--- a/toolkit/andlabs/plugin.go
+++ b/toolkit/andlabs/plugin.go
@@ -26,6 +26,12 @@ func Send(p *toolkit.Widget, c *toolkit.Widget) {
}
log(debugPlugin, "Send() child =", c.Name, ",", c.Action, ",", c.Type)
+ if (c.Action == "SetMargin") {
+ log(true, "need to implement SetMargin here")
+ setMargin(p, c, c.B)
+ return
+ }
+
switch c.Type {
case toolkit.Window:
newWindow(c)
@@ -45,10 +51,36 @@ func Send(p *toolkit.Widget, c *toolkit.Widget) {
newSlider(p, c)
case toolkit.Spinner:
newSpinner(p, c)
+ case toolkit.Dropdown:
+ doDropdown(p, c)
+ case toolkit.Combobox:
+ doCombobox(p, c)
+ case toolkit.Grid:
+ doGrid(p, c)
+ case toolkit.Flag:
+ log(debugFlag, "plugin Send() flag parent =", p.Name, p.Type)
+ log(debugFlag, "plugin Send() flag child =", c.Name, c.Type)
+ log(debugFlag, "plugin Send() flag child.Action =", c.Action)
+ log(debugFlag, "plugin Send() flag child.S =", c.S)
+ log(debugFlag, "plugin Send() flag child.B =", c.B)
+ log(debugFlag, "plugin Send() what to flag?")
+ // should set the checkbox to this value
+ switch c.S {
+ case "Error":
+ debugError = c.B
+ case "Toolkit":
+ debugToolkit = c.B
+ case "Change":
+ debugChange = c.B
+ case "Show":
+ ShowDebug()
+ default:
+ log(debugError, "Can't set unknown flag", c.S)
+ }
default:
- log(true, "unknown parent =", p.Name, p.Type)
- log(true, "unknown child =", c.Name, c.Type)
- log(true, "Don't know how to do", c.Type, "yet")
+ log(true, "plugin Send() unknown parent =", p.Name, p.Type)
+ log(true, "plugin Send() unknown child =", c.Name, c.Type)
+ log(true, "plugin Send() Don't know how to do", c.Type, "yet")
}
}
diff --git a/toolkit/andlabs/resources/ping6.broken.png b/toolkit/andlabs/resources/ping6.broken.png
new file mode 100644
index 0000000..9a3e2ae
--- /dev/null
+++ b/toolkit/andlabs/resources/ping6.broken.png
Binary files differ
diff --git a/toolkit/andlabs/resources/ping6.pure-bright.png b/toolkit/andlabs/resources/ping6.pure-bright.png
new file mode 100644
index 0000000..82c554d
--- /dev/null
+++ b/toolkit/andlabs/resources/ping6.pure-bright.png
Binary files differ
diff --git a/toolkit/andlabs/resources/ping6.pure.png b/toolkit/andlabs/resources/ping6.pure.png
new file mode 100644
index 0000000..9e08140
--- /dev/null
+++ b/toolkit/andlabs/resources/ping6.pure.png
Binary files differ
diff --git a/toolkit/andlabs/resources/ping6.working.png b/toolkit/andlabs/resources/ping6.working.png
new file mode 100644
index 0000000..6767c59
--- /dev/null
+++ b/toolkit/andlabs/resources/ping6.working.png
Binary files differ
diff --git a/toolkit/andlabs/slider.go b/toolkit/andlabs/slider.go
index 87639ca..f75947a 100644
--- a/toolkit/andlabs/slider.go
+++ b/toolkit/andlabs/slider.go
@@ -7,7 +7,7 @@ import (
_ "github.com/andlabs/ui/winmanifest"
)
-func (t andlabsT) newSlider(w *toolkit.Widget) *andlabsT {
+func (t *andlabsT) newSlider(w *toolkit.Widget) *andlabsT {
// make new node here
log(debugToolkit, w.Name, w.Type, w.X, w.Y)
var newt andlabsT
@@ -26,6 +26,7 @@ func (t andlabsT) newSlider(w *toolkit.Widget) *andlabsT {
t.uiBox.Append(s, stretchy)
s.OnChanged(func(spin *ui.Slider) {
+ newt.tw.I = newt.uiSlider.Value()
newt.commonChange(newt.tw)
})
diff --git a/toolkit/andlabs/spinner.go b/toolkit/andlabs/spinner.go
index 1a7430e..2ee556c 100644
--- a/toolkit/andlabs/spinner.go
+++ b/toolkit/andlabs/spinner.go
@@ -7,7 +7,7 @@ import (
_ "github.com/andlabs/ui/winmanifest"
)
-func (t andlabsT) newSpinner(w *toolkit.Widget) *andlabsT {
+func (t *andlabsT) newSpinner(w *toolkit.Widget) *andlabsT {
// make new node here
log(debugToolkit, "newSpinner()", w.X, w.Y)
var newt andlabsT
@@ -24,6 +24,7 @@ func (t andlabsT) newSpinner(w *toolkit.Widget) *andlabsT {
t.uiBox.Append(s, stretchy)
s.OnChanged(func(s *ui.Spinbox) {
+ newt.tw.I = newt.uiSpinbox.Value()
newt.commonChange(newt.tw)
})
diff --git a/toolkit/andlabs/structs.go b/toolkit/andlabs/structs.go
index 45b6d1d..3353401 100644
--- a/toolkit/andlabs/structs.go
+++ b/toolkit/andlabs/structs.go
@@ -28,9 +28,9 @@ type andlabsT struct {
uiSpinbox *ui.Spinbox
uiTab *ui.Tab
uiWindow *ui.Window
- // UiWindowBad *ui.Window // erase this
uiMultilineEntry *ui.MultilineEntry
uiEditableCombobox *ui.EditableCombobox
+ uiGrid *ui.Grid
// used as a counter to work around limitations of widgets like combobox
// this is probably fucked up and in many ways wrong because of unsafe goroutine threading
diff --git a/toolkit/andlabs/tab.go b/toolkit/andlabs/tab.go
index 995bbbd..aaac102 100644
--- a/toolkit/andlabs/tab.go
+++ b/toolkit/andlabs/tab.go
@@ -63,7 +63,7 @@ func tabSetMargined(tab *ui.Tab) {
}
func rawTab(w *ui.Window, name string) *andlabsT {
- var t andlabsT
+ var newt andlabsT
log(debugToolkit, "gui.toolkit.NewTab() ADD", name)
if (w == nil) {
@@ -83,10 +83,10 @@ func rawTab(w *ui.Window, name string) *andlabsT {
tabSetMargined(tab) // TODO: run this in the right place(?)
w.SetChild(tab)
- t.uiWindow = w
- t.uiTab = tab
- t.uiBox = hbox
- return &t
+ newt.uiWindow = w
+ newt.uiTab = tab
+ newt.uiBox = hbox
+ return &newt
}
func (t *andlabsT) appendTab(name string) *andlabsT {
diff --git a/toolkit/andlabs/textbox.go b/toolkit/andlabs/textbox.go
index e916fd9..ddc27a4 100644
--- a/toolkit/andlabs/textbox.go
+++ b/toolkit/andlabs/textbox.go
@@ -1,9 +1,11 @@
package main
-import "git.wit.org/wit/gui/toolkit"
+import (
+ "git.wit.org/wit/gui/toolkit"
-import "github.com/andlabs/ui"
-import _ "github.com/andlabs/ui/winmanifest"
+ "github.com/andlabs/ui"
+ _ "github.com/andlabs/ui/winmanifest"
+)
func newTextbox(parentW *toolkit.Widget, w *toolkit.Widget) {
log(debugToolkit, "NewTexbox()", w.Name)
@@ -15,8 +17,9 @@ func newTextbox(parentW *toolkit.Widget, w *toolkit.Widget) {
log(debugError, "FFFFFFFFFFFF listMap()")
log(debugError, "FFFFFFFFFFFF listMap()")
}
+
// t.NewTextbox(w)
-// func (t andlabsT) NewTextbox(w *toolkit.Widget) *andlabsT {
+// func (t *andlabsT) NewTextbox(w *toolkit.Widget) *andlabsT {
var newt *andlabsT
newt = new(andlabsT)
@@ -37,6 +40,41 @@ func newTextbox(parentW *toolkit.Widget, w *toolkit.Widget) {
t.uiBox.Append(c, stretchy)
}
+ /*
+ // don't bother with "images" on andlabs/ui
+ "image"
+ "bytes"
+ _ "image/png"
+ "image/draw"
+
+ if (w.Name == "image") {
+ log(true, "NewTextbox() trying to add a new image")
+ i := ui.NewImage(16, 16)
+ img, _, err := image.Decode(bytes.NewReader(rawImage))
+ if err != nil {
+ panic(err)
+ }
+ nr, ok := img.(*image.RGBA)
+ if !ok {
+ i2 := image.NewRGBA(img.Bounds())
+ draw.Draw(i2, i2.Bounds(), img, img.Bounds().Min, draw.Src)
+ nr = i2
+ }
+ i.Append(nr)
+ t.uiBox.Append(i, true)
+
+ var img *ui.Image
+ var icon []byte
+ var imgA image.Image
+
+ icon, _ = res.ReadFile("resources/ping6.working.png")
+ // imgA, _, err := image.Decode(bytes.NewReader(b))
+ imgA, _, _ = image.Decode(icon)
+ img.Append(imgA)
+ img.Append(icon)
+ }
+ */
+
c.OnChanged(func(spin *ui.MultilineEntry) {
w.S = newt.uiMultilineEntry.Text()
// this is still dangerous
@@ -81,9 +119,21 @@ func (t *andlabsT) doSimpleAction() {
log(debugChange, "Going to attempt:", t.tw.Action)
switch t.tw.Action {
case "Enable":
- t.uiMultilineEntry.Enable()
+ if (t.uiEntry != nil) {
+ t.uiEntry.Enable()
+ } else if (t.uiMultilineEntry != nil) {
+ t.uiMultilineEntry.Enable()
+ } else {
+ log(true, "don't know what to enable", t.Name)
+ }
case "Disable":
- t.uiMultilineEntry.Disable()
+ if (t.uiEntry != nil) {
+ t.uiEntry.Disable()
+ } else if (t.uiMultilineEntry != nil) {
+ t.uiMultilineEntry.Disable()
+ } else {
+ log(true, "don't know what to disable", t.Name)
+ }
case "Show":
t.uiMultilineEntry.Show()
case "Hide":
diff --git a/toolkit/widget.go b/toolkit/widget.go
index fcb6d31..9241d5a 100644
--- a/toolkit/widget.go
+++ b/toolkit/widget.go
@@ -56,10 +56,13 @@ const (
Button
Checkbox
Dropdown
+ Combobox
Label
Textbox
Slider
Spinner
+ Grid
+ Flag
)
func (s WidgetType) String() string {
@@ -78,6 +81,8 @@ func (s WidgetType) String() string {
return "Checkbox"
case Dropdown:
return "Dropdown"
+ case Combobox:
+ return "Combobox"
case Label:
return "Label"
case Textbox:
@@ -86,6 +91,10 @@ func (s WidgetType) String() string {
return "Slider"
case Spinner:
return "Spinner"
+ case Grid:
+ return "Grid"
+ case Flag:
+ return "Flag"
case Unknown:
return "Unknown"
}