// // FileDialog.cs: File system dialogs for open and save // // TODO: // * Add directory selector // * Implement subclasses // * Figure out why message text does not show // * Remove the extra space when message does not show // * Use a line separator to show the file listing, so we can use same colors as the rest // * DirListView: Add mouse support using System.Collections.ObjectModel; using Terminal.Gui.Resources; namespace Terminal.Gui; /// Determine which type to open. public enum OpenMode { /// Opens only file or files. File, /// Opens only directory or directories. Directory, /// Opens files and directories. Mixed } /// The provides an interactive dialog box for users to select files or directories. /// /// /// The open dialog can be used to select files for opening, it can be configured to allow multiple items to be /// selected (based on the AllowsMultipleSelection) variable and you can control whether this should allow files or /// directories to be selected. /// /// /// To use, create an instance of , and pass it to /// . This will run the dialog modally, and when this returns, /// the list of files will be available on the property. /// /// To select more than one file, users can use the spacebar, or control-t. /// public class OpenDialog : FileDialog { /// Initializes a new . public OpenDialog () { } /// Returns the selected files, or an empty list if nothing has been selected /// The file paths. public IReadOnlyList FilePaths => Canceled ? Enumerable.Empty ().ToList ().AsReadOnly () : AllowsMultipleSelection ? MultiSelected : new ReadOnlyCollection (new [] { Path }); /// public override OpenMode OpenMode { get => base.OpenMode; set { base.OpenMode = value; Style.OkButtonText = value == OpenMode.File ? Strings.btnOpen : value == OpenMode.Directory ? Strings.fdSelectFolder : Strings.fdSelectMixed; } } }