58 lines
1.6 KiB
C#
58 lines
1.6 KiB
C#
using GraphicsManager.Interfaces;
|
|
|
|
namespace GraphicsManager.Objects.Core;
|
|
|
|
public class ControlList
|
|
{
|
|
internal List<IRenderObject> _internal = new();
|
|
private bool Clearing = false;
|
|
|
|
public IRenderObject this[int Index] => _internal[Index];
|
|
public IRenderObject this[uint Index] => _internal[(int)Index];
|
|
|
|
public IEnumerable<IRenderObject> Where(Func<IRenderObject, bool> func) => _internal.Where(func);
|
|
|
|
public bool Contains(IRenderObject Control) => _internal.Contains(Control);
|
|
|
|
public int IndexOf(IRenderObject Control) => _internal.IndexOf(Control);
|
|
|
|
public int Length => _internal.Count;
|
|
|
|
internal event Func<IRenderObject, Task>? ControlAdded;
|
|
internal event Func<Task>? ControlRemoved;
|
|
|
|
public void Remove(IRenderObject item, bool purge = true)
|
|
{
|
|
_internal.Remove(item);
|
|
if (purge)
|
|
{
|
|
item.Clean();
|
|
item = null!;
|
|
}
|
|
GC.Collect();
|
|
if (ControlRemoved is not null && !Clearing) _ = ControlRemoved.Invoke();
|
|
}
|
|
|
|
public void Add(IRenderObject item)
|
|
{
|
|
if (ControlAdded is not null) ControlAdded.Invoke(item).Wait();
|
|
_internal.Add(item);
|
|
}
|
|
|
|
public void Clear(bool purge = true)
|
|
{
|
|
Clearing = true;
|
|
for (int i = 0; i< _internal.Count; i++)
|
|
{
|
|
if (purge)
|
|
{
|
|
_internal[i].Clean();
|
|
_internal[i] = null!;
|
|
}
|
|
}
|
|
_internal.Clear();
|
|
GC.Collect();
|
|
Clearing = false;
|
|
if (ControlRemoved is not null) _ = ControlRemoved.Invoke();
|
|
}
|
|
} |