using System; using System.Linq; namespace Terminal.Gui { /// /// Implementation of which records toggled rows /// by a property on row objects. /// public class CheckBoxTableSourceWrapperByObject : CheckBoxTableSourceWrapperBase { private readonly IEnumerableTableSource toWrap; readonly Func getter; readonly Action setter; /// /// Creates a new instance of the class wrapping the collection . /// /// The table you will use the source with. /// The collection of objects you will record checked state for /// Delegate method for retrieving checked state from your objects of type . /// Delegate method for setting new checked states on your objects of type . public CheckBoxTableSourceWrapperByObject ( TableView tableView, IEnumerableTableSource toWrap, Func getter, Action setter) : base (tableView, toWrap) { this.toWrap = toWrap; this.getter = getter; this.setter = setter; } /// protected override bool IsChecked (int row) { return getter (toWrap.GetObjectOnRow (row)); } /// protected override void ToggleAllRows () { ToggleRows (Enumerable.Range (0, toWrap.Rows).ToArray()); } /// protected override void ToggleRow (int row) { var d = toWrap.GetObjectOnRow (row); setter (d, !getter(d)); } /// protected override void ToggleRows (int [] range) { // if all are ticked untick them if (range.All (IsChecked)) { // select none foreach(var r in range) { setter (toWrap.GetObjectOnRow (r), false); } } else { // otherwise tick all foreach (var r in range) { setter (toWrap.GetObjectOnRow (r), true); } } } /// protected override void ClearAllToggles () { foreach (var e in toWrap.GetAllObjects()) { setter (e, false); } } } }