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);
}
}
}
}