DynamicGridDurationColumn.cs 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. using System;
  2. using System.Windows;
  3. using System.Windows.Controls;
  4. using System.Windows.Data;
  5. using InABox.Core;
  6. using InABox.WPF;
  7. using Microsoft.Xaml.Behaviors;
  8. using Syncfusion.Data;
  9. using Syncfusion.UI.Xaml.Grid;
  10. using Syncfusion.UI.Xaml.Grid.Cells;
  11. namespace InABox.DynamicGrid;
  12. public class DynamicGridDurationColumn<TEntity> : DynamicGridMaskColumn<TEntity,DurationEditor>
  13. where TEntity : BaseObject
  14. {
  15. protected override Behavior CreateBehaviour() =>
  16. new TextBoxTimeSpanMaskBehavior(Definition?.Format);
  17. protected override IValueConverter CreateConverter() =>
  18. new TimeSpanToStringConverter(Definition?.Format);
  19. protected override Button[] CreateButtons(TextBox textbox)
  20. {
  21. var less = new Button();
  22. less.Content = "-";
  23. less.Width = 25;
  24. less.Click += (sender, args) =>
  25. {
  26. var converter = new TimeSpanToStringConverter(Definition?.Format);
  27. var time = converter.Deconvert(textbox.Text)
  28. .Subtract(TimeSpan.FromMinutes(15));
  29. if (time.Ticks < 0)
  30. time = TimeSpan.Zero;
  31. textbox.Text = converter.Convert(time);
  32. };
  33. var more = new Button();
  34. more.Content = "+";
  35. more.Width = 25;
  36. more.Click += (sender, args) =>
  37. {
  38. var converter = new TimeSpanToStringConverter(Definition?.Format);
  39. var time = converter.Deconvert(textbox.Text)
  40. .Subtract(TimeSpan.FromMinutes(15));
  41. if (time.Ticks < 0)
  42. time = TimeSpan.Zero;
  43. textbox.Text = converter.Convert(time);
  44. };
  45. return new Button[] { less, more };
  46. }
  47. public override GridSummaryColumn? Summary()
  48. {
  49. if (Definition == null || Definition.Editor.Summary == Core.Summary.None)
  50. return null;
  51. var result = new GridSummaryColumn
  52. {
  53. Name = MappingName,
  54. Format = "{" + (Definition.Editor.Summary == Core.Summary.Sum
  55. ? "Sum" + (string.IsNullOrWhiteSpace(Definition.Format)
  56. ? ""
  57. : ":" + Definition.Format.Replace(":", "':'"))
  58. : Definition.Editor.Summary == Core.Summary.Count
  59. ? "Count"
  60. : "") + "}",
  61. MappingName = MappingName,
  62. SummaryType = Definition.Editor.Summary == Core.Summary.Sum
  63. ? SummaryType.Custom
  64. : SummaryType.CountAggregate,
  65. CustomAggregate = new DynamicGridDurationAggregate()
  66. };
  67. return result;
  68. }
  69. public DynamicGridDurationColumn(DynamicGridColumn definition) : base(definition)
  70. {
  71. }
  72. }