public static bool Choose(Action writeMessage, IDictionary <string, Action> keyActions, IList <Action> displayMessages, bool forceSelect = false) { var keyOptionsMessage = string.Format("(Options: {0}.{1}) ", string.Join(", ", keyActions.Keys.Select(key => key.ToUpperInvariant())), forceSelect ? "" : " Any other key cancels" ); Action writeMessageAndKeys = () => { writeMessage(); if (displayMessages.Any()) { foreach (var displayMessage in displayMessages) { displayMessage(); } "".WriteLine(); } keyOptionsMessage.Write(); }; var consoleChooser = new ConsoleChooser(writeMessageAndKeys); bool choosed; do { choosed = consoleChooser.Choose(keyActions); if (forceSelect && !choosed) { "The selected option is invalid".Message(); } } while (forceSelect && !choosed); return(choosed); }
public bool Confirm() { if (!_keyActions.Any() || _keyActions.Count > 1) { throw new NotSupportedException("The confirm dialog must have one and only one option"); } return(ConsoleChooser.Confirm(_writeMessage, _keyActions.First().Key, _keyActions.First().Value)); }
public static bool Confirm(Action writeMessage, string key, Action action) { var keyOptionsMessage = string.Format("('{0}' confirms. Any other key cancels) ", key.ToUpperInvariant()); Action writeMessageAndKeys = () => { writeMessage(); keyOptionsMessage.WriteLine(); }; var consoleChooser = new ConsoleChooser(writeMessageAndKeys); var confirmed = false; consoleChooser.Choose(new Dictionary <string, Action> { { key, () => { confirmed = true; action(); } } }); return(confirmed); }
public static void Main(string[] args) { var sink = new ConsoleSink(); var chooser = new ConsoleChooser(); var envParams = new EnvParams(); using (var ci = new CommandInterface(sink, chooser, envParams)) { Console.CancelKeyPress += (x, y) => { y.Cancel = true; ci.Cancel(); }; //// If errors occured while parsing switches //// then treat this an exit condition. bool isExit; ci.DoOptions(out isExit); if (isExit || sink.PrintedError) { Environment.ExitCode = sink.PrintedError ? 1 : 0; return; } string line; while (true) { //// Because pressing CTRL-C may return a null line line = Console.ReadLine(); line = line == null ? string.Empty : line.Trim(); if (line == CommandInterface.ExitCommand || line == CommandInterface.ExitShortCommand) { Environment.ExitCode = sink.PrintedError ? 1 : 0; return; } ci.DoCommand(line); } } }
public void ChooseAndLoopOptions() { ConsoleChooser.ChooseAndLoopOptions(_writeMessage, _keyActions, _displayMessages); }
public bool Choose(bool foreSelect = false) { return(ConsoleChooser.Choose(_writeMessage, _keyActions, _displayMessages, foreSelect)); }