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:
Jeff Carr 2022-11-14 14:30:28 -06:00
parent 8221522ba8
commit 4242393152
58 changed files with 745 additions and 758 deletions

View File

@ -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

View File

@ -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 { ... }`

View File

@ -207,8 +207,6 @@ my guess).
## Sub Packages ## Sub Packages
* [need-to-redo](./need-to-redo)
* [toolkit](./toolkit) * [toolkit](./toolkit)
--- ---

18
andlabs.go Normal file
View File

@ -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
}

View File

@ -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 () {

View File

@ -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)
} }
} }

View File

@ -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")
}
*/

View File

@ -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 {

View File

@ -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")
} }
} }
} }

View File

@ -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)

View File

@ -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
}

View File

@ -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
} }

View File

@ -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) {

View File

@ -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()")

View File

@ -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)
}

View File

@ -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)

View File

@ -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
}

View File

@ -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)
}

View File

@ -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
}

View File

@ -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")

View File

@ -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
} }

View File

@ -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)
}

View File

@ -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
}

View File

@ -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)
}
}
}

4
toolkit/andlabs/Makefile Normal file
View File

@ -0,0 +1,4 @@
all: plugin
plugin:
GO111MODULE="off" go build -buildmode=plugin -o ../andlabs.so

View File

@ -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)

View File

@ -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)
} }

View File

@ -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
} }

View File

@ -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) {

View File

@ -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()")

View File

@ -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)
}

View File

@ -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()

View File

@ -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)
} }

View File

@ -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)
} }

View File

@ -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)
}

View File

@ -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")

View File

@ -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
} }

View File

@ -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)
}

View File

@ -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)
}

View File

@ -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)
} }

View File

@ -1,4 +0,0 @@
all: plugin
plugin:
GO111MODULE="off" go build -buildmode=plugin -o ../andlabs2.so

View File

@ -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)
}

View File

@ -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)
}

View File

@ -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)
}

View File

@ -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)
}

View File

@ -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)
}

View File

@ -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)
}

View File

@ -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)
}
}
}

View File

@ -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

View File

@ -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 {

View File

@ -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
} }