You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
153 lines
7.6 KiB
153 lines
7.6 KiB
using System; |
|
|
|
namespace SFB { |
|
public struct ExtensionFilter { |
|
public string Name; |
|
public string[] Extensions; |
|
|
|
public ExtensionFilter(string filterName, params string[] filterExtensions) { |
|
Name = filterName; |
|
Extensions = filterExtensions; |
|
} |
|
} |
|
|
|
public class StandaloneFileBrowser { |
|
private static IStandaloneFileBrowser _platformWrapper = null; |
|
|
|
static StandaloneFileBrowser() { |
|
#if UNITY_STANDALONE_OSX |
|
_platformWrapper = new StandaloneFileBrowserMac(); |
|
#elif UNITY_STANDALONE_WIN |
|
_platformWrapper = new StandaloneFileBrowserWindows(); |
|
#elif UNITY_STANDALONE_LINUX |
|
_platformWrapper = new StandaloneFileBrowserLinux(); |
|
#elif UNITY_EDITOR |
|
_platformWrapper = new StandaloneFileBrowserEditor(); |
|
#endif |
|
} |
|
|
|
/// <summary> |
|
/// Native open file dialog |
|
/// </summary> |
|
/// <param name="title">Dialog title</param> |
|
/// <param name="directory">Root directory</param> |
|
/// <param name="extension">Allowed extension</param> |
|
/// <param name="multiselect">Allow multiple file selection</param> |
|
/// <returns>Returns array of chosen paths. Zero length array when cancelled</returns> |
|
public static string[] OpenFilePanel(string title, string directory, string extension, bool multiselect) { |
|
var extensions = string.IsNullOrEmpty(extension) ? null : new [] { new ExtensionFilter("", extension) }; |
|
return OpenFilePanel(title, directory, extensions, multiselect); |
|
} |
|
|
|
/// <summary> |
|
/// Native open file dialog |
|
/// </summary> |
|
/// <param name="title">Dialog title</param> |
|
/// <param name="directory">Root directory</param> |
|
/// <param name="extensions">List of extension filters. Filter Example: new ExtensionFilter("Image Files", "jpg", "png")</param> |
|
/// <param name="multiselect">Allow multiple file selection</param> |
|
/// <returns>Returns array of chosen paths. Zero length array when cancelled</returns> |
|
public static string[] OpenFilePanel(string title, string directory, ExtensionFilter[] extensions, bool multiselect) { |
|
return _platformWrapper.OpenFilePanel(title, directory, extensions, multiselect); |
|
} |
|
|
|
/// <summary> |
|
/// Native open file dialog async |
|
/// </summary> |
|
/// <param name="title">Dialog title</param> |
|
/// <param name="directory">Root directory</param> |
|
/// <param name="extension">Allowed extension</param> |
|
/// <param name="multiselect">Allow multiple file selection</param> |
|
/// <param name="cb">Callback")</param> |
|
public static void OpenFilePanelAsync(string title, string directory, string extension, bool multiselect, Action<string[]> cb) { |
|
var extensions = string.IsNullOrEmpty(extension) ? null : new [] { new ExtensionFilter("", extension) }; |
|
OpenFilePanelAsync(title, directory, extensions, multiselect, cb); |
|
} |
|
|
|
/// <summary> |
|
/// Native open file dialog async |
|
/// </summary> |
|
/// <param name="title">Dialog title</param> |
|
/// <param name="directory">Root directory</param> |
|
/// <param name="extensions">List of extension filters. Filter Example: new ExtensionFilter("Image Files", "jpg", "png")</param> |
|
/// <param name="multiselect">Allow multiple file selection</param> |
|
/// <param name="cb">Callback")</param> |
|
public static void OpenFilePanelAsync(string title, string directory, ExtensionFilter[] extensions, bool multiselect, Action<string[]> cb) { |
|
_platformWrapper.OpenFilePanelAsync(title, directory, extensions, multiselect, cb); |
|
} |
|
|
|
/// <summary> |
|
/// Native open folder dialog |
|
/// NOTE: Multiple folder selection doesn't supported on Windows |
|
/// </summary> |
|
/// <param name="title"></param> |
|
/// <param name="directory">Root directory</param> |
|
/// <param name="multiselect"></param> |
|
/// <returns>Returns array of chosen paths. Zero length array when cancelled</returns> |
|
public static string[] OpenFolderPanel(string title, string directory, bool multiselect) { |
|
return _platformWrapper.OpenFolderPanel(title, directory, multiselect); |
|
} |
|
|
|
/// <summary> |
|
/// Native open folder dialog async |
|
/// NOTE: Multiple folder selection doesn't supported on Windows |
|
/// </summary> |
|
/// <param name="title"></param> |
|
/// <param name="directory">Root directory</param> |
|
/// <param name="multiselect"></param> |
|
/// <param name="cb">Callback")</param> |
|
public static void OpenFolderPanelAsync(string title, string directory, bool multiselect, Action<string[]> cb) { |
|
_platformWrapper.OpenFolderPanelAsync(title, directory, multiselect, cb); |
|
} |
|
|
|
/// <summary> |
|
/// Native save file dialog |
|
/// </summary> |
|
/// <param name="title">Dialog title</param> |
|
/// <param name="directory">Root directory</param> |
|
/// <param name="defaultName">Default file name</param> |
|
/// <param name="extension">File extension</param> |
|
/// <returns>Returns chosen path. Empty string when cancelled</returns> |
|
public static string SaveFilePanel(string title, string directory, string defaultName , string extension) { |
|
var extensions = string.IsNullOrEmpty(extension) ? null : new [] { new ExtensionFilter("", extension) }; |
|
return SaveFilePanel(title, directory, defaultName, extensions); |
|
} |
|
|
|
/// <summary> |
|
/// Native save file dialog |
|
/// </summary> |
|
/// <param name="title">Dialog title</param> |
|
/// <param name="directory">Root directory</param> |
|
/// <param name="defaultName">Default file name</param> |
|
/// <param name="extensions">List of extension filters. Filter Example: new ExtensionFilter("Image Files", "jpg", "png")</param> |
|
/// <returns>Returns chosen path. Empty string when cancelled</returns> |
|
public static string SaveFilePanel(string title, string directory, string defaultName, ExtensionFilter[] extensions) { |
|
return _platformWrapper.SaveFilePanel(title, directory, defaultName, extensions); |
|
} |
|
|
|
/// <summary> |
|
/// Native save file dialog async |
|
/// </summary> |
|
/// <param name="title">Dialog title</param> |
|
/// <param name="directory">Root directory</param> |
|
/// <param name="defaultName">Default file name</param> |
|
/// <param name="extension">File extension</param> |
|
/// <param name="cb">Callback")</param> |
|
public static void SaveFilePanelAsync(string title, string directory, string defaultName , string extension, Action<string> cb) { |
|
var extensions = string.IsNullOrEmpty(extension) ? null : new [] { new ExtensionFilter("", extension) }; |
|
SaveFilePanelAsync(title, directory, defaultName, extensions, cb); |
|
} |
|
|
|
/// <summary> |
|
/// Native save file dialog async |
|
/// </summary> |
|
/// <param name="title">Dialog title</param> |
|
/// <param name="directory">Root directory</param> |
|
/// <param name="defaultName">Default file name</param> |
|
/// <param name="extensions">List of extension filters. Filter Example: new ExtensionFilter("Image Files", "jpg", "png")</param> |
|
/// <param name="cb">Callback")</param> |
|
public static void SaveFilePanelAsync(string title, string directory, string defaultName, ExtensionFilter[] extensions, Action<string> cb) { |
|
_platformWrapper.SaveFilePanelAsync(title, directory, defaultName, extensions, cb); |
|
} |
|
} |
|
} |