/// <summary> /// Selection of a path in a ConsoleMenu /// </summary> /// <param name="path">path to start at</param> /// <returns>selected path</returns> public static string PathSelector(string path) { var dir = new DirectoryInfo(path); if (!dir.Exists) { throw new DirectoryNotFoundException($"{path}"); } Console.Clear(); var dirItems = new List <ConsoleMenuItem> { new ConsoleMenuItem <DirectoryInfo>("..", x => { if (x != null) { path = PathSelector(x.FullName); } else { path = DriveSelector(); } }, dir.Parent) }; foreach (var sub in dir.GetDirectories().Where(x => !x.Attributes.HasFlag(FileAttributes.Hidden) )) { var temp = sub; dirItems.Add(new ConsoleMenuItem <DirectoryInfo>(temp.Name, x => { path = PathSelector(temp.FullName); }, temp)); } dirItems.Add(new ConsoleMenuSeperator('-')); dirItems.Add(new ConsoleMenuItem <DirectoryInfo>("Select", x => { path = dir.FullName; }, dir)); var pMenu = new ConsoleMenu <DirectoryInfo>(dir.FullName, dirItems); pMenu.RunConsoleMenu(); return(path); }
//internal handling private static T MenuSelectionHelper <T>(string header, IEnumerable <T> selectable, Func <T, string> displayProperty, bool abortable, bool clear = true) where T : class { T result = null; bool aborted = false; while (result == null && !aborted) { if (clear) { Console.Clear(); } else { Console.WriteLine(); } List <ConsoleMenuItem> items = new List <ConsoleMenuItem>(); foreach (var item in selectable) { var temp = item; items.Add(new ConsoleMenuItem <T>(displayProperty(temp), x => { result = x; }, temp)); } if (abortable) { items.Add(new ConsoleMenuSeperator('-')); items.Add(new ConsoleMenuItem <T>("Abort", x => { aborted = true; }, null)); } var menu = new ConsoleMenu <T>(header, items); menu.RunConsoleMenu(); } return(result); }
//internal handling private static string DriveSelector() { string path = null; Console.Clear(); var driveItems = new List <ConsoleMenuItem <DriveInfo> >(); foreach (var drive in DriveInfo.GetDrives().Where(x => x.IsReady )) { var temp = drive; driveItems.Add(new ConsoleMenuItem <DriveInfo>(temp.Name, x => { path = PathSelector(x.RootDirectory.FullName); }, temp)); } var pMenu = new ConsoleMenu <DriveInfo>("Drives", driveItems); pMenu.RunConsoleMenu(); return(path); }