using System.Collections.Generic;
using System.Collections.ObjectModel;
namespace JD.TeaBoxAddinSystem.Addins.Description
{
///
/// A keyed collection of s.
///
internal abstract class AddinObjectKeyedCollection : KeyedCollection where V : AddinObject
{
#region Variables
private Module m_owner;
#endregion
#region Constructor
///
/// Constructor.
///
internal AddinObjectKeyedCollection()
: this(null, null)
{
}
///
/// Constructor.
///
///
internal AddinObjectKeyedCollection(Module owner)
: this(owner, null)
{
}
///
/// Constructor.
///
///
///
internal AddinObjectKeyedCollection(Module owner, IEqualityComparer keyComparer)
: base(keyComparer)
{
m_owner = owner;
}
#endregion
#region Properties
internal Module Owner
{
get
{
return m_owner;
}
set
{
if (m_owner != value)
{
m_owner = value;
foreach (V item in this)
{
item.Module = m_owner;
}
}
}
}
#endregion
#region Methods
///
/// Overriden.
///
///
///
protected override void InsertItem(int index, V item)
{
ThrowIfLoaded();
base.InsertItem(index, item);
item.Module = m_owner;
}
///
/// Overriden.
///
///
protected override void RemoveItem(int index)
{
ThrowIfLoaded();
this[index].Module = null;
base.RemoveItem(index);
}
///
/// Overriden.
///
///
///
protected override void SetItem(int index, V item)
{
ThrowIfLoaded();
this[index].Module = null;
base.SetItem(index, item);
item.Module = m_owner;
}
///
/// Overriden.
///
protected override void ClearItems()
{
ThrowIfLoaded();
foreach (V item in this)
{
item.Module = null;
}
base.ClearItems();
}
private void ThrowIfLoaded()
{
if (Owner != null)
{
Owner.ThrowIfLoaded();
}
}
#endregion
}
}