diff options
Diffstat (limited to 'test/main.go')
| -rw-r--r-- | test/main.go | 361 |
1 files changed, 138 insertions, 223 deletions
diff --git a/test/main.go b/test/main.go index db01d15..034d712 100644 --- a/test/main.go +++ b/test/main.go @@ -15,21 +15,18 @@ 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, nullwinhandler{}) + w := NewWindow("Listbox Preferred Size Test", 300, 300) w.Open(g) return w } var gridtest = flag.Bool("grid", false, "") func gridWindow() *Window { - w := NewWindow("Grid Test", 400, 400, nullwinhandler{}) + w := NewWindow("Grid Test", 400, 400) b00 := NewButton("0,0") b01 := NewButton("0,1") b02 := NewButton("0,2") @@ -47,11 +44,10 @@ func gridWindow() *Window { g.SetStretchy(1, 1) w.SetSpaced(*spacingTest) w.Open(g) -//TODO -// go func() {for {select { -// case <-b12.Clicked: -// c21.SetChecked(!c21.Checked()) -// }}}() + go func() {for {select { + case <-b12.Clicked: + c21.SetChecked(!c21.Checked()) + }}}() return w } @@ -209,6 +205,7 @@ 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, } @@ -232,54 +229,24 @@ 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) - 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: + 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: MsgBox("Modal Test", "") - case a.repainttest: - a.areahandler.mutate() - a.a.RepaintAll() + case <-repainttest.Clicked: + areahandler.mutate() + a.RepaintAll() } } } @@ -308,10 +275,9 @@ 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, &areatestwinhandler{ - a: a, - }) + w := NewWindow("Area Bounds Test", 320, 240) w.Open(a) + <-w.Closing } var dialogTest = flag.Bool("dialog", false, "add Window.MsgBox() channel test window") @@ -319,7 +285,6 @@ 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 @@ -336,88 +301,58 @@ func myMain() { areaboundsTest() return } - 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) + w := NewWindow("Main Window", 320, 240) + b := NewButton("Click Me") + b2 := NewButton("Or Me") + bmsg := NewButton("Or Even Me!") + s2 := NewHorizontalStack(b, b2, bmsg) s2.SetStretchy(2) - 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") + 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.b3 = NewButton("List Info") - s3 := NewHorizontalStack(handler.l, handler.b3) + b3 := NewButton("List Info") + s3 := NewHorizontalStack(l, b3) s3.SetStretchy(0) // s3.SetStretchy(1) - 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) + 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) s0.SetStretchy(8) - 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++ + 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.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) + doAdjustments() + cb1.Append("append multi 1", "append multi 2") + lb2.Append("append multi 1", "append multi 2") + s1 := NewVerticalStack(lb2, lb1) s1.SetStretchy(0) s1.SetStretchy(1) s := NewHorizontalStack(s1, s0) s.SetStretchy(0) s.SetStretchy(1) if *invalidBefore { - invalidTest(handler.cb1, handler.lb1, s, NewGrid(1, Space())) + invalidTest(cb1, lb1, s, NewGrid(1, Space())) } - handler.w.SetSpaced(*spacingTest) - handler.w.Open(s) + w.SetSpaced(*spacingTest) + w.Open(s) if *gridtest { gridWindow() } @@ -425,17 +360,12 @@ func runMainTest() { listboxPreferredSizeTest() } -// == TODO == + ticker := time.Tick(time.Second) + dialog_bMsgBox := NewButton("MsgBox()") dialog_bMsgBoxError := NewButton("MsgBoxError()") centerButton := NewButton("Center") - dh := &dialoghandler{ - bMsgBox: dialog_bMsgBox, - bMsgBoxError: dialog_bMsgBoxError, - bCenter: centerButton, -// send: w.Send, - } - dh.w = NewWindow("Dialogs", 200, 200, dh) + dialog_win := NewWindow("Dialogs", 200, 200) if *dialogTest { s := NewVerticalStack( dialog_bMsgBox, @@ -443,9 +373,11 @@ func runMainTest() { Space(), centerButton) s.SetStretchy(2) - dh.w.Open(s) + dialog_win.Open(s) } + var dialog_sret chan struct{} = nil + if *labelAlignTest { s := NewHorizontalStack(NewStandaloneLabel("Label"), NewLineEdit("Label")) s.SetStretchy(1) @@ -475,116 +407,99 @@ func runMainTest() { NewButton("Button"), s) s.SetStretchy(4) - NewWindow("Label Align Test", 500, 300, nullwinhandler{}).Open(s) + NewWindow("Label Align Test", 500, 300).Open(s) } -} -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) +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) } - if handler.cb2.Len() > 2 { - handler.cb2.Delete(2) + if cb2.Len() > 2 { + cb2.Delete(2) } - if handler.lb1.Len() > 3 || *macCrashTest { - handler.lb1.Delete(3) + if lb1.Len() > 3 || *macCrashTest { + lb1.Delete(3) } - if handler.lb2.Len() > 4 { - handler.lb2.Delete(4) + if lb2.Len() > 4 { + lb2.Delete(4) } - case handler.b3: + case <-b3.Clicked: f := MsgBox - if handler.c.Checked() { + if 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)", - 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 + 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.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) + 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) - case handler.indetButton: - handler.pbar.SetProgress(-1) - case handler.invalidButton: - invalidTest(handler.cb1, handler.lb1, nil, nil) - case handler.bmsg: + pbar.SetProgress(prog) + case <-indetButton.Clicked: + pbar.SetProgress(-1) + case <-invalidButton.Clicked: + invalidTest(cb1, lb1, nil, nil) + case <-bmsg.Clicked: MsgBox("Title Only, no parent", "") - 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() + 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() } } + w.Hide() } func main() { flag.Parse() - go myMain() - err := Go() + err := Go(myMain) 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{ |
