/* * GNU AFFERO GENERAL PUBLIC LICENSE * Version 3, 19 November 2007 * Copyright (C) 2007 Free Software Foundation, Inc. * Everyone is permitted to copy and distribute verbatim copies * of this license document, but changing it is not allowed. */ using System; using System.Collections.Generic; namespace UVtools.Core.FileFormats { /// /// Represents a file extension for slicer file formats /// public sealed class FileExtension : IEquatable, IEquatable { #region Properties /// /// Gets the extension name without the dot (.) /// public string Extension { get; } /// /// Gets the extension description /// public string Description { get; } /// /// Gets a tag object /// public object Tag { get; } /// /// Gets the file filter for open and save dialogs /// public string Filter => $@"{Description} (*.{Extension})|*.{Extension}"; #endregion #region Constructor /// /// Constructor /// /// The extension name without the dot (.) /// The extension description /// Tag object public FileExtension(string extension, string description, object tag = null) { Extension = extension; Description = description; Tag = tag; } #endregion #region Overrides public override string ToString() { return $"{Description} ({Extension})"; } public bool Equals(FileExtension other) { return Extension.Equals(other.Extension, StringComparison.InvariantCultureIgnoreCase); } public bool Equals(string other) { return Extension.Equals(other, StringComparison.InvariantCultureIgnoreCase); } public override bool Equals(object obj) { return ReferenceEquals(this, obj) || obj is FileExtension other && Equals(other); } public override int GetHashCode() { return (Extension != null ? Extension.GetHashCode() : 0); } private sealed class ExtensionEqualityComparer : IEqualityComparer { public bool Equals(FileExtension x, FileExtension y) { if (ReferenceEquals(x, y)) return true; if (ReferenceEquals(x, null)) return false; if (ReferenceEquals(y, null)) return false; if (x.GetType() != y.GetType()) return false; return x.Extension == y.Extension; } public int GetHashCode(FileExtension obj) { return (obj.Extension != null ? obj.Extension.GetHashCode() : 0); } } public static IEqualityComparer ExtensionComparer { get; } = new ExtensionEqualityComparer(); #endregion #region Methods public FileFormat GetFileFormat() => FileFormat.FindByExtension(Extension); public static FileExtension Find(string extension)=> FileFormat.FindExtension(extension); #endregion } }