using System; using System.Collections; using System.Collections.Generic; using System.Drawing; using System.ComponentModel; using System.Text; namespace Volian.Svg.Library { /// /// /// A collection that stores objects. /// /// /// [Serializable()] [TypeConverter(typeof(SVGPartsConverter))] public partial class SvgParts : CollectionBase, ICustomTypeDescriptor { /// Notifies when the collection has been modified. public event EventHandler OnItemsChanged; /// Notifies that an item has been added. public event SVGPartHandler OnItemAdd; /// Notifies that items have been added. public event SVGPartHandler OnItemsAdd; /// Notifies that an item has been removed. public event SVGPartHandler OnItemRemove; /// /// /// Initializes a new instance of . /// /// public SvgParts() { } /// /// /// Initializes a new instance of based on another . /// /// /// /// A from which the contents are copied /// public SvgParts(SvgParts value) { this.AddRange(value); } /// /// /// Initializes a new instance of containing any array of objects. /// /// /// /// A array of objects with which to intialize the collection /// public SvgParts(SvgPart[] value) { this.AddRange(value); } /// /// Represents the entry at the specified index of the . /// /// The zero-based index of the entry to locate in the collection. /// /// The entry at the specified index of the collection. /// /// is outside the valid range of indexes for the collection. public SvgPart this[int index] { get { return ((SvgPart)(List[index])); } set { List[index] = value; } } //#region SetupInheritance //internal void SetupInheritance(SvgInheritedSettings myParentsSettings) //{ // foreach (SvgPart svgPart in List) // svgPart.SetupInheritance(myParentsSettings); //} //#endregion #region Dictionary of Parts internal void AddLookup(Dictionary lookUp) { foreach (SvgPart svgPart in List) svgPart.AddLookup(lookUp); } #endregion internal static void ShowException(Exception ex) { StringBuilder sb = new StringBuilder(); string sep = ""; for (Exception ex1 = ex; ex1 != null; ex1 = ex1.InnerException) { sb.Append(sep + string.Format("ShowException {0} - {1}", ex1.GetType().Name, ex1.Message)); sep = "\r\n"; } Console.WriteLine(sb); } /// /// Adds a with the specified value to the /// . /// /// The to add. /// /// The index at which the new element was inserted. /// /// public int Add(SvgPart value) { int ndx = List.Add(value); if (OnItemAdd != null) { OnItemAdd(this, new SVGPartArgs(value)); } if (OnItemsChanged != null) { OnItemsChanged(value, EventArgs.Empty); } return ndx; } /// /// Copies the elements of an array to the end of the . /// /// /// An array of type containing the objects to add to the collection. /// /// /// None. /// /// public void AddRange(SvgPart[] value) { for (int i = 0; i < value.Length; i++) { this.Add(value[i]); } if (OnItemsAdd != null) { OnItemsAdd(this, new SVGPartArgs(value)); } if (OnItemsChanged != null) { OnItemsChanged(value, EventArgs.Empty); } } /// /// /// Adds the contents of another to the end of the collection. /// /// /// /// A containing the objects to add to the collection. /// /// /// None. /// /// public void AddRange(SvgParts value) { for (int i = 0; i < value.Count; i++) { this.Add(value[i]); } if (OnItemsAdd != null) { OnItemsAdd(this, new SVGPartArgs(value)); } if (OnItemsChanged != null) { OnItemsChanged(value, EventArgs.Empty); } } /// /// Gets a value indicating whether the /// contains the specified . /// /// The to locate. /// /// if the is contained in the collection; /// otherwise, . /// /// public bool Contains(SvgPart value) { return List.Contains(value); } /// /// Copies the values to a one-dimensional instance at the /// specified index. /// /// The one-dimensional that is the destination of the values copied from . /// The index in where copying begins. /// /// None. /// /// is multidimensional. -or- The number of elements in the is greater than the available space between and the end of . /// is . /// is less than 's lowbound. /// public void CopyTo(SvgPart[] array, int index) { List.CopyTo(array, index); } /// /// Returns the index of a in /// the . /// /// The to locate. /// /// The index of the of in the /// , if found; otherwise, -1. /// /// public int IndexOf(SvgPart value) { return List.IndexOf(value); } /// /// Inserts a into the at the specified index. /// /// The zero-based index where should be inserted. /// The to insert. /// None. /// public void Insert(int index, SvgPart value) { List.Insert(index, value); if (OnItemAdd != null) { OnItemAdd(this, new SVGPartArgs(value)); } if (OnItemsChanged != null) { OnItemsChanged(value, EventArgs.Empty); } } /// /// Removes a specific from the /// . /// /// The to remove from the . /// None. /// is not found in the Collection. public void Remove(SvgPart value) { List.Remove(value); if (OnItemRemove != null) { OnItemRemove(this, new SVGPartArgs(value)); } if (OnItemsChanged != null) { OnItemsChanged(value, EventArgs.Empty); } } #region ICustomTypeDescriptor impl public String GetClassName() { return TypeDescriptor.GetClassName(this, true); } public AttributeCollection GetAttributes() { return TypeDescriptor.GetAttributes(this, true); } public String GetComponentName() { return TypeDescriptor.GetComponentName(this, true); } public TypeConverter GetConverter() { return TypeDescriptor.GetConverter(this, true); } public EventDescriptor GetDefaultEvent() { return TypeDescriptor.GetDefaultEvent(this, true); } public PropertyDescriptor GetDefaultProperty() { return TypeDescriptor.GetDefaultProperty(this, true); } public object GetEditor(Type editorBaseType) { return TypeDescriptor.GetEditor(this, editorBaseType, true); } public EventDescriptorCollection GetEvents(Attribute[] attributes) { return TypeDescriptor.GetEvents(this, attributes, true); } public EventDescriptorCollection GetEvents() { return TypeDescriptor.GetEvents(this, true); } public object GetPropertyOwner(PropertyDescriptor pd) { return this; } /// /// Called to get the properties of this type. Returns properties with certain /// attributes. this restriction is not implemented here. /// /// /// public PropertyDescriptorCollection GetProperties(Attribute[] attributes) { return GetProperties(); } /// /// Called to get the properties of this type. /// /// public PropertyDescriptorCollection GetProperties() { // Create a collection object to hold property descriptors PropertyDescriptorCollection pds = new PropertyDescriptorCollection(null); // Iterate the list for (int i = 0; i < this.Count; i++) { // Create a property descriptor for the item and add to the property descriptor collection SvgPartsPropertyDescriptor pd = new SvgPartsPropertyDescriptor(this, i); pds.Add(pd); } // return the property descriptor collection return pds; } #endregion /// Event arguments for the SVGParts collection class. public class SVGPartArgs : EventArgs { private SvgParts t; /// Default constructor. public SVGPartArgs() { t = new SvgParts(); } /// Initializes with a SVGPart. /// Data object. public SVGPartArgs(SvgPart t) : this() { this.t.Add(t); } /// Initializes with a collection of SVGPart objects. /// Collection of data. public SVGPartArgs(SvgParts ts) : this() { this.t.AddRange(ts); } /// Initializes with an array of SVGPart objects. /// Array of data. public SVGPartArgs(SvgPart[] ts) : this() { this.t.AddRange(ts); } /// Gets or sets the data of this argument. public SvgParts SVGParts { get { return t; } set { t = value; } } } /// SVGParts event handler. public delegate void SVGPartHandler(object sender, SVGPartArgs e); #region Property Descriptor /// /// Summary description for CollectionPropertyDescriptor. /// public partial class SvgPartsPropertyDescriptor : vlnListPropertyDescriptor { private SvgPart Item { get { return (SvgPart)_Item; } } public SvgPartsPropertyDescriptor(SvgParts collection, int index) : base(collection, index) { ;} public override string DisplayName { get { return Item.GetType().Name; } } } #endregion [Serializable()] public partial class vlnListPropertyDescriptor : PropertyDescriptor { protected object _Item = null; public vlnListPropertyDescriptor(System.Collections.IList collection, int index) : base("#" + index.ToString(), null) { _Item = collection[index]; } public override bool CanResetValue(object component) { return true; } public override Type ComponentType { get { return _Item.GetType(); } } public override object GetValue(object component) { return _Item; } public override bool IsReadOnly { get { return false; } } public override Type PropertyType { get { return _Item.GetType(); } } public override void ResetValue(object component) { ;} public override bool ShouldSerializeValue(object component) { return true; } public override void SetValue(object component, object value) { /*_Item = value*/;} //public override AttributeCollection Attributes //{ get { return new AttributeCollection(null); } } public override string DisplayName { get { return _Item.ToString(); } } public override string Description { get { return _Item.ToString(); } } public override string Name { get { return _Item.ToString(); } } } // Class #region Converter internal class SVGPartsConverter : ExpandableObjectConverter { public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destType) { if (destType == typeof(string) && value is SvgParts) { // Return department and department role separated by comma. return ((SvgParts)value).List.Count.ToString() + " SVG Drawing Parts"; } return base.ConvertTo(context, culture, value, destType); } } #endregion } }