summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2023-03-03 14:41:38 -0600
committerJeff Carr <[email protected]>2023-03-03 14:41:38 -0600
commit49202eeafdad8e5780fefdad3d2f87fd4354725e (patch)
tree5d749b5d4835c7a0395bd1f87b5d2d1d91b14a08
parent80317ec89c94beadcbf3775f84c6010b5ceef302 (diff)
release as v0.6.5v0.6.5
good standard release really clean interaction to plugin really clean debug flags implementation common doAppend() idea, but it probably won't work re-implement combobox. this code base almost doesn't suck slider & spinner set values now tab set margin works convert dropdown to Send() lots of other changes to try to implement single line Entry() I guess use golang file names even though internalally the go developers use underscore chars in the actual go sources. Maybe there is a reason for that? go channel debug window does something make a debug window for channels. add sample icons Signed-off-by: Jeff Carr <[email protected]>
-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"
}