115 lines
2.2 KiB
Go
115 lines
2.2 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
|
||
|
"git.kirsle.net/go/render"
|
||
|
"git.kirsle.net/go/render/sdl"
|
||
|
"git.kirsle.net/go/ui"
|
||
|
)
|
||
|
|
||
|
func init() {
|
||
|
sdl.DefaultFontFilename = "../DejaVuSans.ttf"
|
||
|
}
|
||
|
|
||
|
func main() {
|
||
|
mw, err := ui.NewMainWindow("Forms Test")
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
|
||
|
mw.SetBackground(render.White)
|
||
|
|
||
|
// Buttons row.
|
||
|
{
|
||
|
frame := ui.NewFrame("Frame 1")
|
||
|
mw.Pack(frame, ui.Pack{
|
||
|
Side: ui.N,
|
||
|
FillX: true,
|
||
|
Padding: 4,
|
||
|
})
|
||
|
label := ui.NewLabel(ui.Label{
|
||
|
Text: "Buttons:",
|
||
|
})
|
||
|
frame.Pack(label, ui.Pack{
|
||
|
Side: ui.W,
|
||
|
})
|
||
|
|
||
|
// Buttons.
|
||
|
btn := ui.NewButton("Button 1", ui.NewLabel(ui.Label{
|
||
|
Text: "Click me!",
|
||
|
}))
|
||
|
btn.Handle(ui.Click, func(ed ui.EventData) error {
|
||
|
fmt.Println("Clicked!")
|
||
|
return nil
|
||
|
})
|
||
|
frame.Pack(btn, ui.Pack{
|
||
|
Side: ui.W,
|
||
|
PadX: 4,
|
||
|
})
|
||
|
|
||
|
mw.Supervisor().Add(btn)
|
||
|
}
|
||
|
|
||
|
// Selectbox row.
|
||
|
{
|
||
|
frame := ui.NewFrame("Frame 2")
|
||
|
mw.Pack(frame, ui.Pack{
|
||
|
Side: ui.N,
|
||
|
FillX: true,
|
||
|
Padding: 4,
|
||
|
})
|
||
|
label := ui.NewLabel(ui.Label{
|
||
|
Text: "Set window color:",
|
||
|
})
|
||
|
frame.Pack(label, ui.Pack{
|
||
|
Side: ui.W,
|
||
|
})
|
||
|
|
||
|
var colors = []struct{
|
||
|
Label string
|
||
|
Value render.Color
|
||
|
}{
|
||
|
{"White", render.White},
|
||
|
{"Yellow", render.Yellow},
|
||
|
{"Cyan", render.Cyan},
|
||
|
{"Green", render.Green},
|
||
|
{"Blue", render.RGBA(0, 153, 255, 255)},
|
||
|
{"Pink", render.Pink},
|
||
|
}
|
||
|
|
||
|
// Create the SelectBox and populate its options.
|
||
|
sel := ui.NewSelectBox("Select 1", ui.Label{})
|
||
|
for _, option := range colors {
|
||
|
sel.AddItem(option.Label, option.Value, func() {
|
||
|
fmt.Printf("Picked option: %s\n", option.Value)
|
||
|
})
|
||
|
}
|
||
|
|
||
|
// On change: set the window BG color.
|
||
|
sel.Handle(ui.Change, func(ed ui.EventData) error {
|
||
|
if val, ok := sel.GetValue(); ok {
|
||
|
if color, ok := val.Value.(render.Color); ok {
|
||
|
fmt.Printf("Set background to: %s\n", val.Label)
|
||
|
mw.SetBackground(color)
|
||
|
} else {
|
||
|
fmt.Println("Not a valid color!")
|
||
|
}
|
||
|
} else {
|
||
|
fmt.Println("Not a valid SelectBox value!")
|
||
|
}
|
||
|
return nil
|
||
|
})
|
||
|
|
||
|
frame.Pack(sel, ui.Pack{
|
||
|
Side: ui.W,
|
||
|
PadX: 4,
|
||
|
})
|
||
|
sel.Supervise(mw.Supervisor())
|
||
|
mw.Supervisor().Add(sel) // TODO: ideally Supervise() is all that's needed,
|
||
|
// but w/o this extra Add() the Button doesn't react.
|
||
|
}
|
||
|
|
||
|
mw.MainLoop()
|
||
|
}
|