| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 | 
							- using System;
 
- using System.Collections;
 
- using System.Collections.Generic;
 
- namespace InABox.Core
 
- {
 
-     public class FluentList<T> : IEnumerable<T>
 
-     {
 
-         public delegate void FluentListChangedEvent(object sender, EventArgs args);
 
-         private bool _enabled = true;
 
-         private readonly List<T> _values = new List<T>();
 
-         public bool Enabled
 
-         {
 
-             get => _enabled;
 
-             set
 
-             {
 
-                 if (value)
 
-                     EndUpdate();
 
-                 else
 
-                     BeginUpdate();
 
-             }
 
-         }
 
-         public T this[int i]
 
-         {
 
-             get => _values[i];
 
-             set
 
-             {
 
-                 _values[i] = value;
 
-                 Changed();
 
-             }
 
-         }
 
-         public int Count => _values.Count;
 
-         public IEnumerator<T> GetEnumerator()
 
-         {
 
-             return ((IEnumerable<T>)_values).GetEnumerator();
 
-         }
 
-         IEnumerator IEnumerable.GetEnumerator()
 
-         {
 
-             return ((IEnumerable<T>)_values).GetEnumerator();
 
-         }
 
-         public FluentList<T> Add(T value)
 
-         {
 
-             if (!_values.Contains(value))
 
-                 _values.Add(value);
 
-             return Changed();
 
-         }
 
-         public FluentList<T> AddRange(params T[] values)
 
-         {
 
-             foreach (var value in values)
 
-                 if (!_values.Contains(value))
 
-                     _values.Add(value);
 
-             return Changed();
 
-         }
 
-         public FluentList<T> AddRange(IEnumerable<T> values)
 
-         {
 
-             foreach (var value in values)
 
-                 if (!_values.Contains(value))
 
-                     _values.Add(value);
 
-             return Changed();
 
-         }
 
-         public FluentList<T> Remove(T value)
 
-         {
 
-             if (_values.Contains(value))
 
-                 _values.Remove(value);
 
-             return Changed();
 
-         }
 
-         public FluentList<T> RemoveAt(int index)
 
-         {
 
-             if (index > 0 && index < _values.Count)
 
-                 _values.RemoveAt(index);
 
-             return Changed();
 
-         }
 
-         public FluentList<T> Clear()
 
-         {
 
-             _values.Clear();
 
-             return Changed();
 
-         }
 
-         public event FluentListChangedEvent OnChanged;
 
-         public FluentList<T> BeginUpdate()
 
-         {
 
-             _enabled = false;
 
-             return this;
 
-         }
 
-         private FluentList<T> Changed()
 
-         {
 
-             if (_enabled)
 
-                 OnChanged?.Invoke(this, new EventArgs());
 
-             return this;
 
-         }
 
-         public FluentList<T> EndUpdate()
 
-         {
 
-             _enabled = true;
 
-             return Changed();
 
-         }
 
-     }
 
- }
 
 
  |