161 lines
3.9 KiB
Go
161 lines
3.9 KiB
Go
// This creates a simple hello world window
|
|
package main
|
|
|
|
import (
|
|
"math/rand"
|
|
"time"
|
|
|
|
"go.wit.com/gui"
|
|
"go.wit.com/lib/gadgets"
|
|
"go.wit.com/log"
|
|
)
|
|
|
|
type choices struct {
|
|
group *gui.Node // the group
|
|
grid *gui.Node // the grid
|
|
hello *gui.Node // the hello button
|
|
computers *gui.Node
|
|
colors *gui.Node
|
|
checkers *gui.Node
|
|
|
|
socks *gadgets.OneLiner
|
|
animal *gadgets.BasicCombobox
|
|
place *gadgets.BasicEntry
|
|
}
|
|
|
|
// This initializes the first window and some widgets
|
|
func newChoices(parent *gui.Node) *choices {
|
|
var c *choices
|
|
c = new(choices)
|
|
c.group = parent.NewGroup("choices")
|
|
c.grid = c.group.NewGrid("gridiron", 8, 1)
|
|
|
|
c.grid.NewButton("hello", func() {
|
|
log.Info("world")
|
|
})
|
|
c.grid.NewButton("toggle basic window", func() {
|
|
basicWindow.Toggle()
|
|
})
|
|
c.grid.NewLabel("a label")
|
|
c.grid.NextRow()
|
|
|
|
c.computers = c.grid.NewDropdown().SetProgName("COMPUTERS")
|
|
c.computers.AddText("Atari 500")
|
|
c.computers.AddText("Beagleboard")
|
|
c.computers.AddText("Unmatched Rev B")
|
|
c.computers.SetText("Beagleboard")
|
|
c.computers.Custom = func() {
|
|
log.Info("You changed the computer to:", c.computers.String())
|
|
}
|
|
c.grid.NewButton("modify dropdown state", func() {
|
|
c.computers.AddText("Irix")
|
|
c.computers.AddText("Macintosh Plus")
|
|
c.computers.SetText("Irix")
|
|
|
|
rand.Seed(time.Now().UnixNano())
|
|
// Generate a random number between 0 and 25
|
|
randomNum := rand.Intn(8) // 26 because Intn is [0, n)
|
|
// Convert to a corresponding uppercase letter
|
|
randomLetter := rune('A' + randomNum)
|
|
c.computers.AddText("WIT " + string(randomLetter))
|
|
c.showState()
|
|
})
|
|
c.grid.NewButton("toggle", func() {
|
|
if c.computers.Hidden() {
|
|
c.computers.Show()
|
|
} else {
|
|
c.computers.Hide()
|
|
}
|
|
})
|
|
c.grid.NewButton("dropdown state", func() {
|
|
c.showState()
|
|
})
|
|
c.grid.NextRow()
|
|
|
|
c.colors = c.grid.NewCombobox().SetProgName("COLORS")
|
|
c.colors.AddText("Cyan")
|
|
c.colors.AddText("Magenta")
|
|
c.colors.AddText("Yellow")
|
|
c.colors.SetText("orange")
|
|
c.grid.NewButton("modify combobox state", func() {
|
|
c.colors.AddText("Red")
|
|
rand.Seed(time.Now().UnixNano())
|
|
// Generate a random number between 0 and 25
|
|
randomNum := rand.Intn(26) // 26 because Intn is [0, n)
|
|
// Convert to a corresponding uppercase letter
|
|
randomLetter := rune('A' + randomNum)
|
|
c.colors.AddText("Yellow " + string(randomLetter))
|
|
|
|
c.colors.SetText("blue")
|
|
log.Info("color value =", c.colors.String())
|
|
})
|
|
c.grid.NewButton("toggle", func() {
|
|
if c.colors.Hidden() {
|
|
c.colors.Show()
|
|
} else {
|
|
c.colors.Hide()
|
|
}
|
|
})
|
|
c.grid.NewButton("show state", func() {
|
|
c.showState()
|
|
})
|
|
c.grid.NextRow()
|
|
|
|
c.checkers = c.grid.NewCheckbox("Checkers").SetProgName("CHECKERS")
|
|
c.checkers.Custom = func() {
|
|
log.Info("Checkers is", c.checkers.Bool())
|
|
}
|
|
c.grid.NextRow()
|
|
|
|
c.socks = gadgets.NewOneLiner(c.grid, "two for one")
|
|
c.socks.SetValue("socks")
|
|
c.grid.NextRow()
|
|
|
|
c.animal = gadgets.NewBasicCombobox(c.grid, "animals")
|
|
c.animal.AddText("otter")
|
|
c.animal.AddText("honey badger")
|
|
c.animal.AddText("polar bear")
|
|
c.grid.NextRow()
|
|
|
|
c.place = gadgets.NewBasicEntry(c.grid, "favorite place")
|
|
c.place.Custom = func() {
|
|
log.Info("now set to:", c.place.String())
|
|
if c.place == section1.place {
|
|
section2.place.SetText(c.place.String())
|
|
}
|
|
if c.place == section2.place {
|
|
section1.place.SetText(c.place.String())
|
|
}
|
|
}
|
|
c.place.SetText("coffee shop")
|
|
c.grid.NextRow()
|
|
|
|
c.grid.NewButton("enable animals", func() {
|
|
c.animal.Enable()
|
|
})
|
|
c.grid.NewButton("disable animals", func() {
|
|
c.animal.Disable()
|
|
})
|
|
c.grid.NewButton("set trust", func() {
|
|
c.place.SetText("trust")
|
|
})
|
|
|
|
return c
|
|
}
|
|
|
|
func (c *choices) SetSocks(s string) *choices {
|
|
c.socks.SetValue(s)
|
|
return c
|
|
}
|
|
|
|
func (c *choices) showState() {
|
|
log.Info("computers value =", c.computers.String())
|
|
for i, s := range c.computers.Strings() {
|
|
log.Println("computers has:", i, s)
|
|
}
|
|
log.Info("color value =", c.colors.String())
|
|
for i, s := range c.colors.Strings() {
|
|
log.Println("has option", i, s)
|
|
}
|
|
}
|