From 04748e3381e7abf7e40e6a437866445e6ca14811 Mon Sep 17 00:00:00 2001 From: Will Dixon Date: Tue, 2 Jan 2018 16:15:52 -0500 Subject: [PATCH] Add an example of how to use multiple menus fixes #15 --- README.md | 2 +- example/main.go | 76 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 example/main.go diff --git a/README.md b/README.md index 8e1bed7..e068531 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ menu := wmenu.NewMenu("What is your favorite food?") menu.Action(func (opts []wmenu.Opt) error {fmt.Printf(opts[0].Text + " is your favorite food."); return nil}) menu.Option("Pizza", nil, true, nil) menu.Option("Ice Cream", nil, false, nil) -menu.Option("Tacos", nil, false, func() error { +menu.Option("Tacos", nil, false, func(opt wmenu.Opt) error { fmt.Printf("Tacos are great") }) err := menu.Run() diff --git a/example/main.go b/example/main.go new file mode 100644 index 0000000..82b1428 --- /dev/null +++ b/example/main.go @@ -0,0 +1,76 @@ +//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 +}