using System;
using System.Collections;
using System.Runtime.Serialization;
using System.Xml;
namespace DevComponents.DotNetBar
{
///
/// Collection of Bar objects.
///
public class Bars:System.Collections.CollectionBase,IDisposable
{
private DotNetBarManager m_Owner;
internal Bars(DotNetBarManager Owner)
{
m_Owner=Owner;
}
internal DotNetBarManager Owner
{
get
{
return m_Owner;
}
}
///
/// Releases the resources used by the Component.
///
public void Dispose()
{
m_Owner=null;
List.Clear();
}
///
/// Adds an Bar to the end of Bars collection.
///
/// The Bar to be added to the end of the Bars collection.
public void Add(Bar bar)
{
if(List.IndexOf(bar)<0)
List.Add(bar);
else
throw new InvalidOperationException("Bar is already in collection.");
}
protected override void OnInsertComplete(int index,object value)
{
base.OnInsertComplete(index,value);
Bar bar=(Bar)value;
bar.Owner=m_Owner;
bar.ThemeAware=m_Owner.ThemeAware;
bar.Style=m_Owner.Style;
IOwnerBarSupport ownersupport=m_Owner as IOwnerBarSupport;
if(ownersupport!=null)
ownersupport.AddShortcutsFromBar(bar);
bar.OnAddedToBars();
}
///
/// Gets the Bar at the specified index.
///
public Bar this[int Index]
{
get
{
return List[Index] as Bar;
}
}
///
/// Gets the Bar with the specified name.
///
public Bar this[string Name]
{
get
{
foreach(Bar bar in List)
if(bar.Name==Name)
return bar;
return null;
}
}
///
/// Removes specified bar from collection.
///
/// Bar to remove
public virtual void Remove(Bar bar)
{
List.Remove(bar);
}
protected override void OnRemoveComplete(int index,object value)
{
Bar bar=(Bar)value;
IOwnerBarSupport ownersupport=m_Owner as IOwnerBarSupport;
if(ownersupport!=null)
ownersupport.RemoveShortcutsFromBar(bar);
if(bar.Visible)
bar.HideBar();
if(bar.Parent!=null)
{
if(bar.Parent is DockSite && ((DockSite)bar.Parent).IsDocumentDock)
((DockSite)bar.Parent).GetDocumentUIManager().UnDock(bar);
if(bar.Parent!=null)
bar.Parent.Controls.Remove(bar);
}
base.OnRemoveComplete(index,value);
}
protected override void OnClear()
{
if (m_Owner != null && m_Owner.GetDesignMode())
return;
foreach(Bar bar in List)
{
if (bar.GetDesignMode())
continue;
if(bar.AutoHide)
bar.AutoHide=false;
if(bar.Visible)
bar.HideBar();
if (bar.DockSide == eDockSide.Document && bar.Parent is DockSite && ((DockSite)bar.Parent).GetDocumentUIManager()!=null)
((DockSite)bar.Parent).GetDocumentUIManager().UnDock(bar);
if(bar!=null && !bar.IsDisposed)
((IOwnerBarSupport)m_Owner).RemoveShortcutsFromBar(bar);
if(bar.Parent!=null)
bar.Parent.Controls.Remove(bar);
if (!bar.GetDesignMode())
bar.Dispose();
}
}
///
/// Determines whether an Bar is in the collection.
///
/// The Bar to locate in the collection.
/// true if item is found in the collection; otherwise, false.
public bool Contains(Bar bar)
{
return List.Contains(bar);
}
///
/// Determines whether bar with given name is in collection.
///
/// Name of the bar
/// True if bar is part of this collection, otherwise false.
public bool Contains(string name)
{
foreach(Bar bar in this.List)
if(bar.Name==name)
return true;
return false;
}
///
/// Returns the zero-based index of the Bar in the collection.
///
/// Bar to locate.
///
public int IndexOf(Bar bar)
{
return List.IndexOf(bar);
}
public void CopyTo(System.Array array)
{
List.CopyTo(array,0);
}
internal void ClearNonDocumentBars()
{
ArrayList removeList=new ArrayList(this.Count);
foreach(Bar bar in this.List)
{
if(bar.DockSide!=eDockSide.Document)
removeList.Add(bar);
}
foreach(Bar bar in removeList)
this.Remove(bar);
}
}
}