diff options
Diffstat (limited to 'toolkit/andlabs')
| -rw-r--r-- | toolkit/andlabs/box.go | 49 | ||||
| -rw-r--r-- | toolkit/andlabs/button.go | 50 | ||||
| -rw-r--r-- | toolkit/andlabs/group.go | 60 | ||||
| -rw-r--r-- | toolkit/andlabs/label.go | 26 | ||||
| -rw-r--r-- | toolkit/andlabs/slider.go | 26 | ||||
| -rw-r--r-- | toolkit/andlabs/spinbox.go | 2 | ||||
| -rw-r--r-- | toolkit/andlabs/structs.go | 64 | ||||
| -rw-r--r-- | toolkit/andlabs/tab.go | 143 | ||||
| -rw-r--r-- | toolkit/andlabs/window.go | 45 |
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 +} |
