| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 | 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.Windows.Media.Imaging;namespace PRSDesktop{    public interface IEntitySelectionGrid    {        HashSet<Guid> Entities { get; set; }    }    public class EntitySelectionGrid<T> : DynamicGrid<T>, 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<Guid> _entities;        public HashSet<Guid> Entities        {            get => _entities;            set            {                _entities = value;            }        }        public EntitySelectionGrid()        {            Options.BeginUpdate().Clear().AddRange(DynamicGridOption.FilterRows).EndUpdate();            HiddenColumns.Add(x => x.ID);            ActionColumns.Add(new DynamicImageColumn(TickImage, TickAction));        }        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;        }        protected override void DeleteItems(params CoreRow[] rows)        {        }        protected override T LoadItem(CoreRow row)        {            var id = row.Get<Employee, Guid>(x => x.ID);            var filter = new Filter<T>(x => x.ID).IsEqualTo(id);            return new Client<T>().Load(filter).FirstOrDefault();        }        protected override void Reload(Filters<T> criteria, Columns<T> columns, ref SortOrder<T> sort, Action<CoreTable, Exception> action)        {            new Client<T>().Query(criteria.Combine(), columns, sort, action);        }        protected override void SaveItem(T item)        {        }    }}
 |