BizHawk/BizHawk.Client.Common/FilesystemFilter.cs

73 lines
3.0 KiB
C#

#nullable enable
using System.Collections.Generic;
using System.Linq;
namespace BizHawk.Client.Common
{
public sealed class FilesystemFilter
{
public readonly string Description;
public readonly IReadOnlyCollection<string> Extensions;
public FilesystemFilter(string description, IReadOnlyCollection<string> extensions, bool addArchiveExts = false)
{
Description = description;
Extensions = addArchiveExts ? extensions.Concat(ArchiveExtensions).ToList() : extensions;
}
/// <remarks>When <see cref="VersionInfo.DeveloperBuild"/> is set to <see langword="false"/> for release, this behaves identically to <see cref="FilesystemFilter(string,IReadOnlyCollection{string},bool)">the other ctor</see>.
/// On dev builds, <paramref name="devBuildExtraExts"/> are appended to <paramref name="extensions"/>.
/// </remarks>
public FilesystemFilter(
string description,
IReadOnlyCollection<string> extensions,
IReadOnlyCollection<string> devBuildExtraExts,
bool addArchiveExts = false,
bool devBuildAddArchiveExts = false)
{
Description = description;
if (!VersionInfo.DeveloperBuild)
{
// same as other ctor
Extensions = addArchiveExts ? extensions.Concat(ArchiveExtensions).ToList() : extensions;
}
else
{
Extensions = addArchiveExts || devBuildAddArchiveExts
? extensions.Concat(devBuildExtraExts).Concat(ArchiveExtensions).ToList()
: extensions.Concat(devBuildExtraExts).ToList();
}
}
/// <summary>delegated to <see cref="SerializeEntry"/></summary>
/// <remarks>return value is a valid <c>Filter</c> for <c>Save-</c>/<c>OpenFileDialog</c></remarks>
public override string ToString() => SerializeEntry(Description, Extensions);
public const string AllFilesEntry = "All Files|*";
public static readonly IReadOnlyCollection<string> ArchiveExtensions = new[] { "zip", "rar", "7z", "gz" };
public static readonly FilesystemFilter Archives = new FilesystemFilter("Archives", ArchiveExtensions);
public static readonly FilesystemFilter BizHawkMovies = new FilesystemFilter("Movie Files", new[] { MovieService.DefaultExtension });
public static readonly FilesystemFilter EmuHawkSaveStates = new FilesystemFilter("Save States", new[] { "State" });
public static readonly FilesystemFilter LuaScripts = new FilesystemFilter("Lua Scripts", new[] { "lua" });
public static readonly FilesystemFilter Palettes = new FilesystemFilter("Palette Files", new[] { "pal" });
public static readonly FilesystemFilter PNGs = new FilesystemFilter("PNG Files", new[] { "png" });
public static readonly FilesystemFilter TAStudioProjects = new FilesystemFilter("TAS Project Files", new[] { TasMovie.Extension });
public static readonly FilesystemFilter TextFiles = new FilesystemFilter("Text Files", new[] { "txt" });
/// <remarks>return value is a valid <c>Filter</c> for <c>Save-</c>/<c>OpenFileDialog</c></remarks>
public static string SerializeEntry(string desc, IEnumerable<string> exts)
=> string.Format("{0} ({1})|{1}", desc, string.Join(";", exts.Select(ext => $"*.{ext}")));
}
}