220 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			220 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| namespace DevComponents.DotNetBar
 | |
| {
 | |
|     using System;
 | |
| 	using System.Collections;
 | |
| 
 | |
|     /// <summary>
 | |
|     ///		Holds reference to all unique items in the DotNetBar.
 | |
|     /// </summary>
 | |
|     public class Items:IEnumerable,IDisposable
 | |
|     {
 | |
| 		private System.Collections.SortedList m_Items;
 | |
| 		private DotNetBarManager m_Owner;
 | |
| 
 | |
|         internal Items(DotNetBarManager objOwner)
 | |
|         {
 | |
| 			m_Items=new System.Collections.SortedList();
 | |
| 			m_Owner=objOwner;
 | |
|         }
 | |
| 
 | |
| 		public void Dispose()
 | |
| 		{
 | |
| 			this.Clear();
 | |
| 			m_Items=null;
 | |
| 			m_Owner=null;
 | |
| 		}
 | |
| 
 | |
| 		public void Clear()
 | |
| 		{
 | |
| 			if(m_Owner!=null)
 | |
| 			{
 | |
| 				foreach(BaseItem item in m_Items.Values)
 | |
| 					((IOwner)m_Owner).RemoveShortcutsFromItem(item);
 | |
| 			}
 | |
| 			m_Items.Clear();
 | |
| 		}
 | |
| 
 | |
| 		public void Add(BaseItem objItem)
 | |
| 		{
 | |
| 			if(objItem==null)
 | |
| 				throw new System.ArgumentNullException("Item must be valid value");
 | |
| 			if(objItem.Name==null || objItem.Name=="")
 | |
| 			{
 | |
| 				// Auto assign item name
 | |
| 				objItem.Name="item_"+objItem.Id.ToString();
 | |
| 			}
 | |
| 			if(m_Items.ContainsKey(objItem.Name))
 | |
| 			{
 | |
| 				throw new System.InvalidOperationException("Item with this name already exists");
 | |
| 			}
 | |
| 			
 | |
| 			if(objItem.Parent!=null)
 | |
| 				throw new System.InvalidOperationException("Item already has a Parent. Remove item from Parent first.");
 | |
| 				
 | |
| 			objItem.SetOwner(m_Owner);
 | |
| 			objItem.GlobalItem=true;
 | |
| 
 | |
| 			m_Items.Add(objItem.Name,objItem);
 | |
| 		}
 | |
| 
 | |
| 		public void AddCopy(BaseItem objItem)
 | |
| 		{
 | |
| 			if(objItem==null)
 | |
| 				throw new System.ArgumentNullException("Item must be valid value");
 | |
| 			if(objItem.Name==null || objItem.Name=="")
 | |
| 			{
 | |
| 				// Auto assign item name
 | |
| 				objItem.Name="item_"+objItem.Id.ToString();
 | |
| 			}
 | |
| 			if(m_Items.ContainsKey(objItem.Name))
 | |
| 				throw new System.InvalidOperationException("Item with this name already exists");
 | |
| 			BaseItem objCopy=objItem.Copy();
 | |
| 			objCopy.SetOwner(m_Owner);
 | |
| 			objCopy.GlobalItem=true;
 | |
| 			m_Items.Add(objCopy.Name,objCopy);
 | |
| 		}
 | |
| 
 | |
| 		public void Remove(BaseItem objItemToRemove)
 | |
| 		{
 | |
| 			if(m_Items.ContainsKey(objItemToRemove.Name))
 | |
| 			{
 | |
| 				m_Items.Remove(objItemToRemove.Name);
 | |
| 				objItemToRemove.SetOwner(null);
 | |
| 				((IOwner)m_Owner).RemoveShortcutsFromItem(objItemToRemove);
 | |
| 				//objItemToRemove.GlobalItem=false;
 | |
| 				return;
 | |
| 			}
 | |
| 			
 | |
| 			string sItemName=objItemToRemove.Name;
 | |
| 			foreach(DictionaryEntry o in m_Items)
 | |
| 			{
 | |
| 				BaseItem objItem=o.Value as BaseItem;
 | |
| 				// Name out of sync case
 | |
| 				if(objItem==objItemToRemove)
 | |
| 				{
 | |
| 					m_Items.RemoveAt(m_Items.IndexOfValue(objItem));
 | |
| 					objItemToRemove.SetOwner(null);
 | |
| 					((IOwner)m_Owner).RemoveShortcutsFromItem(objItemToRemove);
 | |
|                     return;
 | |
| 				}
 | |
| 				if(objItem.SubItems.Count>0)
 | |
| 				{
 | |
| 					if(RemoveItem(sItemName,objItem))
 | |
| 					{
 | |
| 						//objItemToRemove.GlobalItem=false;
 | |
| 						return;
 | |
| 					}
 | |
| 				}
 | |
| 			}
 | |
| 
 | |
| 			// This will throw exception...
 | |
| 			m_Items.Remove(objItemToRemove.Name);
 | |
| 			objItemToRemove.SetOwner(null);
 | |
| 		}
 | |
| 
 | |
| 		public void Remove(string sItemName)
 | |
| 		{
 | |
| 			Remove(m_Items[sItemName] as BaseItem);
 | |
| 		}
 | |
|         
 | |
| 		public BaseItem this[string sItemName]
 | |
| 		{
 | |
| 			get
 | |
| 			{
 | |
| 				if(m_Items.ContainsKey(sItemName))
 | |
| 					return m_Items[sItemName] as BaseItem;
 | |
| 				foreach(DictionaryEntry o in m_Items)
 | |
| 				{
 | |
| 					BaseItem objItem=o.Value as BaseItem;
 | |
| 					if(objItem.Name==sItemName)
 | |
| 						return objItem;
 | |
| 					if(objItem.SubItems.Count>0)
 | |
| 					{
 | |
| 						objItem=GetItem(sItemName,objItem);
 | |
| 						if(objItem!=null)
 | |
| 							return objItem;
 | |
| 					}
 | |
| 				}
 | |
| 				throw new InvalidOperationException("Item not found in collection");
 | |
| 				//return null;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		private BaseItem GetItem(string sName, BaseItem objParent)
 | |
| 		{
 | |
| 			BaseItem objItem2=null;
 | |
| 			foreach(BaseItem objItem in objParent.SubItems)
 | |
| 			{
 | |
| 				if(objItem.Name==sName)
 | |
| 					return objItem;
 | |
| 				if(objItem.SubItems.Count>0)
 | |
| 				{
 | |
| 					objItem2=GetItem(sName,objItem);
 | |
| 					if(objItem2!=null)
 | |
| 						return objItem2;
 | |
| 				}
 | |
| 			}
 | |
| 			return null;
 | |
| 		}
 | |
| 
 | |
| 		private bool RemoveItem(string sName, BaseItem objParent)
 | |
| 		{
 | |
| 			foreach(BaseItem objItem in objParent.SubItems)
 | |
| 			{
 | |
| 				if(objItem.Name==sName)
 | |
| 				{
 | |
| 					objParent.SubItems.Remove(objItem);
 | |
| 					objItem.SetOwner(null);
 | |
| 					((IOwner)m_Owner).RemoveShortcutsFromItem(objItem);
 | |
| 					return true;
 | |
| 				}
 | |
| 				if(objItem.SubItems.Count>0)
 | |
| 				{
 | |
| 					if(RemoveItem(sName,objItem))
 | |
| 						return true;
 | |
| 				}
 | |
| 			}
 | |
| 			return false;
 | |
| 		}
 | |
| 
 | |
| 		//public BaseItem Item(string sItemName)
 | |
| 		//{
 | |
| 		//	return m_Items[sItemName] as BaseItem;
 | |
| 		//}
 | |
| 
 | |
| 		public BaseItem this[int iIndex]
 | |
| 		{
 | |
| 			get
 | |
| 			{
 | |
| 				return m_Items.GetByIndex(iIndex) as BaseItem;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		//public BaseItem Item(int iIndex)
 | |
| 		//{
 | |
| 		//	return m_Items.GetByIndex(iIndex) as BaseItem;
 | |
| 		//}
 | |
| 
 | |
| 		public int Count
 | |
| 		{
 | |
| 			get
 | |
| 			{
 | |
| 				return m_Items.Count;
 | |
| 			}
 | |
| 		}
 | |
| 		public IEnumerator GetEnumerator()
 | |
| 		{
 | |
| 			return m_Items.GetEnumerator();
 | |
| 		}
 | |
| 		
 | |
| 		public bool Contains(BaseItem objItem)
 | |
| 		{
 | |
| 			return m_Items.ContainsValue(objItem);
 | |
| 		}
 | |
| 		public bool Contains(string sName)
 | |
| 		{
 | |
| 			return m_Items.ContainsKey(sName);
 | |
| 		}
 | |
|     }
 | |
| }
 |