DynamicScheduleEditorColumn.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using System;
  2. using System.Linq;
  3. using System.Windows;
  4. using System.Windows.Media.Imaging;
  5. using Comal.Classes;
  6. using InABox.Clients;
  7. using InABox.Core;
  8. using InABox.DynamicGrid;
  9. using InABox.WPF;
  10. using PRS.Shared;
  11. namespace PRSDesktop
  12. {
  13. internal class DynamicScheduleEditorColumn<T> : DynamicImageColumn where T : Entity, IPersistent, IRemotable, ISchedulable, new()
  14. {
  15. private readonly BitmapImage bitmap_disabled = Resources.clock.AsGrayScale().AsBitmapImage();
  16. private readonly BitmapImage bitmap_enabled = Resources.clock.AsBitmapImage();
  17. private readonly BitmapImage bitmap_header = Resources.clock.AsBitmapImage();
  18. public DynamicScheduleEditorColumn() : base(r => null)
  19. {
  20. Image = ScheduleImage;
  21. Action = EditSchedule;
  22. GetFilter = () => new StaticColumnFilter<bool>(ActiveSchedules, [
  23. new("Active Schedules", true),
  24. new("No/Inactive Schedules", false)
  25. ]);
  26. }
  27. private bool ActiveSchedules(CoreRow row)
  28. {
  29. int schedules = row.Get<T, int>(x => x.ActiveSchedules);
  30. return schedules > 0;
  31. }
  32. private BitmapImage ScheduleImage(CoreRow? row)
  33. {
  34. if (row == null)
  35. return bitmap_header;
  36. var isenabled = row.Get<T, int>(x => x.ActiveSchedules) > 0;
  37. return isenabled ? bitmap_enabled : bitmap_disabled;
  38. }
  39. private bool EditSchedule(CoreRow? row)
  40. {
  41. if(row is null)
  42. {
  43. return false;
  44. }
  45. var id = row.Get<T, Guid>(x => x.ID);
  46. var item = new Client<T>().Load(new Filter<T>(x => x.ID).IsEqualTo(id)).FirstOrDefault();
  47. if(item is null)
  48. {
  49. Logger.Send(LogType.Error, "", $"{typeof(T)} with ID {id} does not exist!");
  50. MessageBox.Show("Error opening schedule.");
  51. return false;
  52. }
  53. var form = new ScheduleForm(item);
  54. form.ShowDialog();
  55. return true;
  56. }
  57. }
  58. }