EntitySelectionWindow.xaml.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. using Comal.Classes;
  2. using InABox.Core;
  3. using InABox.DynamicGrid;
  4. using InABox.Wpf;
  5. using InABox.WPF;
  6. using javax.xml.crypto;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Linq;
  10. using System.Reflection;
  11. using System.Text;
  12. using System.Threading.Tasks;
  13. using System.Windows;
  14. using System.Windows.Controls;
  15. using System.Windows.Data;
  16. using System.Windows.Documents;
  17. using System.Windows.Input;
  18. using System.Windows.Media;
  19. using System.Windows.Media.Imaging;
  20. using System.Windows.Shapes;
  21. namespace PRSDesktop
  22. {
  23. public delegate void ConfigureColumnsHandler(DynamicGridColumns columns);
  24. /// <summary>
  25. /// Interaction logic for EntitySelectionWindow.xaml
  26. /// </summary>
  27. public partial class EntitySelectionWindow : ThemableWindow
  28. {
  29. public event ConfigureColumnsHandler? DoConfigureColumns;
  30. private IEntitySelectionGrid grid;
  31. public HashSet<Guid> Entities => grid.Entities;
  32. public EntitySelectionWindow(Type entityType, HashSet<Guid> entities, Type? gridType = null)
  33. {
  34. InitializeComponent();
  35. grid = typeof(EntitySelectionWindow).GetMethod(nameof(MakeGrid), BindingFlags.Instance | BindingFlags.NonPublic)
  36. .MakeGenericMethod(gridType ?? typeof(EntitySelectionGrid<>).MakeGenericType(entityType), entityType)
  37. .Invoke(this, new object?[] { entities }) as IEntitySelectionGrid;
  38. LayoutGrid.Children.Add(grid as UIElement);
  39. }
  40. private IEntitySelectionGrid MakeGrid<TGrid, T>(HashSet<Guid> entities)
  41. where TGrid : EntitySelectionGrid<T>, new()
  42. where T : Entity, IRemotable, IPersistent, new()
  43. {
  44. var grid = new TGrid();
  45. grid.Entities = entities;
  46. grid.Refresh(true, true);
  47. return grid;
  48. }
  49. }
  50. }