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
|
||||
|
||||
# sync repo to the github backup
|
||||
# git remote add github git@github.com:witorg/gui.git
|
||||
github:
|
||||
git push origin master
|
||||
git push github master
|
||||
git push github devel
|
||||
git push github jcarr
|
||||
@echo
|
||||
@echo check https://github.com/witorg/gui
|
||||
@echo
|
||||
|
@ -49,14 +52,14 @@ README.md: doc.go
|
|||
clean:
|
||||
rm -f toolkit/*.so
|
||||
|
||||
plugins: plugins-gocui plugins-andlabs2
|
||||
plugins: plugins-gocui plugins-andlabs
|
||||
|
||||
plugins-gocui:
|
||||
make -C toolkit/gocui
|
||||
|
||||
plugins-andlabs2:
|
||||
cd toolkit/andlabs2/ && GO111MODULE="off" go build -buildmode=plugin -o ../andlabs2.so
|
||||
# make -C toolkit/andlabs2
|
||||
plugins-andlabs:
|
||||
cd toolkit/andlabs/ && GO111MODULE="off" go build -buildmode=plugin -o ../andlabs.so
|
||||
# make -C toolkit/andlabs
|
||||
|
||||
objdump:
|
||||
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
|
||||
|
||||
### func [GetDebug](/structs.go#L25)
|
||||
### func [GetDebug](/structs.go#L23)
|
||||
|
||||
`func GetDebug() bool`
|
||||
|
||||
### func [GetDebugToolkit](/structs.go#L37)
|
||||
### func [GetDebugToolkit](/structs.go#L34)
|
||||
|
||||
`func GetDebugToolkit() bool`
|
||||
|
||||
|
@ -140,7 +140,7 @@ This creates a window that shows how this package works
|
|||
|
||||
`func GolangDebugWindow()`
|
||||
|
||||
### func [IndentPrintln](/structs.go#L188)
|
||||
### func [IndentPrintln](/structs.go#L159)
|
||||
|
||||
`func IndentPrintln(a ...interface{})`
|
||||
|
||||
|
@ -160,15 +160,26 @@ loads and initializes a toolkit (andlabs/ui, gocui, etc)
|
|||
|
||||
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 [SetDebugToolkit](/structs.go#L41)
|
||||
### func [SetDebugToolkit](/structs.go#L38)
|
||||
|
||||
`func SetDebugToolkit(s bool)`
|
||||
|
||||
### func [ShowDebugValues](/structs.go#L45)
|
||||
### func [ShowDebugValues](/structs.go#L42)
|
||||
|
||||
`func ShowDebugValues()`
|
||||
|
||||
|
@ -195,7 +206,7 @@ This goroutine can be used like a watchdog timer
|
|||
|
||||
## Types
|
||||
|
||||
### type [GuiConfig](/structs.go#L68)
|
||||
### type [GuiConfig](/structs.go#L65)
|
||||
|
||||
`type GuiConfig struct { ... }`
|
||||
|
||||
|
@ -205,13 +216,13 @@ This goroutine can be used like a watchdog timer
|
|||
var Config GuiConfig
|
||||
```
|
||||
|
||||
### type [GuiDebug](/structs.go#L56)
|
||||
### type [GuiDebug](/structs.go#L53)
|
||||
|
||||
`type GuiDebug struct { ... }`
|
||||
|
||||
This struct can be used with go-arg
|
||||
|
||||
### type [Node](/structs.go#L87)
|
||||
### type [Node](/structs.go#L84)
|
||||
|
||||
`type Node struct { ... }`
|
||||
|
||||
|
|
|
@ -207,8 +207,6 @@ my guess).
|
|||
|
||||
## Sub Packages
|
||||
|
||||
* [need-to-redo](./need-to-redo)
|
||||
|
||||
* [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")
|
||||
})
|
||||
|
||||
g.NewButton("LoadToolkit(andlabs2)", func () {
|
||||
gui.LoadToolkit("andlabs2")
|
||||
g.NewButton("LoadToolkit(andlabs)", func () {
|
||||
gui.LoadToolkit("andlabs")
|
||||
})
|
||||
|
||||
g.NewButton("LoadToolkit(gocui)", func () {
|
||||
|
|
|
@ -24,7 +24,7 @@ isAlpha := regexp.MustCompile(`^[A-Za-z]+$`).MatchString
|
|||
|
||||
for _, username := range []string{"userone", "user2", "user-three"} {
|
||||
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 toolkit "git.wit.org/wit/gui/toolkit/andlabs"
|
||||
// import newtoolkit "git.wit.org/wit/gui/toolkit"
|
||||
|
||||
// TODO: which name is better. AddGroup or NewGroup ?
|
||||
// first reaction is NewGroup
|
||||
func (n *Node) NewGroup(name string) *Node {
|
||||
// var newT *toolkit.Toolkit
|
||||
var newNode *Node
|
||||
|
||||
if (GetDebug()) {
|
||||
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)
|
||||
|
||||
log.Println("gui.Node.NewGroup()", name)
|
||||
|
@ -31,16 +22,5 @@ func (n *Node) NewGroup(name string) *Node {
|
|||
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
|
||||
}
|
||||
|
||||
/*
|
||||
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
|
||||
// TODO: detect the OS & user preferences to load the best one
|
||||
if (initBAD) {
|
||||
if (LoadToolkit("andlabs2")) {
|
||||
if (LoadToolkit("andlabs")) {
|
||||
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 (LoadToolkit("gocui")) {
|
||||
initBAD = false
|
||||
|
@ -112,7 +112,7 @@ func Main(f func()) {
|
|||
// 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 queue(f func()) {
|
||||
func Queue(f func()) {
|
||||
log.Println("Sending function to gui.Main() (using gtk via andlabs/ui)")
|
||||
// toolkit.Queue(f)
|
||||
for _, aplug := range allPlugins {
|
||||
|
|
36
structs.go
36
structs.go
|
@ -3,11 +3,9 @@ package gui
|
|||
import (
|
||||
"log"
|
||||
"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
|
||||
// within the toolkit/ abstraction layer
|
||||
|
@ -31,7 +29,6 @@ func SetDebug (s bool) {
|
|||
// also set these
|
||||
Config.Debug.Dump = s
|
||||
Config.Debug.Node = s
|
||||
// toolkit.DebugToolkit = s
|
||||
}
|
||||
|
||||
func GetDebugToolkit () bool {
|
||||
|
@ -92,7 +89,7 @@ type Node struct {
|
|||
Width int
|
||||
Height int
|
||||
|
||||
Widget newtoolkit.Widget
|
||||
Widget toolkit.Widget
|
||||
|
||||
// this function is run when there are mouse or keyboard events
|
||||
OnChanged func(*Node)
|
||||
|
@ -101,9 +98,6 @@ type Node struct {
|
|||
// TODO: make children a double linked list since some toolkits require order (?)
|
||||
children []*Node
|
||||
|
||||
// hmm. how do you handle this when the toolkits are plugins?
|
||||
// toolkit *toolkit.Toolkit
|
||||
|
||||
// things that may not really be needed (?)
|
||||
custom func()
|
||||
checked bool
|
||||
|
@ -144,26 +138,9 @@ func (n *Node) Dump() {
|
|||
IndentPrintln("OnChanged = ", n.OnChanged)
|
||||
}
|
||||
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")
|
||||
}
|
||||
|
||||
/*
|
||||
func (n *Node) SetName(name string) {
|
||||
n.toolkit.SetWindowTitle(name)
|
||||
return
|
||||
}
|
||||
*/
|
||||
|
||||
func (n *Node) Append(child *Node) {
|
||||
n.children = append(n.children, child)
|
||||
if (Config.Debug.Debug) {
|
||||
|
@ -175,12 +152,6 @@ func (n *Node) Append(child *Node) {
|
|||
// time.Sleep(3 * time.Second)
|
||||
}
|
||||
|
||||
/*
|
||||
func (n *Node) List() {
|
||||
findByIdDFS(n, "test")
|
||||
}
|
||||
*/
|
||||
|
||||
var listChildrenParent *Node
|
||||
var listChildrenDepth int = 0
|
||||
var defaultPadding = " "
|
||||
|
@ -217,8 +188,7 @@ func (n *Node) ListChildren(dump bool) {
|
|||
log.Println("\t\t\tlistChildrenParent =",listChildrenParent.id)
|
||||
}
|
||||
if (listChildrenParent.id != n.parent.id) {
|
||||
log.Println("parent.child does not match child.parent")
|
||||
panic("parent.child does not match child.parent")
|
||||
log.Fatalln("parent.child does not match child.parent")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
package main
|
||||
package toolkit
|
||||
|
||||
import "log"
|
||||
|
||||
|
@ -6,12 +6,12 @@ import "github.com/andlabs/ui"
|
|||
import _ "github.com/andlabs/ui/winmanifest"
|
||||
|
||||
// create a new box
|
||||
func (t *andlabsT) GetBox() *ui.Box {
|
||||
func (t *Toolkit) GetBox() *ui.Box {
|
||||
return t.uiBox
|
||||
}
|
||||
|
||||
// create a new box
|
||||
func (t *andlabsT) NewBox() *andlabsT {
|
||||
func (t *Toolkit) NewBox() *Toolkit {
|
||||
if (DebugToolkit) {
|
||||
log.Println("gui.Toolbox.NewBox() START create default")
|
||||
}
|
||||
|
@ -20,7 +20,7 @@ func (t *andlabsT) NewBox() *andlabsT {
|
|||
if (DebugToolkit) {
|
||||
log.Println("\tgui.Toolbox.NewBox() is a Group")
|
||||
}
|
||||
var newTK andlabsT
|
||||
var newTK Toolkit
|
||||
|
||||
vbox := ui.NewVerticalBox()
|
||||
vbox.SetPadded(padded)
|
||||
|
@ -33,7 +33,7 @@ func (t *andlabsT) NewBox() *andlabsT {
|
|||
if (DebugToolkit) {
|
||||
log.Println("\tgui.Toolbox.NewBox() is a Box")
|
||||
}
|
||||
var newTK andlabsT
|
||||
var newTK Toolkit
|
||||
|
||||
vbox := ui.NewVerticalBox()
|
||||
vbox.SetPadded(padded)
|
||||
|
@ -47,7 +47,7 @@ func (t *andlabsT) NewBox() *andlabsT {
|
|||
if (DebugToolkit) {
|
||||
log.Println("\tgui.Toolbox.NewBox() is a Window")
|
||||
}
|
||||
var newT andlabsT
|
||||
var newT Toolkit
|
||||
|
||||
vbox := ui.NewVerticalBox()
|
||||
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 "github.com/andlabs/ui"
|
||||
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)
|
||||
var newt andlabsT
|
||||
var newt Toolkit
|
||||
|
||||
if t.broken() {
|
||||
return nil
|
||||
|
@ -25,7 +25,7 @@ func (t andlabsT) NewCheckbox(name string) *andlabsT {
|
|||
return &newt
|
||||
}
|
||||
|
||||
func (t andlabsT) Checked() bool {
|
||||
func (t Toolkit) Checked() bool {
|
||||
if t.broken() {
|
||||
return false
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package main
|
||||
package toolkit
|
||||
|
||||
import "log"
|
||||
|
||||
|
@ -9,7 +9,7 @@ func init() {
|
|||
setDefaultBehavior(true)
|
||||
}
|
||||
|
||||
func (t andlabsT) commonChange(widget string) {
|
||||
func (t Toolkit) commonChange(widget string) {
|
||||
s := t.String()
|
||||
if (DebugToolkit) {
|
||||
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
|
||||
// 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.uiWindow != nil) {
|
||||
if (DebugToolkit) {
|
|
@ -1,4 +1,4 @@
|
|||
package main
|
||||
package toolkit
|
||||
|
||||
import "log"
|
||||
|
||||
|
@ -19,7 +19,7 @@ func BlankWindow(w *ui.Window) *ui.Box {
|
|||
return hbox
|
||||
}
|
||||
|
||||
func (t *andlabsT) DemoNumbersPage() {
|
||||
func (t *Toolkit) DemoNumbersPage() {
|
||||
var w *ui.Window
|
||||
|
||||
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 "os"
|
||||
|
@ -6,23 +6,9 @@ import "os"
|
|||
import "github.com/andlabs/ui"
|
||||
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
|
||||
func (t andlabsT) NewGroup(title string) *andlabsT {
|
||||
var newt andlabsT
|
||||
func (t Toolkit) NewGroup(title string) *Toolkit {
|
||||
var newt Toolkit
|
||||
|
||||
if (DebugToolkit) {
|
||||
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 "os"
|
||||
|
@ -6,10 +6,10 @@ import "os"
|
|||
import "github.com/andlabs/ui"
|
||||
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
|
||||
log.Println("gui.Toolkit.NewSpinner()", x, y)
|
||||
var newt andlabsT
|
||||
var newt Toolkit
|
||||
|
||||
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")
|
|
@ -1,4 +1,4 @@
|
|||
package main
|
||||
package toolkit
|
||||
|
||||
import "log"
|
||||
|
||||
|
@ -47,15 +47,15 @@ func GetDebugToolkit () bool {
|
|||
}
|
||||
|
||||
// stores the raw toolkit internals
|
||||
type andlabsT struct {
|
||||
type Toolkit struct {
|
||||
id string
|
||||
|
||||
Name string
|
||||
Width int
|
||||
Height int
|
||||
|
||||
OnChanged func(*andlabsT)
|
||||
OnExit func(*andlabsT)
|
||||
OnChanged func(*Toolkit)
|
||||
OnExit func(*Toolkit)
|
||||
|
||||
Custom func()
|
||||
|
||||
|
@ -84,18 +84,18 @@ type andlabsT struct {
|
|||
text string
|
||||
}
|
||||
|
||||
func (t *andlabsT) String() string {
|
||||
func (t *Toolkit) String() string {
|
||||
return t.GetText()
|
||||
}
|
||||
|
||||
func forceDump(t *andlabsT) {
|
||||
func forceDump(t *Toolkit) {
|
||||
tmp := DebugToolkit
|
||||
DebugToolkit = true
|
||||
t.Dump()
|
||||
DebugToolkit = tmp
|
||||
}
|
||||
|
||||
func (t *andlabsT) GetText() string {
|
||||
func (t *Toolkit) GetText() string {
|
||||
t.Dump()
|
||||
if (DebugToolkit) {
|
||||
log.Println("gui.Toolkit.Text() Enter")
|
||||
|
@ -128,7 +128,7 @@ func (t *andlabsT) GetText() string {
|
|||
return ""
|
||||
}
|
||||
|
||||
func (t *andlabsT) SetText(s string) bool {
|
||||
func (t *Toolkit) SetText(s string) bool {
|
||||
if (DebugToolkit) {
|
||||
log.Println("gui.Toolkit.Text() Enter")
|
||||
scs := spew.ConfigState{MaxDepth: 1}
|
||||
|
@ -151,7 +151,7 @@ func (t *andlabsT) SetText(s string) bool {
|
|||
return false
|
||||
}
|
||||
|
||||
func sanity(t *andlabsT) bool {
|
||||
func sanity(t *Toolkit) bool {
|
||||
if (DebugToolkit) {
|
||||
log.Println("gui.Toolkit.Value() Enter")
|
||||
scs := spew.ConfigState{MaxDepth: 1}
|
||||
|
@ -166,7 +166,7 @@ func sanity(t *andlabsT) bool {
|
|||
return true
|
||||
}
|
||||
|
||||
func (t *andlabsT) SetValue(i int) bool {
|
||||
func (t *Toolkit) SetValue(i int) bool {
|
||||
log.Println("gui.Toolkit.SetValue() START")
|
||||
if (sanity(t)) {
|
||||
return false
|
||||
|
@ -176,7 +176,7 @@ func (t *andlabsT) SetValue(i int) bool {
|
|||
return true
|
||||
}
|
||||
|
||||
func (t *andlabsT) Value() int {
|
||||
func (t *Toolkit) Value() int {
|
||||
if (DebugToolkit) {
|
||||
log.Println("gui.Toolkit.Value() Enter")
|
||||
scs := spew.ConfigState{MaxDepth: 1}
|
||||
|
@ -202,7 +202,7 @@ func (t *andlabsT) Value() int {
|
|||
return 0
|
||||
}
|
||||
|
||||
func (t *andlabsT) Dump() {
|
||||
func (t *Toolkit) Dump() {
|
||||
if ! DebugToolkit {
|
||||
return
|
||||
}
|
|
@ -1,13 +1,12 @@
|
|||
package main
|
||||
package toolkit
|
||||
|
||||
import (
|
||||
"log"
|
||||
"time"
|
||||
|
||||
"git.wit.org/wit/gui/toolkit"
|
||||
|
||||
"github.com/andlabs/ui"
|
||||
_ "github.com/andlabs/ui/winmanifest"
|
||||
|
||||
)
|
||||
|
||||
/*
|
||||
|
@ -22,9 +21,9 @@ import (
|
|||
once there is one. If you send a Window here, it will replace
|
||||
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 newt *andlabsT
|
||||
var newt *Toolkit
|
||||
|
||||
log.Println("gui.toolkit.AddTab() sleep 3")
|
||||
|
||||
|
@ -69,8 +68,8 @@ func tabSetMargined(tab *ui.Tab) {
|
|||
}
|
||||
}
|
||||
|
||||
func newTab(w *ui.Window, name string) *andlabsT {
|
||||
var t andlabsT
|
||||
func newTab(w *ui.Window, name string) *Toolkit {
|
||||
var t Toolkit
|
||||
if (DebugToolkit) {
|
||||
log.Println("gui.toolkit.NewTab() ADD", name)
|
||||
}
|
||||
|
@ -100,8 +99,8 @@ func newTab(w *ui.Window, name string) *andlabsT {
|
|||
return &t
|
||||
}
|
||||
|
||||
func (t *andlabsT) appendTab(name string) *andlabsT {
|
||||
var newT andlabsT
|
||||
func (t *Toolkit) appendTab(name string) *Toolkit {
|
||||
var newT Toolkit
|
||||
if (DebugToolkit) {
|
||||
log.Println("gui.toolkit.NewTab() ADD", name)
|
||||
}
|
||||
|
@ -132,16 +131,3 @@ func (t *andlabsT) appendTab(name string) *andlabsT {
|
|||
newT.uiBox = hbox
|
||||
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"
|
||||
|
||||
|
@ -6,12 +6,12 @@ import "github.com/andlabs/ui"
|
|||
import _ "github.com/andlabs/ui/winmanifest"
|
||||
|
||||
// create a new box
|
||||
func (t *Toolkit) GetBox() *ui.Box {
|
||||
func (t *andlabsT) GetBox() *ui.Box {
|
||||
return t.uiBox
|
||||
}
|
||||
|
||||
// create a new box
|
||||
func (t *Toolkit) NewBox() *Toolkit {
|
||||
func (t *andlabsT) NewBox() *andlabsT {
|
||||
if (DebugToolkit) {
|
||||
log.Println("gui.Toolbox.NewBox() START create default")
|
||||
}
|
||||
|
@ -20,7 +20,7 @@ func (t *Toolkit) NewBox() *Toolkit {
|
|||
if (DebugToolkit) {
|
||||
log.Println("\tgui.Toolbox.NewBox() is a Group")
|
||||
}
|
||||
var newTK Toolkit
|
||||
var newTK andlabsT
|
||||
|
||||
vbox := ui.NewVerticalBox()
|
||||
vbox.SetPadded(padded)
|
||||
|
@ -33,7 +33,7 @@ func (t *Toolkit) NewBox() *Toolkit {
|
|||
if (DebugToolkit) {
|
||||
log.Println("\tgui.Toolbox.NewBox() is a Box")
|
||||
}
|
||||
var newTK Toolkit
|
||||
var newTK andlabsT
|
||||
|
||||
vbox := ui.NewVerticalBox()
|
||||
vbox.SetPadded(padded)
|
||||
|
@ -47,7 +47,7 @@ func (t *Toolkit) NewBox() *Toolkit {
|
|||
if (DebugToolkit) {
|
||||
log.Println("\tgui.Toolbox.NewBox() is a Window")
|
||||
}
|
||||
var newT Toolkit
|
||||
var newT andlabsT
|
||||
|
||||
vbox := ui.NewVerticalBox()
|
||||
vbox.SetPadded(padded)
|
||||
|
|
|
@ -1,68 +1,56 @@
|
|||
package toolkit
|
||||
package main
|
||||
|
||||
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
|
||||
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 nil
|
||||
return
|
||||
}
|
||||
newt = new(andlabsT)
|
||||
|
||||
if (DebugToolkit) {
|
||||
log.Println("gui.Toolbox.NewButton() create", name)
|
||||
}
|
||||
b = ui.NewButton(name)
|
||||
b = ui.NewButton(w.Name)
|
||||
newt.uiButton = b
|
||||
|
||||
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()
|
||||
newt.Dump()
|
||||
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) {
|
||||
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()
|
||||
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()
|
||||
}
|
||||
if (t.uiBox != nil) {
|
||||
|
@ -72,8 +60,8 @@ func (t Toolkit) NewButton(name string) *Toolkit {
|
|||
} 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
|
||||
}
|
||||
|
||||
return &newt
|
||||
mapWidgetsToolkits(w, newt)
|
||||
}
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
package toolkit
|
||||
package main
|
||||
|
||||
import "log"
|
||||
|
||||
import "github.com/andlabs/ui"
|
||||
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)
|
||||
var newt Toolkit
|
||||
var newt andlabsT
|
||||
|
||||
if t.broken() {
|
||||
return nil
|
||||
|
@ -25,7 +25,7 @@ func (t Toolkit) NewCheckbox(name string) *Toolkit {
|
|||
return &newt
|
||||
}
|
||||
|
||||
func (t Toolkit) Checked() bool {
|
||||
func (t andlabsT) Checked() bool {
|
||||
if t.broken() {
|
||||
return false
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
package toolkit
|
||||
package main
|
||||
|
||||
import "log"
|
||||
|
||||
|
@ -9,7 +9,7 @@ func init() {
|
|||
setDefaultBehavior(true)
|
||||
}
|
||||
|
||||
func (t Toolkit) commonChange(widget string) {
|
||||
func (t andlabsT) commonChange(widget string) {
|
||||
s := t.String()
|
||||
if (DebugToolkit) {
|
||||
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
|
||||
// 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.uiWindow != nil) {
|
||||
if (DebugToolkit) {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
package toolkit
|
||||
package main
|
||||
|
||||
import "log"
|
||||
|
||||
|
@ -19,7 +19,7 @@ func BlankWindow(w *ui.Window) *ui.Box {
|
|||
return hbox
|
||||
}
|
||||
|
||||
func (t *Toolkit) DemoNumbersPage() {
|
||||
func (t *andlabsT) DemoNumbersPage() {
|
||||
var w *ui.Window
|
||||
|
||||
log.Println("Starting wit/gui toolkit andlabs/ui DemoNumbersPage()")
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
package toolkit
|
||||
package main
|
||||
|
||||
import "log"
|
||||
import "os"
|
||||
// import "time"
|
||||
|
||||
import "github.com/andlabs/ui"
|
||||
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
|
||||
if (DebugToolkit) {
|
||||
log.Println("gui.Toolbox.NewDropdownCombobox()", title)
|
||||
}
|
||||
var newt Toolkit
|
||||
var newt andlabsT
|
||||
|
||||
if t.broken() {
|
||||
return nil
|
||||
|
@ -31,7 +32,7 @@ func (t *Toolkit) NewDropdown(title string) *Toolkit {
|
|||
i := spin.Selected()
|
||||
if (newt.val == nil) {
|
||||
log.Println("make map didn't work")
|
||||
os.Exit(0)
|
||||
newt.text = "error"
|
||||
}
|
||||
newt.text = newt.val[i]
|
||||
newt.commonChange("Dropdown")
|
||||
|
@ -40,7 +41,7 @@ func (t *Toolkit) NewDropdown(title string) *Toolkit {
|
|||
return &newt
|
||||
}
|
||||
|
||||
func (t *Toolkit) AddDropdown(title string) {
|
||||
func (t *andlabsT) AddDropdownName(title string) {
|
||||
t.uiCombobox.Append(title)
|
||||
if (t.val == nil) {
|
||||
log.Println("make map didn't work")
|
||||
|
@ -50,6 +51,40 @@ func (t *Toolkit) AddDropdown(title string) {
|
|||
t.c = t.c + 1
|
||||
}
|
||||
|
||||
func (t Toolkit) SetDropdown(i int) {
|
||||
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,14 +1,29 @@
|
|||
package toolkit
|
||||
package main
|
||||
|
||||
import "log"
|
||||
import "os"
|
||||
import (
|
||||
"log"
|
||||
|
||||
import "github.com/andlabs/ui"
|
||||
import _ "github.com/andlabs/ui/winmanifest"
|
||||
"git.wit.org/wit/gui/toolkit"
|
||||
|
||||
"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
|
||||
func (t Toolkit) NewGroup(title string) *Toolkit {
|
||||
var newt Toolkit
|
||||
func (t andlabsT) NewGroup(title string) *andlabsT {
|
||||
var newt andlabsT
|
||||
|
||||
if (DebugToolkit) {
|
||||
log.Println("gui.Toolbox.NewGroup() create", title)
|
||||
|
@ -22,8 +37,7 @@ func (t Toolkit) NewGroup(title string) *Toolkit {
|
|||
t.uiWindow.SetChild(g)
|
||||
} 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("probably could just make a box here?")
|
||||
os.Exit(0)
|
||||
log.Fatalln("probably could just make a box here?")
|
||||
}
|
||||
|
||||
hbox := ui.NewVerticalBox()
|
||||
|
|
|
@ -1,21 +1,42 @@
|
|||
package toolkit
|
||||
package main
|
||||
|
||||
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)
|
||||
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 nil
|
||||
return
|
||||
}
|
||||
var newt Toolkit
|
||||
newt.uiLabel = ui.NewLabel(name)
|
||||
newt.uiBox = t.uiBox
|
||||
t.uiBox.Append(newt.uiLabel, false)
|
||||
newt = new(andlabsT)
|
||||
|
||||
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 (
|
||||
"log"
|
||||
// "time"
|
||||
|
||||
"git.wit.org/wit/gui/toolkit"
|
||||
|
||||
"github.com/andlabs/ui"
|
||||
// the _ means we only need this for the init()
|
||||
|
@ -12,7 +15,17 @@ func Main(f func()) {
|
|||
if (DebugToolkit) {
|
||||
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
|
||||
|
@ -25,7 +38,20 @@ func Main(f func()) {
|
|||
//
|
||||
func Queue(f func()) {
|
||||
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 "os"
|
||||
import (
|
||||
"log"
|
||||
"os"
|
||||
|
||||
import "github.com/andlabs/ui"
|
||||
import _ "github.com/andlabs/ui/winmanifest"
|
||||
"git.wit.org/wit/gui/toolkit"
|
||||
|
||||
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
|
||||
log.Println("gui.Toolkit.NewSpinbox()", x, y)
|
||||
var newt Toolkit
|
||||
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")
|
||||
|
@ -29,3 +33,16 @@ func (t Toolkit) NewSlider(title string, x int, y int) *Toolkit {
|
|||
|
||||
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 "os"
|
||||
|
@ -6,10 +6,10 @@ import "os"
|
|||
import "github.com/andlabs/ui"
|
||||
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
|
||||
log.Println("gui.Toolkit.NewSpinner()", x, y)
|
||||
var newt Toolkit
|
||||
var newt andlabsT
|
||||
|
||||
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")
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
package toolkit
|
||||
package main
|
||||
|
||||
import "log"
|
||||
|
||||
|
@ -47,15 +47,15 @@ func GetDebugToolkit () bool {
|
|||
}
|
||||
|
||||
// stores the raw toolkit internals
|
||||
type Toolkit struct {
|
||||
type andlabsT struct {
|
||||
id string
|
||||
|
||||
Name string
|
||||
Width int
|
||||
Height int
|
||||
|
||||
OnChanged func(*Toolkit)
|
||||
OnExit func(*Toolkit)
|
||||
OnChanged func(*andlabsT)
|
||||
OnExit func(*andlabsT)
|
||||
|
||||
Custom func()
|
||||
|
||||
|
@ -84,18 +84,18 @@ type Toolkit struct {
|
|||
text string
|
||||
}
|
||||
|
||||
func (t *Toolkit) String() string {
|
||||
func (t *andlabsT) String() string {
|
||||
return t.GetText()
|
||||
}
|
||||
|
||||
func forceDump(t *Toolkit) {
|
||||
func forceDump(t *andlabsT) {
|
||||
tmp := DebugToolkit
|
||||
DebugToolkit = true
|
||||
t.Dump()
|
||||
DebugToolkit = tmp
|
||||
}
|
||||
|
||||
func (t *Toolkit) GetText() string {
|
||||
func (t *andlabsT) GetText() string {
|
||||
t.Dump()
|
||||
if (DebugToolkit) {
|
||||
log.Println("gui.Toolkit.Text() Enter")
|
||||
|
@ -128,7 +128,7 @@ func (t *Toolkit) GetText() string {
|
|||
return ""
|
||||
}
|
||||
|
||||
func (t *Toolkit) SetText(s string) bool {
|
||||
func (t *andlabsT) SetText(s string) bool {
|
||||
if (DebugToolkit) {
|
||||
log.Println("gui.Toolkit.Text() Enter")
|
||||
scs := spew.ConfigState{MaxDepth: 1}
|
||||
|
@ -151,7 +151,7 @@ func (t *Toolkit) SetText(s string) bool {
|
|||
return false
|
||||
}
|
||||
|
||||
func sanity(t *Toolkit) bool {
|
||||
func sanity(t *andlabsT) bool {
|
||||
if (DebugToolkit) {
|
||||
log.Println("gui.Toolkit.Value() Enter")
|
||||
scs := spew.ConfigState{MaxDepth: 1}
|
||||
|
@ -166,7 +166,7 @@ func sanity(t *Toolkit) bool {
|
|||
return true
|
||||
}
|
||||
|
||||
func (t *Toolkit) SetValue(i int) bool {
|
||||
func (t *andlabsT) SetValue(i int) bool {
|
||||
log.Println("gui.Toolkit.SetValue() START")
|
||||
if (sanity(t)) {
|
||||
return false
|
||||
|
@ -176,7 +176,7 @@ func (t *Toolkit) SetValue(i int) bool {
|
|||
return true
|
||||
}
|
||||
|
||||
func (t *Toolkit) Value() int {
|
||||
func (t *andlabsT) Value() int {
|
||||
if (DebugToolkit) {
|
||||
log.Println("gui.Toolkit.Value() Enter")
|
||||
scs := spew.ConfigState{MaxDepth: 1}
|
||||
|
@ -202,7 +202,7 @@ func (t *Toolkit) Value() int {
|
|||
return 0
|
||||
}
|
||||
|
||||
func (t *Toolkit) Dump() {
|
||||
func (t *andlabsT) Dump() {
|
||||
if ! DebugToolkit {
|
||||
return
|
||||
}
|
||||
|
|
|
@ -1,12 +1,13 @@
|
|||
package toolkit
|
||||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
"time"
|
||||
|
||||
"git.wit.org/wit/gui/toolkit"
|
||||
|
||||
"github.com/andlabs/ui"
|
||||
_ "github.com/andlabs/ui/winmanifest"
|
||||
|
||||
)
|
||||
|
||||
/*
|
||||
|
@ -21,9 +22,9 @@ import (
|
|||
once there is one. If you send a Window here, it will replace
|
||||
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 newt *Toolkit
|
||||
var newt *andlabsT
|
||||
|
||||
log.Println("gui.toolkit.AddTab() sleep 3")
|
||||
|
||||
|
@ -68,8 +69,8 @@ func tabSetMargined(tab *ui.Tab) {
|
|||
}
|
||||
}
|
||||
|
||||
func newTab(w *ui.Window, name string) *Toolkit {
|
||||
var t Toolkit
|
||||
func newTab(w *ui.Window, name string) *andlabsT {
|
||||
var t andlabsT
|
||||
if (DebugToolkit) {
|
||||
log.Println("gui.toolkit.NewTab() ADD", name)
|
||||
}
|
||||
|
@ -99,8 +100,8 @@ func newTab(w *ui.Window, name string) *Toolkit {
|
|||
return &t
|
||||
}
|
||||
|
||||
func (t *Toolkit) appendTab(name string) *Toolkit {
|
||||
var newT Toolkit
|
||||
func (t *andlabsT) appendTab(name string) *andlabsT {
|
||||
var newT andlabsT
|
||||
if (DebugToolkit) {
|
||||
log.Println("gui.toolkit.NewTab() ADD", name)
|
||||
}
|
||||
|
@ -131,3 +132,16 @@ func (t *Toolkit) appendTab(name string) *Toolkit {
|
|||
newT.uiBox = hbox
|
||||
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 "git.wit.org/wit/gui/toolkit"
|
||||
|
||||
import "github.com/andlabs/ui"
|
||||
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) {
|
||||
log.Println("gui.Toolkit.NewTextbox()", name)
|
||||
}
|
||||
var newt Toolkit
|
||||
|
||||
if t.broken() {
|
||||
return nil
|
||||
}
|
||||
|
@ -32,3 +34,37 @@ func (t Toolkit) NewTextbox(name string) *Toolkit {
|
|||
|
||||
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 (
|
||||
"log"
|
||||
|
||||
"github.com/andlabs/ui"
|
||||
_ "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)
|
||||
}
|
||||
|
||||
func (t *Toolkit) ErrorWindow(msg1 string, msg2 string) {
|
||||
func (t *andlabsT) ErrorWindow(msg1 string, msg2 string) {
|
||||
ui.MsgBoxError(t.uiWindow, msg1, msg2)
|
||||
}
|
||||
|
||||
func NewWindow(title string, x int, y int) *Toolkit {
|
||||
var t Toolkit
|
||||
func NewWindow(w *toolkit.Widget) {
|
||||
var t *andlabsT
|
||||
|
||||
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)
|
||||
w.SetMargined(margin)
|
||||
w.OnClosing(func(*ui.Window) bool {
|
||||
|
||||
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 (t.OnExit != nil) {
|
||||
if (DebugToolkit) {
|
||||
log.Println("ui.Window().OnExit() ATTEMPTING toolkit.OnExit CALLBACK")
|
||||
}
|
||||
t.OnExit(&t)
|
||||
if (w.Custom != nil) {
|
||||
w.Custom()
|
||||
return true
|
||||
}
|
||||
if (t.Custom != nil) {
|
||||
if (DebugToolkit) {
|
||||
log.Println("ui.Window().Custom() ATTEMPTING toolkit.Custom CALLBACK")
|
||||
}
|
||||
t.Custom()
|
||||
if (w.Event != nil) {
|
||||
w.Event(w)
|
||||
return true
|
||||
}
|
||||
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()
|
||||
t.uiWindow = w
|
||||
t.UiWindowBad = w // deprecate this as soon as possible
|
||||
return &t
|
||||
win.Show()
|
||||
t.uiWindow = win
|
||||
t.UiWindowBad = win // deprecate this as soon as possible
|
||||
t.Name = w.Name
|
||||
|
||||
mapWidgetsToolkits(w, t)
|
||||
return
|
||||
}
|
||||
|
||||
func (t *Toolkit) SetWindowTitle(title string) {
|
||||
func (t *andlabsT) SetWindowTitle(title string) {
|
||||
if (DebugToolkit) {
|
||||
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
|
||||
err error
|
||||
ch chan(func ())
|
||||
outf *os.File
|
||||
)
|
||||
|
||||
func Init() {
|
||||
|
@ -50,6 +51,16 @@ func Init() {
|
|||
stringWidget = make(map[string]*toolkit.Widget)
|
||||
|
||||
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()) {
|
||||
|
@ -58,6 +69,8 @@ func Queue(f func()) {
|
|||
}
|
||||
|
||||
func Main(f func()) {
|
||||
// close the STDOUT log file
|
||||
defer outf.Close()
|
||||
if (baseGui == nil) {
|
||||
panic("WTF Main()")
|
||||
}
|
||||
|
@ -76,7 +89,7 @@ func layout(g *gocui.Gui) error {
|
|||
var err error
|
||||
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 !errors.Is(err, gocui.ErrUnknownView) {
|
||||
return err
|
||||
|
@ -90,6 +103,7 @@ func layout(g *gocui.Gui) error {
|
|||
fmt.Fprintln(helpLabel, "Arrow keys: Move Button")
|
||||
fmt.Fprintln(helpLabel, "t: Move Button to the top")
|
||||
fmt.Fprintln(helpLabel, "b: Move Button to the button")
|
||||
fmt.Fprintln(helpLabel, "STDOUT: /tmp/witgui.log")
|
||||
fmt.Fprintln(helpLabel, "Ctrl-C or Q: Exit")
|
||||
}
|
||||
return nil
|
||||
|
|
|
@ -130,7 +130,7 @@ func initKeybindings(g *gocui.Gui) error {
|
|||
g.SetCurrentView("help")
|
||||
// moveView(g, tmp, 0, -delta)
|
||||
if err := g.DeleteView("help"); err != nil {
|
||||
panic(err)
|
||||
log.Fatalln("gocui SetKeybinding()", err)
|
||||
}
|
||||
return nil
|
||||
}); err != nil {
|
||||
|
|
|
@ -14,7 +14,6 @@ import (
|
|||
// my guess).
|
||||
func NewWindow() *Node {
|
||||
var newNode *Node
|
||||
// var t *toolkit.Toolkit
|
||||
|
||||
title := Config.Title
|
||||
// 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)
|
||||
|
||||
// t = toolkit.NewWindow(title, w, h)
|
||||
// n.toolkit = t
|
||||
|
||||
for _, aplug := range allPlugins {
|
||||
log.Println("gui.Node.NewWindow() toolkit plugin =", aplug.name)
|
||||
if (aplug.NewWindow == nil) {
|
||||
|
@ -50,9 +46,5 @@ func NewWindow() *Node {
|
|||
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
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue