using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; namespace Svg { /// /// A collection of Scalable Vector Attributes that can be inherited from the owner elements ancestors. /// public sealed class SvgAttributeCollection : Dictionary { private SvgElement _owner; /// /// Initialises a new instance of a with the given as the owner. /// /// The owner of the collection. public SvgAttributeCollection(SvgElement owner) { this._owner = owner; } /// /// Gets the attribute with the specified name. /// /// The type of the attribute value. /// A containing the name of the attribute. /// The attribute value if available; otherwise the default value of . public TAttributeType GetAttribute(string attributeName) { if (this.ContainsKey(attributeName) && base[attributeName] != null) { return (TAttributeType)base[attributeName]; } return this.GetAttribute(attributeName, default(TAttributeType)); } /// /// Gets the attribute with the specified name. /// /// The type of the attribute value. /// A containing the name of the attribute. /// The value to return if a value hasn't already been specified. /// The attribute value if available; otherwise the default value of . public T GetAttribute(string attributeName, T defaultValue) { if (this.ContainsKey(attributeName) && base[attributeName] != null) { return (T)base[attributeName]; } return defaultValue; } /// /// Gets the attribute with the specified name and inherits from ancestors if there is no attribute set. /// /// The type of the attribute value. /// A containing the name of the attribute. /// The attribute value if available; otherwise the ancestors value for the same attribute; otherwise the default value of . public TAttributeType GetInheritedAttribute(string attributeName) { if (this.ContainsKey(attributeName) && base[attributeName] != null) { return (TAttributeType)base[attributeName]; } if (this._owner.Parent != null) { if (this._owner.Parent.Attributes[attributeName] != null) { return (TAttributeType)this._owner.Parent.Attributes[attributeName]; } } return default(TAttributeType); } /// /// Gets the attribute with the specified name. /// /// A containing the attribute name. /// The attribute value associated with the specified name; If there is no attribute the parent's value will be inherited. public new object this[string attributeName] { get { return this.GetInheritedAttribute(attributeName); } set { base[attributeName] = value; } } } }