ScheduledEventPropertiesGrid.cs 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. using Comal.Classes;
  2. using InABox.Core;
  3. using InABox.DynamicGrid;
  4. using InABox.WPF;
  5. using PRS.Shared.Events;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using System.Windows.Markup.Localizer;
  12. using System.Windows.Media.Imaging;
  13. namespace PRS.Shared.Grids.EventEditor;
  14. internal class ScheduledEventDayOfWeekGrid : DynamicItemsListGrid<ScheduledEventDayOfWeek>
  15. {
  16. private static readonly BitmapImage _tick = InABox.Wpf.Resources.tick.AsBitmapImage();
  17. public SchedulePeriod Period { get; set; }
  18. protected override void Init()
  19. {
  20. base.Init();
  21. HiddenColumns.Add(x => x.Enabled);
  22. ActionColumns.Add(new DynamicTickColumn<ScheduledEventDayOfWeek, bool>(x => x.Enabled, _tick, _tick, null, Enabled_Click));
  23. }
  24. protected override void DoReconfigure(DynamicGridOptions options)
  25. {
  26. base.DoReconfigure(options);
  27. options.DirectEdit = true;
  28. options.HideDirectEditButton = true;
  29. options.EditRows = false;
  30. }
  31. private bool Enabled_Click(CoreRow? row)
  32. {
  33. if (row is null) return false;
  34. var item = LoadItem(row);
  35. item.Enabled = !item.Enabled;
  36. SaveItem(item);
  37. return true;
  38. }
  39. protected override DynamicGridColumns LoadColumns()
  40. {
  41. var columns = new DynamicGridColumns<ScheduledEventDayOfWeek>();
  42. columns.Add(x => x.DayOfWeek);
  43. columns.Add(x => x.StartTime, caption: Period == SchedulePeriod.Day ? "Time" : "StartTime");
  44. if(Period != SchedulePeriod.Day)
  45. {
  46. columns.Add(x => x.EndTime);
  47. }
  48. return columns;
  49. }
  50. }
  51. internal class ScheduledEventPropertiesGrid : DynamicItemsListGrid<ScheduledEventProperties>
  52. {
  53. private readonly Column<ScheduledEventProperties> PeriodColumn = new(x => x.Period);
  54. private readonly Column<ScheduledEventProperties> DayOfWeekSettingsColumn = new(x => x.DayOfWeekSettings);
  55. private readonly Column<ScheduledEventProperties> NextScheduleColumn = new(x => x.NextSchedule);
  56. protected override void CustomiseEditor(IDynamicEditorForm form, ScheduledEventProperties[] items, DynamicGridColumn column, BaseEditor editor)
  57. {
  58. base.CustomiseEditor(form, items, column, editor);
  59. var item = items[0];
  60. if (DayOfWeekSettingsColumn.IsEqualTo(column.ColumnName))
  61. {
  62. editor.Editable = item.Period == SchedulePeriod.Minute || item.Period == SchedulePeriod.Hour || item.Period == SchedulePeriod.Day
  63. ? Editable.Enabled
  64. : Editable.Disabled;
  65. }
  66. else if (NextScheduleColumn.IsEqualTo(column.ColumnName))
  67. {
  68. editor.Editable = item.Period == SchedulePeriod.Minute || item.Period == SchedulePeriod.Hour || item.Period == SchedulePeriod.Day
  69. ? Editable.Disabled
  70. : Editable.Enabled;
  71. }
  72. }
  73. protected override void DoReconfigureEditors(DynamicEditorGrid grid, ScheduledEventProperties[] items)
  74. {
  75. base.DoReconfigureEditors(grid, items);
  76. if(grid.Form.TryFindEditor<ListEmbeddedListEditorControl>(DayOfWeekSettingsColumn.Property, out var editor))
  77. {
  78. editor.CustomiseGrid = g =>
  79. {
  80. if (g is ScheduledEventDayOfWeekGrid dowGrid)
  81. {
  82. dowGrid.Period = items[0].Period;
  83. }
  84. };
  85. }
  86. }
  87. protected override void OnAfterEditorValueChanged(DynamicEditorGrid? grid, ScheduledEventProperties[] items, AfterEditorValueChangedArgs args, Dictionary<string, object?> changes)
  88. {
  89. base.OnAfterEditorValueChanged(grid, items, args, changes);
  90. if(grid is null)
  91. {
  92. return;
  93. }
  94. if(args.ChangedValues.TryGetValue(PeriodColumn.Property, out var value) && value is SchedulePeriod period)
  95. {
  96. var daysOfWeekEditor = grid.Form.FindEditor<ListEmbeddedListEditorControl>(DayOfWeekSettingsColumn.Property);
  97. var nextScheduleEditor = grid.Form.FindEditor<DateTimeEditorControl>(NextScheduleColumn.Property);
  98. if(daysOfWeekEditor is not null && nextScheduleEditor is not null)
  99. {
  100. switch (period)
  101. {
  102. case SchedulePeriod.Minute:
  103. case SchedulePeriod.Hour:
  104. case SchedulePeriod.Day:
  105. daysOfWeekEditor.IsEnabled = true;
  106. nextScheduleEditor.IsEnabled = false;
  107. break;
  108. case SchedulePeriod.Week:
  109. case SchedulePeriod.Month:
  110. case SchedulePeriod.Year:
  111. daysOfWeekEditor.IsEnabled = false;
  112. nextScheduleEditor.IsEnabled = true;
  113. break;
  114. }
  115. }
  116. }
  117. }
  118. }