using System;
using System.Collections;
namespace DevComponents.DotNetBar
{
	/// 
	/// Collection of RibbonTabItemGroup objects.
	/// 
	public class RibbonTabItemGroupCollection:CollectionBase
	{
		#region Private Variables and Events
		public event EventHandler GroupRemoved;
		public event EventHandler GroupAdded;
		private RibbonStrip m_Owner=null;
		#endregion
		#region Internal Implementation
		/// 
		/// Adds new object to the collection.
		/// 
		/// Object to add.
		/// Index of newly added object.
		public int Add(RibbonTabItemGroup tab)
		{
			return List.Add(tab);
		}
		/// 
		/// Adds new objects to the collection.
		/// 
		/// Array of groups to add.
		public void AddRange(RibbonTabItemGroup[] groups)
		{
			foreach(RibbonTabItemGroup doc in groups)
				List.Add(doc);
		}
		/// 
		/// Returns reference to the object in collection based on it's index.
		/// 
		public RibbonTabItemGroup this[int index]
		{
			get {return (RibbonTabItemGroup)(List[index]);}
			set {List[index] = value;}
		}
        /// 
        /// Returns reference to the object in collection based on it's name.
        /// 
        public RibbonTabItemGroup this[string name]
        {
            get
            {
                foreach (RibbonTabItemGroup g in this.List)
                {
                    if (g.Name == name)
                        return g;
                }
                return null;
            }
        }
		/// 
		/// Inserts new object into the collection.
		/// 
		/// Position of the object.
		/// Object to insert.
		public void Insert(int index, RibbonTabItemGroup value) 
		{
			List.Insert(index, value);
		}
		/// 
		/// Returns index of the object inside of the collection.
		/// 
		/// Reference to the object.
		/// Index of the object.
		public int IndexOf(RibbonTabItemGroup value) 
		{
			return List.IndexOf(value);
		}
		/// 
		/// Returns whether collection contains specified object.
		/// 
		/// Object to look for.
		/// true if object is part of the collection, otherwise false.
		public bool Contains(RibbonTabItemGroup value) 
		{
			return List.Contains(value);
		}
		/// 
		/// Removes specified object from the collection.
		/// 
		/// 
		public void Remove(RibbonTabItemGroup value) 
		{
			List.Remove(value);
		}
		protected override void OnRemoveComplete(int index,object value)
		{
			base.OnRemoveComplete(index,value);
			RibbonTabItemGroup item=value as RibbonTabItemGroup;
			item.ParentRibbonStrip=null;
			if(GroupRemoved!=null)
				GroupRemoved(item,new EventArgs());
		}
		protected override void OnInsertComplete(int index,object value)
		{
			base.OnInsertComplete(index,value);
			RibbonTabItemGroup item=value as RibbonTabItemGroup;
			if(m_Owner!=null)
				item.ParentRibbonStrip=m_Owner;
			if(GroupAdded!=null)
				GroupAdded(item,new EventArgs());
		}
		/// 
		/// Copies collection into the specified array.
		/// 
		/// Array to copy collection to.
		/// Starting index.
		public void CopyTo(RibbonTabItemGroup[] array, int index) 
		{
			List.CopyTo(array, index);
		}
		/// 
		/// Copies contained items to the RibbonTabItemGroup array.
		/// 
		/// Array to copy to.
		internal void CopyTo(RibbonTabItemGroup[] array)
		{
			List.CopyTo(array,0);
		}
		internal RibbonStrip Owner
		{
			get {return m_Owner;}
			set {m_Owner=value;}
		}
		protected override void OnClear()
		{
			base.OnClear();
		}
		#endregion
	}
}