summaryrefslogtreecommitdiff
path: root/toolkit/andlabs
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/andlabs')
-rw-r--r--toolkit/andlabs/box.go49
-rw-r--r--toolkit/andlabs/button.go50
-rw-r--r--toolkit/andlabs/group.go60
-rw-r--r--toolkit/andlabs/label.go26
-rw-r--r--toolkit/andlabs/slider.go26
-rw-r--r--toolkit/andlabs/spinbox.go2
-rw-r--r--toolkit/andlabs/structs.go64
-rw-r--r--toolkit/andlabs/tab.go143
-rw-r--r--toolkit/andlabs/window.go45
9 files changed, 399 insertions, 66 deletions
diff --git a/toolkit/andlabs/box.go b/toolkit/andlabs/box.go
new file mode 100644
index 0000000..548c90a
--- /dev/null
+++ b/toolkit/andlabs/box.go
@@ -0,0 +1,49 @@
+package toolkit
+
+import "log"
+
+import "github.com/andlabs/ui"
+import _ "github.com/andlabs/ui/winmanifest"
+
+// create a new box
+func (t *Toolkit) GetBox() *ui.Box {
+ return t.uiBox
+}
+
+// create a new box
+func (t *Toolkit) NewBox() *Toolkit {
+ log.Println("gui.Toolbox.NewBox() START create default")
+ t.Dump()
+ if (t.uiGroup != nil) {
+ log.Println("gui.Toolbox.NewBox() is a Group")
+ var newTK Toolkit
+
+ vbox := ui.NewVerticalBox()
+ vbox.SetPadded(true)
+ t.uiGroup.SetChild(vbox)
+ newTK.uiBox = vbox
+
+ return &newTK
+ }
+ if (t.uiBox != nil) {
+ log.Println("gui.Toolbox.NewBox() is a Box")
+ // return t
+ }
+ log.Println("gui.Toolbox.NewBox() FAILED. Couldn't figure out where to make a box")
+ t.Dump()
+ return nil
+}
+
+// Make a new box
+func MakeBox(name string) *Toolkit {
+ var newt Toolkit
+
+ vbox := ui.NewVerticalBox()
+ vbox.SetPadded(border)
+ newt.uiBox = vbox
+ newt.Name = name
+
+ log.Println("gui.Toolbox.MakeBox() name =", name)
+ newt.Dump()
+ return &newt
+}
diff --git a/toolkit/andlabs/button.go b/toolkit/andlabs/button.go
new file mode 100644
index 0000000..3278c09
--- /dev/null
+++ b/toolkit/andlabs/button.go
@@ -0,0 +1,50 @@
+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.uiBox == nil) {
+ log.Println("gui.ToolboxNode.NewButton() 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
+ }
+
+ log.Println("gui.Toolbox.NewGroup() 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()
+ log.Println("wit/gui/toolkit NewButton() Should do something here")
+ if (newt.Custom == nil) {
+ log.Println("wit/gui/toolkit NewButton() toolkit.Custom == nil")
+ } else {
+ log.Println("wit/gui/toolkit NewButton() toolkit.Custom() START")
+ newt.Custom()
+ log.Println("wit/gui/toolkit NewButton() toolkit.Custom() END")
+ }
+ if (t.Custom == nil) {
+ log.Println("wit/gui/toolkit NewButton() parent toolkit.Custom == nil")
+ } else {
+ log.Println("wit/gui/toolkit NewButton() running parent toolkit.Custom() START (IS THIS A BAD IDEA?)")
+ t.Custom()
+ log.Println("wit/gui/toolkit NewButton() running parent toolkit.Custom() END (IS THIS A BAD IDEA?)")
+ }
+ log.Println("TODO: LEFT TOOLKIT GOROUTINE button name =", name)
+ })
+
+ t.uiBox.Append(b, false)
+
+ return &newt
+}
diff --git a/toolkit/andlabs/group.go b/toolkit/andlabs/group.go
index 1c3f63e..12d9206 100644
--- a/toolkit/andlabs/group.go
+++ b/toolkit/andlabs/group.go
@@ -1,59 +1,37 @@
package toolkit
import "log"
+import "os"
import "github.com/andlabs/ui"
import _ "github.com/andlabs/ui/winmanifest"
// make new Group here
-func NewGroup(b *ui.Box, title string) *Toolkit {
- var t Toolkit
+func (t Toolkit) NewGroup(title string) *Toolkit {
+ var newt Toolkit
- if (b == nil) {
- log.Println("gui.ToolboxNode.NewSpinbox() node.UiBox == nil. I can't add a range UI element without a place to put it")
- return &t
+ if (t.uiBox == nil) {
+ 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)
+ return nil
}
log.Println("gui.Toolbox.NewGroup() create", title)
g := ui.NewGroup(title)
g.SetMargined(true)
- t.uiGroup = g
- t.uiBox = b
- t.uiBox.Append(g, false)
+ t.uiBox.Append(g, streachy)
- return &t
-}
-
-// create a new box
-func (t *Toolkit) GetBox() *ui.Box {
- return t.uiBox
-}
-
-// create a new box
-func (t *Toolkit) NewBox() *Toolkit {
- log.Println("gui.Toolbox.NewBox() START create default")
- if (t.uiGroup != nil) {
- log.Println("gui.Toolbox.NewBox() is a Group")
- var newTK Toolkit
+ hbox := ui.NewVerticalBox()
+ hbox.SetPadded(true)
+ g.SetChild(hbox)
- vbox := ui.NewVerticalBox()
- vbox.SetPadded(true)
- t.uiGroup.SetChild(vbox)
- newTK.uiBox = vbox
+ newt.uiGroup = g
+ newt.uiBox = hbox
+ newt.Name = title
- return &newTK
- }
- log.Println("gui.Toolbox.NewBox() FAILED")
- return nil
+ t.Dump()
+ newt.Dump()
+ // panic("toolkit.NewGroup")
+ return &newt
}
-
-/*
-func (n *Node) NewGroup(title string) *Node {
- group := ui.NewGroup(title)
- group.SetMargined(true)
- hbox.Append(group, true)
-
- vbox := ui.NewVerticalBox()
- vbox.SetPadded(true)
- group.SetChild(vbox)
-*/
diff --git a/toolkit/andlabs/label.go b/toolkit/andlabs/label.go
index 23d4927..453412a 100644
--- a/toolkit/andlabs/label.go
+++ b/toolkit/andlabs/label.go
@@ -1,23 +1,31 @@
package toolkit
import "log"
+import "os"
import "github.com/andlabs/ui"
import _ "github.com/andlabs/ui/winmanifest"
-func NewLabel(b *ui.Box, name string) *Toolkit {
+// func NewLabel(b *ui.Box, name string) *Toolkit {
+
+func (t *Toolkit) NewLabel(name string) *Toolkit {
// make new node here
log.Println("gui.Toolbox.NewLabel", name)
- var t Toolkit
- if (b == nil) {
+ if (t.uiBox == nil) {
log.Println("gui.ToolboxNode.NewLabel() node.UiBox == nil. I can't add a range UI element without a place to put it")
- return &t
+ os.Exit(0)
+ return nil
}
- l := ui.NewLabel(name)
- t.uiLabel = l
- t.uiBox = b
- t.uiBox.Append(l, false)
+ var newt Toolkit
+ newt.uiLabel = ui.NewLabel(name)
+ newt.uiBox = t.uiBox
+ t.uiBox.Append(newt.uiLabel, false)
+ log.Println("parent toolkit")
+ t.Dump()
+ log.Println("newt toolkit")
+ newt.Dump()
+ // panic("got here")
- return &t
+ return &newt
}
diff --git a/toolkit/andlabs/slider.go b/toolkit/andlabs/slider.go
index 930c514..65cf531 100644
--- a/toolkit/andlabs/slider.go
+++ b/toolkit/andlabs/slider.go
@@ -1,38 +1,44 @@
package toolkit
import "log"
+import "os"
import "github.com/andlabs/ui"
import _ "github.com/andlabs/ui/winmanifest"
import "github.com/davecgh/go-spew/spew"
-func NewSlider(b *ui.Box, name string, x int, y int) *Toolkit {
+// func NewSlider(b *ui.Box, name string *Toolkit {
+func (t Toolkit) NewSlider(title string, x int, y int) *Toolkit {
// make new node here
log.Println("gui.Toolbox.NewSpinbox()", x, y)
- var t Toolkit
+ var newt Toolkit
- if (b == nil) {
- log.Println("gui.ToolboxNode.NewSpinbox() node.UiBox == nil. I can't add a range UI element without a place to put it")
- return &t
+ if (t.uiBox == nil) {
+ 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)
+ return nil
}
+
s := ui.NewSlider(x, y)
- t.uiSlider = s
- t.uiBox = b
+ newt.uiSlider = s
+ newt.uiBox = t.uiBox
t.uiBox.Append(s, false)
s.OnChanged(func(spin *ui.Slider) {
i := spin.Value()
+ log.Println("gui.Toolbox.ui.Slider.OnChanged() val =", i)
if (DebugToolkit) {
log.Println("gui.Toolbox.ui.OnChanged() val =", i)
scs := spew.ConfigState{MaxDepth: 1}
- scs.Dump(t)
+ scs.Dump(newt)
}
if (t.OnChanged != nil) {
log.Println("gui.Toolbox.OnChanged() entered val =", i)
- t.OnChanged(&t)
+ newt.OnChanged(&newt)
}
})
- return &t
+ return &newt
}
diff --git a/toolkit/andlabs/spinbox.go b/toolkit/andlabs/spinbox.go
index d3d7bfe..c47fab7 100644
--- a/toolkit/andlabs/spinbox.go
+++ b/toolkit/andlabs/spinbox.go
@@ -14,7 +14,7 @@ func NewSpinbox(b *ui.Box, name string, x int, y int) *Toolkit {
if (b == nil) {
log.Println("gui.ToolboxNode.NewSpinbox() node.UiBox == nil. I can't add a range UI element without a place to put it")
- return &t
+ return nil
}
spin := ui.NewSpinbox(x, y)
t.uiSpinbox = spin
diff --git a/toolkit/andlabs/structs.go b/toolkit/andlabs/structs.go
index ab75139..a089a12 100644
--- a/toolkit/andlabs/structs.go
+++ b/toolkit/andlabs/structs.go
@@ -9,6 +9,10 @@ import "github.com/davecgh/go-spew/spew"
var DebugToolkit bool = false
+var streachy = true
+var border = true
+
+
// stores the raw toolkit internals
type Toolkit struct {
id string
@@ -18,8 +22,12 @@ type Toolkit struct {
Height int
OnChanged func(*Toolkit)
+ OnExit func(*Toolkit)
+
+ Custom func()
uiBox *ui.Box
+ uiBox2 *ui.Box // temporary hack while implementing tabs
uiButton *ui.Button
uiControl *ui.Control
uiEntry *ui.Entry
@@ -30,11 +38,7 @@ type Toolkit struct {
uiTab *ui.Tab
uiText *ui.EditableCombobox
uiWindow *ui.Window
-}
-
-func (t *Toolkit) Dump() {
- log.Println("gui.Toolkit.Dump() uiBox =", t.uiBox)
- log.Println("gui.Toolkit.Dump() uiGroup =", t.uiGroup)
+ UiWindowBad *ui.Window
}
func (t *Toolkit) GetText() string {
@@ -68,6 +72,31 @@ func (t *Toolkit) SetText(s string) bool {
return false
}
+func sanity(t *Toolkit) bool {
+ if (DebugToolkit) {
+ log.Println("gui.Toolkit.Value() Enter")
+ scs := spew.ConfigState{MaxDepth: 1}
+ scs.Dump(t)
+ }
+ if (t.uiEntry == nil) {
+ if (DebugToolkit) {
+ log.Println("gui.Toolkit.Value() =", t.uiEntry.Text)
+ }
+ return false
+ }
+ return true
+}
+
+func (t *Toolkit) SetValue(i int) bool {
+ log.Println("gui.Toolkit.SetValue() START")
+ if (sanity(t)) {
+ return false
+ }
+ t.Dump()
+ // panic("got to toolkit.SetValue")
+ return true
+}
+
func (t *Toolkit) Value() int {
if (DebugToolkit) {
log.Println("gui.Toolkit.Value() Enter")
@@ -93,3 +122,28 @@ func (t *Toolkit) Value() int {
log.Println("gui.Toolkit.Value() Could not find a ui element to get a value from")
return 0
}
+
+func (t *Toolkit) Dump() {
+ log.Println("gui.Toolkit.Dump()", t.Name, t.Width, t.Height)
+ if (t.uiBox != nil) {
+ log.Println("gui.Toolkit.Dump() uiBox =", t.uiBox)
+ }
+ if (t.uiButton != nil) {
+ log.Println("gui.Toolkit.Dump() uiButton =", t.uiButton)
+ }
+ if (t.uiWindow != nil) {
+ log.Println("gui.Toolkit.Dump() uiWindow =", t.uiWindow)
+ }
+ if (t.uiTab != nil) {
+ log.Println("gui.Toolkit.Dump() uiTab =", t.uiTab)
+ }
+ if (t.uiGroup != nil) {
+ log.Println("gui.Toolkit.Dump() uiGroup =", t.uiGroup)
+ }
+ if (t.uiSlider != nil) {
+ log.Println("gui.Toolkit.Dump() uiSlider =", t.uiSlider)
+ }
+ if (t.OnExit != nil) {
+ log.Println("gui.Toolkit.Dump() uiExit =", t.OnExit)
+ }
+}
diff --git a/toolkit/andlabs/tab.go b/toolkit/andlabs/tab.go
new file mode 100644
index 0000000..c068022
--- /dev/null
+++ b/toolkit/andlabs/tab.go
@@ -0,0 +1,143 @@
+package toolkit
+
+import (
+ "log"
+ "time"
+
+ "github.com/andlabs/ui"
+ _ "github.com/andlabs/ui/winmanifest"
+
+)
+
+/*
+ This adds a tab
+
+ andlabs/ui is goofy in the sense that you have to determine
+ if the ui.Window already has a tab in it. If it does, then
+ you need to add this tab and not run SetChild() on the window
+ or instead it replaces the existing tab with the new one
+
+ I work around this by always sending a Toolkit that is a tab
+ 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 {
+ var w *ui.Window
+ var newt *Toolkit
+
+ log.Println("gui.Toolbox.AddTab() sleep 3")
+
+ w = t.uiWindow
+ if (w == nil) {
+ log.Println("gui.Toolbox.NewTab() node.UiWindow == nil. I can't add a tab without a window")
+ return nil
+ }
+
+ if (t.uiTab == nil) {
+ // this means you have to make a new tab
+ log.Println("gui.Toolbox.NewTab() GOOD. This should be the first tab:", name)
+ newt = newTab(w, name)
+ t.uiTab = newt.uiTab
+ } else {
+ log.Println("gui.Toolbox.NewTab() GOOD. This should be an additional tab:", name)
+ newt = t.appendTab(name)
+ // this means you have to append a tab
+ }
+ log.Println("t:")
+ t.Dump()
+ log.Println("newt:")
+ newt.Dump()
+
+ return newt
+}
+
+func (t *Toolkit) SetTabBox(box *ui.Box) {
+ var tab *ui.Tab
+
+ log.Println("wit/gui/toolkit SetTabBox()")
+ t.Dump()
+ if (t.uiTab == nil) {
+ log.Println("wit/gui/toolkit SetTabBox() got uiTab == nil")
+ panic("fucknuts")
+ return
+ }
+ if (t.uiBox == nil) {
+ log.Println("wit/gui/toolkit SetTabBox() got uiBox == nil. Appending a new tab here")
+ tab = t.uiTab
+ tab.Append(t.Name, box)
+ tabSetMargined(tab)
+ return
+ } else {
+ log.Println("wit/gui/toolkit SetTabBox() got uiBox != nil. Appending the box to the existing box strechy = true")
+ t.uiBox.Append(box, true) // strechy == true
+ t.uiBox2 = box
+ // t.uiBox.Append(box, false) // strechy == false
+ return
+ }
+
+}
+
+// This sets _all_ the tabs to Margin = true
+//
+// TODO: do proper tab tracking (will be complicated). low priority
+func tabSetMargined(tab *ui.Tab) {
+ c := tab.NumPages()
+ for i := 0; i < c; i++ {
+ tab.SetMargined(i, true)
+ }
+}
+
+func newTab(w *ui.Window, name string) *Toolkit {
+ log.Println("gui.Toolbox.NewTab() ADD", name)
+ var t Toolkit
+
+ if (w == nil) {
+ log.Println("gui.Toolbox.NewTab() node.UiWindow == nil. I can't add a tab without a window")
+ log.Println("gui.Toolbox.NewTab() node.UiWindow == nil. I can't add a tab without a window")
+ log.Println("gui.Toolbox.NewTab() node.UiWindow == nil. I can't add a tab without a window")
+ time.Sleep(1 * time.Second)
+ return nil
+ }
+ log.Println("gui.Toolbox.AddTab() START name =", name)
+ // time.Sleep(2 * time.Second)
+ tab := ui.NewTab()
+ w.SetMargined(true)
+
+ hbox := ui.NewHorizontalBox() // this makes everything go along the horizon
+ // hbox := ui.NewVerticalBox()
+ hbox.SetPadded(true)
+ tab.Append(name, hbox)
+ w.SetChild(tab)
+
+ t.uiWindow = w
+ t.uiTab = tab
+ t.uiBox = hbox
+ // tabSetMargined(newNode.uiTab)
+ return &t
+}
+
+func (t *Toolkit) appendTab(name string) *Toolkit {
+ log.Println("gui.Toolbox.NewTab() ADD", name)
+ var newT Toolkit
+
+ if (t.uiWindow == nil) {
+ log.Println("gui.Toolbox.NewTab() node.UiWindow == nil. I can't add a tab without a window")
+ log.Println("gui.Toolbox.NewTab() node.UiWindow == nil. I can't add a tab without a window")
+ log.Println("gui.Toolbox.NewTab() node.UiWindow == nil. I can't add a tab without a window")
+ time.Sleep(1 * time.Second)
+ return nil
+ }
+ log.Println("gui.Toolbox.AddTab() START name =", name)
+
+ hbox := ui.NewHorizontalBox() // this makes everything go along the horizon
+ // hbox := ui.NewVerticalBox()
+ hbox.SetPadded(true)
+ t.uiTab.Append(name, hbox)
+ // w.SetChild(tab)
+
+ newT.uiWindow = t.uiWindow
+ newT.uiTab = t.uiTab
+ newT.uiBox = hbox
+ // tabSetMargined(newNode.uiTab)
+ return &newT
+}
diff --git a/toolkit/andlabs/window.go b/toolkit/andlabs/window.go
new file mode 100644
index 0000000..f0357ed
--- /dev/null
+++ b/toolkit/andlabs/window.go
@@ -0,0 +1,45 @@
+package toolkit
+
+import (
+ "log"
+ "os"
+
+ "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
+ log.Println("toolkit NewWindow", title, x, y)
+ w := ui.NewWindow(title, x, y, false)
+ w.SetBorderless(false)
+ w.OnClosing(func(*ui.Window) bool {
+ log.Println("ui.Window().OnExit() SHOULD ATTEMPT CALLBACK here")
+ t.Dump()
+ if (t.OnExit != nil) {
+ log.Println("ui.Window().OnExit() ATTEMPTING toolkit.OnExit CALLBACK")
+ t.OnExit(&t)
+ }
+ if (t.Custom != nil) {
+ log.Println("ui.Window().Custom() ATTEMPTING toolkit.Custom CALLBACK")
+ t.Custom()
+ }
+ log.Println("ui.Window().OnExit() Toolkit.OnExit is nil")
+ t.Dump()
+ os.Exit(0)
+ return true
+ })
+ w.SetMargined(true)
+ w.Show()
+ t.uiWindow = w
+ t.UiWindowBad = w // deprecate this as soon as possible
+ return &t
+}