using Comal.Classes; using InABox.Clients; using InABox.Core; using InABox.DynamicGrid; using InABox.WPF; using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Windows.Media.Imaging; namespace PRSDesktop; public interface IEntitySelectionGrid { HashSet Entities { get; set; } } public class EntitySelectionGrid : DynamicGrid, IEntitySelectionGrid where T : Entity, IRemotable, IPersistent, new() { private readonly BitmapImage unticked = PRSDesktop.Resources.disabled.AsBitmapImage(); private readonly BitmapImage ticked = PRSDesktop.Resources.tick.AsBitmapImage(); private HashSet _entities; public HashSet Entities { get => _entities; set { _entities = value; } } protected override void Init() { base.Init(); HiddenColumns.Add(x => x.ID); ActionColumns.Add(new DynamicImageColumn(TickImage, TickAction)); } protected override void DoReconfigure(DynamicGridOptions options) { options.Clear(); options.FilterRows = true; } private BitmapImage TickImage(CoreRow? row) { if (row == null) { return ticked; } return _entities.Contains((Guid)row["ID"]) ? ticked : unticked; } private bool TickAction(CoreRow? row) { if (row == null) { if (_entities.Count < Data.Rows.Count) { _entities = Data.Rows.Select(x => (Guid)x["ID"]).ToHashSet(); } else { _entities.Clear(); } return true; } var employeeID = (Guid)row["ID"]; if (_entities.Contains(employeeID)) { _entities.Remove(employeeID); } else { _entities.Add(employeeID); } return true; } public override void DeleteItems(params CoreRow[] rows) { } public override T LoadItem(CoreRow row) { var id = row.Get(x => x.ID); var filter = new Filter(x => x.ID).IsEqualTo(id); return new Client().Load(filter).FirstOrDefault(); } protected override void Reload( Filters criteria, Columns columns, ref SortOrder? sort, CancellationToken token, Action action) { new Client().Query(criteria.Combine(), columns, sort, CoreRange.All, action); } public override void SaveItem(T item) { } }