139 lines
3.1 KiB
C#
139 lines
3.1 KiB
C#
using System.Collections.Generic;
|
|
using System.Collections.ObjectModel;
|
|
|
|
namespace JD.TeaBoxAddinSystem.Addins.Description
|
|
{
|
|
/// <summary>
|
|
/// A keyed collection of <see cref="AddinObject"/>s.
|
|
/// </summary>
|
|
internal abstract class AddinObjectKeyedCollection<K, V> : KeyedCollection<K, V> where V : AddinObject
|
|
{
|
|
#region Variables
|
|
|
|
private Module m_owner;
|
|
|
|
#endregion
|
|
|
|
#region Constructor
|
|
|
|
/// <summary>
|
|
/// Constructor.
|
|
/// </summary>
|
|
internal AddinObjectKeyedCollection()
|
|
: this(null, null)
|
|
{
|
|
}
|
|
|
|
/// <summary>
|
|
/// Constructor.
|
|
/// </summary>
|
|
/// <param name="owner"></param>
|
|
internal AddinObjectKeyedCollection(Module owner)
|
|
: this(owner, null)
|
|
{
|
|
}
|
|
|
|
/// <summary>
|
|
/// Constructor.
|
|
/// </summary>
|
|
/// <param name="owner"></param>
|
|
/// <param name="keyComparer"></param>
|
|
internal AddinObjectKeyedCollection(Module owner, IEqualityComparer<K> 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
|
|
|
|
/// <summary>
|
|
/// Overriden.
|
|
/// </summary>
|
|
/// <param name="index"></param>
|
|
/// <param name="item"></param>
|
|
protected override void InsertItem(int index, V item)
|
|
{
|
|
ThrowIfLoaded();
|
|
|
|
base.InsertItem(index, item);
|
|
item.Module = m_owner;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Overriden.
|
|
/// </summary>
|
|
/// <param name="index"></param>
|
|
protected override void RemoveItem(int index)
|
|
{
|
|
ThrowIfLoaded();
|
|
|
|
this[index].Module = null;
|
|
base.RemoveItem(index);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Overriden.
|
|
/// </summary>
|
|
/// <param name="index"></param>
|
|
/// <param name="item"></param>
|
|
protected override void SetItem(int index, V item)
|
|
{
|
|
ThrowIfLoaded();
|
|
|
|
this[index].Module = null;
|
|
base.SetItem(index, item);
|
|
item.Module = m_owner;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Overriden.
|
|
/// </summary>
|
|
protected override void ClearItems()
|
|
{
|
|
ThrowIfLoaded();
|
|
|
|
foreach (V item in this)
|
|
{
|
|
item.Module = null;
|
|
}
|
|
|
|
base.ClearItems();
|
|
}
|
|
|
|
private void ThrowIfLoaded()
|
|
{
|
|
if (Owner != null)
|
|
{
|
|
Owner.ThrowIfLoaded();
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|