DynamicGridDurationColumn.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. using System;
  2. using System.Windows;
  3. using System.Windows.Controls;
  4. using System.Windows.Data;
  5. using System.Windows.Media.Imaging;
  6. using InABox.Core;
  7. using InABox.WPF;
  8. using Microsoft.Xaml.Behaviors;
  9. using Syncfusion.Data;
  10. using Syncfusion.UI.Xaml.Grid;
  11. using Syncfusion.UI.Xaml.Grid.Cells;
  12. namespace InABox.DynamicGrid;
  13. public class DynamicGridDurationColumn : DynamicGridMaskColumn<DurationEditor>
  14. {
  15. protected override Behavior CreateBehaviour() =>
  16. new TextBoxTimeSpanMaskBehavior(Definition.Format);
  17. protected override IValueConverter CreateConverter() =>
  18. new TimeSpanToStringConverter(Definition.Format);
  19. private readonly BitmapImage _less = Wpf.Resources.downarrow.AsBitmapImage(20,20);
  20. private readonly BitmapImage _more = Wpf.Resources.uparrow.AsBitmapImage(20,20);
  21. protected override DynamicGridMaskColumnButton[]? CreateButtons()
  22. {
  23. return new DynamicGridMaskColumnButton[]
  24. {
  25. new DynamicGridMaskColumnButton()
  26. {
  27. Image = _less,
  28. Clicked = (sender,args) =>
  29. {
  30. if (args.Value is TimeSpan time)
  31. {
  32. time = time.Subtract(TimeSpan.FromMinutes(15));
  33. if (time.Ticks < 0)
  34. time = TimeSpan.Zero;
  35. args.Value = time;
  36. }
  37. },
  38. Position = DynamicGridMaskColumnButtonPosition.Left
  39. },
  40. new DynamicGridMaskColumnButton()
  41. {
  42. Image = _more,
  43. Clicked = (sender,args) =>
  44. {
  45. if (args.Value is TimeSpan time)
  46. {
  47. time = time.Add(TimeSpan.FromMinutes(15));
  48. args.Value = time;
  49. }
  50. },
  51. Position = DynamicGridMaskColumnButtonPosition.Right
  52. }
  53. };
  54. }
  55. public override IDynamicGridSummary? Summary()
  56. {
  57. if (Definition.Editor.Summary == Core.Summary.None)
  58. return null;
  59. return Definition.Editor.Summary == Core.Summary.Sum
  60. ? new DynamicGridSumSummary<TimeSpan>(Definition.Format.IsNullOrWhiteSpace() ? "" : Definition.Format.Replace(":", "':'"))
  61. : new DynamicGridCountSummary();
  62. }
  63. public DynamicGridDurationColumn(DynamicGridColumn definition) : base(definition)
  64. {
  65. }
  66. }