/// <summary> /// Write wrong option message /// </summary> /// <param name="selectedOptionText"></param> /// <param name="consoleSelect"></param> private void WrongOption(string selectedOptionText, ConsoleSelect consoleSelect) { Console.ForegroundColor = ConsoleColor.DarkRed; Console.WriteLine(Messages.WrongOption, selectedOptionText); Console.ResetColor(); ReadSelectedOption(consoleSelect); }
/// <summary> /// Wait user input, verify if is a correct option and set option to selected /// </summary> /// <param name="consoleSelect"></param> private void ReadSelectedOption(ConsoleSelect consoleSelect) { Console.WriteLine(); Console.Write(Messages.ChooseOption); string selectedOptionText = Console.ReadLine(); int selectedOption = 0; if (int.TryParse(selectedOptionText, out selectedOption) && IsValidRange(consoleSelect, --selectedOption)) { this.SelectedOption = consoleSelect.Options[selectedOption]; } else if (selectedOption == consoleSelect.Options.Count) { this.Previous(); } else if (selectedOption == 98) { this.Exit(); } else { this.WrongOption(selectedOptionText, consoleSelect); } }
/// <summary> /// Write node /// </summary> /// <param name="node">Node</param> /// <param name="deep">Deep</param> private static void WriteNode(ConsoleOption node, int deep) { deep++; RenderNode(node, deep); if (node is ConsoleSelect) { ConsoleSelect select = node as ConsoleSelect; foreach (ConsoleOption item in select.Options) { WriteNode(item, deep); } } }
/// <summary> /// Create a new console state machine /// </summary> /// <param name="description">Description</param> /// <param name="initialSelect">Initial menu</param> public ConsoleMachine(string description, ConsoleSelect initialSelect) { this.Description = description; this.SelectedOption = initialSelect; }
/// <summary> /// Create and start new console state machine /// </summary> /// <param name="select">Initial menu</param> /// <param name="description">Description</param> public static void Start(ConsoleSelect select, string description = "Untitled") { ConsoleMachine machine = new ConsoleMachine(description, select); machine.Execute(); }
/// <summary> /// Verify if selected option is valid in range /// </summary> /// <param name="consoleSelect">Current console select</param> /// <param name="selectedOption">Next selected option</param> /// <returns></returns> private bool IsValidRange(ConsoleSelect consoleSelect, int selectedOption) { return(selectedOption > -1 && selectedOption < consoleSelect.Options.Count); }