using System;
using System.Collections;
using System.Windows.Forms;
using DevComponents.UI.ContentManager;
namespace DevComponents.DotNetBar
{
///
/// Represents typed collection of BubbleButton objects.
///
public class BubbleButtonCollection:CollectionBase
{
#region Private Variables
private BubbleBarTab m_Parent=null;
private bool m_IgnoreEvents=false;
#endregion
#region Internal Implementation
///
/// Copies contained items to the IBlock array.
///
/// Array to copy to.
internal void CopyTo(IBlock[] array)
{
List.CopyTo(array,0);
}
///
/// Creates new instance of the collection.
///
/// Parent of the collection.
internal BubbleButtonCollection(BubbleBarTab parent)
{
m_Parent=parent;
}
///
/// Gets the parent of the collection.
///
internal BubbleBarTab Parent
{
get {return m_Parent;}
}
///
/// Adds new item to the collection but it does not raise internal events.
///
/// New item to add.
/// Index of newly added item.
internal int _Add(BubbleButton item)
{
m_IgnoreEvents=true;
int i=0;
try
{
i=List.Add(item);
}
finally
{
m_IgnoreEvents=false;
}
return i;
}
///
/// Adds new item to the collection at specified location but it does not raise internal events.
///
/// New item to add.
/// Position to add item to.
internal void _Add(BubbleButton item, int Position)
{
m_IgnoreEvents=true;
try
{
List.Insert(Position,item);
}
finally
{
m_IgnoreEvents=false;
}
}
///
/// Clears the collection but it does not raise internal events.
///
internal void _Clear()
{
m_IgnoreEvents=true;
try
{
List.Clear();
}
finally
{
m_IgnoreEvents=false;
}
}
///
/// Performs additional custom processes before setting a value in the CollectionBase instance.
///
/// The zero-based index at which oldValue can be found.
/// The value to replace with newValue.
/// The new value of the element at index.
protected override void OnSet(int index,object oldValue,object newValue)
{
if(newValue==null)
throw new InvalidOperationException("Setting of null values to BubbleButtonCollection is not allowed.");
BubbleButton item=newValue as BubbleButton;
if(item.Parent!=null)
{
item.Parent.Buttons.Remove(item);
}
base.OnSet(index,oldValue,newValue);
}
///
/// Performs additional custom processes after setting a value in the CollectionBase instance.
///
/// The zero-based index at which oldValue can be found.
/// The value to replace with newValue.
/// The new value of the element at index.
protected override void OnSetComplete(int index,object oldValue,object newValue)
{
if(!m_IgnoreEvents)
{
BubbleButton item=newValue as BubbleButton;
item.SetParentCollection(this);
m_Parent.OnButtonInserted(item);
}
base.OnSetComplete(index,oldValue,newValue);
}
///
/// Performs additional custom processes before inserting a new element into the CollectionBase instance.
///
/// The zero-based index at which to insert value.
/// The new value of the element at index.
protected override void OnInsert(int index,object value)
{
BubbleButton item=value as BubbleButton;
if(item.Parent!=null && item.Parent!=this.Parent)
{
item.Parent.Buttons.Remove(item);
}
base.OnInsert(index,value);
}
///
/// Performs additional custom processes after inserting a new element into the CollectionBase instance.
///
/// The zero-based index at which to insert value.
/// The new value of the element at index.
protected override void OnInsertComplete(int index,object value)
{
if(!m_IgnoreEvents)
{
BubbleButton item=value as BubbleButton;
item.SetParentCollection(this);
m_Parent.OnButtonInserted(item);
}
base.OnInsertComplete(index,value);
}
///
/// Performs additional custom processes when removing an element from the CollectionBase instance.
///
/// The zero-based index at which value can be found.
/// The value of the element to remove from index.
protected override void OnRemove(int index,object value)
{
// if(!m_IgnoreEvents)
// {
// BubbleButton item=value as BubbleButton;
// }
base.OnRemove(index,value);
}
///
/// Performs additional custom processes after removing an element from the CollectionBase instance.
///
/// The zero-based index at which value can be found.
/// The value of the element to remove from index.
protected override void OnRemoveComplete(int index,object value)
{
if(!m_IgnoreEvents)
{
BubbleButton item=value as BubbleButton;
item.SetParentCollection(null);
m_Parent.OnButtonRemoved(item);
}
base.OnRemoveComplete(index,value);
}
///
/// Removes an item without raising internal events.
///
/// Item to remove.
internal void _Remove(BubbleButton item)
{
m_IgnoreEvents=true;
try{List.Remove(item);}
finally{m_IgnoreEvents=false;}
}
///
/// Performs additional custom processes when clearing the contents of the CollectionBase instance.
///
protected override void OnClear()
{
if(!m_IgnoreEvents)
{
// if(List.Count>0)
// {
// foreach(BubbleButton objSub in this)
// {
// if(owner!=null)
// owner.RemoveShortcutsFromItem(objSub);
// }
// }
if(m_Parent!=null)
{
m_Parent.OnButtonsCollectionClear();
}
}
base.OnClear();
}
///
/// Copies the collection to the ArrayList object.
///
/// Target ArrayList.
public void CopyTo(ArrayList list)
{
if(list==null)
return;
foreach(BubbleButton item in this)
list.Add(item);
}
#endregion
#region Public Interface
///
/// Adds new item to the collection.
///
/// New item to add.
/// Index of newly added item.
public virtual int Add(BubbleButton item)
{
return Add(item,-1);
}
///
/// Adds new item to the collection at specified location.
///
/// New item to add.
/// Position to insert item at. Position of -1 will append the item to the end of the collection.
/// Index of the newly added item.
public virtual int Add(BubbleButton item, int Position)
{
int iRet=Position;
if(Position>=0)
List.Insert(Position,item);
else
iRet=List.Add(item);
return iRet;
}
///
/// Accesses items inside of the collection based on the index.
///
public virtual BubbleButton this[int index]
{
get {return (BubbleButton)(List[index]);}
set {List[index] = value;}
}
///
/// Accesses items inside of the collection based on the name.
///
public virtual BubbleButton this[string name]
{
get {return (BubbleButton)(List[this.IndexOf(name)]);}
set {List[this.IndexOf(name)] = value;}
}
///
/// Inserts new item at the specified position.
///
/// Position to insert item at.
/// Item to insert.
public virtual void Insert(int index, BubbleButton item)
{
this.Add(item,index);
}
///
/// Returns index of an item.
///
/// Item to return index for.
/// Item at the specified position.
public virtual int IndexOf(BubbleButton value)
{
return List.IndexOf(value);
}
///
/// Returns index of an item with given the item's name.
///
/// Name of the item.
/// Index of the Item with the specified name or -1 if item is not found.
public virtual int IndexOf(string name)
{
int i=-1;
foreach(BubbleButton item in List)
{
i++;
if(item.Name==name)
return i;
}
return -1;
}
///
/// Returns true if given item is contained by this collection.
///
/// Item to test.
/// True if item is part of this collection otherwise false.
public virtual bool Contains(BubbleButton value)
{
return List.Contains(value);
}
///
/// Returns true if item with given name is part of this collection.
///
/// Item name.
/// True if item is part of this collection otherwise false.
public virtual bool Contains(string name)
{
foreach(BubbleButton item in List)
{
if(item.Name==name)
return true;
}
return false;
}
///
/// Removes an item from the collection.
///
/// Item to remove.
public virtual void Remove(BubbleButton item)
{
List.Remove(item);
}
///
/// Removes an item from collection at specified index.
///
/// Index of the item to remove.
public void Remove(int index)
{
this.Remove((BubbleButton)List[index]);
}
///
/// Removes item from the collection with specified name.
///
/// Name of the item to remove.
public virtual void Remove(string name)
{
this.Remove(this[name]);
}
///
/// Adds array of the items to the collection.
///
/// Array of items to add.
public virtual void AddRange(BubbleButton[] items)
{
foreach(BubbleButton item in items)
{
this.Add(item);
}
}
///
/// Copy the collection to the array.
///
/// Array to copy collection to.
/// The zero-based relative index in array at which copying begins.
public virtual void CopyTo(BubbleButton[] array, int index)
{
List.CopyTo(array, index);
}
#endregion
}
}