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);
|
|
}
|
|
}
|
|
}
|