JobTrackerGrid.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. using System;
  2. using System.Linq;
  3. using System.Threading;
  4. using System.Windows;
  5. using Comal.Classes;
  6. using InABox.Clients;
  7. using InABox.Core;
  8. using InABox.DynamicGrid;
  9. using InABox.Wpf;
  10. namespace PRSDesktop
  11. {
  12. public class JobTrackerGrid : DynamicDataGrid<JobTracker>, IMasterDetailControl<Job, JobTracker>, IDataModelSource
  13. {
  14. public Job? Master { get; set; }
  15. public Filter<JobTracker> MasterDetailFilter => Master != null && Master.ID != Guid.Empty
  16. ? new Filter<JobTracker>(x => x.JobLink.ID).IsEqualTo(Master.ID)
  17. : new Filter<JobTracker>().None();
  18. public event DataModelUpdateEvent? OnUpdateDataModel;
  19. public string SectionName => "Job Trackers";
  20. public DataModel DataModel(Selection selection)
  21. {
  22. var ids = ExtractValues(x => x.ID, selection).ToArray();
  23. return new BaseDataModel<JobTracker>(new Filter<JobTracker>(x => x.ID).InList(ids));
  24. }
  25. protected override void DoReconfigure(DynamicGridOptions options)
  26. {
  27. base.DoReconfigure(options);
  28. options.MultiSelect = true;
  29. options.SelectColumns = true;
  30. }
  31. protected override bool CanCreateItems()
  32. {
  33. return base.CanCreateItems() && (Master?.ID ?? Guid.Empty) != Guid.Empty;
  34. }
  35. public override JobTracker CreateItem()
  36. {
  37. var result = base.CreateItem();
  38. result.JobLink.ID = Master?.ID ?? Guid.Empty;
  39. result.JobLink.Synchronise(Master);
  40. return result;
  41. }
  42. protected override void Reload(
  43. Filters<JobTracker> criteria, Columns<JobTracker> columns, ref SortOrder<JobTracker>? sort,
  44. CancellationToken token, Action<CoreTable?, Exception?> action)
  45. {
  46. criteria.Add(MasterDetailFilter);
  47. base.Reload(criteria, columns, ref sort, token, action);
  48. }
  49. protected override void CustomiseEditor(JobTracker[] items, DynamicGridColumn column, BaseEditor editor)
  50. {
  51. if (String.Equals(column.ColumnName, "JobLink.ID"))
  52. editor.Editable = Editable.Hidden;
  53. base.CustomiseEditor(items, column, editor);
  54. }
  55. }
  56. }