Exemple #1
0
        /// <summary>
        /// Provides a single level interactive menu for navigation within the user's console window.
        /// </summary>
        /// <param name="title">The title of the menu.</param>
        /// <param name="items">The menu items to display.</param>
        /// <param name="options">Optional parameters to modify menu.</param>
        public static T Menu <T>(string title, IEnumerable <T> items, MenuOptions <T> options = null)
        {
            var result = default(T);

            int key         = 0;
            var menuOptions = options ?? new MenuOptions <T>();
            var menu        = new Menu(title);

            menu.MenuItemFormatter  = menuOptions.MenuItemFormatter;
            menu.InputPrompt        = menuOptions.InputPrompt;
            menu.InvalidInputPrompt = menuOptions.InvalidInputPrompt;
            foreach (var item in items)
            {
                menu.AddMenuItem(menuOptions.IndexGenerator(key++), new MenuItem(menuOptions.TitleFormatter(item), () =>
                {
                    result = item;
                    return(Task.FromResult(false));
                }));
            }

            ConzoleUtils.MenuAsync(menu).Wait(); // Wait is a hack for the moment, this will work because we control the menu inputs :\

            return(result);
        }