DotNet 4.8.1 build of DotNetBar
This commit is contained in:
374
PROMS/DotNetBar Source Code/SubItemsCollection.cs
Normal file
374
PROMS/DotNetBar Source Code/SubItemsCollection.cs
Normal file
@@ -0,0 +1,374 @@
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace DevComponents.DotNetBar
|
||||
{
|
||||
/// <summary>
|
||||
/// Summary description for SubItemsCollection.
|
||||
/// </summary>
|
||||
public class SubItemsCollection:System.Collections.CollectionBase
|
||||
{
|
||||
|
||||
private BaseItem m_ParentItem;
|
||||
protected bool m_IgnoreEvents=false;
|
||||
private bool m_AllowParentRemove=true;
|
||||
|
||||
internal SubItemsCollection(BaseItem parent)
|
||||
{
|
||||
m_ParentItem=parent;
|
||||
}
|
||||
internal int _Add(BaseItem item)
|
||||
{
|
||||
m_IgnoreEvents=true;
|
||||
m_AllowParentRemove=false;
|
||||
int i=0;
|
||||
try
|
||||
{
|
||||
i=List.Add(item);
|
||||
}
|
||||
finally
|
||||
{
|
||||
m_IgnoreEvents=false;
|
||||
m_AllowParentRemove=true;
|
||||
}
|
||||
return i;
|
||||
}
|
||||
internal void _Add(BaseItem item, int Position)
|
||||
{
|
||||
m_IgnoreEvents=true;
|
||||
m_AllowParentRemove=false;
|
||||
try
|
||||
{
|
||||
if (Position >= 0)
|
||||
List.Insert(Position, item);
|
||||
else
|
||||
List.Add(item);
|
||||
}
|
||||
finally
|
||||
{
|
||||
m_IgnoreEvents=false;
|
||||
m_AllowParentRemove=true;
|
||||
}
|
||||
}
|
||||
internal void _Clear()
|
||||
{
|
||||
m_IgnoreEvents=true;
|
||||
try
|
||||
{
|
||||
List.Clear();
|
||||
}
|
||||
finally
|
||||
{
|
||||
m_IgnoreEvents=false;
|
||||
}
|
||||
}
|
||||
[EditorBrowsable(EditorBrowsableState.Never), Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
|
||||
public bool AllowParentRemove
|
||||
{
|
||||
get {return m_AllowParentRemove;}
|
||||
set {m_AllowParentRemove=value;}
|
||||
}
|
||||
|
||||
public virtual int Add(BaseItem item)
|
||||
{
|
||||
return Add(item,-1);
|
||||
}
|
||||
public virtual int Add(BaseItem item, int Position)
|
||||
{
|
||||
int iRet=Position;
|
||||
if (this.Contains(item))
|
||||
{
|
||||
return this.IndexOf(item);
|
||||
}
|
||||
|
||||
if(Position>=0)
|
||||
List.Insert(Position,item);
|
||||
else
|
||||
iRet=List.Add(item);
|
||||
|
||||
return iRet;
|
||||
}
|
||||
|
||||
protected override void OnInsert(int index,object value)
|
||||
{
|
||||
if(value is BaseItem)
|
||||
{
|
||||
BaseItem item=value as BaseItem;
|
||||
|
||||
if(m_AllowParentRemove && item.Parent!=null && item.Parent!=m_ParentItem && item.Parent.SubItems.Contains(item))
|
||||
item.Parent.SubItems.Remove(item);
|
||||
}
|
||||
base.OnInsert(index,value);
|
||||
}
|
||||
|
||||
protected override void OnInsertComplete(int index,object value)
|
||||
{
|
||||
if(!m_IgnoreEvents)
|
||||
{
|
||||
BaseItem item=value as BaseItem;
|
||||
|
||||
object objItemContainer=item.ContainerControl;
|
||||
item.Style=m_ParentItem.Style;
|
||||
item.Orientation=m_ParentItem.Orientation;
|
||||
item.ThemeAware=m_ParentItem.ThemeAware;
|
||||
item.SetParent(m_ParentItem);
|
||||
|
||||
IOwner owner=m_ParentItem.GetOwner() as IOwner;
|
||||
if(owner!=null)
|
||||
owner.AddShortcutsFromItem(item);
|
||||
if (m_ParentItem != null && m_ParentItem is PopupItem && m_ParentItem.Expanded &&
|
||||
((PopupItem)m_ParentItem).PopupType != ePopupType.Container)
|
||||
{
|
||||
item.ContainerControl = ((PopupItem)m_ParentItem).PopupControl;
|
||||
item.OnContainerChanged(objItemContainer);
|
||||
}
|
||||
else
|
||||
{
|
||||
item.ContainerControl = null;
|
||||
item.OnContainerChanged(objItemContainer);
|
||||
}
|
||||
objItemContainer=null;
|
||||
|
||||
item.SetDesignMode(m_ParentItem.DesignMode);
|
||||
|
||||
m_ParentItem.NeedRecalcSize=true;
|
||||
m_ParentItem.OnItemAdded(item);
|
||||
}
|
||||
|
||||
base.OnInsertComplete(index,value);
|
||||
}
|
||||
|
||||
public virtual BaseItem this[int index]
|
||||
{
|
||||
get {return (BaseItem)(List[index]);}
|
||||
set {List[index] = value;}
|
||||
}
|
||||
public virtual BaseItem this[string name]
|
||||
{
|
||||
get {return (BaseItem)(List[this.IndexOf(name)]);}
|
||||
set {List[this.IndexOf(name)] = value;}
|
||||
}
|
||||
|
||||
public virtual void Insert(int index, BaseItem item)
|
||||
{
|
||||
this.Add(item,index);
|
||||
}
|
||||
|
||||
[EditorBrowsable(EditorBrowsableState.Never)]
|
||||
public void _Insert(int index, BaseItem item)
|
||||
{
|
||||
m_IgnoreEvents = true;
|
||||
try { List.Insert(index, item); }
|
||||
finally { m_IgnoreEvents = false; }
|
||||
}
|
||||
|
||||
public virtual int IndexOf(BaseItem value)
|
||||
{
|
||||
return List.IndexOf(value);
|
||||
}
|
||||
|
||||
public virtual int IndexOf(string name)
|
||||
{
|
||||
int i=-1;
|
||||
foreach(BaseItem item in List)
|
||||
{
|
||||
i++;
|
||||
if(item.Name==name)
|
||||
return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
public virtual bool Contains(BaseItem value)
|
||||
{
|
||||
return List.Contains(value);
|
||||
}
|
||||
|
||||
public virtual bool Contains(string name)
|
||||
{
|
||||
foreach(BaseItem item in List)
|
||||
{
|
||||
if(item.Name==name)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public virtual void Remove(BaseItem item)
|
||||
{
|
||||
List.Remove(item);
|
||||
}
|
||||
|
||||
public virtual void RemoveRange(BaseItem[] items)
|
||||
{
|
||||
foreach(BaseItem item in items)
|
||||
this.Remove(item);
|
||||
}
|
||||
|
||||
protected override void OnRemove(int index,object value)
|
||||
{
|
||||
RemoveInternal(index,value);
|
||||
base.OnRemove(index,value);
|
||||
}
|
||||
|
||||
protected virtual void RemoveInternal(int index,object value)
|
||||
{
|
||||
// Raise event before item is actually removed so the item is able to clean its state
|
||||
// See override in PopupItem
|
||||
if(!m_IgnoreEvents)
|
||||
{
|
||||
BaseItem item=value as BaseItem;
|
||||
|
||||
item.OnBeforeItemRemoved(null);
|
||||
m_ParentItem.OnBeforeItemRemoved(item);
|
||||
|
||||
IOwner owner=m_ParentItem.GetOwner() as IOwner;
|
||||
if(owner!=null)
|
||||
owner.RemoveShortcutsFromItem(item);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
protected override void OnRemoveComplete(int index,object value)
|
||||
{
|
||||
RemoveCompleteInternal(index,value);
|
||||
base.OnRemoveComplete(index,value);
|
||||
}
|
||||
|
||||
protected virtual void RemoveCompleteInternal(int index, object value)
|
||||
{
|
||||
if(!m_IgnoreEvents)
|
||||
{
|
||||
BaseItem item=value as BaseItem;
|
||||
|
||||
item.SetParent(null);
|
||||
item.OnAfterItemRemoved(null, index);
|
||||
item.ContainerControl=null;
|
||||
m_ParentItem.OnAfterItemRemoved(item, index);
|
||||
m_ParentItem.NeedRecalcSize=true;
|
||||
m_ParentItem.Refresh();
|
||||
}
|
||||
}
|
||||
|
||||
[EditorBrowsable(EditorBrowsableState.Never)]
|
||||
public void _RemoveAt(int index)
|
||||
{
|
||||
m_IgnoreEvents = true;
|
||||
try { List.RemoveAt(index); }
|
||||
finally { m_IgnoreEvents = false; }
|
||||
}
|
||||
|
||||
[EditorBrowsable(EditorBrowsableState.Never)]
|
||||
public void _Remove(BaseItem item)
|
||||
{
|
||||
m_IgnoreEvents=true;
|
||||
try{List.Remove(item);}
|
||||
finally{m_IgnoreEvents=false;}
|
||||
}
|
||||
|
||||
public void Remove(int index)
|
||||
{
|
||||
this.Remove((BaseItem)List[index]);
|
||||
}
|
||||
|
||||
public virtual void Remove(string name)
|
||||
{
|
||||
this.Remove(this[name]);
|
||||
}
|
||||
|
||||
protected override void OnClear()
|
||||
{
|
||||
if(!m_IgnoreEvents)
|
||||
{
|
||||
IOwner owner=m_ParentItem.GetOwner() as IOwner;
|
||||
if(m_ParentItem!=null)
|
||||
m_ParentItem.SuspendLayout = true;
|
||||
try
|
||||
{
|
||||
if (List.Count > 0)
|
||||
{
|
||||
for (int i = 0; i < this.Count; i++)
|
||||
{
|
||||
BaseItem item = this[i];
|
||||
RemoveInternal(i, item);
|
||||
RemoveCompleteInternal(i, item);
|
||||
}
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (m_ParentItem != null)
|
||||
m_ParentItem.SuspendLayout = false;
|
||||
}
|
||||
owner=null;
|
||||
|
||||
if(m_ParentItem!=null)
|
||||
{
|
||||
m_ParentItem.OnSubItemsClear();
|
||||
}
|
||||
}
|
||||
//base.OnClear();
|
||||
}
|
||||
|
||||
public virtual void AddRange(BaseItem[] items)
|
||||
{
|
||||
foreach (BaseItem item in items)
|
||||
{
|
||||
this.Add(item);
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void InsertRange(int startPosition, BaseItem[] items)
|
||||
{
|
||||
foreach (BaseItem item in items)
|
||||
{
|
||||
List.Insert(startPosition, item);
|
||||
startPosition++;
|
||||
}
|
||||
}
|
||||
|
||||
[EditorBrowsable(EditorBrowsableState.Never)]
|
||||
public void CopyTo(System.Collections.ArrayList list)
|
||||
{
|
||||
if(list==null)
|
||||
return;
|
||||
foreach(BaseItem item in this)
|
||||
list.Add(item);
|
||||
}
|
||||
|
||||
public virtual void CopyTo(BaseItem[] array, int index)
|
||||
{
|
||||
List.CopyTo(array, index);
|
||||
}
|
||||
|
||||
internal void CopyToFromIndex(BaseItem[] array, int fromCollectionIndex)
|
||||
{
|
||||
for (int i = fromCollectionIndex; i < List.Count; i++)
|
||||
{
|
||||
array[i - fromCollectionIndex] = this[i];
|
||||
}
|
||||
}
|
||||
|
||||
internal bool IgnoreEvents
|
||||
{
|
||||
get { return m_IgnoreEvents; }
|
||||
set { m_IgnoreEvents = value; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sorts the items in the collection using the built in IComparable on each item which sorts items by the Text property.
|
||||
/// </summary>
|
||||
public void Sort()
|
||||
{
|
||||
InnerList.Sort();
|
||||
}
|
||||
/// <summary>
|
||||
/// Sorts the items in the collection using specified comparer.
|
||||
/// </summary>
|
||||
/// <param name="comparer">Comparer to use for item sorting.</param>
|
||||
public void Sort(System.Collections.IComparer comparer)
|
||||
{
|
||||
InnerList.Sort(comparer);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user