summaryrefslogtreecommitdiff
path: root/test/main.go
diff options
context:
space:
mode:
authorPietro Gagliardi <[email protected]>2014-06-30 22:48:12 -0400
committerPietro Gagliardi <[email protected]>2014-06-30 22:48:12 -0400
commitffa1bbe0b91a8c812ddcea5c5d65e55f60d07f33 (patch)
tree000fadd9af11843d92e7f0eee49fa90cca1379cd /test/main.go
parent990d50e9a153681a091a23734f8962e728fde1b0 (diff)
Restored the previous new API. I'm going to change it so that events are callbacks rather than using a window handler, but other than that... yeah.
Diffstat (limited to 'test/main.go')
-rw-r--r--test/main.go361
1 files changed, 223 insertions, 138 deletions
diff --git a/test/main.go b/test/main.go
index 034d712..db01d15 100644
--- a/test/main.go
+++ b/test/main.go
@@ -15,18 +15,21 @@ import (
. "github.com/andlabs/ui"
)
+type nullwinhandler struct{}
+func (nullwinhandler) Event(Event, interface{}) {}
+
var prefsizetest = flag.Bool("prefsize", false, "")
func listboxPreferredSizeTest() *Window {
lb := NewListbox("xxxxx", "y", "zzz")
g := NewGrid(1, lb)
- w := NewWindow("Listbox Preferred Size Test", 300, 300)
+ w := NewWindow("Listbox Preferred Size Test", 300, 300, nullwinhandler{})
w.Open(g)
return w
}
var gridtest = flag.Bool("grid", false, "")
func gridWindow() *Window {
- w := NewWindow("Grid Test", 400, 400)
+ w := NewWindow("Grid Test", 400, 400, nullwinhandler{})
b00 := NewButton("0,0")
b01 := NewButton("0,1")
b02 := NewButton("0,2")
@@ -44,10 +47,11 @@ func gridWindow() *Window {
g.SetStretchy(1, 1)
w.SetSpaced(*spacingTest)
w.Open(g)
- go func() {for {select {
- case <-b12.Clicked:
- c21.SetChecked(!c21.Checked())
- }}}()
+//TODO
+// go func() {for {select {
+// case <-b12.Clicked:
+// c21.SetChecked(!c21.Checked())
+// }}}()
return w
}
@@ -205,7 +209,6 @@ func areaTest() {
}
img := image.NewRGBA(ximg.Bounds())
draw.Draw(img, img.Rect, ximg, image.ZP, draw.Over)
- w := NewWindow("Area Test", 100, 100)
areahandler := &areaHandler{
img: img,
}
@@ -229,24 +232,54 @@ func areaTest() {
timedisp,
sizeStack)
layout.SetStretchy(0)
+ w := NewWindow("Area Test", 100, 100, &areatestwinhandler{
+ areahandler: areahandler,
+ a: a,
+ timedisp: timedisp,
+ widthbox: widthbox,
+ heightbox: heightbox,
+ resize: resize,
+ modaltest: modaltest,
+ repainttest: repainttest,
+ })
w.Open(layout)
- for {
- select {
- case <-w.Closing:
- return
- case t := <-timechan:
- timedisp.SetText(t.String())
- case <-resize.Clicked:
- width, err := strconv.Atoi(widthbox.Text())
- if err != nil { println(err); continue }
- height, err := strconv.Atoi(heightbox.Text())
- if err != nil { println(err); continue }
- a.SetSize(width, height)
- case <-modaltest.Clicked:
+ go func() {
+ for t := range timechan {
+ // TODO
+ _ = t
+// timedisp.SetText(t.String())
+ }
+ }()
+}
+
+type areatestwinhandler struct {
+ areahandler *areaHandler
+ a *Area
+ timedisp *Label
+ widthbox *LineEdit
+ heightbox *LineEdit
+ resize *Button
+ modaltest *Button
+ repainttest *Button
+}
+func (a *areatestwinhandler) Event(e Event, d interface{}) {
+ switch e {
+ case Closing:
+ *(d.(*bool)) = true
+ Stop <- struct{}{}
+ case Clicked:
+ switch d {
+ case a.resize:
+ width, err := strconv.Atoi(a.widthbox.Text())
+ if err != nil { println(err); return }
+ height, err := strconv.Atoi(a.heightbox.Text())
+ if err != nil { println(err); return }
+ a.a.SetSize(width, height)
+ case a.modaltest:
MsgBox("Modal Test", "")
- case <-repainttest.Clicked:
- areahandler.mutate()
- a.RepaintAll()
+ case a.repainttest:
+ a.areahandler.mutate()
+ a.a.RepaintAll()
}
}
}
@@ -275,9 +308,10 @@ func areaboundsTest() {
// middle purple
r.Min.Y++
draw.Draw(img, r, u(128, 0, 128), image.ZP, draw.Over)
- w := NewWindow("Area Bounds Test", 320, 240)
+ w := NewWindow("Area Bounds Test", 320, 240, &areatestwinhandler{
+ a: a,
+ })
w.Open(a)
- <-w.Closing
}
var dialogTest = flag.Bool("dialog", false, "add Window.MsgBox() channel test window")
@@ -285,6 +319,7 @@ var labelAlignTest = flag.Bool("label", false, "show Label Alignment test window
var spacingTest = flag.Bool("spacing", false, "margins and padding on Window")
func myMain() {
+ <-Ready
if *spacetest != "" {
spaceTest()
return
@@ -301,58 +336,88 @@ func myMain() {
areaboundsTest()
return
}
- w := NewWindow("Main Window", 320, 240)
- b := NewButton("Click Me")
- b2 := NewButton("Or Me")
- bmsg := NewButton("Or Even Me!")
- s2 := NewHorizontalStack(b, b2, bmsg)
+ runMainTest()
+}
+
+type testwinhandler struct {
+ w *Window
+ b *Button
+ b2 *Button
+ bmsg *Button
+ c *Checkbox
+ cb1 *Combobox
+ cb2 *Combobox
+ e *LineEdit
+ l *Label
+ resetl func()
+ b3 *Button
+ pbar *ProgressBar
+ prog int
+ incButton *Button
+ decButton *Button
+ indetButton *Button
+ invalidButton *Button
+ password *LineEdit
+ lb1 *Listbox
+ lb2 *Listbox
+ i int
+ doAdjustments func()
+}
+
+func runMainTest() {
+ handler := new(testwinhandler)
+ handler.w = NewWindow("Main Window", 320, 240, handler)
+ handler.b = NewButton("Click Me")
+ handler.b2 = NewButton("Or Me")
+ handler.bmsg = NewButton("Or Even Me!")
+ s2 := NewHorizontalStack(handler.b, handler.b2, handler.bmsg)
s2.SetStretchy(2)
- c := NewCheckbox("Check Me")
- cb1 := NewEditableCombobox("You can edit me!", "Yes you can!", "Yes you will!")
- cb2 := NewCombobox("You can't edit me!", "No you can't!", "No you won't!")
- e := NewLineEdit("Enter text here too")
- l := NewLabel("This is a label")
- resetl := func() {
- l.SetText("This is a label")
+ handler.c = NewCheckbox("Check Me")
+ handler.cb1 = NewEditableCombobox("You can edit me!", "Yes you can!", "Yes you will!")
+ handler.cb2 = NewCombobox("You can't edit me!", "No you can't!", "No you won't!")
+ handler.e = NewLineEdit("Enter text here too")
+ handler.l = NewLabel("This is a label")
+ handler.resetl = func() {
+ handler.l.SetText("This is a label")
}
- b3 := NewButton("List Info")
- s3 := NewHorizontalStack(l, b3)
+ handler.b3 = NewButton("List Info")
+ s3 := NewHorizontalStack(handler.l, handler.b3)
s3.SetStretchy(0)
// s3.SetStretchy(1)
- pbar := NewProgressBar()
- prog := 0
- incButton := NewButton("Inc")
- decButton := NewButton("Dec")
- indetButton := NewButton("Indeterminate")
- invalidButton := NewButton("Run Invalid Test")
- sincdec := NewHorizontalStack(incButton, decButton, indetButton, invalidButton)
- password := NewPasswordEdit()
- s0 := NewVerticalStack(s2, c, cb1, cb2, e, s3, pbar, sincdec, Space(), password)
+ handler.pbar = NewProgressBar()
+ handler.prog = 0
+ handler.incButton = NewButton("Inc")
+ handler.decButton = NewButton("Dec")
+ handler.indetButton = NewButton("Indeterminate")
+ handler.invalidButton = NewButton("Run Invalid Test")
+ sincdec := NewHorizontalStack(handler.incButton, handler.decButton, handler.indetButton, handler.invalidButton)
+ handler.password = NewPasswordEdit()
+ s0 := NewVerticalStack(s2, handler.c, handler.cb1, handler.cb2, handler.e, s3, handler.pbar, sincdec, Space(), handler.password)
s0.SetStretchy(8)
- lb1 := NewMultiSelListbox("Select One", "Or More", "To Continue")
- lb2 := NewListbox("Select", "Only", "One", "Please")
- i := 0
- doAdjustments := func() {
- cb1.Append("append")
- cb2.InsertBefore(fmt.Sprintf("before %d", i), 1)
- lb1.InsertBefore(fmt.Sprintf("%d", i), 2)
- lb2.Append("Please")
- i++
+ handler.lb1 = NewMultiSelListbox("Select One", "Or More", "To Continue")
+ handler.lb2 = NewListbox("Select", "Only", "One", "Please")
+ handler.i = 0
+ handler.doAdjustments = func() {
+ handler.cb1.Append("append")
+ handler.cb2.InsertBefore(fmt.Sprintf("before %d", handler.i), 1)
+ handler.lb1.InsertBefore(fmt.Sprintf("%d", handler.i), 2)
+ handler.lb2.Append("Please")
+ handler.i++
}
- doAdjustments()
- cb1.Append("append multi 1", "append multi 2")
- lb2.Append("append multi 1", "append multi 2")
- s1 := NewVerticalStack(lb2, lb1)
+ handler.doAdjustments()
+ handler.cb1.Append("append multi 1", "append multi 2")
+ handler.lb2.Append("append multi 1", "append multi 2")
+ s1 := NewVerticalStack(handler.lb2, handler.lb1)
s1.SetStretchy(0)
s1.SetStretchy(1)
s := NewHorizontalStack(s1, s0)
s.SetStretchy(0)
s.SetStretchy(1)
if *invalidBefore {
- invalidTest(cb1, lb1, s, NewGrid(1, Space()))
+ invalidTest(handler.cb1, handler.lb1, s, NewGrid(1, Space()))
}
- w.SetSpaced(*spacingTest)
- w.Open(s)
+ handler.w.SetSpaced(*spacingTest)
+ handler.w.Open(s)
if *gridtest {
gridWindow()
}
@@ -360,12 +425,17 @@ func myMain() {
listboxPreferredSizeTest()
}
- ticker := time.Tick(time.Second)
-
+// == TODO ==
dialog_bMsgBox := NewButton("MsgBox()")
dialog_bMsgBoxError := NewButton("MsgBoxError()")
centerButton := NewButton("Center")
- dialog_win := NewWindow("Dialogs", 200, 200)
+ dh := &dialoghandler{
+ bMsgBox: dialog_bMsgBox,
+ bMsgBoxError: dialog_bMsgBoxError,
+ bCenter: centerButton,
+// send: w.Send,
+ }
+ dh.w = NewWindow("Dialogs", 200, 200, dh)
if *dialogTest {
s := NewVerticalStack(
dialog_bMsgBox,
@@ -373,11 +443,9 @@ func myMain() {
Space(),
centerButton)
s.SetStretchy(2)
- dialog_win.Open(s)
+ dh.w.Open(s)
}
- var dialog_sret chan struct{} = nil
-
if *labelAlignTest {
s := NewHorizontalStack(NewStandaloneLabel("Label"), NewLineEdit("Label"))
s.SetStretchy(1)
@@ -407,99 +475,116 @@ func myMain() {
NewButton("Button"),
s)
s.SetStretchy(4)
- NewWindow("Label Align Test", 500, 300).Open(s)
+ NewWindow("Label Align Test", 500, 300, nullwinhandler{}).Open(s)
}
+}
-mainloop:
- for {
- select {
- case curtime := <-ticker:
-// l.SetText(curtime.String())
-_=curtime
- case <-w.Closing:
- println("window closed event received")
- break mainloop
- case <-AppQuit:
- println("application quit event received")
- break mainloop
- case <-b.Clicked:
- w.SetTitle(fmt.Sprintf("%v | %s | %s | %s | %s",
- c.Checked(),
- cb1.Selection(),
- cb2.Selection(),
- e.Text(),
- password.Text()))
- doAdjustments()
- case <-b2.Clicked:
- if cb1.Len() > 1 {
- cb1.Delete(1)
+func (handler *testwinhandler) Event(e Event, d interface{}) {
+ switch e {
+ case Closing:
+ println("window closed event received")
+ Stop <- struct{}{}
+ case Clicked:
+ switch d {
+ case handler.b:
+ handler.w.SetTitle(fmt.Sprintf("%v | %s | %s | %s | %s",
+ handler.c.Checked(),
+ handler.cb1.Selection(),
+ handler.cb2.Selection(),
+ handler.e.Text(),
+ handler.password.Text()))
+ handler.doAdjustments()
+ case handler.b2:
+ if handler.cb1.Len() > 1 {
+ handler.cb1.Delete(1)
}
- if cb2.Len() > 2 {
- cb2.Delete(2)
+ if handler.cb2.Len() > 2 {
+ handler.cb2.Delete(2)
}
- if lb1.Len() > 3 || *macCrashTest {
- lb1.Delete(3)
+ if handler.lb1.Len() > 3 || *macCrashTest {
+ handler.lb1.Delete(3)
}
- if lb2.Len() > 4 {
- lb2.Delete(4)
+ if handler.lb2.Len() > 4 {
+ handler.lb2.Delete(4)
}
- case <-b3.Clicked:
+ case handler.b3:
f := MsgBox
- if c.Checked() {
+ if handler.c.Checked() {
f = MsgBoxError
}
f("List Info",
fmt.Sprintf("cb1: %d %q (len %d)\ncb2: %d %q (len %d)\nlb1: %d %q (len %d)\nlb2: %d %q (len %d)",
- cb1.SelectedIndex(), cb1.Selection(), cb1.Len(),
- cb2.SelectedIndex(), cb2.Selection(), cb2.Len(),
- lb1.SelectedIndices(), lb1.Selection(), lb1.Len(),
- lb2.SelectedIndices(), lb2.Selection(), lb2.Len()))
- case <-incButton.Clicked:
- prog++
- if prog > 100 {
- prog = 100
+ handler.cb1.SelectedIndex(), handler.cb1.Selection(), handler.cb1.Len(),
+ handler.cb2.SelectedIndex(), handler.cb2.Selection(), handler.cb2.Len(),
+ handler.lb1.SelectedIndices(), handler.lb1.Selection(), handler.lb1.Len(),
+ handler.lb2.SelectedIndices(), handler.lb2.Selection(), handler.lb2.Len()))
+ case handler.incButton:
+ handler.prog++
+ if handler.prog > 100 {
+ handler.prog = 100
}
- pbar.SetProgress(prog)
- cb1.Append("append multi 1", "append multi 2")
- lb2.Append("append multi 1", "append multi 2")
- case <-decButton.Clicked:
- prog--
- if prog < 0 {
- prog = 0
+ handler.pbar.SetProgress(handler.prog)
+ handler.cb1.Append("append multi 1", "append multi 2")
+ handler.lb2.Append("append multi 1", "append multi 2")
+ case handler.decButton:
+ handler.prog--
+ if handler.prog < 0 {
+ handler.prog = 0
}
- pbar.SetProgress(prog)
- case <-indetButton.Clicked:
- pbar.SetProgress(-1)
- case <-invalidButton.Clicked:
- invalidTest(cb1, lb1, nil, nil)
- case <-bmsg.Clicked:
+ handler.pbar.SetProgress(handler.prog)
+ case handler.indetButton:
+ handler.pbar.SetProgress(-1)
+ case handler.invalidButton:
+ invalidTest(handler.cb1, handler.lb1, nil, nil)
+ case handler.bmsg:
MsgBox("Title Only, no parent", "")
- MsgBox("Title and Text", "parent")
- // dialogs
- case <-dialog_bMsgBox.Clicked:
- dialog_sret = dialog_win.MsgBox("Message Box", "Dismiss")
- l.SetText("DIALOG")
- case <-dialog_bMsgBoxError.Clicked:
- dialog_sret = dialog_win.MsgBoxError("Message Box", "Dismiss")
- l.SetText("DIALOG")
- case <-dialog_sret:
- dialog_sret = nil
- resetl()
- case <-centerButton.Clicked:
- dialog_win.Center()
+ handler.w.MsgBox("Title and Text", "parent")
+ }
+// == TODO ==
+// case CusotmEvent:
+// l.SetText("DIALOG")
+// case CustomEvent + 1:
+// resetl()
+ }
+}
+
+type dialoghandler struct {
+ bMsgBox *Button
+ bMsgBoxError *Button
+ w *Window
+ bCenter *Button
+ send func(Event, interface{})
+}
+
+// == TODO ==
+func (handler *dialoghandler) Event(e Event, d interface{}) {
+ if e == Clicked {
+ switch d {
+ case handler.bMsgBox:
+// handler.send(CustomEvent, "DIALOG")
+ handler.w.MsgBox("Message Box", "Dismiss")
+// handler.send(CustomEvent, nil)
+ case handler.bMsgBoxError:
+// handler.send(CustomEvent, "DIALOG")
+ handler.w.MsgBoxError("Message Box", "Dismiss")
+// handler.send(CustomEvent, nil)
+ case handler.bCenter:
+ handler.w.Center()
}
}
- w.Hide()
}
func main() {
flag.Parse()
- err := Go(myMain)
+ go myMain()
+ err := Go()
if err != nil {
panic(err)
}
}
+// TODO move to its own file
+
// source: https://upload.wikimedia.org/wikipedia/commons/0/06/Regensburg-donaulaende-warp-enhanced_1-320x240.jpg via https://commons.wikimedia.org/wiki/File:Regensburg-donaulaende-warp-enhanced_1-320x240.jpg (thanks Sofi)
// converted to png with imagemagick because the JPG was throwing up an error about incomplete Huffman data (TODO)
var imagedata = []byte{