JobTrackerGrid.cs 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. using System;
  2. using System.Linq;
  3. using System.Windows;
  4. using Comal.Classes;
  5. using InABox.Clients;
  6. using InABox.Core;
  7. using InABox.DynamicGrid;
  8. using InABox.Wpf;
  9. namespace PRSDesktop
  10. {
  11. public class JobTrackerGrid : DynamicDataGrid<JobTracker>, IMasterDetailControl<Job, JobTracker>, IDataModelSource
  12. {
  13. public Job? Master { get; set; }
  14. public Filter<JobTracker> MasterDetailFilter => Master != null && Master.ID != Guid.Empty
  15. ? new Filter<JobTracker>(x => x.JobLink.ID).IsEqualTo(Master.ID)
  16. : new Filter<JobTracker>().None();
  17. public event DataModelUpdateEvent? OnUpdateDataModel;
  18. public string SectionName => "Job Trackers";
  19. public DataModel DataModel(Selection selection)
  20. {
  21. var ids = ExtractValues(x => x.ID, selection).ToArray();
  22. return new BaseDataModel<JobTracker>(new Filter<JobTracker>(x => x.ID).InList(ids));
  23. }
  24. protected override void DoReconfigure(FluentList<DynamicGridOption> options)
  25. {
  26. base.DoReconfigure(options);
  27. options
  28. .BeginUpdate()
  29. .Add(DynamicGridOption.MultiSelect)
  30. .Add(DynamicGridOption.SelectColumns)
  31. .EndUpdate();
  32. }
  33. protected override bool CanCreateItems()
  34. {
  35. return base.CanCreateItems() && (Master?.ID ?? Guid.Empty) != Guid.Empty;
  36. }
  37. public override JobTracker CreateItem()
  38. {
  39. var result = base.CreateItem();
  40. result.JobLink.ID = Master?.ID ?? Guid.Empty;
  41. result.JobLink.Synchronise(Master);
  42. return result;
  43. }
  44. protected override void Reload(Filters<JobTracker> criteria, Columns<JobTracker> columns, ref SortOrder<JobTracker>? sort, Action<CoreTable?, Exception?> action)
  45. {
  46. criteria.Add(MasterDetailFilter);
  47. base.Reload(criteria, columns, ref sort, 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. }