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