public static string SelectFrom(string heading, string question, string defaultValue, params string[] prms) { while (true) { int maxCharLength = 0; foreach (string prm in prms) { if (prm.Length > maxCharLength) { maxCharLength = prm.Length; } } maxCharLength += 4; int defaultValueInt = -1; System.Text.StringBuilder consoleMesg = new System.Text.StringBuilder(); consoleMesg.Append("" + heading + "\n"); for (int i = 0; i < prms.Length; i++) { consoleMesg.Append(string.Format("{0,-" + maxCharLength + "}", (i + 1) + ". " + prms[i])); if ((i + 1) % maxColumnsInALine == 0 && (i + 1) < prms.Length) { consoleMesg.Append("\n"); } if (defaultValue == prms[i]) { defaultValueInt = i; } } consoleMesg.Append("\n" + question); int userInput = ConsoleReader.GetUserInputInt(consoleMesg.ToString(), defaultValueInt + 1); userInput--; if (userInput < prms.Length && userInput >= 0) { return(prms[userInput]); } ConsoleWriter.Print("Action was invalid. Please try again..."); } }
public static void DoAction(string heading, string question, string defaultAction, bool optionsInNewLine, params ActionParams[] prms) { bool isDefaultActionAvailable = !string.IsNullOrEmpty(defaultAction); ActionParams selectedAction = null; int maxColumnsInEachLine = optionsInNewLine ? 1 : maxColumnsInALine; string userInput = ""; while (true) { int maxCharLength = 0; foreach (ActionParams prm in prms) { if (prm.heading.Length > maxCharLength) { maxCharLength = prm.heading.Length; } } maxCharLength += 2; System.Text.StringBuilder consoleMsg = new System.Text.StringBuilder(); consoleMsg.Append("" + heading + "\n"); int shown = 0; for (int i = 0; i < prms.Length; i++) { // If we have context and in the context we are alking not to show this params, then hide it if (!prms[i].visible) { if (ActionParamsContext.DisplayAllCommands) { } else { continue; } } consoleMsg.Append(string.Format("{0,-" + maxCharLength + "}", prms[i].heading)); if ((shown + 1) % maxColumnsInEachLine == 0 && (shown + 1) < prms.Length) { consoleMsg.Append("\n"); } shown++; } consoleMsg.Append("\n" + question); // if ( isDefaultActionAvailable ) // consoleMesg.Append( "(default is " + defaultAction + ")"); userInput = ConsoleReader.GetUserInputString(consoleMsg.ToString(), ConsoleColor.Blue, isDefaultActionAvailable ? defaultAction : ""); userInput = userInput.ToLower(); //ConsoleWriter.ResetConsoleColor(); foreach (ActionParams prm in prms) { if (prm.userActionLowerCase == userInput) { selectedAction = prm; break; } } // trying to see if its a big command with context if (selectedAction == null && (userInput.Contains("|"))) { string command = userInput.Split("|")[0]; foreach (ActionParams prm in prms) { if (prm.userActionLowerCase.Contains(command)) { selectedAction = prm; break; } } } if (selectedAction != null) { break; } else { ConsoleWriter.Print("Action was invalid. Please try again..."); } } selectedAction.actionToPerform(selectedAction.context); }