JD2022-TU1/main/tools/framework/JD.TeaBoxAddinSystem/Addins/Description/AddinCollection.cs

124 lines
No EOL
2.7 KiB
C#

using System;
using System.Collections.ObjectModel;
using JD.Kernel.StaticHelpers;
namespace JD.TeaBoxAddinSystem.Addins.Description
{
/// <summary>
/// A collection of objects that becomes readonly when the addin that it belongs to is loaded.
/// </summary>
/// <remarks>NOT a collection of addins :)</remarks>
internal class AddinCollection<T> : Collection<T>
{
#region Variables
private Module m_owner;
#endregion
#region Constructor
/// <summary>
/// Constructor.
/// </summary>
internal AddinCollection()
: this(null)
{
}
/// <summary>
/// Constructor.
/// </summary>
/// <param name="owner"></param>
internal AddinCollection(Module owner)
{
m_owner = owner;
}
#endregion
#region Properties
internal Module Owner
{
get
{
return m_owner;
}
set
{
if (m_owner != value)
{
m_owner = value;
OnOwnerChanged(EventArgs.Empty);
}
}
}
#endregion
#region Methods
/// <summary>
/// OnOwnerChanged.
/// </summary>
/// <param name="e"></param>
internal virtual void OnOwnerChanged(EventArgs e)
{
}
private void ThrowIfLoaded()
{
if (Owner != null)
{
Owner.ThrowIfLoaded();
}
}
/// <summary>
/// Overriden.
/// </summary>
/// <param name="index"></param>
/// <param name="item"></param>
protected override void InsertItem(int index, T item)
{
Throw.IfNull(item, "item");
ThrowIfLoaded();
base.InsertItem(index, item);
}
/// <summary>
/// Overriden.
/// </summary>
/// <param name="index"></param>
protected override void RemoveItem(int index)
{
ThrowIfLoaded();
base.RemoveItem(index);
}
/// <summary>
/// Overriden.
/// </summary>
/// <param name="index"></param>
/// <param name="item"></param>
protected override void SetItem(int index, T item)
{
Throw.IfNull(item, "item");
ThrowIfLoaded();
base.SetItem(index, item);
}
/// <summary>
/// Overriden.
/// </summary>
protected override void ClearItems()
{
ThrowIfLoaded();
base.ClearItems();
}
#endregion
}
}