77 lines
1.7 KiB
Go
77 lines
1.7 KiB
Go
//package main is to show how multiple menus can be used with eachother
|
|
package main
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"os"
|
|
|
|
"github.com/dixonwille/wmenu"
|
|
)
|
|
|
|
type menuItem int
|
|
|
|
const (
|
|
pizza menuItem = iota
|
|
iceCream
|
|
tacos
|
|
)
|
|
|
|
var menuItemStrings = map[menuItem]string{
|
|
pizza: "Pizza",
|
|
iceCream: "Ice Cream",
|
|
tacos: "Tacos",
|
|
}
|
|
|
|
func main() {
|
|
mm := mainMenu()
|
|
err := mm.Run()
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
os.Exit(1)
|
|
}
|
|
}
|
|
|
|
func mainMenu() *wmenu.Menu {
|
|
menu := wmenu.NewMenu("What is your favorite food?")
|
|
menu.Option(menuItemStrings[pizza], pizza, true, nil)
|
|
menu.Option(menuItemStrings[iceCream], iceCream, false, nil)
|
|
menu.Option(menuItemStrings[tacos], tacos, false, func(opt wmenu.Opt) error {
|
|
fmt.Printf("Tacos are great!\n")
|
|
return nil
|
|
})
|
|
menu.Action(func(opts []wmenu.Opt) error {
|
|
if len(opts) != 1 {
|
|
return errors.New("wrong number of options chosen")
|
|
}
|
|
|
|
tm := toppingsMenu(opts[0].Value.(menuItem))
|
|
return tm.Run()
|
|
})
|
|
return menu
|
|
}
|
|
|
|
func toppingsMenu(favorite menuItem) *wmenu.Menu {
|
|
menu := wmenu.NewMenu(fmt.Sprintf("What is your favorite topping for %s?", menuItemStrings[favorite]))
|
|
if favorite == pizza {
|
|
menu.Option("Meat", nil, true, nil)
|
|
menu.Option("Cheese", nil, false, nil)
|
|
menu.Option("Vegitables", nil, false, nil)
|
|
}
|
|
if favorite == iceCream {
|
|
menu.Option("Fruit", nil, true, nil)
|
|
menu.Option("Chocolate Syrup", nil, false, nil)
|
|
menu.Option("Caramel Syrup", nil, false, nil)
|
|
}
|
|
menu.Action(func(opts []wmenu.Opt) error {
|
|
if len(opts) != 1 {
|
|
return errors.New("wrong number of options chosen")
|
|
}
|
|
|
|
fmt.Printf("Your favorite food is %s with %s on top.\n", menuItemStrings[favorite], opts[0].Text)
|
|
|
|
return nil
|
|
})
|
|
return menu
|
|
}
|