//
// FileDialog.cs: File system dialogs for open and save
//
using System;
using System.Collections.Generic;
using NStack;
namespace Terminal.Gui {
public class FileDialog : Dialog {
Button prompt, cancel;
Label nameFieldLabel, message, dirLabel;
TextField dirEntry, nameEntry;
public FileDialog (ustring title, ustring prompt, ustring nameFieldLabel, ustring message) : base (title, Driver.Cols - 20, Driver.Rows - 6, null)
{
this.message = new Label (Rect.Empty, message);
var msgLines = Label.MeasureLines (message, Driver.Cols - 20);
dirLabel = new Label ("Directory: ") {
X = 2,
Y = 1 + msgLines
};
dirEntry = new TextField ("") {
X = 12,
Y = 1 + msgLines
};
Add (dirLabel, dirEntry);
this.nameFieldLabel = new Label (nameFieldLabel) {
X = 2,
Y = 3 + msgLines,
};
nameEntry = new TextField ("") {
X = 2 + nameFieldLabel.RuneCount + 1,
Y = 3 + msgLines,
Width = Dim.Fill () - 1
};
Add (this.nameFieldLabel, nameEntry);
this.cancel = new Button ("Cancel");
AddButton (cancel);
this.prompt = new Button (prompt);
AddButton (this.prompt);
}
///
/// Gets or sets the prompt label for the button displayed to the user
///
/// The prompt.
public ustring Prompt {
get => prompt.Text;
set {
prompt.Text = value;
}
}
///
/// Gets or sets the name field label.
///
/// The name field label.
public ustring NameFieldLabel {
get => nameFieldLabel.Text;
set {
nameFieldLabel.Text = value;
}
}
///
/// Gets or sets the message displayed to the user, defaults to nothing
///
/// The message.
public ustring Message {
get => message.Text;
set {
message.Text = value;
}
}
///
/// Gets or sets a value indicating whether this can create directories.
///
/// true if can create directories; otherwise, false.
public bool CanCreateDirectories { get; set; }
///
/// Gets or sets a value indicating whether this is extension hidden.
///
/// true if is extension hidden; otherwise, false.
public bool IsExtensionHidden { get; set; }
///
/// Gets or sets the directory path for this panel
///
/// The directory path.
public ustring DirectoryPath {
get => dirEntry.Text;
set {
dirEntry.Text = value;
}
}
///
/// The array of filename extensions allowed, or null if all file extensions are allowed.
///
/// The allowed file types.
public ustring [] AllowedFileTypes { get; set; }
///
/// Gets or sets a value indicating whether this allows the file to be saved with a different extension
///
/// true if allows other file types; otherwise, false.
public bool AllowsOtherFileTypes { get; set; }
///
/// The File path that is currently shown on the panel
///
/// The absolute file path for the file path entered.
public ustring FilePath {
get => nameEntry.Text;
set {
nameEntry.Text = value;
}
}
}
public class SaveDialog : FileDialog {
public SaveDialog (ustring title, ustring message) : base (title, prompt: "Save", nameFieldLabel: "Save as:", message: message)
{
}
}
public class OpenDialog : FileDialog {
public OpenDialog (ustring title, ustring message) : base (title, prompt: "Open", nameFieldLabel: "Open", message: message)
{
}
///
/// Gets or sets a value indicating whether this can choose files.
///
/// true if can choose files; otherwise, false.
public bool CanChooseFiles { get; set; }
///
/// Gets or sets a value indicating whether this can choose directories.
///
/// true if can choose directories; otherwise, false.
public bool CanChooseDirectories { get; set; }
///
/// Gets or sets a value indicating whether this allows multiple selection.
///
/// true if allows multiple selection; otherwise, false.
public bool AllowsMultipleSelection { get; set; }
///
/// Gets the file paths selected
///
/// The file paths.
public IReadOnlyList FilePaths { get; }
}
}