setup building without plugins on windows
notes from github remote keep removing os.Exit() rename from andlabs2 back to andlabs rename files for windows andlabs/ui gocui always sets STDOUT a file in /tmp/ Signed-off-by: Jeff Carr <jcarr@wit.com>
This commit is contained in:
parent
8221522ba8
commit
4242393152
11
Makefile
11
Makefile
|
@ -31,9 +31,12 @@ cmds-textbox:
|
||||||
make -C cmds/textbox
|
make -C cmds/textbox
|
||||||
|
|
||||||
# sync repo to the github backup
|
# sync repo to the github backup
|
||||||
|
# git remote add github git@github.com:witorg/gui.git
|
||||||
github:
|
github:
|
||||||
git push origin master
|
git push origin master
|
||||||
git push github master
|
git push github master
|
||||||
|
git push github devel
|
||||||
|
git push github jcarr
|
||||||
@echo
|
@echo
|
||||||
@echo check https://github.com/witorg/gui
|
@echo check https://github.com/witorg/gui
|
||||||
@echo
|
@echo
|
||||||
|
@ -49,14 +52,14 @@ README.md: doc.go
|
||||||
clean:
|
clean:
|
||||||
rm -f toolkit/*.so
|
rm -f toolkit/*.so
|
||||||
|
|
||||||
plugins: plugins-gocui plugins-andlabs2
|
plugins: plugins-gocui plugins-andlabs
|
||||||
|
|
||||||
plugins-gocui:
|
plugins-gocui:
|
||||||
make -C toolkit/gocui
|
make -C toolkit/gocui
|
||||||
|
|
||||||
plugins-andlabs2:
|
plugins-andlabs:
|
||||||
cd toolkit/andlabs2/ && GO111MODULE="off" go build -buildmode=plugin -o ../andlabs2.so
|
cd toolkit/andlabs/ && GO111MODULE="off" go build -buildmode=plugin -o ../andlabs.so
|
||||||
# make -C toolkit/andlabs2
|
# make -C toolkit/andlabs
|
||||||
|
|
||||||
objdump:
|
objdump:
|
||||||
objdump -t toolkit/andlabs.so |less
|
objdump -t toolkit/andlabs.so |less
|
||||||
|
|
|
@ -128,11 +128,11 @@ Creates a window helpful for debugging this package
|
||||||
|
|
||||||
This creates a window that shows how this package works
|
This creates a window that shows how this package works
|
||||||
|
|
||||||
### func [GetDebug](/structs.go#L25)
|
### func [GetDebug](/structs.go#L23)
|
||||||
|
|
||||||
`func GetDebug() bool`
|
`func GetDebug() bool`
|
||||||
|
|
||||||
### func [GetDebugToolkit](/structs.go#L37)
|
### func [GetDebugToolkit](/structs.go#L34)
|
||||||
|
|
||||||
`func GetDebugToolkit() bool`
|
`func GetDebugToolkit() bool`
|
||||||
|
|
||||||
|
@ -140,7 +140,7 @@ This creates a window that shows how this package works
|
||||||
|
|
||||||
`func GolangDebugWindow()`
|
`func GolangDebugWindow()`
|
||||||
|
|
||||||
### func [IndentPrintln](/structs.go#L188)
|
### func [IndentPrintln](/structs.go#L159)
|
||||||
|
|
||||||
`func IndentPrintln(a ...interface{})`
|
`func IndentPrintln(a ...interface{})`
|
||||||
|
|
||||||
|
@ -160,15 +160,26 @@ loads and initializes a toolkit (andlabs/ui, gocui, etc)
|
||||||
|
|
||||||
This should not pass a function
|
This should not pass a function
|
||||||
|
|
||||||
### func [SetDebug](/structs.go#L29)
|
### func [Queue](/main.go#L115)
|
||||||
|
|
||||||
|
`func Queue(f func())`
|
||||||
|
|
||||||
|
Other goroutines must use this to access the GUI
|
||||||
|
|
||||||
|
You can not acess / process the GUI thread directly from
|
||||||
|
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](/structs.go#L27)
|
||||||
|
|
||||||
`func SetDebug(s bool)`
|
`func SetDebug(s bool)`
|
||||||
|
|
||||||
### func [SetDebugToolkit](/structs.go#L41)
|
### func [SetDebugToolkit](/structs.go#L38)
|
||||||
|
|
||||||
`func SetDebugToolkit(s bool)`
|
`func SetDebugToolkit(s bool)`
|
||||||
|
|
||||||
### func [ShowDebugValues](/structs.go#L45)
|
### func [ShowDebugValues](/structs.go#L42)
|
||||||
|
|
||||||
`func ShowDebugValues()`
|
`func ShowDebugValues()`
|
||||||
|
|
||||||
|
@ -195,7 +206,7 @@ This goroutine can be used like a watchdog timer
|
||||||
|
|
||||||
## Types
|
## Types
|
||||||
|
|
||||||
### type [GuiConfig](/structs.go#L68)
|
### type [GuiConfig](/structs.go#L65)
|
||||||
|
|
||||||
`type GuiConfig struct { ... }`
|
`type GuiConfig struct { ... }`
|
||||||
|
|
||||||
|
@ -205,13 +216,13 @@ This goroutine can be used like a watchdog timer
|
||||||
var Config GuiConfig
|
var Config GuiConfig
|
||||||
```
|
```
|
||||||
|
|
||||||
### type [GuiDebug](/structs.go#L56)
|
### type [GuiDebug](/structs.go#L53)
|
||||||
|
|
||||||
`type GuiDebug struct { ... }`
|
`type GuiDebug struct { ... }`
|
||||||
|
|
||||||
This struct can be used with go-arg
|
This struct can be used with go-arg
|
||||||
|
|
||||||
### type [Node](/structs.go#L87)
|
### type [Node](/structs.go#L84)
|
||||||
|
|
||||||
`type Node struct { ... }`
|
`type Node struct { ... }`
|
||||||
|
|
||||||
|
|
|
@ -207,8 +207,6 @@ my guess).
|
||||||
|
|
||||||
## Sub Packages
|
## Sub Packages
|
||||||
|
|
||||||
* [need-to-redo](./need-to-redo)
|
|
||||||
|
|
||||||
* [toolkit](./toolkit)
|
* [toolkit](./toolkit)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
// +build windows
|
||||||
|
|
||||||
|
/*
|
||||||
|
this is a direct compile version of andlabs/ui for windows since
|
||||||
|
golang on windows does not yet support plugins
|
||||||
|
*/
|
||||||
|
package gui
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log"
|
||||||
|
|
||||||
|
"git.wit.org/wit/gui/toolkit/andlabs-direct"
|
||||||
|
)
|
||||||
|
|
||||||
|
func trythis() {
|
||||||
|
log.Println("not sure what to try")
|
||||||
|
toolkit.DebugToolkit = true
|
||||||
|
}
|
|
@ -77,8 +77,8 @@ func buttonWindow() {
|
||||||
log.Println("world")
|
log.Println("world")
|
||||||
})
|
})
|
||||||
|
|
||||||
g.NewButton("LoadToolkit(andlabs2)", func () {
|
g.NewButton("LoadToolkit(andlabs)", func () {
|
||||||
gui.LoadToolkit("andlabs2")
|
gui.LoadToolkit("andlabs")
|
||||||
})
|
})
|
||||||
|
|
||||||
g.NewButton("LoadToolkit(gocui)", func () {
|
g.NewButton("LoadToolkit(gocui)", func () {
|
||||||
|
|
|
@ -24,7 +24,7 @@ isAlpha := regexp.MustCompile(`^[A-Za-z]+$`).MatchString
|
||||||
|
|
||||||
for _, username := range []string{"userone", "user2", "user-three"} {
|
for _, username := range []string{"userone", "user2", "user-three"} {
|
||||||
if !isAlpha(username) {
|
if !isAlpha(username) {
|
||||||
fmt.Printf("%q is not valid\n", username)
|
log.Printf("%q is not valid\n", username)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
20
group.go
20
group.go
|
@ -2,24 +2,15 @@ package gui
|
||||||
|
|
||||||
import "log"
|
import "log"
|
||||||
|
|
||||||
// import toolkit "git.wit.org/wit/gui/toolkit/andlabs"
|
|
||||||
// import newtoolkit "git.wit.org/wit/gui/toolkit"
|
|
||||||
|
|
||||||
// TODO: which name is better. AddGroup or NewGroup ?
|
// TODO: which name is better. AddGroup or NewGroup ?
|
||||||
// first reaction is NewGroup
|
// first reaction is NewGroup
|
||||||
func (n *Node) NewGroup(name string) *Node {
|
func (n *Node) NewGroup(name string) *Node {
|
||||||
// var newT *toolkit.Toolkit
|
|
||||||
var newNode *Node
|
var newNode *Node
|
||||||
|
|
||||||
if (GetDebug()) {
|
if (GetDebug()) {
|
||||||
log.Println("toolkit.NewGroup() START", name)
|
log.Println("toolkit.NewGroup() START", name)
|
||||||
}
|
}
|
||||||
|
|
||||||
// if (n.toolkit == nil) {
|
|
||||||
// log.Println("toolkit.NewGroup() toolkit == nil")
|
|
||||||
// panic("toolkit should never be nil")
|
|
||||||
// }
|
|
||||||
|
|
||||||
newNode = n.New(name)
|
newNode = n.New(name)
|
||||||
|
|
||||||
log.Println("gui.Node.NewGroup()", name)
|
log.Println("gui.Node.NewGroup()", name)
|
||||||
|
@ -31,16 +22,5 @@ func (n *Node) NewGroup(name string) *Node {
|
||||||
aplug.NewGroup(&n.Widget, &newNode.Widget)
|
aplug.NewGroup(&n.Widget, &newNode.Widget)
|
||||||
}
|
}
|
||||||
|
|
||||||
// make a *Node with a *toolkit.Group
|
|
||||||
// newT = n.toolkit.NewGroup(name)
|
|
||||||
// newNode.toolkit = newT
|
|
||||||
// newNode.Dump()
|
|
||||||
|
|
||||||
return newNode
|
return newNode
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
func (n *Node) AddGroup(title string) *Node {
|
|
||||||
return n.NewGroup(title + " deprecated AddGroup")
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
6
main.go
6
main.go
|
@ -52,12 +52,12 @@ func Init() {
|
||||||
// the program didn't specify a plugin. Try to load one
|
// the program didn't specify a plugin. Try to load one
|
||||||
// TODO: detect the OS & user preferences to load the best one
|
// TODO: detect the OS & user preferences to load the best one
|
||||||
if (initBAD) {
|
if (initBAD) {
|
||||||
if (LoadToolkit("andlabs2")) {
|
if (LoadToolkit("andlabs")) {
|
||||||
initBAD = false
|
initBAD = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// andlabs2 gui failed. fall back to the terminal gui (should be compiled into the binary)
|
// andlabs gui plugin failed. fall back to the terminal gui (should be compiled into the binary)
|
||||||
if (initBAD) {
|
if (initBAD) {
|
||||||
if (LoadToolkit("gocui")) {
|
if (LoadToolkit("gocui")) {
|
||||||
initBAD = false
|
initBAD = false
|
||||||
|
@ -112,7 +112,7 @@ func Main(f func()) {
|
||||||
// other goroutines. This is due to the nature of how
|
// other goroutines. This is due to the nature of how
|
||||||
// Linux, MacOS and Windows work (they all work differently. suprise. surprise.)
|
// Linux, MacOS and Windows work (they all work differently. suprise. surprise.)
|
||||||
// For example: gui.Queue(NewWindow())
|
// For example: gui.Queue(NewWindow())
|
||||||
func queue(f func()) {
|
func Queue(f func()) {
|
||||||
log.Println("Sending function to gui.Main() (using gtk via andlabs/ui)")
|
log.Println("Sending function to gui.Main() (using gtk via andlabs/ui)")
|
||||||
// toolkit.Queue(f)
|
// toolkit.Queue(f)
|
||||||
for _, aplug := range allPlugins {
|
for _, aplug := range allPlugins {
|
||||||
|
|
36
structs.go
36
structs.go
|
@ -3,11 +3,9 @@ package gui
|
||||||
import (
|
import (
|
||||||
"log"
|
"log"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
"git.wit.org/wit/gui/toolkit"
|
||||||
)
|
)
|
||||||
|
|
||||||
// import toolkit "git.wit.org/wit/gui/toolkit/andlabs"
|
|
||||||
import newtoolkit "git.wit.org/wit/gui/toolkit"
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// All GUI Data Structures and functions that are external
|
// All GUI Data Structures and functions that are external
|
||||||
// within the toolkit/ abstraction layer
|
// within the toolkit/ abstraction layer
|
||||||
|
@ -31,7 +29,6 @@ func SetDebug (s bool) {
|
||||||
// also set these
|
// also set these
|
||||||
Config.Debug.Dump = s
|
Config.Debug.Dump = s
|
||||||
Config.Debug.Node = s
|
Config.Debug.Node = s
|
||||||
// toolkit.DebugToolkit = s
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetDebugToolkit () bool {
|
func GetDebugToolkit () bool {
|
||||||
|
@ -92,7 +89,7 @@ type Node struct {
|
||||||
Width int
|
Width int
|
||||||
Height int
|
Height int
|
||||||
|
|
||||||
Widget newtoolkit.Widget
|
Widget toolkit.Widget
|
||||||
|
|
||||||
// this function is run when there are mouse or keyboard events
|
// this function is run when there are mouse or keyboard events
|
||||||
OnChanged func(*Node)
|
OnChanged func(*Node)
|
||||||
|
@ -101,9 +98,6 @@ type Node struct {
|
||||||
// TODO: make children a double linked list since some toolkits require order (?)
|
// TODO: make children a double linked list since some toolkits require order (?)
|
||||||
children []*Node
|
children []*Node
|
||||||
|
|
||||||
// hmm. how do you handle this when the toolkits are plugins?
|
|
||||||
// toolkit *toolkit.Toolkit
|
|
||||||
|
|
||||||
// things that may not really be needed (?)
|
// things that may not really be needed (?)
|
||||||
custom func()
|
custom func()
|
||||||
checked bool
|
checked bool
|
||||||
|
@ -144,26 +138,9 @@ func (n *Node) Dump() {
|
||||||
IndentPrintln("OnChanged = ", n.OnChanged)
|
IndentPrintln("OnChanged = ", n.OnChanged)
|
||||||
}
|
}
|
||||||
IndentPrintln("text = ", reflect.ValueOf(n.text).Kind(), n.text)
|
IndentPrintln("text = ", reflect.ValueOf(n.text).Kind(), n.text)
|
||||||
// if (n.toolkit != nil) {
|
|
||||||
// IndentPrintln("toolkit = ", reflect.ValueOf(n.toolkit).Kind())
|
|
||||||
// n.toolkit.Dump()
|
|
||||||
// }
|
|
||||||
// if (n.id == nil) {
|
|
||||||
// // Node structs should never have a nil id.
|
|
||||||
// // I probably shouldn't panic here, but this is just to check the sanity of
|
|
||||||
// // the gui package to make sure it's not exiting
|
|
||||||
// panic("gui.Node.Dump() id == nil TODO: make a unigue id here in the golang gui library")
|
|
||||||
// }
|
|
||||||
IndentPrintln("NODE DUMP END")
|
IndentPrintln("NODE DUMP END")
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
func (n *Node) SetName(name string) {
|
|
||||||
n.toolkit.SetWindowTitle(name)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
func (n *Node) Append(child *Node) {
|
func (n *Node) Append(child *Node) {
|
||||||
n.children = append(n.children, child)
|
n.children = append(n.children, child)
|
||||||
if (Config.Debug.Debug) {
|
if (Config.Debug.Debug) {
|
||||||
|
@ -175,12 +152,6 @@ func (n *Node) Append(child *Node) {
|
||||||
// time.Sleep(3 * time.Second)
|
// time.Sleep(3 * time.Second)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
func (n *Node) List() {
|
|
||||||
findByIdDFS(n, "test")
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
var listChildrenParent *Node
|
var listChildrenParent *Node
|
||||||
var listChildrenDepth int = 0
|
var listChildrenDepth int = 0
|
||||||
var defaultPadding = " "
|
var defaultPadding = " "
|
||||||
|
@ -217,8 +188,7 @@ func (n *Node) ListChildren(dump bool) {
|
||||||
log.Println("\t\t\tlistChildrenParent =",listChildrenParent.id)
|
log.Println("\t\t\tlistChildrenParent =",listChildrenParent.id)
|
||||||
}
|
}
|
||||||
if (listChildrenParent.id != n.parent.id) {
|
if (listChildrenParent.id != n.parent.id) {
|
||||||
log.Println("parent.child does not match child.parent")
|
log.Fatalln("parent.child does not match child.parent")
|
||||||
panic("parent.child does not match child.parent")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package main
|
package toolkit
|
||||||
|
|
||||||
import "log"
|
import "log"
|
||||||
|
|
||||||
|
@ -6,12 +6,12 @@ import "github.com/andlabs/ui"
|
||||||
import _ "github.com/andlabs/ui/winmanifest"
|
import _ "github.com/andlabs/ui/winmanifest"
|
||||||
|
|
||||||
// create a new box
|
// create a new box
|
||||||
func (t *andlabsT) GetBox() *ui.Box {
|
func (t *Toolkit) GetBox() *ui.Box {
|
||||||
return t.uiBox
|
return t.uiBox
|
||||||
}
|
}
|
||||||
|
|
||||||
// create a new box
|
// create a new box
|
||||||
func (t *andlabsT) NewBox() *andlabsT {
|
func (t *Toolkit) NewBox() *Toolkit {
|
||||||
if (DebugToolkit) {
|
if (DebugToolkit) {
|
||||||
log.Println("gui.Toolbox.NewBox() START create default")
|
log.Println("gui.Toolbox.NewBox() START create default")
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,7 @@ func (t *andlabsT) NewBox() *andlabsT {
|
||||||
if (DebugToolkit) {
|
if (DebugToolkit) {
|
||||||
log.Println("\tgui.Toolbox.NewBox() is a Group")
|
log.Println("\tgui.Toolbox.NewBox() is a Group")
|
||||||
}
|
}
|
||||||
var newTK andlabsT
|
var newTK Toolkit
|
||||||
|
|
||||||
vbox := ui.NewVerticalBox()
|
vbox := ui.NewVerticalBox()
|
||||||
vbox.SetPadded(padded)
|
vbox.SetPadded(padded)
|
||||||
|
@ -33,7 +33,7 @@ func (t *andlabsT) NewBox() *andlabsT {
|
||||||
if (DebugToolkit) {
|
if (DebugToolkit) {
|
||||||
log.Println("\tgui.Toolbox.NewBox() is a Box")
|
log.Println("\tgui.Toolbox.NewBox() is a Box")
|
||||||
}
|
}
|
||||||
var newTK andlabsT
|
var newTK Toolkit
|
||||||
|
|
||||||
vbox := ui.NewVerticalBox()
|
vbox := ui.NewVerticalBox()
|
||||||
vbox.SetPadded(padded)
|
vbox.SetPadded(padded)
|
||||||
|
@ -47,7 +47,7 @@ func (t *andlabsT) NewBox() *andlabsT {
|
||||||
if (DebugToolkit) {
|
if (DebugToolkit) {
|
||||||
log.Println("\tgui.Toolbox.NewBox() is a Window")
|
log.Println("\tgui.Toolbox.NewBox() is a Window")
|
||||||
}
|
}
|
||||||
var newT andlabsT
|
var newT Toolkit
|
||||||
|
|
||||||
vbox := ui.NewVerticalBox()
|
vbox := ui.NewVerticalBox()
|
||||||
vbox.SetPadded(padded)
|
vbox.SetPadded(padded)
|
|
@ -0,0 +1,79 @@
|
||||||
|
package toolkit
|
||||||
|
|
||||||
|
import "log"
|
||||||
|
// import "os"
|
||||||
|
|
||||||
|
import "github.com/andlabs/ui"
|
||||||
|
import _ "github.com/andlabs/ui/winmanifest"
|
||||||
|
|
||||||
|
// make new Group here
|
||||||
|
func (t Toolkit) NewButton(name string) *Toolkit {
|
||||||
|
var newt Toolkit
|
||||||
|
var b *ui.Button
|
||||||
|
|
||||||
|
if t.broken() {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DebugToolkit) {
|
||||||
|
log.Println("gui.Toolbox.NewButton() create", name)
|
||||||
|
}
|
||||||
|
b = ui.NewButton(name)
|
||||||
|
newt.uiButton = b
|
||||||
|
|
||||||
|
b.OnClicked(func(*ui.Button) {
|
||||||
|
log.Println("TODO: IN TOOLKIT GOROUTINE. SHOULD LEAVE HERE VIA channels. button name =", name)
|
||||||
|
t.Dump()
|
||||||
|
newt.Dump()
|
||||||
|
if (DebugToolkit) {
|
||||||
|
log.Println("wit/gui/toolkit NewButton() Should do something here")
|
||||||
|
}
|
||||||
|
if (newt.Custom == nil) {
|
||||||
|
if (DebugToolkit) {
|
||||||
|
log.Println("wit/gui/toolkit NewButton() toolkit.Custom == nil")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (DebugToolkit) {
|
||||||
|
log.Println("wit/gui/toolkit NewButton() toolkit.Custom() START")
|
||||||
|
}
|
||||||
|
newt.Custom()
|
||||||
|
return
|
||||||
|
if (DebugToolkit) {
|
||||||
|
log.Println("wit/gui/toolkit NewButton() toolkit.Custom() END")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (t.Custom == nil) {
|
||||||
|
if (DebugToolkit) {
|
||||||
|
log.Println("wit/gui/toolkit NewButton() parent toolkit.Custom == nil")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (DebugToolkit) {
|
||||||
|
log.Println("wit/gui/toolkit NewButton() running parent toolkit.Custom() START (IS THIS A BAD IDEA?)")
|
||||||
|
}
|
||||||
|
t.Custom()
|
||||||
|
return
|
||||||
|
if (DebugToolkit) {
|
||||||
|
log.Println("wit/gui/toolkit NewButton() running parent toolkit.Custom() END (IS THIS A BAD IDEA?)")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
log.Println("TODO: LEFT TOOLKIT GOROUTINE WITH NOTHING TO DO button name =", name)
|
||||||
|
})
|
||||||
|
|
||||||
|
if (DebugToolkit) {
|
||||||
|
log.Println("gui.Toolbox.NewButton() about to append to Box parent t:", name)
|
||||||
|
t.Dump()
|
||||||
|
log.Println("gui.Toolbox.NewButton() about to append to Box new t:", name)
|
||||||
|
newt.Dump()
|
||||||
|
}
|
||||||
|
if (t.uiBox != nil) {
|
||||||
|
t.uiBox.Append(b, stretchy)
|
||||||
|
} else if (t.uiWindow != nil) {
|
||||||
|
t.uiWindow.SetChild(b)
|
||||||
|
} else {
|
||||||
|
log.Println("ERROR: wit/gui andlabs couldn't place this button in a box or a window")
|
||||||
|
log.Println("ERROR: wit/gui andlabs couldn't place this button in a box or a window")
|
||||||
|
return &t
|
||||||
|
}
|
||||||
|
|
||||||
|
return &newt
|
||||||
|
}
|
|
@ -1,13 +1,13 @@
|
||||||
package main
|
package toolkit
|
||||||
|
|
||||||
import "log"
|
import "log"
|
||||||
|
|
||||||
import "github.com/andlabs/ui"
|
import "github.com/andlabs/ui"
|
||||||
import _ "github.com/andlabs/ui/winmanifest"
|
import _ "github.com/andlabs/ui/winmanifest"
|
||||||
|
|
||||||
func (t andlabsT) NewCheckbox(name string) *andlabsT {
|
func (t Toolkit) NewCheckbox(name string) *Toolkit {
|
||||||
log.Println("gui.Toolkit.NewCheckbox()", name)
|
log.Println("gui.Toolkit.NewCheckbox()", name)
|
||||||
var newt andlabsT
|
var newt Toolkit
|
||||||
|
|
||||||
if t.broken() {
|
if t.broken() {
|
||||||
return nil
|
return nil
|
||||||
|
@ -25,7 +25,7 @@ func (t andlabsT) NewCheckbox(name string) *andlabsT {
|
||||||
return &newt
|
return &newt
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t andlabsT) Checked() bool {
|
func (t Toolkit) Checked() bool {
|
||||||
if t.broken() {
|
if t.broken() {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
package main
|
package toolkit
|
||||||
|
|
||||||
import "log"
|
import "log"
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ func init() {
|
||||||
setDefaultBehavior(true)
|
setDefaultBehavior(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t andlabsT) commonChange(widget string) {
|
func (t Toolkit) commonChange(widget string) {
|
||||||
s := t.String()
|
s := t.String()
|
||||||
if (DebugToolkit) {
|
if (DebugToolkit) {
|
||||||
log.Println("gui.Toolkit.ui.OnChanged() =", s)
|
log.Println("gui.Toolkit.ui.OnChanged() =", s)
|
||||||
|
@ -36,7 +36,7 @@ func (t andlabsT) commonChange(widget string) {
|
||||||
|
|
||||||
// does some sanity checks on the internal structs of the binary tree
|
// does some sanity checks on the internal structs of the binary tree
|
||||||
// TODO: probably this should not panic unless it's running in devel mode (?)
|
// TODO: probably this should not panic unless it's running in devel mode (?)
|
||||||
func (t *andlabsT) broken() bool {
|
func (t *Toolkit) broken() bool {
|
||||||
if (t.uiBox == nil) {
|
if (t.uiBox == nil) {
|
||||||
if (t.uiWindow != nil) {
|
if (t.uiWindow != nil) {
|
||||||
if (DebugToolkit) {
|
if (DebugToolkit) {
|
|
@ -1,4 +1,4 @@
|
||||||
package main
|
package toolkit
|
||||||
|
|
||||||
import "log"
|
import "log"
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ func BlankWindow(w *ui.Window) *ui.Box {
|
||||||
return hbox
|
return hbox
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *andlabsT) DemoNumbersPage() {
|
func (t *Toolkit) DemoNumbersPage() {
|
||||||
var w *ui.Window
|
var w *ui.Window
|
||||||
|
|
||||||
log.Println("Starting wit/gui toolkit andlabs/ui DemoNumbersPage()")
|
log.Println("Starting wit/gui toolkit andlabs/ui DemoNumbersPage()")
|
|
@ -0,0 +1,55 @@
|
||||||
|
package toolkit
|
||||||
|
|
||||||
|
import "log"
|
||||||
|
import "os"
|
||||||
|
// import "time"
|
||||||
|
|
||||||
|
import "github.com/andlabs/ui"
|
||||||
|
import _ "github.com/andlabs/ui/winmanifest"
|
||||||
|
|
||||||
|
func (t *Toolkit) NewDropdown(title string) *Toolkit {
|
||||||
|
// make new node here
|
||||||
|
if (DebugToolkit) {
|
||||||
|
log.Println("gui.Toolbox.NewDropdownCombobox()", title)
|
||||||
|
}
|
||||||
|
var newt Toolkit
|
||||||
|
|
||||||
|
if t.broken() {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
s := ui.NewCombobox()
|
||||||
|
newt.uiCombobox = s
|
||||||
|
newt.uiBox = t.uiBox
|
||||||
|
t.uiBox.Append(s, stretchy)
|
||||||
|
|
||||||
|
// initialize the index
|
||||||
|
newt.c = 0
|
||||||
|
newt.val = make(map[int]string)
|
||||||
|
|
||||||
|
s.OnSelected(func(spin *ui.Combobox) {
|
||||||
|
i := spin.Selected()
|
||||||
|
if (newt.val == nil) {
|
||||||
|
log.Println("make map didn't work")
|
||||||
|
os.Exit(0)
|
||||||
|
}
|
||||||
|
newt.text = newt.val[i]
|
||||||
|
newt.commonChange("Dropdown")
|
||||||
|
})
|
||||||
|
|
||||||
|
return &newt
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *Toolkit) AddDropdown(title string) {
|
||||||
|
t.uiCombobox.Append(title)
|
||||||
|
if (t.val == nil) {
|
||||||
|
log.Println("make map didn't work")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
t.val[t.c] = title
|
||||||
|
t.c = t.c + 1
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t Toolkit) SetDropdown(i int) {
|
||||||
|
t.uiCombobox.SetSelected(i)
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
package main
|
package toolkit
|
||||||
|
|
||||||
import "log"
|
import "log"
|
||||||
import "os"
|
import "os"
|
||||||
|
@ -6,23 +6,9 @@ import "os"
|
||||||
import "github.com/andlabs/ui"
|
import "github.com/andlabs/ui"
|
||||||
import _ "github.com/andlabs/ui/winmanifest"
|
import _ "github.com/andlabs/ui/winmanifest"
|
||||||
|
|
||||||
import "git.wit.org/wit/gui/toolkit"
|
|
||||||
|
|
||||||
func NewGroup(parentW *toolkit.Widget, w *toolkit.Widget) {
|
|
||||||
log.Println("gui.andlabs.NewGroup()", w.Name)
|
|
||||||
|
|
||||||
t := mapToolkits[parentW]
|
|
||||||
if (t == nil) {
|
|
||||||
log.Println("go.andlabs.NewGroup() toolkit struct == nil. name=", parentW.Name, w.Name)
|
|
||||||
listMap()
|
|
||||||
}
|
|
||||||
newt := t.NewGroup(w.Name)
|
|
||||||
mapWidgetsToolkits(w, newt)
|
|
||||||
}
|
|
||||||
|
|
||||||
// make new Group here
|
// make new Group here
|
||||||
func (t andlabsT) NewGroup(title string) *andlabsT {
|
func (t Toolkit) NewGroup(title string) *Toolkit {
|
||||||
var newt andlabsT
|
var newt Toolkit
|
||||||
|
|
||||||
if (DebugToolkit) {
|
if (DebugToolkit) {
|
||||||
log.Println("gui.Toolbox.NewGroup() create", title)
|
log.Println("gui.Toolbox.NewGroup() create", title)
|
|
@ -0,0 +1,21 @@
|
||||||
|
package toolkit
|
||||||
|
|
||||||
|
import "log"
|
||||||
|
|
||||||
|
import "github.com/andlabs/ui"
|
||||||
|
import _ "github.com/andlabs/ui/winmanifest"
|
||||||
|
|
||||||
|
func (t *Toolkit) NewLabel(name string) *Toolkit {
|
||||||
|
// make new node here
|
||||||
|
log.Println("gui.Toolbox.NewLabel", name)
|
||||||
|
|
||||||
|
if t.broken() {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
var newt Toolkit
|
||||||
|
newt.uiLabel = ui.NewLabel(name)
|
||||||
|
newt.uiBox = t.uiBox
|
||||||
|
t.uiBox.Append(newt.uiLabel, false)
|
||||||
|
|
||||||
|
return &newt
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
package toolkit
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log"
|
||||||
|
|
||||||
|
"github.com/andlabs/ui"
|
||||||
|
// the _ means we only need this for the init()
|
||||||
|
_ "github.com/andlabs/ui/winmanifest"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Main(f func()) {
|
||||||
|
if (DebugToolkit) {
|
||||||
|
log.Println("Starting gui.Main() (using gtk via andlabs/ui)")
|
||||||
|
}
|
||||||
|
ui.Main(f)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Other goroutines must use this to access the GUI
|
||||||
|
//
|
||||||
|
// You can not acess / process the GUI thread directly from
|
||||||
|
// other goroutines. This is due to the nature of how
|
||||||
|
// Linux, MacOS and Windows work (they all work differently. suprise. surprise.)
|
||||||
|
//
|
||||||
|
// For example: Queue(NewWindow())
|
||||||
|
//
|
||||||
|
func Queue(f func()) {
|
||||||
|
if (DebugToolkit) {
|
||||||
|
log.Println("Sending function to gui.Main() (using gtk via andlabs/ui)")
|
||||||
|
}
|
||||||
|
ui.QueueMain(f)
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
package toolkit
|
||||||
|
|
||||||
|
import "log"
|
||||||
|
import "os"
|
||||||
|
|
||||||
|
import "github.com/andlabs/ui"
|
||||||
|
import _ "github.com/andlabs/ui/winmanifest"
|
||||||
|
|
||||||
|
func (t Toolkit) NewSlider(title string, x int, y int) *Toolkit {
|
||||||
|
// make new node here
|
||||||
|
log.Println("gui.Toolkit.NewSpinbox()", x, y)
|
||||||
|
var newt Toolkit
|
||||||
|
|
||||||
|
if (t.uiBox == nil) {
|
||||||
|
log.Println("gui.ToolkitNode.NewGroup() node.UiBox == nil. I can't add a range UI element without a place to put it")
|
||||||
|
log.Println("probably could just make a box here?")
|
||||||
|
os.Exit(0)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
s := ui.NewSlider(x, y)
|
||||||
|
newt.uiSlider = s
|
||||||
|
newt.uiBox = t.uiBox
|
||||||
|
t.uiBox.Append(s, stretchy)
|
||||||
|
|
||||||
|
s.OnChanged(func(spin *ui.Slider) {
|
||||||
|
newt.commonChange("Slider")
|
||||||
|
})
|
||||||
|
|
||||||
|
return &newt
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
package main
|
package toolkit
|
||||||
|
|
||||||
import "log"
|
import "log"
|
||||||
import "os"
|
import "os"
|
||||||
|
@ -6,10 +6,10 @@ import "os"
|
||||||
import "github.com/andlabs/ui"
|
import "github.com/andlabs/ui"
|
||||||
import _ "github.com/andlabs/ui/winmanifest"
|
import _ "github.com/andlabs/ui/winmanifest"
|
||||||
|
|
||||||
func (t andlabsT) NewSpinner(title string, x int, y int) *andlabsT {
|
func (t Toolkit) NewSpinner(title string, x int, y int) *Toolkit {
|
||||||
// make new node here
|
// make new node here
|
||||||
log.Println("gui.Toolkit.NewSpinner()", x, y)
|
log.Println("gui.Toolkit.NewSpinner()", x, y)
|
||||||
var newt andlabsT
|
var newt Toolkit
|
||||||
|
|
||||||
if (t.uiBox == nil) {
|
if (t.uiBox == nil) {
|
||||||
log.Println("gui.ToolkitNode.NewSpinner() node.UiBox == nil. I can't add a range UI element without a place to put it")
|
log.Println("gui.ToolkitNode.NewSpinner() node.UiBox == nil. I can't add a range UI element without a place to put it")
|
|
@ -1,4 +1,4 @@
|
||||||
package main
|
package toolkit
|
||||||
|
|
||||||
import "log"
|
import "log"
|
||||||
|
|
||||||
|
@ -47,15 +47,15 @@ func GetDebugToolkit () bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
// stores the raw toolkit internals
|
// stores the raw toolkit internals
|
||||||
type andlabsT struct {
|
type Toolkit struct {
|
||||||
id string
|
id string
|
||||||
|
|
||||||
Name string
|
Name string
|
||||||
Width int
|
Width int
|
||||||
Height int
|
Height int
|
||||||
|
|
||||||
OnChanged func(*andlabsT)
|
OnChanged func(*Toolkit)
|
||||||
OnExit func(*andlabsT)
|
OnExit func(*Toolkit)
|
||||||
|
|
||||||
Custom func()
|
Custom func()
|
||||||
|
|
||||||
|
@ -84,18 +84,18 @@ type andlabsT struct {
|
||||||
text string
|
text string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *andlabsT) String() string {
|
func (t *Toolkit) String() string {
|
||||||
return t.GetText()
|
return t.GetText()
|
||||||
}
|
}
|
||||||
|
|
||||||
func forceDump(t *andlabsT) {
|
func forceDump(t *Toolkit) {
|
||||||
tmp := DebugToolkit
|
tmp := DebugToolkit
|
||||||
DebugToolkit = true
|
DebugToolkit = true
|
||||||
t.Dump()
|
t.Dump()
|
||||||
DebugToolkit = tmp
|
DebugToolkit = tmp
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *andlabsT) GetText() string {
|
func (t *Toolkit) GetText() string {
|
||||||
t.Dump()
|
t.Dump()
|
||||||
if (DebugToolkit) {
|
if (DebugToolkit) {
|
||||||
log.Println("gui.Toolkit.Text() Enter")
|
log.Println("gui.Toolkit.Text() Enter")
|
||||||
|
@ -128,7 +128,7 @@ func (t *andlabsT) GetText() string {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *andlabsT) SetText(s string) bool {
|
func (t *Toolkit) SetText(s string) bool {
|
||||||
if (DebugToolkit) {
|
if (DebugToolkit) {
|
||||||
log.Println("gui.Toolkit.Text() Enter")
|
log.Println("gui.Toolkit.Text() Enter")
|
||||||
scs := spew.ConfigState{MaxDepth: 1}
|
scs := spew.ConfigState{MaxDepth: 1}
|
||||||
|
@ -151,7 +151,7 @@ func (t *andlabsT) SetText(s string) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func sanity(t *andlabsT) bool {
|
func sanity(t *Toolkit) bool {
|
||||||
if (DebugToolkit) {
|
if (DebugToolkit) {
|
||||||
log.Println("gui.Toolkit.Value() Enter")
|
log.Println("gui.Toolkit.Value() Enter")
|
||||||
scs := spew.ConfigState{MaxDepth: 1}
|
scs := spew.ConfigState{MaxDepth: 1}
|
||||||
|
@ -166,7 +166,7 @@ func sanity(t *andlabsT) bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *andlabsT) SetValue(i int) bool {
|
func (t *Toolkit) SetValue(i int) bool {
|
||||||
log.Println("gui.Toolkit.SetValue() START")
|
log.Println("gui.Toolkit.SetValue() START")
|
||||||
if (sanity(t)) {
|
if (sanity(t)) {
|
||||||
return false
|
return false
|
||||||
|
@ -176,7 +176,7 @@ func (t *andlabsT) SetValue(i int) bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *andlabsT) Value() int {
|
func (t *Toolkit) Value() int {
|
||||||
if (DebugToolkit) {
|
if (DebugToolkit) {
|
||||||
log.Println("gui.Toolkit.Value() Enter")
|
log.Println("gui.Toolkit.Value() Enter")
|
||||||
scs := spew.ConfigState{MaxDepth: 1}
|
scs := spew.ConfigState{MaxDepth: 1}
|
||||||
|
@ -202,7 +202,7 @@ func (t *andlabsT) Value() int {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *andlabsT) Dump() {
|
func (t *Toolkit) Dump() {
|
||||||
if ! DebugToolkit {
|
if ! DebugToolkit {
|
||||||
return
|
return
|
||||||
}
|
}
|
|
@ -1,13 +1,12 @@
|
||||||
package main
|
package toolkit
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log"
|
"log"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"git.wit.org/wit/gui/toolkit"
|
|
||||||
|
|
||||||
"github.com/andlabs/ui"
|
"github.com/andlabs/ui"
|
||||||
_ "github.com/andlabs/ui/winmanifest"
|
_ "github.com/andlabs/ui/winmanifest"
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -22,9 +21,9 @@ import (
|
||||||
once there is one. If you send a Window here, it will replace
|
once there is one. If you send a Window here, it will replace
|
||||||
any existing tabs rather than adding a new one
|
any existing tabs rather than adding a new one
|
||||||
*/
|
*/
|
||||||
func (t *andlabsT) newTab(name string) *andlabsT {
|
func (t *Toolkit) AddTab(name string) *Toolkit {
|
||||||
// var w *ui.Window
|
// var w *ui.Window
|
||||||
var newt *andlabsT
|
var newt *Toolkit
|
||||||
|
|
||||||
log.Println("gui.toolkit.AddTab() sleep 3")
|
log.Println("gui.toolkit.AddTab() sleep 3")
|
||||||
|
|
||||||
|
@ -69,8 +68,8 @@ func tabSetMargined(tab *ui.Tab) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func newTab(w *ui.Window, name string) *andlabsT {
|
func newTab(w *ui.Window, name string) *Toolkit {
|
||||||
var t andlabsT
|
var t Toolkit
|
||||||
if (DebugToolkit) {
|
if (DebugToolkit) {
|
||||||
log.Println("gui.toolkit.NewTab() ADD", name)
|
log.Println("gui.toolkit.NewTab() ADD", name)
|
||||||
}
|
}
|
||||||
|
@ -100,8 +99,8 @@ func newTab(w *ui.Window, name string) *andlabsT {
|
||||||
return &t
|
return &t
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *andlabsT) appendTab(name string) *andlabsT {
|
func (t *Toolkit) appendTab(name string) *Toolkit {
|
||||||
var newT andlabsT
|
var newT Toolkit
|
||||||
if (DebugToolkit) {
|
if (DebugToolkit) {
|
||||||
log.Println("gui.toolkit.NewTab() ADD", name)
|
log.Println("gui.toolkit.NewTab() ADD", name)
|
||||||
}
|
}
|
||||||
|
@ -132,16 +131,3 @@ func (t *andlabsT) appendTab(name string) *andlabsT {
|
||||||
newT.uiBox = hbox
|
newT.uiBox = hbox
|
||||||
return &newT
|
return &newT
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewTab(parentW *toolkit.Widget, w *toolkit.Widget) {
|
|
||||||
var newt *andlabsT
|
|
||||||
log.Println("gui.andlabs.NewTab()", w.Name)
|
|
||||||
|
|
||||||
t := mapToolkits[parentW]
|
|
||||||
if (t == nil) {
|
|
||||||
log.Println("go.andlabs.NewTab() toolkit struct == nil. name=", parentW.Name, w.Name)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
newt = t.newTab(w.Name)
|
|
||||||
mapWidgetsToolkits(w, newt)
|
|
||||||
}
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
package toolkit
|
||||||
|
|
||||||
|
import "log"
|
||||||
|
|
||||||
|
import "github.com/andlabs/ui"
|
||||||
|
import _ "github.com/andlabs/ui/winmanifest"
|
||||||
|
|
||||||
|
func (t Toolkit) NewTextbox(name string) *Toolkit {
|
||||||
|
if (DebugToolkit) {
|
||||||
|
log.Println("gui.Toolkit.NewTextbox()", name)
|
||||||
|
}
|
||||||
|
var newt Toolkit
|
||||||
|
|
||||||
|
if t.broken() {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
c := ui.NewNonWrappingMultilineEntry()
|
||||||
|
newt.uiMultilineEntry = c
|
||||||
|
|
||||||
|
newt.uiBox = t.uiBox
|
||||||
|
newt.Name = name
|
||||||
|
if (defaultBehavior) {
|
||||||
|
t.uiBox.Append(c, true)
|
||||||
|
} else {
|
||||||
|
t.uiBox.Append(c, stretchy)
|
||||||
|
}
|
||||||
|
|
||||||
|
c.OnChanged(func(spin *ui.MultilineEntry) {
|
||||||
|
newt.commonChange("Textbox")
|
||||||
|
})
|
||||||
|
|
||||||
|
return &newt
|
||||||
|
}
|
|
@ -0,0 +1,66 @@
|
||||||
|
package toolkit
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log"
|
||||||
|
|
||||||
|
"github.com/andlabs/ui"
|
||||||
|
_ "github.com/andlabs/ui/winmanifest"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (t *Toolkit) MessageWindow(msg1 string, msg2 string) {
|
||||||
|
ui.MsgBox(t.uiWindow, msg1, msg2)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *Toolkit) ErrorWindow(msg1 string, msg2 string) {
|
||||||
|
ui.MsgBoxError(t.uiWindow, msg1, msg2)
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewWindow(title string, x int, y int) *Toolkit {
|
||||||
|
var t Toolkit
|
||||||
|
if (DebugToolkit) {
|
||||||
|
log.Println("toolkit NewWindow", title, x, y)
|
||||||
|
}
|
||||||
|
w := ui.NewWindow(title, x, y, menubar)
|
||||||
|
w.SetBorderless(canvas)
|
||||||
|
w.SetMargined(margin)
|
||||||
|
w.OnClosing(func(*ui.Window) bool {
|
||||||
|
if (DebugToolkit) {
|
||||||
|
log.Println("ui.Window().OnExit() SHOULD ATTEMPT CALLBACK here")
|
||||||
|
t.Dump()
|
||||||
|
}
|
||||||
|
if (t.OnExit != nil) {
|
||||||
|
if (DebugToolkit) {
|
||||||
|
log.Println("ui.Window().OnExit() ATTEMPTING toolkit.OnExit CALLBACK")
|
||||||
|
}
|
||||||
|
t.OnExit(&t)
|
||||||
|
}
|
||||||
|
if (t.Custom != nil) {
|
||||||
|
if (DebugToolkit) {
|
||||||
|
log.Println("ui.Window().Custom() ATTEMPTING toolkit.Custom CALLBACK")
|
||||||
|
}
|
||||||
|
t.Custom()
|
||||||
|
}
|
||||||
|
if (DebugToolkit) {
|
||||||
|
log.Println("ui.Window().OnExit() Toolkit.OnExit is nil")
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
w.Show()
|
||||||
|
t.uiWindow = w
|
||||||
|
t.UiWindowBad = w // deprecate this as soon as possible
|
||||||
|
return &t
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *Toolkit) SetWindowTitle(title string) {
|
||||||
|
if (DebugToolkit) {
|
||||||
|
log.Println("toolkit NewWindow", t.Name, "title", title)
|
||||||
|
}
|
||||||
|
win := t.uiWindow
|
||||||
|
if (win != nil) {
|
||||||
|
win.SetTitle(title)
|
||||||
|
} else {
|
||||||
|
if (DebugToolkit) {
|
||||||
|
log.Println("Setting the window title", title)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,4 @@
|
||||||
|
all: plugin
|
||||||
|
|
||||||
|
plugin:
|
||||||
|
GO111MODULE="off" go build -buildmode=plugin -o ../andlabs.so
|
|
@ -1,4 +1,4 @@
|
||||||
package toolkit
|
package main
|
||||||
|
|
||||||
import "log"
|
import "log"
|
||||||
|
|
||||||
|
@ -6,12 +6,12 @@ import "github.com/andlabs/ui"
|
||||||
import _ "github.com/andlabs/ui/winmanifest"
|
import _ "github.com/andlabs/ui/winmanifest"
|
||||||
|
|
||||||
// create a new box
|
// create a new box
|
||||||
func (t *Toolkit) GetBox() *ui.Box {
|
func (t *andlabsT) GetBox() *ui.Box {
|
||||||
return t.uiBox
|
return t.uiBox
|
||||||
}
|
}
|
||||||
|
|
||||||
// create a new box
|
// create a new box
|
||||||
func (t *Toolkit) NewBox() *Toolkit {
|
func (t *andlabsT) NewBox() *andlabsT {
|
||||||
if (DebugToolkit) {
|
if (DebugToolkit) {
|
||||||
log.Println("gui.Toolbox.NewBox() START create default")
|
log.Println("gui.Toolbox.NewBox() START create default")
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,7 @@ func (t *Toolkit) NewBox() *Toolkit {
|
||||||
if (DebugToolkit) {
|
if (DebugToolkit) {
|
||||||
log.Println("\tgui.Toolbox.NewBox() is a Group")
|
log.Println("\tgui.Toolbox.NewBox() is a Group")
|
||||||
}
|
}
|
||||||
var newTK Toolkit
|
var newTK andlabsT
|
||||||
|
|
||||||
vbox := ui.NewVerticalBox()
|
vbox := ui.NewVerticalBox()
|
||||||
vbox.SetPadded(padded)
|
vbox.SetPadded(padded)
|
||||||
|
@ -33,7 +33,7 @@ func (t *Toolkit) NewBox() *Toolkit {
|
||||||
if (DebugToolkit) {
|
if (DebugToolkit) {
|
||||||
log.Println("\tgui.Toolbox.NewBox() is a Box")
|
log.Println("\tgui.Toolbox.NewBox() is a Box")
|
||||||
}
|
}
|
||||||
var newTK Toolkit
|
var newTK andlabsT
|
||||||
|
|
||||||
vbox := ui.NewVerticalBox()
|
vbox := ui.NewVerticalBox()
|
||||||
vbox.SetPadded(padded)
|
vbox.SetPadded(padded)
|
||||||
|
@ -47,7 +47,7 @@ func (t *Toolkit) NewBox() *Toolkit {
|
||||||
if (DebugToolkit) {
|
if (DebugToolkit) {
|
||||||
log.Println("\tgui.Toolbox.NewBox() is a Window")
|
log.Println("\tgui.Toolbox.NewBox() is a Window")
|
||||||
}
|
}
|
||||||
var newT Toolkit
|
var newT andlabsT
|
||||||
|
|
||||||
vbox := ui.NewVerticalBox()
|
vbox := ui.NewVerticalBox()
|
||||||
vbox.SetPadded(padded)
|
vbox.SetPadded(padded)
|
||||||
|
|
|
@ -1,68 +1,56 @@
|
||||||
package toolkit
|
package main
|
||||||
|
|
||||||
import "log"
|
import "log"
|
||||||
// import "os"
|
// import "os"
|
||||||
|
|
||||||
|
|
||||||
import "github.com/andlabs/ui"
|
import "github.com/andlabs/ui"
|
||||||
import _ "github.com/andlabs/ui/winmanifest"
|
import _ "github.com/andlabs/ui/winmanifest"
|
||||||
|
|
||||||
// make new Group here
|
import "git.wit.org/wit/gui/toolkit"
|
||||||
func (t Toolkit) NewButton(name string) *Toolkit {
|
func NewButton(parentW *toolkit.Widget, w *toolkit.Widget) {
|
||||||
var newt Toolkit
|
var t, newt *andlabsT
|
||||||
var b *ui.Button
|
var b *ui.Button
|
||||||
|
log.Println("gui.andlabs.NewButton()", w.Name)
|
||||||
|
|
||||||
|
t = mapToolkits[parentW]
|
||||||
|
if (t == nil) {
|
||||||
|
log.Println("go.andlabs.NewButton() toolkit struct == nil. name=", parentW.Name, w.Name)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if t.broken() {
|
if t.broken() {
|
||||||
return nil
|
return
|
||||||
}
|
}
|
||||||
|
newt = new(andlabsT)
|
||||||
|
|
||||||
if (DebugToolkit) {
|
b = ui.NewButton(w.Name)
|
||||||
log.Println("gui.Toolbox.NewButton() create", name)
|
|
||||||
}
|
|
||||||
b = ui.NewButton(name)
|
|
||||||
newt.uiButton = b
|
newt.uiButton = b
|
||||||
|
|
||||||
b.OnClicked(func(*ui.Button) {
|
b.OnClicked(func(*ui.Button) {
|
||||||
log.Println("TODO: IN TOOLKIT GOROUTINE. SHOULD LEAVE HERE VIA channels. button name =", name)
|
if (DebugToolkit) {
|
||||||
|
log.Println("TODO: IN TOOLKIT GOROUTINE. SHOULD LEAVE HERE VIA channels. button name =", w.Name)
|
||||||
|
log.Println("FOUND WIDGET!", w)
|
||||||
|
}
|
||||||
|
if (w.Custom != nil) {
|
||||||
|
w.Custom()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (w.Event != nil) {
|
||||||
|
w.Event(w)
|
||||||
|
return
|
||||||
|
}
|
||||||
t.Dump()
|
t.Dump()
|
||||||
newt.Dump()
|
newt.Dump()
|
||||||
if (DebugToolkit) {
|
if (DebugToolkit) {
|
||||||
log.Println("wit/gui/toolkit NewButton() Should do something here")
|
log.Println("TODO: LEFT TOOLKIT GOROUTINE WITH NOTHING TO DO button name =", w.Name)
|
||||||
}
|
}
|
||||||
if (newt.Custom == nil) {
|
|
||||||
if (DebugToolkit) {
|
|
||||||
log.Println("wit/gui/toolkit NewButton() toolkit.Custom == nil")
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (DebugToolkit) {
|
|
||||||
log.Println("wit/gui/toolkit NewButton() toolkit.Custom() START")
|
|
||||||
}
|
|
||||||
newt.Custom()
|
|
||||||
return
|
|
||||||
if (DebugToolkit) {
|
|
||||||
log.Println("wit/gui/toolkit NewButton() toolkit.Custom() END")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (t.Custom == nil) {
|
|
||||||
if (DebugToolkit) {
|
|
||||||
log.Println("wit/gui/toolkit NewButton() parent toolkit.Custom == nil")
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (DebugToolkit) {
|
|
||||||
log.Println("wit/gui/toolkit NewButton() running parent toolkit.Custom() START (IS THIS A BAD IDEA?)")
|
|
||||||
}
|
|
||||||
t.Custom()
|
|
||||||
return
|
|
||||||
if (DebugToolkit) {
|
|
||||||
log.Println("wit/gui/toolkit NewButton() running parent toolkit.Custom() END (IS THIS A BAD IDEA?)")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
log.Println("TODO: LEFT TOOLKIT GOROUTINE WITH NOTHING TO DO button name =", name)
|
|
||||||
})
|
})
|
||||||
|
|
||||||
if (DebugToolkit) {
|
if (DebugToolkit) {
|
||||||
log.Println("gui.Toolbox.NewButton() about to append to Box parent t:", name)
|
log.Println("gui.Toolbox.NewButton() about to append to Box parent t:", w.Name)
|
||||||
t.Dump()
|
t.Dump()
|
||||||
log.Println("gui.Toolbox.NewButton() about to append to Box new t:", name)
|
log.Println("gui.Toolbox.NewButton() about to append to Box new t:", w.Name)
|
||||||
newt.Dump()
|
newt.Dump()
|
||||||
}
|
}
|
||||||
if (t.uiBox != nil) {
|
if (t.uiBox != nil) {
|
||||||
|
@ -72,8 +60,8 @@ func (t Toolkit) NewButton(name string) *Toolkit {
|
||||||
} else {
|
} else {
|
||||||
log.Println("ERROR: wit/gui andlabs couldn't place this button in a box or a window")
|
log.Println("ERROR: wit/gui andlabs couldn't place this button in a box or a window")
|
||||||
log.Println("ERROR: wit/gui andlabs couldn't place this button in a box or a window")
|
log.Println("ERROR: wit/gui andlabs couldn't place this button in a box or a window")
|
||||||
return &t
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
return &newt
|
mapWidgetsToolkits(w, newt)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
package toolkit
|
package main
|
||||||
|
|
||||||
import "log"
|
import "log"
|
||||||
|
|
||||||
import "github.com/andlabs/ui"
|
import "github.com/andlabs/ui"
|
||||||
import _ "github.com/andlabs/ui/winmanifest"
|
import _ "github.com/andlabs/ui/winmanifest"
|
||||||
|
|
||||||
func (t Toolkit) NewCheckbox(name string) *Toolkit {
|
func (t andlabsT) NewCheckbox(name string) *andlabsT {
|
||||||
log.Println("gui.Toolkit.NewCheckbox()", name)
|
log.Println("gui.Toolkit.NewCheckbox()", name)
|
||||||
var newt Toolkit
|
var newt andlabsT
|
||||||
|
|
||||||
if t.broken() {
|
if t.broken() {
|
||||||
return nil
|
return nil
|
||||||
|
@ -25,7 +25,7 @@ func (t Toolkit) NewCheckbox(name string) *Toolkit {
|
||||||
return &newt
|
return &newt
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t Toolkit) Checked() bool {
|
func (t andlabsT) Checked() bool {
|
||||||
if t.broken() {
|
if t.broken() {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package toolkit
|
package main
|
||||||
|
|
||||||
import "log"
|
import "log"
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ func init() {
|
||||||
setDefaultBehavior(true)
|
setDefaultBehavior(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t Toolkit) commonChange(widget string) {
|
func (t andlabsT) commonChange(widget string) {
|
||||||
s := t.String()
|
s := t.String()
|
||||||
if (DebugToolkit) {
|
if (DebugToolkit) {
|
||||||
log.Println("gui.Toolkit.ui.OnChanged() =", s)
|
log.Println("gui.Toolkit.ui.OnChanged() =", s)
|
||||||
|
@ -36,7 +36,7 @@ func (t Toolkit) commonChange(widget string) {
|
||||||
|
|
||||||
// does some sanity checks on the internal structs of the binary tree
|
// does some sanity checks on the internal structs of the binary tree
|
||||||
// TODO: probably this should not panic unless it's running in devel mode (?)
|
// TODO: probably this should not panic unless it's running in devel mode (?)
|
||||||
func (t *Toolkit) broken() bool {
|
func (t *andlabsT) broken() bool {
|
||||||
if (t.uiBox == nil) {
|
if (t.uiBox == nil) {
|
||||||
if (t.uiWindow != nil) {
|
if (t.uiWindow != nil) {
|
||||||
if (DebugToolkit) {
|
if (DebugToolkit) {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package toolkit
|
package main
|
||||||
|
|
||||||
import "log"
|
import "log"
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ func BlankWindow(w *ui.Window) *ui.Box {
|
||||||
return hbox
|
return hbox
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Toolkit) DemoNumbersPage() {
|
func (t *andlabsT) DemoNumbersPage() {
|
||||||
var w *ui.Window
|
var w *ui.Window
|
||||||
|
|
||||||
log.Println("Starting wit/gui toolkit andlabs/ui DemoNumbersPage()")
|
log.Println("Starting wit/gui toolkit andlabs/ui DemoNumbersPage()")
|
||||||
|
|
|
@ -1,18 +1,19 @@
|
||||||
package toolkit
|
package main
|
||||||
|
|
||||||
import "log"
|
import "log"
|
||||||
import "os"
|
|
||||||
// import "time"
|
// import "time"
|
||||||
|
|
||||||
import "github.com/andlabs/ui"
|
import "github.com/andlabs/ui"
|
||||||
import _ "github.com/andlabs/ui/winmanifest"
|
import _ "github.com/andlabs/ui/winmanifest"
|
||||||
|
|
||||||
func (t *Toolkit) NewDropdown(title string) *Toolkit {
|
import "git.wit.org/wit/gui/toolkit"
|
||||||
|
|
||||||
|
func (t *andlabsT) NewDropdown(title string) *andlabsT {
|
||||||
// make new node here
|
// make new node here
|
||||||
if (DebugToolkit) {
|
if (DebugToolkit) {
|
||||||
log.Println("gui.Toolbox.NewDropdownCombobox()", title)
|
log.Println("gui.Toolbox.NewDropdownCombobox()", title)
|
||||||
}
|
}
|
||||||
var newt Toolkit
|
var newt andlabsT
|
||||||
|
|
||||||
if t.broken() {
|
if t.broken() {
|
||||||
return nil
|
return nil
|
||||||
|
@ -31,7 +32,7 @@ func (t *Toolkit) NewDropdown(title string) *Toolkit {
|
||||||
i := spin.Selected()
|
i := spin.Selected()
|
||||||
if (newt.val == nil) {
|
if (newt.val == nil) {
|
||||||
log.Println("make map didn't work")
|
log.Println("make map didn't work")
|
||||||
os.Exit(0)
|
newt.text = "error"
|
||||||
}
|
}
|
||||||
newt.text = newt.val[i]
|
newt.text = newt.val[i]
|
||||||
newt.commonChange("Dropdown")
|
newt.commonChange("Dropdown")
|
||||||
|
@ -40,7 +41,7 @@ func (t *Toolkit) NewDropdown(title string) *Toolkit {
|
||||||
return &newt
|
return &newt
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Toolkit) AddDropdown(title string) {
|
func (t *andlabsT) AddDropdownName(title string) {
|
||||||
t.uiCombobox.Append(title)
|
t.uiCombobox.Append(title)
|
||||||
if (t.val == nil) {
|
if (t.val == nil) {
|
||||||
log.Println("make map didn't work")
|
log.Println("make map didn't work")
|
||||||
|
@ -50,6 +51,40 @@ func (t *Toolkit) AddDropdown(title string) {
|
||||||
t.c = t.c + 1
|
t.c = t.c + 1
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t Toolkit) SetDropdown(i int) {
|
func (t andlabsT) SetDropdown(i int) {
|
||||||
t.uiCombobox.SetSelected(i)
|
t.uiCombobox.SetSelected(i)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func NewDropdown(parentW *toolkit.Widget, w *toolkit.Widget) {
|
||||||
|
log.Println("gui.andlabs.NewDropdown()", w.Name)
|
||||||
|
|
||||||
|
t := mapToolkits[parentW]
|
||||||
|
if (t == nil) {
|
||||||
|
log.Println("go.andlabs.NewDropdown() toolkit struct == nil. name=", parentW.Name, w.Name)
|
||||||
|
listMap()
|
||||||
|
}
|
||||||
|
newt := t.NewDropdown(w.Name)
|
||||||
|
mapWidgetsToolkits(w, newt)
|
||||||
|
}
|
||||||
|
|
||||||
|
func AddDropdownName(w *toolkit.Widget, s string) {
|
||||||
|
log.Println("gui.andlabs.AddDropdownName()", w.Name, "add:", s)
|
||||||
|
|
||||||
|
t := mapToolkits[w]
|
||||||
|
if (t == nil) {
|
||||||
|
log.Println("go.andlabs.AddDropdownName() toolkit struct == nil. name=", w.Name, s)
|
||||||
|
listMap()
|
||||||
|
}
|
||||||
|
t.AddDropdownName(s)
|
||||||
|
}
|
||||||
|
|
||||||
|
func SetDropdown(w *toolkit.Widget, i int) {
|
||||||
|
log.Println("gui.andlabs.SetDropdown()", i)
|
||||||
|
|
||||||
|
t := mapToolkits[w]
|
||||||
|
if (t == nil) {
|
||||||
|
log.Println("go.andlabs.SetDropdown() toolkit struct == nil. name=", w.Name, i)
|
||||||
|
listMap()
|
||||||
|
}
|
||||||
|
t.SetDropdown(i)
|
||||||
|
}
|
||||||
|
|
|
@ -1,14 +1,29 @@
|
||||||
package toolkit
|
package main
|
||||||
|
|
||||||
import "log"
|
import (
|
||||||
import "os"
|
"log"
|
||||||
|
|
||||||
import "github.com/andlabs/ui"
|
"git.wit.org/wit/gui/toolkit"
|
||||||
import _ "github.com/andlabs/ui/winmanifest"
|
|
||||||
|
"github.com/andlabs/ui"
|
||||||
|
_ "github.com/andlabs/ui/winmanifest"
|
||||||
|
)
|
||||||
|
|
||||||
|
func NewGroup(parentW *toolkit.Widget, w *toolkit.Widget) {
|
||||||
|
log.Println("gui.andlabs.NewGroup()", w.Name)
|
||||||
|
|
||||||
|
t := mapToolkits[parentW]
|
||||||
|
if (t == nil) {
|
||||||
|
log.Println("go.andlabs.NewGroup() toolkit struct == nil. name=", parentW.Name, w.Name)
|
||||||
|
listMap()
|
||||||
|
}
|
||||||
|
newt := t.NewGroup(w.Name)
|
||||||
|
mapWidgetsToolkits(w, newt)
|
||||||
|
}
|
||||||
|
|
||||||
// make new Group here
|
// make new Group here
|
||||||
func (t Toolkit) NewGroup(title string) *Toolkit {
|
func (t andlabsT) NewGroup(title string) *andlabsT {
|
||||||
var newt Toolkit
|
var newt andlabsT
|
||||||
|
|
||||||
if (DebugToolkit) {
|
if (DebugToolkit) {
|
||||||
log.Println("gui.Toolbox.NewGroup() create", title)
|
log.Println("gui.Toolbox.NewGroup() create", title)
|
||||||
|
@ -22,8 +37,7 @@ func (t Toolkit) NewGroup(title string) *Toolkit {
|
||||||
t.uiWindow.SetChild(g)
|
t.uiWindow.SetChild(g)
|
||||||
} else {
|
} else {
|
||||||
log.Println("gui.ToolboxNode.NewGroup() node.UiBox == nil. I can't add a range UI element without a place to put it")
|
log.Println("gui.ToolboxNode.NewGroup() node.UiBox == nil. I can't add a range UI element without a place to put it")
|
||||||
log.Println("probably could just make a box here?")
|
log.Fatalln("probably could just make a box here?")
|
||||||
os.Exit(0)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
hbox := ui.NewVerticalBox()
|
hbox := ui.NewVerticalBox()
|
||||||
|
|
|
@ -1,21 +1,42 @@
|
||||||
package toolkit
|
package main
|
||||||
|
|
||||||
import "log"
|
import "log"
|
||||||
|
|
||||||
import "github.com/andlabs/ui"
|
import "github.com/andlabs/ui"
|
||||||
import _ "github.com/andlabs/ui/winmanifest"
|
import _ "github.com/andlabs/ui/winmanifest"
|
||||||
|
|
||||||
func (t *Toolkit) NewLabel(name string) *Toolkit {
|
import "git.wit.org/wit/gui/toolkit"
|
||||||
// make new node here
|
|
||||||
log.Println("gui.Toolbox.NewLabel", name)
|
func NewLabel(parentW *toolkit.Widget, w *toolkit.Widget) {
|
||||||
|
var t, newt *andlabsT
|
||||||
|
log.Println("gui.andlabs.NewButton()", w.Name)
|
||||||
|
|
||||||
|
t = mapToolkits[parentW]
|
||||||
|
if (t == nil) {
|
||||||
|
log.Println("go.andlabs.NewButton() toolkit struct == nil. name=", parentW.Name, w.Name)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if t.broken() {
|
if t.broken() {
|
||||||
return nil
|
return
|
||||||
}
|
}
|
||||||
var newt Toolkit
|
newt = new(andlabsT)
|
||||||
newt.uiLabel = ui.NewLabel(name)
|
|
||||||
newt.uiBox = t.uiBox
|
|
||||||
t.uiBox.Append(newt.uiLabel, false)
|
|
||||||
|
|
||||||
return &newt
|
newt.uiLabel = ui.NewLabel(w.Name)
|
||||||
|
newt.uiBox = t.uiBox
|
||||||
|
|
||||||
|
if (DebugToolkit) {
|
||||||
|
log.Println("gui.Toolbox.NewButton() about to append to Box parent t:", w.Name)
|
||||||
|
t.Dump()
|
||||||
|
log.Println("gui.Toolbox.NewButton() about to append to Box new t:", w.Name)
|
||||||
|
newt.Dump()
|
||||||
|
}
|
||||||
|
if (t.uiBox != nil) {
|
||||||
|
t.uiBox.Append(newt.uiLabel, false)
|
||||||
|
} else {
|
||||||
|
log.Println("ERROR: wit/gui andlabs couldn't place this label in a box")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
mapWidgetsToolkits(w, newt)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
package toolkit
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log"
|
"log"
|
||||||
|
// "time"
|
||||||
|
|
||||||
|
"git.wit.org/wit/gui/toolkit"
|
||||||
|
|
||||||
"github.com/andlabs/ui"
|
"github.com/andlabs/ui"
|
||||||
// the _ means we only need this for the init()
|
// the _ means we only need this for the init()
|
||||||
|
@ -12,7 +15,17 @@ func Main(f func()) {
|
||||||
if (DebugToolkit) {
|
if (DebugToolkit) {
|
||||||
log.Println("Starting gui.Main() (using gtk via andlabs/ui)")
|
log.Println("Starting gui.Main() (using gtk via andlabs/ui)")
|
||||||
}
|
}
|
||||||
ui.Main(f)
|
ui.Main( func() {
|
||||||
|
log.Println("Starting gui.Main() (using gtk via andlabs/ui)")
|
||||||
|
log.Println("Starting gui.Main() (using gtk via andlabs/ui)")
|
||||||
|
log.Println("Starting gui.Main() (using gtk via andlabs/ui)")
|
||||||
|
log.Println("Starting gui.Main() (using gtk via andlabs/ui)")
|
||||||
|
log.Println("Starting gui.Main() (using gtk via andlabs/ui)")
|
||||||
|
log.Println("Starting gui.Main() (using gtk via andlabs/ui)")
|
||||||
|
// time.Sleep(1 * time.Second)
|
||||||
|
// NewWindow2("helloworld2", 200, 100)
|
||||||
|
f()
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// Other goroutines must use this to access the GUI
|
// Other goroutines must use this to access the GUI
|
||||||
|
@ -25,7 +38,20 @@ func Main(f func()) {
|
||||||
//
|
//
|
||||||
func Queue(f func()) {
|
func Queue(f func()) {
|
||||||
if (DebugToolkit) {
|
if (DebugToolkit) {
|
||||||
log.Println("Sending function to gui.Main() (using gtk via andlabs/ui)")
|
log.Println("Sending function to ui.QueueMain() (using gtk via andlabs/ui)")
|
||||||
}
|
}
|
||||||
ui.QueueMain(f)
|
//ui.QueueMain(f)
|
||||||
|
f()
|
||||||
|
}
|
||||||
|
|
||||||
|
func Init() {
|
||||||
|
log.Println("should Init() here")
|
||||||
|
|
||||||
|
mapWidgets = make(map[*andlabsT]*toolkit.Widget)
|
||||||
|
mapToolkits = make(map[*toolkit.Widget]*andlabsT)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Quit() {
|
||||||
|
log.Println("should Quit() here")
|
||||||
|
// myExit(nil)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,15 +1,19 @@
|
||||||
package toolkit
|
package main
|
||||||
|
|
||||||
import "log"
|
import (
|
||||||
import "os"
|
"log"
|
||||||
|
"os"
|
||||||
|
|
||||||
import "github.com/andlabs/ui"
|
"git.wit.org/wit/gui/toolkit"
|
||||||
import _ "github.com/andlabs/ui/winmanifest"
|
|
||||||
|
|
||||||
func (t Toolkit) NewSlider(title string, x int, y int) *Toolkit {
|
"github.com/andlabs/ui"
|
||||||
|
_ "github.com/andlabs/ui/winmanifest"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (t andlabsT) NewSlider(title string, x int, y int) *andlabsT {
|
||||||
// make new node here
|
// make new node here
|
||||||
log.Println("gui.Toolkit.NewSpinbox()", x, y)
|
log.Println("gui.Toolkit.NewSpinbox()", x, y)
|
||||||
var newt Toolkit
|
var newt andlabsT
|
||||||
|
|
||||||
if (t.uiBox == nil) {
|
if (t.uiBox == nil) {
|
||||||
log.Println("gui.ToolkitNode.NewGroup() node.UiBox == nil. I can't add a range UI element without a place to put it")
|
log.Println("gui.ToolkitNode.NewGroup() node.UiBox == nil. I can't add a range UI element without a place to put it")
|
||||||
|
@ -29,3 +33,16 @@ func (t Toolkit) NewSlider(title string, x int, y int) *Toolkit {
|
||||||
|
|
||||||
return &newt
|
return &newt
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func NewSlider(parentW *toolkit.Widget, w *toolkit.Widget) {
|
||||||
|
var newt *andlabsT
|
||||||
|
log.Println("gui.andlabs.NewTab()", w.Name)
|
||||||
|
|
||||||
|
t := mapToolkits[parentW]
|
||||||
|
if (t == nil) {
|
||||||
|
log.Println("go.andlabs.NewTab() toolkit struct == nil. name=", parentW.Name, w.Name)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
newt = t.NewSlider(w.Name, w.X, w.Y)
|
||||||
|
mapWidgetsToolkits(w, newt)
|
||||||
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package toolkit
|
package main
|
||||||
|
|
||||||
import "log"
|
import "log"
|
||||||
import "os"
|
import "os"
|
||||||
|
@ -6,10 +6,10 @@ import "os"
|
||||||
import "github.com/andlabs/ui"
|
import "github.com/andlabs/ui"
|
||||||
import _ "github.com/andlabs/ui/winmanifest"
|
import _ "github.com/andlabs/ui/winmanifest"
|
||||||
|
|
||||||
func (t Toolkit) NewSpinner(title string, x int, y int) *Toolkit {
|
func (t andlabsT) NewSpinner(title string, x int, y int) *andlabsT {
|
||||||
// make new node here
|
// make new node here
|
||||||
log.Println("gui.Toolkit.NewSpinner()", x, y)
|
log.Println("gui.Toolkit.NewSpinner()", x, y)
|
||||||
var newt Toolkit
|
var newt andlabsT
|
||||||
|
|
||||||
if (t.uiBox == nil) {
|
if (t.uiBox == nil) {
|
||||||
log.Println("gui.ToolkitNode.NewSpinner() node.UiBox == nil. I can't add a range UI element without a place to put it")
|
log.Println("gui.ToolkitNode.NewSpinner() node.UiBox == nil. I can't add a range UI element without a place to put it")
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package toolkit
|
package main
|
||||||
|
|
||||||
import "log"
|
import "log"
|
||||||
|
|
||||||
|
@ -47,15 +47,15 @@ func GetDebugToolkit () bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
// stores the raw toolkit internals
|
// stores the raw toolkit internals
|
||||||
type Toolkit struct {
|
type andlabsT struct {
|
||||||
id string
|
id string
|
||||||
|
|
||||||
Name string
|
Name string
|
||||||
Width int
|
Width int
|
||||||
Height int
|
Height int
|
||||||
|
|
||||||
OnChanged func(*Toolkit)
|
OnChanged func(*andlabsT)
|
||||||
OnExit func(*Toolkit)
|
OnExit func(*andlabsT)
|
||||||
|
|
||||||
Custom func()
|
Custom func()
|
||||||
|
|
||||||
|
@ -84,18 +84,18 @@ type Toolkit struct {
|
||||||
text string
|
text string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Toolkit) String() string {
|
func (t *andlabsT) String() string {
|
||||||
return t.GetText()
|
return t.GetText()
|
||||||
}
|
}
|
||||||
|
|
||||||
func forceDump(t *Toolkit) {
|
func forceDump(t *andlabsT) {
|
||||||
tmp := DebugToolkit
|
tmp := DebugToolkit
|
||||||
DebugToolkit = true
|
DebugToolkit = true
|
||||||
t.Dump()
|
t.Dump()
|
||||||
DebugToolkit = tmp
|
DebugToolkit = tmp
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Toolkit) GetText() string {
|
func (t *andlabsT) GetText() string {
|
||||||
t.Dump()
|
t.Dump()
|
||||||
if (DebugToolkit) {
|
if (DebugToolkit) {
|
||||||
log.Println("gui.Toolkit.Text() Enter")
|
log.Println("gui.Toolkit.Text() Enter")
|
||||||
|
@ -128,7 +128,7 @@ func (t *Toolkit) GetText() string {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Toolkit) SetText(s string) bool {
|
func (t *andlabsT) SetText(s string) bool {
|
||||||
if (DebugToolkit) {
|
if (DebugToolkit) {
|
||||||
log.Println("gui.Toolkit.Text() Enter")
|
log.Println("gui.Toolkit.Text() Enter")
|
||||||
scs := spew.ConfigState{MaxDepth: 1}
|
scs := spew.ConfigState{MaxDepth: 1}
|
||||||
|
@ -151,7 +151,7 @@ func (t *Toolkit) SetText(s string) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func sanity(t *Toolkit) bool {
|
func sanity(t *andlabsT) bool {
|
||||||
if (DebugToolkit) {
|
if (DebugToolkit) {
|
||||||
log.Println("gui.Toolkit.Value() Enter")
|
log.Println("gui.Toolkit.Value() Enter")
|
||||||
scs := spew.ConfigState{MaxDepth: 1}
|
scs := spew.ConfigState{MaxDepth: 1}
|
||||||
|
@ -166,7 +166,7 @@ func sanity(t *Toolkit) bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Toolkit) SetValue(i int) bool {
|
func (t *andlabsT) SetValue(i int) bool {
|
||||||
log.Println("gui.Toolkit.SetValue() START")
|
log.Println("gui.Toolkit.SetValue() START")
|
||||||
if (sanity(t)) {
|
if (sanity(t)) {
|
||||||
return false
|
return false
|
||||||
|
@ -176,7 +176,7 @@ func (t *Toolkit) SetValue(i int) bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Toolkit) Value() int {
|
func (t *andlabsT) Value() int {
|
||||||
if (DebugToolkit) {
|
if (DebugToolkit) {
|
||||||
log.Println("gui.Toolkit.Value() Enter")
|
log.Println("gui.Toolkit.Value() Enter")
|
||||||
scs := spew.ConfigState{MaxDepth: 1}
|
scs := spew.ConfigState{MaxDepth: 1}
|
||||||
|
@ -202,7 +202,7 @@ func (t *Toolkit) Value() int {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Toolkit) Dump() {
|
func (t *andlabsT) Dump() {
|
||||||
if ! DebugToolkit {
|
if ! DebugToolkit {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
package toolkit
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log"
|
"log"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"git.wit.org/wit/gui/toolkit"
|
||||||
|
|
||||||
"github.com/andlabs/ui"
|
"github.com/andlabs/ui"
|
||||||
_ "github.com/andlabs/ui/winmanifest"
|
_ "github.com/andlabs/ui/winmanifest"
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -21,9 +22,9 @@ import (
|
||||||
once there is one. If you send a Window here, it will replace
|
once there is one. If you send a Window here, it will replace
|
||||||
any existing tabs rather than adding a new one
|
any existing tabs rather than adding a new one
|
||||||
*/
|
*/
|
||||||
func (t *Toolkit) AddTab(name string) *Toolkit {
|
func (t *andlabsT) newTab(name string) *andlabsT {
|
||||||
// var w *ui.Window
|
// var w *ui.Window
|
||||||
var newt *Toolkit
|
var newt *andlabsT
|
||||||
|
|
||||||
log.Println("gui.toolkit.AddTab() sleep 3")
|
log.Println("gui.toolkit.AddTab() sleep 3")
|
||||||
|
|
||||||
|
@ -68,8 +69,8 @@ func tabSetMargined(tab *ui.Tab) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func newTab(w *ui.Window, name string) *Toolkit {
|
func newTab(w *ui.Window, name string) *andlabsT {
|
||||||
var t Toolkit
|
var t andlabsT
|
||||||
if (DebugToolkit) {
|
if (DebugToolkit) {
|
||||||
log.Println("gui.toolkit.NewTab() ADD", name)
|
log.Println("gui.toolkit.NewTab() ADD", name)
|
||||||
}
|
}
|
||||||
|
@ -99,8 +100,8 @@ func newTab(w *ui.Window, name string) *Toolkit {
|
||||||
return &t
|
return &t
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Toolkit) appendTab(name string) *Toolkit {
|
func (t *andlabsT) appendTab(name string) *andlabsT {
|
||||||
var newT Toolkit
|
var newT andlabsT
|
||||||
if (DebugToolkit) {
|
if (DebugToolkit) {
|
||||||
log.Println("gui.toolkit.NewTab() ADD", name)
|
log.Println("gui.toolkit.NewTab() ADD", name)
|
||||||
}
|
}
|
||||||
|
@ -131,3 +132,16 @@ func (t *Toolkit) appendTab(name string) *Toolkit {
|
||||||
newT.uiBox = hbox
|
newT.uiBox = hbox
|
||||||
return &newT
|
return &newT
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func NewTab(parentW *toolkit.Widget, w *toolkit.Widget) {
|
||||||
|
var newt *andlabsT
|
||||||
|
log.Println("gui.andlabs.NewTab()", w.Name)
|
||||||
|
|
||||||
|
t := mapToolkits[parentW]
|
||||||
|
if (t == nil) {
|
||||||
|
log.Println("go.andlabs.NewTab() toolkit struct == nil. name=", parentW.Name, w.Name)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
newt = t.newTab(w.Name)
|
||||||
|
mapWidgetsToolkits(w, newt)
|
||||||
|
}
|
||||||
|
|
|
@ -1,16 +1,18 @@
|
||||||
package toolkit
|
package main
|
||||||
|
|
||||||
import "log"
|
import "log"
|
||||||
|
|
||||||
|
import "git.wit.org/wit/gui/toolkit"
|
||||||
|
|
||||||
import "github.com/andlabs/ui"
|
import "github.com/andlabs/ui"
|
||||||
import _ "github.com/andlabs/ui/winmanifest"
|
import _ "github.com/andlabs/ui/winmanifest"
|
||||||
|
|
||||||
func (t Toolkit) NewTextbox(name string) *Toolkit {
|
func (t andlabsT) NewTextbox(name string) *andlabsT {
|
||||||
|
var newt andlabsT
|
||||||
|
|
||||||
if (DebugToolkit) {
|
if (DebugToolkit) {
|
||||||
log.Println("gui.Toolkit.NewTextbox()", name)
|
log.Println("gui.Toolkit.NewTextbox()", name)
|
||||||
}
|
}
|
||||||
var newt Toolkit
|
|
||||||
|
|
||||||
if t.broken() {
|
if t.broken() {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -32,3 +34,37 @@ func (t Toolkit) NewTextbox(name string) *Toolkit {
|
||||||
|
|
||||||
return &newt
|
return &newt
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func NewTextbox(parentW *toolkit.Widget, w *toolkit.Widget) {
|
||||||
|
var t, newt *andlabsT
|
||||||
|
log.Println("gui.andlabs.NewTextbox()", w.Name)
|
||||||
|
|
||||||
|
t = mapToolkits[parentW]
|
||||||
|
if (t == nil) {
|
||||||
|
log.Println("go.andlabs.NewTextbox() toolkit struct == nil. name=", parentW.Name, w.Name)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if t.broken() {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
newt = new(andlabsT)
|
||||||
|
|
||||||
|
newt.uiLabel = ui.NewLabel(w.Name)
|
||||||
|
newt.uiBox = t.uiBox
|
||||||
|
|
||||||
|
if (DebugToolkit) {
|
||||||
|
log.Println("gui.Toolbox.NewTextbox() about to append to Box parent t:", w.Name)
|
||||||
|
t.Dump()
|
||||||
|
log.Println("gui.Toolbox.NewTextbox() about to append to Box new t:", w.Name)
|
||||||
|
newt.Dump()
|
||||||
|
}
|
||||||
|
if (t.uiBox != nil) {
|
||||||
|
t.uiBox.Append(newt.uiLabel, false)
|
||||||
|
} else {
|
||||||
|
log.Println("ERROR: wit/gui andlabs couldn't place this Textbox in a box")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
mapWidgetsToolkits(w, newt)
|
||||||
|
}
|
||||||
|
|
|
@ -1,57 +1,69 @@
|
||||||
package toolkit
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log"
|
"log"
|
||||||
|
|
||||||
"github.com/andlabs/ui"
|
"github.com/andlabs/ui"
|
||||||
_ "github.com/andlabs/ui/winmanifest"
|
_ "github.com/andlabs/ui/winmanifest"
|
||||||
|
|
||||||
|
"git.wit.org/wit/gui/toolkit"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (t *Toolkit) MessageWindow(msg1 string, msg2 string) {
|
func (t *andlabsT) MessageWindow(msg1 string, msg2 string) {
|
||||||
ui.MsgBox(t.uiWindow, msg1, msg2)
|
ui.MsgBox(t.uiWindow, msg1, msg2)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Toolkit) ErrorWindow(msg1 string, msg2 string) {
|
func (t *andlabsT) ErrorWindow(msg1 string, msg2 string) {
|
||||||
ui.MsgBoxError(t.uiWindow, msg1, msg2)
|
ui.MsgBoxError(t.uiWindow, msg1, msg2)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewWindow(title string, x int, y int) *Toolkit {
|
func NewWindow(w *toolkit.Widget) {
|
||||||
var t Toolkit
|
var t *andlabsT
|
||||||
|
|
||||||
if (DebugToolkit) {
|
if (DebugToolkit) {
|
||||||
log.Println("toolkit NewWindow", title, x, y)
|
log.Println("toolkit NewWindow", w.Name, w.Width, w.Height)
|
||||||
}
|
}
|
||||||
w := ui.NewWindow(title, x, y, menubar)
|
|
||||||
w.SetBorderless(canvas)
|
if (w == nil) {
|
||||||
w.SetMargined(margin)
|
log.Println("wit/gui plugin error. widget == nil")
|
||||||
w.OnClosing(func(*ui.Window) bool {
|
return
|
||||||
|
}
|
||||||
|
t = new(andlabsT)
|
||||||
|
// t = NewWindow2(w.Name, w.Width, w.Height)
|
||||||
|
|
||||||
|
// func NewWindow2(title string, x int, y int) *andlabsT {
|
||||||
|
// menubar bool is if the OS defined border on the window should be used
|
||||||
|
win := ui.NewWindow(w.Name, w.Width, w.Height, menubar)
|
||||||
|
win.SetBorderless(canvas)
|
||||||
|
win.SetMargined(margin)
|
||||||
|
win.OnClosing(func(*ui.Window) bool {
|
||||||
if (DebugToolkit) {
|
if (DebugToolkit) {
|
||||||
log.Println("ui.Window().OnExit() SHOULD ATTEMPT CALLBACK here")
|
log.Println("ui.Window().OnExit() SHOULD ATTEMPT CALLBACK here")
|
||||||
t.Dump()
|
t.Dump()
|
||||||
}
|
}
|
||||||
if (t.OnExit != nil) {
|
if (w.Custom != nil) {
|
||||||
if (DebugToolkit) {
|
w.Custom()
|
||||||
log.Println("ui.Window().OnExit() ATTEMPTING toolkit.OnExit CALLBACK")
|
return true
|
||||||
}
|
|
||||||
t.OnExit(&t)
|
|
||||||
}
|
}
|
||||||
if (t.Custom != nil) {
|
if (w.Event != nil) {
|
||||||
if (DebugToolkit) {
|
w.Event(w)
|
||||||
log.Println("ui.Window().Custom() ATTEMPTING toolkit.Custom CALLBACK")
|
return true
|
||||||
}
|
|
||||||
t.Custom()
|
|
||||||
}
|
}
|
||||||
if (DebugToolkit) {
|
if (DebugToolkit) {
|
||||||
log.Println("ui.Window().OnExit() Toolkit.OnExit is nil")
|
log.Println("andlabs.ui.Window().OnClosing() was not defined")
|
||||||
}
|
}
|
||||||
return true
|
return false
|
||||||
})
|
})
|
||||||
w.Show()
|
win.Show()
|
||||||
t.uiWindow = w
|
t.uiWindow = win
|
||||||
t.UiWindowBad = w // deprecate this as soon as possible
|
t.UiWindowBad = win // deprecate this as soon as possible
|
||||||
return &t
|
t.Name = w.Name
|
||||||
|
|
||||||
|
mapWidgetsToolkits(w, t)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Toolkit) SetWindowTitle(title string) {
|
func (t *andlabsT) SetWindowTitle(title string) {
|
||||||
if (DebugToolkit) {
|
if (DebugToolkit) {
|
||||||
log.Println("toolkit NewWindow", t.Name, "title", title)
|
log.Println("toolkit NewWindow", t.Name, "title", title)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
all: plugin
|
|
||||||
|
|
||||||
plugin:
|
|
||||||
GO111MODULE="off" go build -buildmode=plugin -o ../andlabs2.so
|
|
|
@ -1,67 +0,0 @@
|
||||||
package main
|
|
||||||
|
|
||||||
import "log"
|
|
||||||
// import "os"
|
|
||||||
|
|
||||||
|
|
||||||
import "github.com/andlabs/ui"
|
|
||||||
import _ "github.com/andlabs/ui/winmanifest"
|
|
||||||
|
|
||||||
import "git.wit.org/wit/gui/toolkit"
|
|
||||||
func NewButton(parentW *toolkit.Widget, w *toolkit.Widget) {
|
|
||||||
var t, newt *andlabsT
|
|
||||||
var b *ui.Button
|
|
||||||
log.Println("gui.andlabs.NewButton()", w.Name)
|
|
||||||
|
|
||||||
t = mapToolkits[parentW]
|
|
||||||
if (t == nil) {
|
|
||||||
log.Println("go.andlabs.NewButton() toolkit struct == nil. name=", parentW.Name, w.Name)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if t.broken() {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
newt = new(andlabsT)
|
|
||||||
|
|
||||||
b = ui.NewButton(w.Name)
|
|
||||||
newt.uiButton = b
|
|
||||||
|
|
||||||
b.OnClicked(func(*ui.Button) {
|
|
||||||
if (DebugToolkit) {
|
|
||||||
log.Println("TODO: IN TOOLKIT GOROUTINE. SHOULD LEAVE HERE VIA channels. button name =", w.Name)
|
|
||||||
log.Println("FOUND WIDGET!", w)
|
|
||||||
}
|
|
||||||
if (w.Custom != nil) {
|
|
||||||
w.Custom()
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if (w.Event != nil) {
|
|
||||||
w.Event(w)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
t.Dump()
|
|
||||||
newt.Dump()
|
|
||||||
if (DebugToolkit) {
|
|
||||||
log.Println("TODO: LEFT TOOLKIT GOROUTINE WITH NOTHING TO DO button name =", w.Name)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
if (DebugToolkit) {
|
|
||||||
log.Println("gui.Toolbox.NewButton() about to append to Box parent t:", w.Name)
|
|
||||||
t.Dump()
|
|
||||||
log.Println("gui.Toolbox.NewButton() about to append to Box new t:", w.Name)
|
|
||||||
newt.Dump()
|
|
||||||
}
|
|
||||||
if (t.uiBox != nil) {
|
|
||||||
t.uiBox.Append(b, stretchy)
|
|
||||||
} else if (t.uiWindow != nil) {
|
|
||||||
t.uiWindow.SetChild(b)
|
|
||||||
} else {
|
|
||||||
log.Println("ERROR: wit/gui andlabs couldn't place this button in a box or a window")
|
|
||||||
log.Println("ERROR: wit/gui andlabs couldn't place this button in a box or a window")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
mapWidgetsToolkits(w, newt)
|
|
||||||
}
|
|
|
@ -1,90 +0,0 @@
|
||||||
package main
|
|
||||||
|
|
||||||
import "log"
|
|
||||||
// import "time"
|
|
||||||
|
|
||||||
import "github.com/andlabs/ui"
|
|
||||||
import _ "github.com/andlabs/ui/winmanifest"
|
|
||||||
|
|
||||||
import "git.wit.org/wit/gui/toolkit"
|
|
||||||
|
|
||||||
func (t *andlabsT) NewDropdown(title string) *andlabsT {
|
|
||||||
// make new node here
|
|
||||||
if (DebugToolkit) {
|
|
||||||
log.Println("gui.Toolbox.NewDropdownCombobox()", title)
|
|
||||||
}
|
|
||||||
var newt andlabsT
|
|
||||||
|
|
||||||
if t.broken() {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
s := ui.NewCombobox()
|
|
||||||
newt.uiCombobox = s
|
|
||||||
newt.uiBox = t.uiBox
|
|
||||||
t.uiBox.Append(s, stretchy)
|
|
||||||
|
|
||||||
// initialize the index
|
|
||||||
newt.c = 0
|
|
||||||
newt.val = make(map[int]string)
|
|
||||||
|
|
||||||
s.OnSelected(func(spin *ui.Combobox) {
|
|
||||||
i := spin.Selected()
|
|
||||||
if (newt.val == nil) {
|
|
||||||
log.Println("make map didn't work")
|
|
||||||
newt.text = "error"
|
|
||||||
}
|
|
||||||
newt.text = newt.val[i]
|
|
||||||
newt.commonChange("Dropdown")
|
|
||||||
})
|
|
||||||
|
|
||||||
return &newt
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t *andlabsT) AddDropdownName(title string) {
|
|
||||||
t.uiCombobox.Append(title)
|
|
||||||
if (t.val == nil) {
|
|
||||||
log.Println("make map didn't work")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
t.val[t.c] = title
|
|
||||||
t.c = t.c + 1
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t andlabsT) SetDropdown(i int) {
|
|
||||||
t.uiCombobox.SetSelected(i)
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewDropdown(parentW *toolkit.Widget, w *toolkit.Widget) {
|
|
||||||
log.Println("gui.andlabs.NewDropdown()", w.Name)
|
|
||||||
|
|
||||||
t := mapToolkits[parentW]
|
|
||||||
if (t == nil) {
|
|
||||||
log.Println("go.andlabs.NewDropdown() toolkit struct == nil. name=", parentW.Name, w.Name)
|
|
||||||
listMap()
|
|
||||||
}
|
|
||||||
newt := t.NewDropdown(w.Name)
|
|
||||||
mapWidgetsToolkits(w, newt)
|
|
||||||
}
|
|
||||||
|
|
||||||
func AddDropdownName(w *toolkit.Widget, s string) {
|
|
||||||
log.Println("gui.andlabs.AddDropdownName()", w.Name, "add:", s)
|
|
||||||
|
|
||||||
t := mapToolkits[w]
|
|
||||||
if (t == nil) {
|
|
||||||
log.Println("go.andlabs.AddDropdownName() toolkit struct == nil. name=", w.Name, s)
|
|
||||||
listMap()
|
|
||||||
}
|
|
||||||
t.AddDropdownName(s)
|
|
||||||
}
|
|
||||||
|
|
||||||
func SetDropdown(w *toolkit.Widget, i int) {
|
|
||||||
log.Println("gui.andlabs.SetDropdown()", i)
|
|
||||||
|
|
||||||
t := mapToolkits[w]
|
|
||||||
if (t == nil) {
|
|
||||||
log.Println("go.andlabs.SetDropdown() toolkit struct == nil. name=", w.Name, i)
|
|
||||||
listMap()
|
|
||||||
}
|
|
||||||
t.SetDropdown(i)
|
|
||||||
}
|
|
|
@ -1,42 +0,0 @@
|
||||||
package main
|
|
||||||
|
|
||||||
import "log"
|
|
||||||
|
|
||||||
import "github.com/andlabs/ui"
|
|
||||||
import _ "github.com/andlabs/ui/winmanifest"
|
|
||||||
|
|
||||||
import "git.wit.org/wit/gui/toolkit"
|
|
||||||
|
|
||||||
func NewLabel(parentW *toolkit.Widget, w *toolkit.Widget) {
|
|
||||||
var t, newt *andlabsT
|
|
||||||
log.Println("gui.andlabs.NewButton()", w.Name)
|
|
||||||
|
|
||||||
t = mapToolkits[parentW]
|
|
||||||
if (t == nil) {
|
|
||||||
log.Println("go.andlabs.NewButton() toolkit struct == nil. name=", parentW.Name, w.Name)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if t.broken() {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
newt = new(andlabsT)
|
|
||||||
|
|
||||||
newt.uiLabel = ui.NewLabel(w.Name)
|
|
||||||
newt.uiBox = t.uiBox
|
|
||||||
|
|
||||||
if (DebugToolkit) {
|
|
||||||
log.Println("gui.Toolbox.NewButton() about to append to Box parent t:", w.Name)
|
|
||||||
t.Dump()
|
|
||||||
log.Println("gui.Toolbox.NewButton() about to append to Box new t:", w.Name)
|
|
||||||
newt.Dump()
|
|
||||||
}
|
|
||||||
if (t.uiBox != nil) {
|
|
||||||
t.uiBox.Append(newt.uiLabel, false)
|
|
||||||
} else {
|
|
||||||
log.Println("ERROR: wit/gui andlabs couldn't place this label in a box")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
mapWidgetsToolkits(w, newt)
|
|
||||||
}
|
|
|
@ -1,56 +0,0 @@
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"log"
|
|
||||||
// "time"
|
|
||||||
|
|
||||||
"git.wit.org/wit/gui/toolkit"
|
|
||||||
|
|
||||||
"github.com/andlabs/ui"
|
|
||||||
// the _ means we only need this for the init()
|
|
||||||
_ "github.com/andlabs/ui/winmanifest"
|
|
||||||
)
|
|
||||||
|
|
||||||
func Main(f func()) {
|
|
||||||
if (DebugToolkit) {
|
|
||||||
log.Println("Starting gui.Main() (using gtk via andlabs/ui)")
|
|
||||||
}
|
|
||||||
ui.Main( func() {
|
|
||||||
log.Println("Starting gui.Main() (using gtk via andlabs/ui)")
|
|
||||||
log.Println("Starting gui.Main() (using gtk via andlabs/ui)")
|
|
||||||
log.Println("Starting gui.Main() (using gtk via andlabs/ui)")
|
|
||||||
log.Println("Starting gui.Main() (using gtk via andlabs/ui)")
|
|
||||||
log.Println("Starting gui.Main() (using gtk via andlabs/ui)")
|
|
||||||
log.Println("Starting gui.Main() (using gtk via andlabs/ui)")
|
|
||||||
// time.Sleep(1 * time.Second)
|
|
||||||
// NewWindow2("helloworld2", 200, 100)
|
|
||||||
f()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// Other goroutines must use this to access the GUI
|
|
||||||
//
|
|
||||||
// You can not acess / process the GUI thread directly from
|
|
||||||
// other goroutines. This is due to the nature of how
|
|
||||||
// Linux, MacOS and Windows work (they all work differently. suprise. surprise.)
|
|
||||||
//
|
|
||||||
// For example: Queue(NewWindow())
|
|
||||||
//
|
|
||||||
func Queue(f func()) {
|
|
||||||
if (DebugToolkit) {
|
|
||||||
log.Println("Sending function to ui.QueueMain() (using gtk via andlabs/ui)")
|
|
||||||
}
|
|
||||||
ui.QueueMain(f)
|
|
||||||
}
|
|
||||||
|
|
||||||
func Init() {
|
|
||||||
log.Println("should Init() here")
|
|
||||||
|
|
||||||
mapWidgets = make(map[*andlabsT]*toolkit.Widget)
|
|
||||||
mapToolkits = make(map[*toolkit.Widget]*andlabsT)
|
|
||||||
}
|
|
||||||
|
|
||||||
func Quit() {
|
|
||||||
log.Println("should Quit() here")
|
|
||||||
// myExit(nil)
|
|
||||||
}
|
|
|
@ -1,48 +0,0 @@
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"log"
|
|
||||||
"os"
|
|
||||||
|
|
||||||
"git.wit.org/wit/gui/toolkit"
|
|
||||||
|
|
||||||
"github.com/andlabs/ui"
|
|
||||||
_ "github.com/andlabs/ui/winmanifest"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (t andlabsT) NewSlider(title string, x int, y int) *andlabsT {
|
|
||||||
// make new node here
|
|
||||||
log.Println("gui.Toolkit.NewSpinbox()", x, y)
|
|
||||||
var newt andlabsT
|
|
||||||
|
|
||||||
if (t.uiBox == nil) {
|
|
||||||
log.Println("gui.ToolkitNode.NewGroup() node.UiBox == nil. I can't add a range UI element without a place to put it")
|
|
||||||
log.Println("probably could just make a box here?")
|
|
||||||
os.Exit(0)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
s := ui.NewSlider(x, y)
|
|
||||||
newt.uiSlider = s
|
|
||||||
newt.uiBox = t.uiBox
|
|
||||||
t.uiBox.Append(s, stretchy)
|
|
||||||
|
|
||||||
s.OnChanged(func(spin *ui.Slider) {
|
|
||||||
newt.commonChange("Slider")
|
|
||||||
})
|
|
||||||
|
|
||||||
return &newt
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewSlider(parentW *toolkit.Widget, w *toolkit.Widget) {
|
|
||||||
var newt *andlabsT
|
|
||||||
log.Println("gui.andlabs.NewTab()", w.Name)
|
|
||||||
|
|
||||||
t := mapToolkits[parentW]
|
|
||||||
if (t == nil) {
|
|
||||||
log.Println("go.andlabs.NewTab() toolkit struct == nil. name=", parentW.Name, w.Name)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
newt = t.NewSlider(w.Name, w.X, w.Y)
|
|
||||||
mapWidgetsToolkits(w, newt)
|
|
||||||
}
|
|
|
@ -1,70 +0,0 @@
|
||||||
package main
|
|
||||||
|
|
||||||
import "log"
|
|
||||||
|
|
||||||
import "git.wit.org/wit/gui/toolkit"
|
|
||||||
|
|
||||||
import "github.com/andlabs/ui"
|
|
||||||
import _ "github.com/andlabs/ui/winmanifest"
|
|
||||||
|
|
||||||
func (t andlabsT) NewTextbox(name string) *andlabsT {
|
|
||||||
var newt andlabsT
|
|
||||||
|
|
||||||
if (DebugToolkit) {
|
|
||||||
log.Println("gui.Toolkit.NewTextbox()", name)
|
|
||||||
}
|
|
||||||
if t.broken() {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
c := ui.NewNonWrappingMultilineEntry()
|
|
||||||
newt.uiMultilineEntry = c
|
|
||||||
|
|
||||||
newt.uiBox = t.uiBox
|
|
||||||
newt.Name = name
|
|
||||||
if (defaultBehavior) {
|
|
||||||
t.uiBox.Append(c, true)
|
|
||||||
} else {
|
|
||||||
t.uiBox.Append(c, stretchy)
|
|
||||||
}
|
|
||||||
|
|
||||||
c.OnChanged(func(spin *ui.MultilineEntry) {
|
|
||||||
newt.commonChange("Textbox")
|
|
||||||
})
|
|
||||||
|
|
||||||
return &newt
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewTextbox(parentW *toolkit.Widget, w *toolkit.Widget) {
|
|
||||||
var t, newt *andlabsT
|
|
||||||
log.Println("gui.andlabs.NewTextbox()", w.Name)
|
|
||||||
|
|
||||||
t = mapToolkits[parentW]
|
|
||||||
if (t == nil) {
|
|
||||||
log.Println("go.andlabs.NewTextbox() toolkit struct == nil. name=", parentW.Name, w.Name)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if t.broken() {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
newt = new(andlabsT)
|
|
||||||
|
|
||||||
newt.uiLabel = ui.NewLabel(w.Name)
|
|
||||||
newt.uiBox = t.uiBox
|
|
||||||
|
|
||||||
if (DebugToolkit) {
|
|
||||||
log.Println("gui.Toolbox.NewTextbox() about to append to Box parent t:", w.Name)
|
|
||||||
t.Dump()
|
|
||||||
log.Println("gui.Toolbox.NewTextbox() about to append to Box new t:", w.Name)
|
|
||||||
newt.Dump()
|
|
||||||
}
|
|
||||||
if (t.uiBox != nil) {
|
|
||||||
t.uiBox.Append(newt.uiLabel, false)
|
|
||||||
} else {
|
|
||||||
log.Println("ERROR: wit/gui andlabs couldn't place this Textbox in a box")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
mapWidgetsToolkits(w, newt)
|
|
||||||
}
|
|
|
@ -1,78 +0,0 @@
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"log"
|
|
||||||
|
|
||||||
"github.com/andlabs/ui"
|
|
||||||
_ "github.com/andlabs/ui/winmanifest"
|
|
||||||
|
|
||||||
"git.wit.org/wit/gui/toolkit"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (t *andlabsT) MessageWindow(msg1 string, msg2 string) {
|
|
||||||
ui.MsgBox(t.uiWindow, msg1, msg2)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t *andlabsT) ErrorWindow(msg1 string, msg2 string) {
|
|
||||||
ui.MsgBoxError(t.uiWindow, msg1, msg2)
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewWindow(w *toolkit.Widget) {
|
|
||||||
var t *andlabsT
|
|
||||||
|
|
||||||
if (DebugToolkit) {
|
|
||||||
log.Println("toolkit NewWindow", w.Name, w.Width, w.Height)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (w == nil) {
|
|
||||||
log.Println("wit/gui plugin error. widget == nil")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
t = new(andlabsT)
|
|
||||||
// t = NewWindow2(w.Name, w.Width, w.Height)
|
|
||||||
|
|
||||||
// func NewWindow2(title string, x int, y int) *andlabsT {
|
|
||||||
// menubar bool is if the OS defined border on the window should be used
|
|
||||||
win := ui.NewWindow(w.Name, w.Width, w.Height, menubar)
|
|
||||||
win.SetBorderless(canvas)
|
|
||||||
win.SetMargined(margin)
|
|
||||||
win.OnClosing(func(*ui.Window) bool {
|
|
||||||
if (DebugToolkit) {
|
|
||||||
log.Println("ui.Window().OnExit() SHOULD ATTEMPT CALLBACK here")
|
|
||||||
t.Dump()
|
|
||||||
}
|
|
||||||
if (w.Custom != nil) {
|
|
||||||
w.Custom()
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
if (w.Event != nil) {
|
|
||||||
w.Event(w)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
if (DebugToolkit) {
|
|
||||||
log.Println("andlabs.ui.Window().OnClosing() was not defined")
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
})
|
|
||||||
win.Show()
|
|
||||||
t.uiWindow = win
|
|
||||||
t.UiWindowBad = win // deprecate this as soon as possible
|
|
||||||
t.Name = w.Name
|
|
||||||
|
|
||||||
mapWidgetsToolkits(w, t)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t *andlabsT) SetWindowTitle(title string) {
|
|
||||||
if (DebugToolkit) {
|
|
||||||
log.Println("toolkit NewWindow", t.Name, "title", title)
|
|
||||||
}
|
|
||||||
win := t.uiWindow
|
|
||||||
if (win != nil) {
|
|
||||||
win.SetTitle(title)
|
|
||||||
} else {
|
|
||||||
if (DebugToolkit) {
|
|
||||||
log.Println("Setting the window title", title)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -28,6 +28,7 @@ var (
|
||||||
helpLabel *gocui.View
|
helpLabel *gocui.View
|
||||||
err error
|
err error
|
||||||
ch chan(func ())
|
ch chan(func ())
|
||||||
|
outf *os.File
|
||||||
)
|
)
|
||||||
|
|
||||||
func Init() {
|
func Init() {
|
||||||
|
@ -50,6 +51,16 @@ func Init() {
|
||||||
stringWidget = make(map[string]*toolkit.Widget)
|
stringWidget = make(map[string]*toolkit.Widget)
|
||||||
|
|
||||||
ch = make(chan func())
|
ch = make(chan func())
|
||||||
|
|
||||||
|
outf, err = os.OpenFile("/tmp/witgui.log", os.O_RDWR | os.O_CREATE | os.O_APPEND, 0666)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("error opening file: %v", err)
|
||||||
|
}
|
||||||
|
// hmm. where to put this?
|
||||||
|
// defer outf.Close()
|
||||||
|
|
||||||
|
log.SetOutput(outf)
|
||||||
|
log.Println("This is a test log entry")
|
||||||
}
|
}
|
||||||
|
|
||||||
func Queue(f func()) {
|
func Queue(f func()) {
|
||||||
|
@ -58,6 +69,8 @@ func Queue(f func()) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func Main(f func()) {
|
func Main(f func()) {
|
||||||
|
// close the STDOUT log file
|
||||||
|
defer outf.Close()
|
||||||
if (baseGui == nil) {
|
if (baseGui == nil) {
|
||||||
panic("WTF Main()")
|
panic("WTF Main()")
|
||||||
}
|
}
|
||||||
|
@ -76,7 +89,7 @@ func layout(g *gocui.Gui) error {
|
||||||
var err error
|
var err error
|
||||||
maxX, _ := g.Size()
|
maxX, _ := g.Size()
|
||||||
|
|
||||||
helpLabel, err = g.SetView("help", maxX-32, 0, maxX-1, 11, 0)
|
helpLabel, err = g.SetView("help", maxX-32, 0, maxX-1, 12, 0)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if !errors.Is(err, gocui.ErrUnknownView) {
|
if !errors.Is(err, gocui.ErrUnknownView) {
|
||||||
return err
|
return err
|
||||||
|
@ -90,6 +103,7 @@ func layout(g *gocui.Gui) error {
|
||||||
fmt.Fprintln(helpLabel, "Arrow keys: Move Button")
|
fmt.Fprintln(helpLabel, "Arrow keys: Move Button")
|
||||||
fmt.Fprintln(helpLabel, "t: Move Button to the top")
|
fmt.Fprintln(helpLabel, "t: Move Button to the top")
|
||||||
fmt.Fprintln(helpLabel, "b: Move Button to the button")
|
fmt.Fprintln(helpLabel, "b: Move Button to the button")
|
||||||
|
fmt.Fprintln(helpLabel, "STDOUT: /tmp/witgui.log")
|
||||||
fmt.Fprintln(helpLabel, "Ctrl-C or Q: Exit")
|
fmt.Fprintln(helpLabel, "Ctrl-C or Q: Exit")
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -130,7 +130,7 @@ func initKeybindings(g *gocui.Gui) error {
|
||||||
g.SetCurrentView("help")
|
g.SetCurrentView("help")
|
||||||
// moveView(g, tmp, 0, -delta)
|
// moveView(g, tmp, 0, -delta)
|
||||||
if err := g.DeleteView("help"); err != nil {
|
if err := g.DeleteView("help"); err != nil {
|
||||||
panic(err)
|
log.Fatalln("gocui SetKeybinding()", err)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
|
|
|
@ -14,7 +14,6 @@ import (
|
||||||
// my guess).
|
// my guess).
|
||||||
func NewWindow() *Node {
|
func NewWindow() *Node {
|
||||||
var newNode *Node
|
var newNode *Node
|
||||||
// var t *toolkit.Toolkit
|
|
||||||
|
|
||||||
title := Config.Title
|
title := Config.Title
|
||||||
// Windows are created off of the master node of the Binary Tree
|
// Windows are created off of the master node of the Binary Tree
|
||||||
|
@ -38,9 +37,6 @@ func NewWindow() *Node {
|
||||||
|
|
||||||
log.Println("gui.Node.Window()", title)
|
log.Println("gui.Node.Window()", title)
|
||||||
|
|
||||||
// t = toolkit.NewWindow(title, w, h)
|
|
||||||
// n.toolkit = t
|
|
||||||
|
|
||||||
for _, aplug := range allPlugins {
|
for _, aplug := range allPlugins {
|
||||||
log.Println("gui.Node.NewWindow() toolkit plugin =", aplug.name)
|
log.Println("gui.Node.NewWindow() toolkit plugin =", aplug.name)
|
||||||
if (aplug.NewWindow == nil) {
|
if (aplug.NewWindow == nil) {
|
||||||
|
@ -50,9 +46,5 @@ func NewWindow() *Node {
|
||||||
aplug.NewWindow(&newNode.Widget)
|
aplug.NewWindow(&newNode.Widget)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: this is still confusing and probably wrong. This needs to communicate through a channel
|
|
||||||
// newNode.toolkit = n.toolkit.NewButton(name)
|
|
||||||
// newNode.toolkit.Custom = newNode.Widget.Custom
|
|
||||||
|
|
||||||
return newNode
|
return newNode
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue