diff --git a/Makefile b/Makefile index 7985c4a..db08887 100644 --- a/Makefile +++ b/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 diff --git a/README-goreadme.md b/README-goreadme.md index c48da62..5125d3d 100644 --- a/README-goreadme.md +++ b/README-goreadme.md @@ -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 { ... }` diff --git a/README.md b/README.md index 844fee3..652787c 100644 --- a/README.md +++ b/README.md @@ -207,8 +207,6 @@ my guess). ## Sub Packages -* [need-to-redo](./need-to-redo) - * [toolkit](./toolkit) --- diff --git a/andlabs.go b/andlabs.go new file mode 100644 index 0000000..fac4a8b --- /dev/null +++ b/andlabs.go @@ -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 +} diff --git a/cmds/buttonplugin/main.go b/cmds/buttonplugin/main.go index c296280..cdd8ef3 100644 --- a/cmds/buttonplugin/main.go +++ b/cmds/buttonplugin/main.go @@ -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 () { diff --git a/common.go b/common.go index 27b96bd..5e2cd4d 100644 --- a/common.go +++ b/common.go @@ -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) } } diff --git a/group.go b/group.go index d82e99a..a0fbe60 100644 --- a/group.go +++ b/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") -} -*/ diff --git a/main.go b/main.go index ae22dc6..159b84e 100644 --- a/main.go +++ b/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 { diff --git a/structs.go b/structs.go index af0947f..2b37ee0 100644 --- a/structs.go +++ b/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") } } } diff --git a/toolkit/andlabs2/box.go b/toolkit/andlabs-direct/box.go similarity index 88% rename from toolkit/andlabs2/box.go rename to toolkit/andlabs-direct/box.go index bb9945e..29a8331 100644 --- a/toolkit/andlabs2/box.go +++ b/toolkit/andlabs-direct/box.go @@ -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) diff --git a/toolkit/andlabs-direct/button.go b/toolkit/andlabs-direct/button.go new file mode 100644 index 0000000..e0b7d97 --- /dev/null +++ b/toolkit/andlabs-direct/button.go @@ -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 +} diff --git a/toolkit/andlabs2/checkbox.go b/toolkit/andlabs-direct/checkbox.go similarity index 78% rename from toolkit/andlabs2/checkbox.go rename to toolkit/andlabs-direct/checkbox.go index b4b1524..b3b3121 100644 --- a/toolkit/andlabs2/checkbox.go +++ b/toolkit/andlabs-direct/checkbox.go @@ -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 } diff --git a/toolkit/andlabs2/common.go b/toolkit/andlabs-direct/common.go similarity index 94% rename from toolkit/andlabs2/common.go rename to toolkit/andlabs-direct/common.go index fc6cbe8..451f9d6 100644 --- a/toolkit/andlabs2/common.go +++ b/toolkit/andlabs-direct/common.go @@ -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) { diff --git a/toolkit/andlabs2/demo.go b/toolkit/andlabs-direct/demo.go similarity index 97% rename from toolkit/andlabs2/demo.go rename to toolkit/andlabs-direct/demo.go index 0781f88..7ba1822 100644 --- a/toolkit/andlabs2/demo.go +++ b/toolkit/andlabs-direct/demo.go @@ -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()") diff --git a/toolkit/andlabs-direct/dropdown.go b/toolkit/andlabs-direct/dropdown.go new file mode 100644 index 0000000..ca09a99 --- /dev/null +++ b/toolkit/andlabs-direct/dropdown.go @@ -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) +} diff --git a/toolkit/andlabs2/group.go b/toolkit/andlabs-direct/group.go similarity index 64% rename from toolkit/andlabs2/group.go rename to toolkit/andlabs-direct/group.go index 39f740b..5b315a4 100644 --- a/toolkit/andlabs2/group.go +++ b/toolkit/andlabs-direct/group.go @@ -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) diff --git a/toolkit/andlabs-direct/label.go b/toolkit/andlabs-direct/label.go new file mode 100644 index 0000000..2819ff1 --- /dev/null +++ b/toolkit/andlabs-direct/label.go @@ -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 +} diff --git a/toolkit/andlabs-direct/main.go b/toolkit/andlabs-direct/main.go new file mode 100644 index 0000000..da639fa --- /dev/null +++ b/toolkit/andlabs-direct/main.go @@ -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) +} diff --git a/toolkit/andlabs/old/area.go b/toolkit/andlabs-direct/old/area.go similarity index 100% rename from toolkit/andlabs/old/area.go rename to toolkit/andlabs-direct/old/area.go diff --git a/toolkit/andlabs/old/color.go b/toolkit/andlabs-direct/old/color.go similarity index 100% rename from toolkit/andlabs/old/color.go rename to toolkit/andlabs-direct/old/color.go diff --git a/toolkit/andlabs/old/seperator.go b/toolkit/andlabs-direct/old/seperator.go similarity index 100% rename from toolkit/andlabs/old/seperator.go rename to toolkit/andlabs-direct/old/seperator.go diff --git a/toolkit/andlabs/old/structs.go b/toolkit/andlabs-direct/old/structs.go similarity index 100% rename from toolkit/andlabs/old/structs.go rename to toolkit/andlabs-direct/old/structs.go diff --git a/toolkit/andlabs/old/table.go b/toolkit/andlabs-direct/old/table.go similarity index 100% rename from toolkit/andlabs/old/table.go rename to toolkit/andlabs-direct/old/table.go diff --git a/toolkit/andlabs/old/tableCallbacks.go b/toolkit/andlabs-direct/old/tableCallbacks.go similarity index 100% rename from toolkit/andlabs/old/tableCallbacks.go rename to toolkit/andlabs-direct/old/tableCallbacks.go diff --git a/toolkit/andlabs-direct/slider.go b/toolkit/andlabs-direct/slider.go new file mode 100644 index 0000000..ad801f8 --- /dev/null +++ b/toolkit/andlabs-direct/slider.go @@ -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 +} diff --git a/toolkit/andlabs2/spinner.go b/toolkit/andlabs-direct/spinner.go similarity index 84% rename from toolkit/andlabs2/spinner.go rename to toolkit/andlabs-direct/spinner.go index 6505b48..885192c 100644 --- a/toolkit/andlabs2/spinner.go +++ b/toolkit/andlabs-direct/spinner.go @@ -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") diff --git a/toolkit/andlabs2/structs.go b/toolkit/andlabs-direct/structs.go similarity index 93% rename from toolkit/andlabs2/structs.go rename to toolkit/andlabs-direct/structs.go index 2f3fa72..9bba671 100644 --- a/toolkit/andlabs2/structs.go +++ b/toolkit/andlabs-direct/structs.go @@ -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 } diff --git a/toolkit/andlabs2/tab.go b/toolkit/andlabs-direct/tab.go similarity index 83% rename from toolkit/andlabs2/tab.go rename to toolkit/andlabs-direct/tab.go index 0556fb9..c641fc0 100644 --- a/toolkit/andlabs2/tab.go +++ b/toolkit/andlabs-direct/tab.go @@ -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) -} diff --git a/toolkit/andlabs-direct/textbox.go b/toolkit/andlabs-direct/textbox.go new file mode 100644 index 0000000..44946b8 --- /dev/null +++ b/toolkit/andlabs-direct/textbox.go @@ -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 +} diff --git a/toolkit/andlabs-direct/window.go b/toolkit/andlabs-direct/window.go new file mode 100644 index 0000000..efbd672 --- /dev/null +++ b/toolkit/andlabs-direct/window.go @@ -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) + } + } +} diff --git a/toolkit/andlabs/Makefile b/toolkit/andlabs/Makefile new file mode 100644 index 0000000..8b0502c --- /dev/null +++ b/toolkit/andlabs/Makefile @@ -0,0 +1,4 @@ +all: plugin + +plugin: + GO111MODULE="off" go build -buildmode=plugin -o ../andlabs.so diff --git a/toolkit/andlabs/box.go b/toolkit/andlabs/box.go index 29a8331..bb9945e 100644 --- a/toolkit/andlabs/box.go +++ b/toolkit/andlabs/box.go @@ -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) diff --git a/toolkit/andlabs/button.go b/toolkit/andlabs/button.go index e0b7d97..bd80683 100644 --- a/toolkit/andlabs/button.go +++ b/toolkit/andlabs/button.go @@ -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) } diff --git a/toolkit/andlabs/checkbox.go b/toolkit/andlabs/checkbox.go index b3b3121..b4b1524 100644 --- a/toolkit/andlabs/checkbox.go +++ b/toolkit/andlabs/checkbox.go @@ -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 } diff --git a/toolkit/andlabs/common.go b/toolkit/andlabs/common.go index 451f9d6..fc6cbe8 100644 --- a/toolkit/andlabs/common.go +++ b/toolkit/andlabs/common.go @@ -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) { diff --git a/toolkit/andlabs/demo.go b/toolkit/andlabs/demo.go index 7ba1822..0781f88 100644 --- a/toolkit/andlabs/demo.go +++ b/toolkit/andlabs/demo.go @@ -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()") diff --git a/toolkit/andlabs/dropdown.go b/toolkit/andlabs/dropdown.go index ca09a99..1e1886a 100644 --- a/toolkit/andlabs/dropdown.go +++ b/toolkit/andlabs/dropdown.go @@ -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) +} diff --git a/toolkit/andlabs/group.go b/toolkit/andlabs/group.go index 5b315a4..e93247a 100644 --- a/toolkit/andlabs/group.go +++ b/toolkit/andlabs/group.go @@ -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() diff --git a/toolkit/andlabs/label.go b/toolkit/andlabs/label.go index 2819ff1..c5a6896 100644 --- a/toolkit/andlabs/label.go +++ b/toolkit/andlabs/label.go @@ -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) } diff --git a/toolkit/andlabs/main.go b/toolkit/andlabs/main.go index da639fa..85e6913 100644 --- a/toolkit/andlabs/main.go +++ b/toolkit/andlabs/main.go @@ -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) } diff --git a/toolkit/andlabs2/plugin.go b/toolkit/andlabs/plugin.go similarity index 100% rename from toolkit/andlabs2/plugin.go rename to toolkit/andlabs/plugin.go diff --git a/toolkit/andlabs/slider.go b/toolkit/andlabs/slider.go index ad801f8..f9ff0f3 100644 --- a/toolkit/andlabs/slider.go +++ b/toolkit/andlabs/slider.go @@ -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) +} diff --git a/toolkit/andlabs/spinner.go b/toolkit/andlabs/spinner.go index 885192c..6505b48 100644 --- a/toolkit/andlabs/spinner.go +++ b/toolkit/andlabs/spinner.go @@ -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") diff --git a/toolkit/andlabs/structs.go b/toolkit/andlabs/structs.go index 9bba671..2f3fa72 100644 --- a/toolkit/andlabs/structs.go +++ b/toolkit/andlabs/structs.go @@ -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 } diff --git a/toolkit/andlabs/tab.go b/toolkit/andlabs/tab.go index c641fc0..0556fb9 100644 --- a/toolkit/andlabs/tab.go +++ b/toolkit/andlabs/tab.go @@ -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) +} diff --git a/toolkit/andlabs/textbox.go b/toolkit/andlabs/textbox.go index 44946b8..c7a9390 100644 --- a/toolkit/andlabs/textbox.go +++ b/toolkit/andlabs/textbox.go @@ -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) +} diff --git a/toolkit/andlabs/window.go b/toolkit/andlabs/window.go index efbd672..b360cb8 100644 --- a/toolkit/andlabs/window.go +++ b/toolkit/andlabs/window.go @@ -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) } diff --git a/toolkit/andlabs2/Makefile b/toolkit/andlabs2/Makefile deleted file mode 100644 index 54cf7f5..0000000 --- a/toolkit/andlabs2/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -all: plugin - -plugin: - GO111MODULE="off" go build -buildmode=plugin -o ../andlabs2.so diff --git a/toolkit/andlabs2/button.go b/toolkit/andlabs2/button.go deleted file mode 100644 index bd80683..0000000 --- a/toolkit/andlabs2/button.go +++ /dev/null @@ -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) -} diff --git a/toolkit/andlabs2/dropdown.go b/toolkit/andlabs2/dropdown.go deleted file mode 100644 index 1e1886a..0000000 --- a/toolkit/andlabs2/dropdown.go +++ /dev/null @@ -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) -} diff --git a/toolkit/andlabs2/label.go b/toolkit/andlabs2/label.go deleted file mode 100644 index c5a6896..0000000 --- a/toolkit/andlabs2/label.go +++ /dev/null @@ -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) -} diff --git a/toolkit/andlabs2/main.go b/toolkit/andlabs2/main.go deleted file mode 100644 index 8a28710..0000000 --- a/toolkit/andlabs2/main.go +++ /dev/null @@ -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) -} diff --git a/toolkit/andlabs2/slider.go b/toolkit/andlabs2/slider.go deleted file mode 100644 index f9ff0f3..0000000 --- a/toolkit/andlabs2/slider.go +++ /dev/null @@ -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) -} diff --git a/toolkit/andlabs2/textbox.go b/toolkit/andlabs2/textbox.go deleted file mode 100644 index c7a9390..0000000 --- a/toolkit/andlabs2/textbox.go +++ /dev/null @@ -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) -} diff --git a/toolkit/andlabs2/window.go b/toolkit/andlabs2/window.go deleted file mode 100644 index b360cb8..0000000 --- a/toolkit/andlabs2/window.go +++ /dev/null @@ -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) - } - } -} diff --git a/toolkit/gocui/gocui.go b/toolkit/gocui/gocui.go index d614387..0d7c5a5 100644 --- a/toolkit/gocui/gocui.go +++ b/toolkit/gocui/gocui.go @@ -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 diff --git a/toolkit/gocui/keybindings.go b/toolkit/gocui/keybindings.go index 69def39..48edf71 100644 --- a/toolkit/gocui/keybindings.go +++ b/toolkit/gocui/keybindings.go @@ -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 { diff --git a/window.go b/window.go index 99e5880..9072bdd 100644 --- a/window.go +++ b/window.go @@ -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 }