// -------------------------------------------------------------------------------------------------------------------- // // This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License. // // // An object that represents a subtitle associated with a Title, in a DVD // // -------------------------------------------------------------------------------------------------------------------- namespace HandBrake.ApplicationServices.Parsing { using System; using System.Xml.Serialization; using HandBrake.ApplicationServices.Model.Encoding; using HandBrake.ApplicationServices.Utilities; /// /// An object that represents a subtitle associated with a Title, in a DVD /// public class Subtitle { /// /// Initializes a new instance of the class. /// public Subtitle() { } /// /// Initializes a new instance of the class. /// /// /// The source Id. /// /// /// The track number. /// /// /// The language. /// /// /// The language code. /// /// /// The subtitle type. /// /// /// The can Burn. /// /// /// The can Force. /// public Subtitle(int sourceId, int trackNumber, string language, string languageCode, SubtitleType subtitleType, bool canBurn, bool canForce) { this.SourceId = sourceId; this.TrackNumber = trackNumber; this.Language = language; this.LanguageCode = languageCode; this.SubtitleType = subtitleType; this.CanBurnIn = canBurn; this.CanForce = canForce; } /// /// Gets or sets the source id. /// public int SourceId { get; set; } /// /// Gets or sets the track number of this Subtitle /// public int TrackNumber { get; set; } /// /// Gets or sets the The language (if detected) of this Subtitle /// public string Language { get; set; } /// /// Gets or sets the Langauage Code /// public string LanguageCode { get; set; } /// /// Gets the language code clean. /// TODO Remove this after fixing language code. /// public string LanguageCodeClean { get { if (this.LanguageCode != null) { return this.LanguageCode.Replace("iso639-2: ", string.Empty).Trim(); } return string.Empty; } } /// /// Gets a value indicating whether can burn in. /// [XmlIgnore] public bool CanBurnIn { get; private set; } /// /// Gets a value indicating whether can force. /// [XmlIgnore] public bool CanForce { get; private set; } /// /// Gets or sets the Subtitle Type /// public SubtitleType SubtitleType { get; set; } /// /// Gets Subtitle Type /// public string TypeString { get { return EnumHelper.GetDescription(this.SubtitleType); } } /// /// Override of the ToString method to make this object easier to use in the UI /// /// A string formatted as: {track #} {language} public override string ToString() { return this.SubtitleType == SubtitleType.ForeignAudioSearch ? "Foreign Audio Scan" : string.Format("{0} {1} ({2})", this.TrackNumber, this.Language, this.TypeString); } /// /// The equals. /// /// /// The other. /// /// /// The System.Boolean. /// public bool Equals(Subtitle other) { if (ReferenceEquals(null, other)) { return false; } if (ReferenceEquals(this, other)) { return true; } return other.TrackNumber == this.TrackNumber && object.Equals(other.Language, this.Language) && object.Equals(other.LanguageCode, this.LanguageCode) && object.Equals(other.SubtitleType, this.SubtitleType); } /// /// Determines whether the specified is equal to the current . /// /// /// true if the specified is equal to the current ; otherwise, false. /// /// The to compare with the current . 2 public override bool Equals(object obj) { if (ReferenceEquals(null, obj)) { return false; } if (ReferenceEquals(this, obj)) { return true; } if (obj.GetType() != typeof(Subtitle)) { return false; } return Equals((Subtitle)obj); } /// /// Serves as a hash function for a particular type. /// /// /// A hash code for the current . /// /// 2 public override int GetHashCode() { unchecked { int result = this.TrackNumber; result = (result * 397) ^ (this.Language != null ? this.Language.GetHashCode() : 0); result = (result * 397) ^ (this.LanguageCode != null ? this.LanguageCode.GetHashCode() : 0); result = (result * 397) ^ this.SubtitleType.GetHashCode(); return result; } } } }