/// <summary> /// Adds multiple choices. /// </summary> /// <typeparam name="T">The prompt result type.</typeparam> /// <param name="obj">The prompt.</param> /// <param name="choices">The choices to add.</param> /// <returns>The same instance so that multiple calls can be chained.</returns> public static MultiSelectionPrompt <T> AddChoices <T>(this MultiSelectionPrompt <T> obj, params T[] choices) { if (obj is null) { throw new ArgumentNullException(nameof(obj)); } obj.Choices.AddRange(choices); return(obj); }
/// <summary> /// Sets the title. /// </summary> /// <typeparam name="T">The prompt result type.</typeparam> /// <param name="obj">The prompt.</param> /// <param name="title">The title markup text.</param> /// <returns>The same instance so that multiple calls can be chained.</returns> public static MultiSelectionPrompt <T> Title <T>(this MultiSelectionPrompt <T> obj, string?title) { if (obj is null) { throw new ArgumentNullException(nameof(obj)); } obj.Title = title; return(obj); }
/// <summary> /// Sets a value indicating whether or not at least one choice must be selected. /// </summary> /// <typeparam name="T">The prompt result type.</typeparam> /// <param name="obj">The prompt.</param> /// <param name="required">Whether or not at least one choice must be selected.</param> /// <returns>The same instance so that multiple calls can be chained.</returns> public static MultiSelectionPrompt <T> Required <T>(this MultiSelectionPrompt <T> obj, bool required) { if (obj is null) { throw new ArgumentNullException(nameof(obj)); } obj.Required = required; return(obj); }
/// <summary> /// Sets the function to create a display string for a given choice. /// </summary> /// <typeparam name="T">The prompt type.</typeparam> /// <param name="obj">The prompt.</param> /// <param name="displaySelector">The function to get a display string for a given choice.</param> /// <returns>The same instance so that multiple calls can be chained.</returns> public static MultiSelectionPrompt <T> UseConverter <T>(this MultiSelectionPrompt <T> obj, Func <T, string>?displaySelector) { if (obj is null) { throw new ArgumentNullException(nameof(obj)); } obj.Converter = displaySelector; return(obj); }
/// <summary> /// Sets the text that instructs the user of how to select items. /// </summary> /// <typeparam name="T">The prompt result type.</typeparam> /// <param name="obj">The prompt.</param> /// <param name="text">The text to display.</param> /// <returns>The same instance so that multiple calls can be chained.</returns> public static MultiSelectionPrompt <T> InstructionsText <T>(this MultiSelectionPrompt <T> obj, string?text) { if (obj is null) { throw new ArgumentNullException(nameof(obj)); } obj.InstructionsText = text; return(obj); }
/// <summary> /// Sets the highlight style of the selected choice. /// </summary> /// <typeparam name="T">The prompt result type.</typeparam> /// <param name="obj">The prompt.</param> /// <param name="highlightStyle">The highlight style of the selected choice.</param> /// <returns>The same instance so that multiple calls can be chained.</returns> public static MultiSelectionPrompt <T> HighlightStyle <T>(this MultiSelectionPrompt <T> obj, Style highlightStyle) { if (obj is null) { throw new ArgumentNullException(nameof(obj)); } obj.HighlightStyle = highlightStyle; return(obj); }
/// <summary> /// Adds a choice. /// </summary> /// <typeparam name="T">The prompt result type.</typeparam> /// <param name="obj">The prompt.</param> /// <param name="choice">The choice to add.</param> /// <returns>The same instance so that multiple calls can be chained.</returns> public static MultiSelectionPrompt <T> AddChoice <T>(this MultiSelectionPrompt <T> obj, T choice) { if (obj is null) { throw new ArgumentNullException(nameof(obj)); } obj.Choices.Add(choice); return(obj); }
/// <summary> /// Sets the text that will be displayed if there are more choices to show. /// </summary> /// <typeparam name="T">The prompt result type.</typeparam> /// <param name="obj">The prompt.</param> /// <param name="text">The text to display.</param> /// <returns>The same instance so that multiple calls can be chained.</returns> public static MultiSelectionPrompt <T> MoreChoicesText <T>(this MultiSelectionPrompt <T> obj, string?text) where T : notnull { if (obj is null) { throw new ArgumentNullException(nameof(obj)); } obj.MoreChoicesText = text; return(obj); }
/// <summary> /// Sets the selection mode. /// </summary> /// <typeparam name="T">The prompt result type.</typeparam> /// <param name="obj">The prompt.</param> /// <param name="mode">The selection mode.</param> /// <returns>The same instance so that multiple calls can be chained.</returns> public static MultiSelectionPrompt <T> Mode <T>(this MultiSelectionPrompt <T> obj, SelectionMode mode) where T : notnull { if (obj is null) { throw new ArgumentNullException(nameof(obj)); } obj.Mode = mode; return(obj); }
/// <summary> /// Marks multiple items as selected. /// </summary> /// <typeparam name="T">The prompt result type.</typeparam> /// <param name="obj">The prompt.</param> /// <param name="indices">The indices of the items to select.</param> /// <returns>The same instance so that multiple calls can be chained.</returns> public static MultiSelectionPrompt <T> Select <T>(this MultiSelectionPrompt <T> obj, IEnumerable <int> indices) { if (obj is null) { throw new ArgumentNullException(nameof(obj)); } foreach (var index in indices) { Select(obj, index); } return(obj); }
/// <summary> /// Marks an item as selected. /// </summary> /// <typeparam name="T">The prompt result type.</typeparam> /// <param name="obj">The prompt.</param> /// <param name="item">The item to select.</param> /// <returns>The same instance so that multiple calls can be chained.</returns> public static MultiSelectionPrompt <T> Select <T>(this MultiSelectionPrompt <T> obj, T item) where T : notnull { if (obj is null) { throw new ArgumentNullException(nameof(obj)); } var node = obj.Tree.Find(item); node?.Select(); return(obj); }
/// <summary> /// Sets how many choices that are displayed to the user. /// </summary> /// <typeparam name="T">The prompt result type.</typeparam> /// <param name="obj">The prompt.</param> /// <param name="pageSize">The number of choices that are displayed to the user.</param> /// <returns>The same instance so that multiple calls can be chained.</returns> public static MultiSelectionPrompt <T> PageSize <T>(this MultiSelectionPrompt <T> obj, int pageSize) { if (obj is null) { throw new ArgumentNullException(nameof(obj)); } if (pageSize <= 2) { throw new ArgumentException("Page size must be greater or equal to 3.", nameof(pageSize)); } obj.PageSize = pageSize; return(obj); }
/// <summary> /// Adds multiple choices. /// </summary> /// <typeparam name="T">The prompt result type.</typeparam> /// <param name="obj">The prompt.</param> /// <param name="choices">The choices to add.</param> /// <returns>The same instance so that multiple calls can be chained.</returns> public static MultiSelectionPrompt <T> AddChoices <T>(this MultiSelectionPrompt <T> obj, IEnumerable <T> choices) where T : notnull { if (obj is null) { throw new ArgumentNullException(nameof(obj)); } foreach (var choice in choices) { obj.AddChoice(choice); } return(obj); }
/// <summary> /// Marks an item as selected. /// </summary> /// <typeparam name="T">The prompt result type.</typeparam> /// <param name="obj">The prompt.</param> /// <param name="index">The index of the item to select.</param> /// <returns>The same instance so that multiple calls can be chained.</returns> public static MultiSelectionPrompt <T> Select <T>(this MultiSelectionPrompt <T> obj, int index) { if (obj is null) { throw new ArgumentNullException(nameof(obj)); } if (index < 0) { throw new ArgumentException("Index must be greater than zero", nameof(index)); } obj.Selected.Add(index); return(obj); }
/// <summary> /// Adds multiple grouped choices. /// </summary> /// <typeparam name="T">The prompt result type.</typeparam> /// <param name="obj">The prompt.</param> /// <param name="group">The group.</param> /// <param name="choices">The choices to add.</param> /// <returns>The same instance so that multiple calls can be chained.</returns> public static MultiSelectionPrompt <T> AddChoiceGroup <T>(this MultiSelectionPrompt <T> obj, T group, IEnumerable <T> choices) where T : notnull { if (obj is null) { throw new ArgumentNullException(nameof(obj)); } var root = obj.AddChoice(group); foreach (var choice in choices) { root.AddChild(choice); } return(obj); }
/// <summary> /// Adds a choice. /// </summary> /// <typeparam name="T">The prompt result type.</typeparam> /// <param name="obj">The prompt.</param> /// <param name="choice">The choice to add.</param> /// <param name="configurator">The configurator for the choice.</param> /// <returns>The same instance so that multiple calls can be chained.</returns> public static MultiSelectionPrompt <T> AddChoices <T>(this MultiSelectionPrompt <T> obj, T choice, Action <IMultiSelectionItem <T> > configurator) where T : notnull { if (obj is null) { throw new ArgumentNullException(nameof(obj)); } if (configurator is null) { throw new ArgumentNullException(nameof(configurator)); } var result = obj.AddChoice(choice); configurator(result); return(obj); }
/// <summary> /// Requires a choice to be selected. /// </summary> /// <typeparam name="T">The prompt result type.</typeparam> /// <param name="obj">The prompt.</param> /// <returns>The same instance so that multiple calls can be chained.</returns> public static MultiSelectionPrompt <T> Required <T>(this MultiSelectionPrompt <T> obj) where T : notnull { return(Required(obj, true)); }
/// <summary> /// Requires no choice to be selected. /// </summary> /// <typeparam name="T">The prompt result type.</typeparam> /// <param name="obj">The prompt.</param> /// <returns>The same instance so that multiple calls can be chained.</returns> public static MultiSelectionPrompt <T> NotRequired <T>(this MultiSelectionPrompt <T> obj) { return(Required(obj, false)); }
public static MultiSelectionPrompt <T> Select <T>(this MultiSelectionPrompt <T> obj, IEnumerable <int> indices) where T : notnull { return(obj); }
public static MultiSelectionPrompt <T> Select <T>(this MultiSelectionPrompt <T> obj, params int[] indices) where T : notnull { return(obj); }
public static MultiSelectionPrompt <T> Select <T>(this MultiSelectionPrompt <T> obj, int index) where T : notnull { return(obj); }