|
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms.Layout;
namespace System.Windows.Forms;
public partial class ToolStripPanel
{
[ListBindable(false)]
public class ToolStripPanelRowCollection : ArrangedElementCollection, IList
{
private readonly ToolStripPanel _owner;
public ToolStripPanelRowCollection(ToolStripPanel owner)
{
_owner = owner;
}
public ToolStripPanelRowCollection(ToolStripPanel owner, ToolStripPanelRow[] value)
{
_owner = owner;
AddRange(value);
}
/// <summary>
///
/// </summary>
public new virtual ToolStripPanelRow this[int index]
{
get
{
return (ToolStripPanelRow)(InnerList[index]);
}
}
public int Add(ToolStripPanelRow value)
{
ArgumentNullException.ThrowIfNull(value);
int retVal = ((IList)InnerList).Add(value);
OnAdd(value);
return retVal;
}
public void AddRange(params ToolStripPanelRow[] value)
{
ArgumentNullException.ThrowIfNull(value);
ToolStripPanel currentOwner = _owner;
currentOwner?.SuspendLayout();
try
{
for (int i = 0; i < value.Length; i++)
{
Add(value[i]);
}
}
finally
{
currentOwner?.ResumeLayout();
}
}
public void AddRange(ToolStripPanelRowCollection value)
{
ArgumentNullException.ThrowIfNull(value);
ToolStripPanel currentOwner = _owner;
currentOwner?.SuspendLayout();
try
{
int currentCount = value.Count;
for (int i = 0; i < currentCount; i++)
{
Add(value[i]);
}
}
finally
{
currentOwner?.ResumeLayout();
}
}
public bool Contains(ToolStripPanelRow value)
{
return InnerList.Contains(value);
}
public virtual void Clear()
{
_owner?.SuspendLayout();
try
{
while (Count != 0)
{
RemoveAt(Count - 1);
}
}
finally
{
_owner?.ResumeLayout();
}
}
void IList.Clear() { Clear(); }
bool IList.IsFixedSize { get { return ((IList)InnerList).IsFixedSize; } }
bool IList.Contains(object? value) { return InnerList.Contains(value); }
bool IList.IsReadOnly { get { return ((IList)InnerList).IsReadOnly; } }
void IList.RemoveAt(int index) { RemoveAt(index); }
void IList.Remove(object? value) { Remove((ToolStripPanelRow)value!); }
int IList.Add(object? value) { return Add((ToolStripPanelRow)value!); }
int IList.IndexOf(object? value) { return IndexOf((ToolStripPanelRow)value!); }
void IList.Insert(int index, object? value) { Insert(index, (ToolStripPanelRow)value!); }
object? IList.this[int index]
{
get { return InnerList[index]; }
set { throw new NotSupportedException(SR.ToolStripCollectionMustInsertAndRemove); /* InnerList[index] = value; */ }
}
public int IndexOf(ToolStripPanelRow value)
{
return InnerList.IndexOf(value);
}
public void Insert(int index, ToolStripPanelRow value)
{
ArgumentNullException.ThrowIfNull(value);
InnerList.Insert(index, value);
OnAdd(value);
}
private void OnAdd(ToolStripPanelRow value)
{
if (_owner is not null)
{
LayoutTransaction.DoLayout(_owner, value, PropertyNames.Parent);
}
}
public void Remove(ToolStripPanelRow value) => InnerList.Remove(value);
public void RemoveAt(int index) => InnerList.RemoveAt(index);
public void CopyTo(ToolStripPanelRow[] array, int index) => InnerList.CopyTo(array, index);
}
}
|