/* * 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.Collections.Generic; namespace UVtools.Core.FileFormats { /// /// Represents a file extension for slicer file formats /// public sealed class FileExtension { #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 $"{nameof(Extension)}: {Extension}, {nameof(Description)}: {Description}"; } private bool Equals(FileExtension other) { return Extension == other.Extension; } 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 } }