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