| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 | 
							- using InABox.Core;
 
- using InABox.WPF;
 
- using System;
 
- using System.Collections.Generic;
 
- using System.Linq;
 
- using System.Text;
 
- using System.Threading.Tasks;
 
- using System.Windows.Controls;
 
- using System.Windows.Media.Imaging;
 
- namespace InABox.DynamicGrid;
 
- public class DynamicSelectorGrid<T> : DynamicDataGrid<T>
 
-     where T : Entity, IRemotable, IPersistent, new()
 
- {
 
-     private static BitmapImage tick = InABox.Wpf.Resources.tick.AsBitmapImage();
 
-     public HashSet<Guid> SelectedIDs { get; set; } = new();
 
-     private HashSet<Guid> LastVisible = new();
 
-     public delegate void SelectionChangedEvent(HashSet<Guid> selected);
 
-     public event SelectionChangedEvent? SelectionChanged;
 
-     public DynamicSelectorGrid(DynamicActionColumnPosition tickPosition)
 
-     {
 
-         ActionColumns.Add(new DynamicImageColumn(Selected_Image, Selected_Click)
 
-         {
 
-             Position = tickPosition
 
-         });
 
-     }
 
-     private BitmapImage? Selected_Image(CoreRow? row)
 
-     {
 
-         if (row is null) return tick;
 
-         return SelectedIDs.Contains(row.Get<T, Guid>(x => x.ID)) ? tick : null;
 
-     }
 
-     protected virtual Guid[] GetSelectedGuids(Guid id)
 
-     {
 
-         return new Guid[] { id };
 
-     }
 
-     protected IEnumerable<Guid> FilteredGuids
 
-     {
 
-         get
 
-         {
 
-             var predicates = GetFilterPredicates();
 
-             return Data.Rows.Where(r =>
 
-             {
 
-                 return predicates.All(x => x.Item2(r));
 
-             }).Select(x => x.Get<T, Guid>(x => x.ID));
 
-         }
 
-     }
 
-     protected override void DoFilterChanged()
 
-     {
 
-         base.DoFilterChanged();
 
-         DoSelectionChanged();
 
-     }
 
-     private void DoSelectionChanged()
 
-     {
 
-         var ids = SelectedIDs.Intersect(FilteredGuids).ToHashSet();
 
-         if(ids.Count != LastVisible.Count || ids.Any(x => !LastVisible.Contains(x)))
 
-         {
 
-             LastVisible = ids;
 
-             SelectionChanged?.Invoke(LastVisible);
 
-         }
 
-     }
 
-     private bool Selected_Click(CoreRow? row)
 
-     {
 
-         if (row is null)
 
-         {
 
-             var menu = new ContextMenu();
 
-             menu.AddItem("Select All", null, SelectAll_Click);
 
-             menu.AddItem("Deselect All", null, DeselectAll_Click);
 
-             menu.IsOpen = true;
 
-             return false;
 
-         }
 
-         var parent = row.Get<T, Guid>(x => x.ID);
 
-         var ids = GetSelectedGuids(parent);
 
-         if (SelectedIDs.Contains(parent))
 
-         {
 
-             foreach (var id in ids.Where(x => SelectedIDs.Contains(x)))
 
-             {
 
-                 SelectedIDs.Remove(id);
 
-                 var update = Data.Rows.FirstOrDefault(r => r.Get<T, Guid>(x => x.ID) == id);
 
-                 if (update != null)
 
-                     InvalidateRow(update);
 
-             }
 
-         }
 
-         else
 
-         {
 
-             foreach (var id in ids.Where(x => !SelectedIDs.Contains(x)))
 
-             {
 
-                 SelectedIDs.Add(id);
 
-                 var update = Data.Rows.FirstOrDefault(r => r.Get<T, Guid>(x => x.ID) == id);
 
-                 if (update != null)
 
-                     InvalidateRow(update);
 
-             }
 
-         }
 
-         DoSelectionChanged();
 
-         InvalidateRow(row);
 
-         return false;
 
-     }
 
-     private void DeselectAll_Click()
 
-     {
 
-         SelectedIDs.Clear();
 
-         DoSelectionChanged();
 
-         InvalidateGrid();
 
-     }
 
-     private void SelectAll_Click()
 
-     {
 
-         SelectedIDs = Data.Rows.Select(x => x.Get<T, Guid>(x => x.ID)).ToHashSet();
 
-         DoSelectionChanged();
 
-         InvalidateGrid();
 
-     }
 
-     protected override void DoReconfigure(DynamicGridOptions options)
 
-     {
 
-         base.DoReconfigure(options);
 
-         options.Clear();
 
-     }
 
- }
 
 
  |