DynamicGridDurationColumn.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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
  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 GridSummaryColumn? Summary()
  57. {
  58. if (Definition == null || Definition.Editor.Summary == Core.Summary.None)
  59. return null;
  60. var result = new GridSummaryColumn
  61. {
  62. Name = MappingName,
  63. Format = "{" + (Definition.Editor.Summary == Core.Summary.Sum
  64. ? "Sum" + (string.IsNullOrWhiteSpace(Definition.Format)
  65. ? ""
  66. : ":" + Definition.Format.Replace(":", "':'"))
  67. : Definition.Editor.Summary == Core.Summary.Count
  68. ? "Count"
  69. : "") + "}",
  70. MappingName = MappingName,
  71. SummaryType = Definition.Editor.Summary == Core.Summary.Sum
  72. ? SummaryType.Custom
  73. : SummaryType.CountAggregate,
  74. CustomAggregate = new DynamicGridDurationAggregate()
  75. };
  76. return result;
  77. }
  78. public DynamicGridDurationColumn(DynamicGridColumn definition) : base(definition)
  79. {
  80. }
  81. }