DynamicGridDurationColumn.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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<TEntity> : DynamicGridMaskColumn<TEntity,DurationEditor>
  14. where TEntity : BaseObject, new()
  15. {
  16. protected override Behavior CreateBehaviour() =>
  17. new TextBoxTimeSpanMaskBehavior(Definition.Format);
  18. protected override IValueConverter CreateConverter() =>
  19. new TimeSpanToStringConverter(Definition.Format);
  20. private readonly BitmapImage _less = Wpf.Resources.downarrow.AsBitmapImage(20,20);
  21. private readonly BitmapImage _more = Wpf.Resources.uparrow.AsBitmapImage(20,20);
  22. protected override DynamicGridMaskColumnButton[]? CreateButtons()
  23. {
  24. return new DynamicGridMaskColumnButton[]
  25. {
  26. new DynamicGridMaskColumnButton()
  27. {
  28. Image = _less,
  29. Clicked = (sender,args) =>
  30. {
  31. if (args.Value is TimeSpan time)
  32. {
  33. time = time.Subtract(TimeSpan.FromMinutes(15));
  34. if (time.Ticks < 0)
  35. time = TimeSpan.Zero;
  36. args.Value = time;
  37. }
  38. },
  39. Position = DynamicGridMaskColumnButtonPosition.Left
  40. },
  41. new DynamicGridMaskColumnButton()
  42. {
  43. Image = _more,
  44. Clicked = (sender,args) =>
  45. {
  46. if (args.Value is TimeSpan time)
  47. {
  48. time = time.Add(TimeSpan.FromMinutes(15));
  49. args.Value = time;
  50. }
  51. },
  52. Position = DynamicGridMaskColumnButtonPosition.Right
  53. }
  54. };
  55. }
  56. public override IDynamicGridSummary? Summary()
  57. {
  58. if (Definition.Editor.Summary == Core.Summary.None)
  59. return null;
  60. return Definition.Editor.Summary == Core.Summary.Sum
  61. ? new DynamicGridSumSummary<TimeSpan>(Definition.Format.IsNullOrWhiteSpace() ? "" : Definition.Format.Replace(":", "':'"))
  62. : new DynamicGridCountSummary();
  63. }
  64. public DynamicGridDurationColumn(DynamicGridColumn definition) : base(definition)
  65. {
  66. }
  67. }