diff --git a/test/main.go b/test/main.go index 112e8f4..93ee5fc 100644 --- a/test/main.go +++ b/test/main.go @@ -334,55 +334,85 @@ 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(handler.s2, handler.c, handler.cb1, handler.cb2, handler.e, handler.s3, handler.pbar, handler.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", i), 1) + handler.lb1.InsertBefore(fmt.Sprintf("%d", 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) @@ -393,12 +423,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, @@ -406,11 +441,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) @@ -440,89 +473,104 @@ 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") + *(d.(*bool)) = true + 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() + } +// == 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 Data) { + if e == Clicked { + switch d { + case handler.bMsgBox: +// dialog_sret = handler.w.MsgBox("Message Box", "Dismiss") +// handler.send(CustomEvent, nil) + case handler.bMsgBoxError: +// dialog_sret = handler.w.MsgBoxError("Message Box", "Dismiss") +// handler.send(CustomEvent, nil) +// case <-dialog_sret: +// dialog_sret = nil +// handler.send(CustomEvent + 1, nil) + case handler.bCenter: + handler.w.Center() } } - w.Hide() } func main() {