123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- using Comal.Classes;
- using InABox.Core;
- using InABox.DynamicGrid;
- using InABox.WPF;
- using PRS.Shared.Events;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Markup.Localizer;
- using System.Windows.Media.Imaging;
- namespace PRS.Shared.Grids.EventEditor;
- internal class ScheduledEventDayOfWeekGrid : DynamicItemsListGrid<ScheduledEventDayOfWeek>
- {
- private static readonly BitmapImage _tick = InABox.Wpf.Resources.tick.AsBitmapImage();
- public SchedulePeriod Period { get; set; }
- protected override void Init()
- {
- base.Init();
- HiddenColumns.Add(x => x.Enabled);
- ActionColumns.Add(new DynamicTickColumn<ScheduledEventDayOfWeek, bool>(x => x.Enabled, _tick, _tick, null, Enabled_Click));
- }
- protected override void DoReconfigure(DynamicGridOptions options)
- {
- base.DoReconfigure(options);
- options.DirectEdit = true;
- options.HideDirectEditButton = true;
- options.EditRows = false;
- }
- private bool Enabled_Click(CoreRow? row)
- {
- if (row is null) return false;
- var item = LoadItem(row);
- item.Enabled = !item.Enabled;
- SaveItem(item);
- return true;
- }
- protected override DynamicGridColumns LoadColumns()
- {
- var columns = new DynamicGridColumns<ScheduledEventDayOfWeek>();
- columns.Add(x => x.DayOfWeek);
- columns.Add(x => x.StartTime, caption: Period == SchedulePeriod.Day ? "Time" : "StartTime");
- if(Period != SchedulePeriod.Day)
- {
- columns.Add(x => x.EndTime);
- }
- return columns;
- }
- }
- internal class ScheduledEventPropertiesGrid : DynamicItemsListGrid<ScheduledEventProperties>
- {
- private readonly Column<ScheduledEventProperties> PeriodColumn = new(x => x.Period);
- private readonly Column<ScheduledEventProperties> DayOfWeekSettingsColumn = new(x => x.DayOfWeekSettings);
- private readonly Column<ScheduledEventProperties> NextScheduleColumn = new(x => x.NextSchedule);
- protected override void CustomiseEditor(IDynamicEditorForm form, ScheduledEventProperties[] items, DynamicGridColumn column, BaseEditor editor)
- {
- base.CustomiseEditor(form, items, column, editor);
- var item = items[0];
- if (DayOfWeekSettingsColumn.IsEqualTo(column.ColumnName))
- {
- editor.Editable = item.Period == SchedulePeriod.Minute || item.Period == SchedulePeriod.Hour || item.Period == SchedulePeriod.Day
- ? Editable.Enabled
- : Editable.Disabled;
- }
- else if (NextScheduleColumn.IsEqualTo(column.ColumnName))
- {
- editor.Editable = item.Period == SchedulePeriod.Minute || item.Period == SchedulePeriod.Hour || item.Period == SchedulePeriod.Day
- ? Editable.Disabled
- : Editable.Enabled;
- }
- }
- protected override void DoReconfigureEditors(DynamicEditorGrid grid, ScheduledEventProperties[] items)
- {
- base.DoReconfigureEditors(grid, items);
- if(grid.Form.TryFindEditor<ListEmbeddedListEditorControl>(DayOfWeekSettingsColumn.Property, out var editor))
- {
- editor.CustomiseGrid = g =>
- {
- if (g is ScheduledEventDayOfWeekGrid dowGrid)
- {
- dowGrid.Period = items[0].Period;
- }
- };
- }
- }
- protected override void OnAfterEditorValueChanged(DynamicEditorGrid? grid, ScheduledEventProperties[] items, AfterEditorValueChangedArgs args, Dictionary<string, object?> changes)
- {
- base.OnAfterEditorValueChanged(grid, items, args, changes);
- if(grid is null)
- {
- return;
- }
- if(args.ChangedValues.TryGetValue(PeriodColumn.Property, out var value) && value is SchedulePeriod period)
- {
- var daysOfWeekEditor = grid.Form.FindEditor<ListEmbeddedListEditorControl>(DayOfWeekSettingsColumn.Property);
- var nextScheduleEditor = grid.Form.FindEditor<DateTimeEditorControl>(NextScheduleColumn.Property);
- if(daysOfWeekEditor is not null && nextScheduleEditor is not null)
- {
- switch (period)
- {
- case SchedulePeriod.Minute:
- case SchedulePeriod.Hour:
- case SchedulePeriod.Day:
- daysOfWeekEditor.IsEnabled = true;
- nextScheduleEditor.IsEnabled = false;
- break;
- case SchedulePeriod.Week:
- case SchedulePeriod.Month:
- case SchedulePeriod.Year:
- daysOfWeekEditor.IsEnabled = false;
- nextScheduleEditor.IsEnabled = true;
- break;
- }
- }
- }
- }
- }
|