158 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			158 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
 | 
						|
namespace DevComponents.DotNetBar
 | 
						|
{
 | 
						|
	/// <summary>
 | 
						|
	/// Summary description for TabsCollection.
 | 
						|
	/// </summary>
 | 
						|
	public class TabsCollection:System.Collections.CollectionBase
 | 
						|
	{
 | 
						|
		#region Private Variables
 | 
						|
		private TabStrip m_Owner;
 | 
						|
		#endregion
 | 
						|
 | 
						|
		#region Internal Implementation
 | 
						|
        private bool m_IgnoreEvents = false;
 | 
						|
		public TabsCollection(TabStrip owner)
 | 
						|
		{
 | 
						|
			m_Owner=owner;
 | 
						|
		}
 | 
						|
		public int Add(TabItem item)
 | 
						|
		{
 | 
						|
			m_Owner.NeedRecalcSize=true;
 | 
						|
			return List.Add(item);
 | 
						|
		}
 | 
						|
		public TabItem this[int index]
 | 
						|
		{
 | 
						|
			get {return (TabItem)(List[index]);}
 | 
						|
			set {List[index] = value;}
 | 
						|
		}
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Get the TabItem with given name. Name comparison is case insensitive.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="name"></param>
 | 
						|
        /// <returns></returns>
 | 
						|
        public TabItem this[string name]
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (name == null) return null;
 | 
						|
 | 
						|
                int i = GetIndexOf(name);
 | 
						|
                if (i >= 0)
 | 
						|
                    return this[i];
 | 
						|
 | 
						|
                return null;
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                int i = GetIndexOf(name);
 | 
						|
                if (i >= 0)
 | 
						|
                    List[i] = value;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private int GetIndexOf(string name)
 | 
						|
        {
 | 
						|
            name = name.ToLower();
 | 
						|
            for (int i = 0; i < this.Count; i++)
 | 
						|
            {
 | 
						|
                if (this[i].Name.ToLower() == name) return i;
 | 
						|
            }
 | 
						|
            return -1;
 | 
						|
        }
 | 
						|
 | 
						|
		public void Insert(int index, TabItem value) 
 | 
						|
		{
 | 
						|
			value.Visible=true;
 | 
						|
			m_Owner.NeedRecalcSize=true;
 | 
						|
			List.Insert(index, value);
 | 
						|
		}
 | 
						|
 | 
						|
        internal void _Insert(int index, TabItem value)
 | 
						|
        {
 | 
						|
            m_IgnoreEvents = true;
 | 
						|
            try
 | 
						|
            {
 | 
						|
                value.Visible = true;
 | 
						|
                m_Owner.NeedRecalcSize = true;
 | 
						|
                List.Insert(index, value);
 | 
						|
            }
 | 
						|
            finally
 | 
						|
            {
 | 
						|
                m_IgnoreEvents = false;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
		public int IndexOf(TabItem value) 
 | 
						|
		{
 | 
						|
			return List.IndexOf(value);
 | 
						|
		}
 | 
						|
 | 
						|
		public bool Contains(TabItem value) 
 | 
						|
		{
 | 
						|
			return List.Contains(value);
 | 
						|
		}
 | 
						|
 | 
						|
		public void Remove(TabItem value) 
 | 
						|
		{
 | 
						|
			List.Remove(value);
 | 
						|
		}
 | 
						|
 | 
						|
        internal void _Remove(TabItem value)
 | 
						|
        {
 | 
						|
            m_IgnoreEvents = true;
 | 
						|
            try
 | 
						|
            {
 | 
						|
                List.Remove(value);
 | 
						|
            }
 | 
						|
            finally
 | 
						|
            {
 | 
						|
                m_IgnoreEvents = false;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
		protected override void OnRemoveComplete(int index,object value)
 | 
						|
		{
 | 
						|
			base.OnRemoveComplete(index,value);
 | 
						|
            if (m_IgnoreEvents) return;
 | 
						|
			TabItem item=value as TabItem;
 | 
						|
			m_Owner.InvokeTabRemoved(item);
 | 
						|
			item.SetParent(null);
 | 
						|
			item.Visible=true;
 | 
						|
			if(m_Owner.SelectedTab==item)
 | 
						|
			{
 | 
						|
				m_Owner.OnSelectedTabRemoved(index, item);
 | 
						|
			}
 | 
						|
 | 
						|
			m_Owner.NeedRecalcSize=true;
 | 
						|
			if(m_Owner.IsDesignMode)
 | 
						|
				m_Owner.Refresh();
 | 
						|
		}
 | 
						|
		protected override void OnInsertComplete(int index,object value)
 | 
						|
		{
 | 
						|
			base.OnInsertComplete(index,value);
 | 
						|
            if (m_IgnoreEvents) return;
 | 
						|
			TabItem item=value as TabItem;
 | 
						|
			item.SetParent(m_Owner);
 | 
						|
			//item.Visible=true;
 | 
						|
			m_Owner.OnTabAdded(item);
 | 
						|
			m_Owner.NeedRecalcSize=true;
 | 
						|
			if(m_Owner.IsDesignMode)
 | 
						|
				m_Owner.Refresh();
 | 
						|
		}
 | 
						|
 | 
						|
		public void CopyTo(TabItem[] array, int index) 
 | 
						|
		{
 | 
						|
			List.CopyTo(array, index);
 | 
						|
		}
 | 
						|
		protected override void OnClear()
 | 
						|
		{
 | 
						|
			m_Owner.InternalTabsCleared();
 | 
						|
			base.OnClear();
 | 
						|
		}
 | 
						|
		#endregion
 | 
						|
	}
 | 
						|
}
 |