using System; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using InABox.Core; using InABox.WPF; using Microsoft.Xaml.Behaviors; using Syncfusion.Data; using Syncfusion.UI.Xaml.Grid; using Syncfusion.UI.Xaml.Grid.Cells; namespace InABox.DynamicGrid; public class DynamicGridDurationColumn : DynamicGridMaskColumn where TEntity : BaseObject { protected override Behavior CreateBehaviour() => new TextBoxTimeSpanMaskBehavior(Definition?.Format); protected override IValueConverter CreateConverter() => new TimeSpanToStringConverter(Definition?.Format); protected override Button[] CreateButtons(TextBox textbox) { var less = new Button(); less.Content = "-"; less.Width = 25; less.Click += (sender, args) => { var converter = new TimeSpanToStringConverter(Definition?.Format); var time = converter.Deconvert(textbox.Text) .Subtract(TimeSpan.FromMinutes(15)); if (time.Ticks < 0) time = TimeSpan.Zero; textbox.Text = converter.Convert(time); }; var more = new Button(); more.Content = "+"; more.Width = 25; more.Click += (sender, args) => { var converter = new TimeSpanToStringConverter(Definition?.Format); var time = converter.Deconvert(textbox.Text) .Subtract(TimeSpan.FromMinutes(15)); if (time.Ticks < 0) time = TimeSpan.Zero; textbox.Text = converter.Convert(time); }; return new Button[] { less, more }; } public override GridSummaryColumn? Summary() { if (Definition == null || Definition.Editor.Summary == Core.Summary.None) return null; var result = new GridSummaryColumn { Name = MappingName, Format = "{" + (Definition.Editor.Summary == Core.Summary.Sum ? "Sum" + (string.IsNullOrWhiteSpace(Definition.Format) ? "" : ":" + Definition.Format.Replace(":", "':'")) : Definition.Editor.Summary == Core.Summary.Count ? "Count" : "") + "}", MappingName = MappingName, SummaryType = Definition.Editor.Summary == Core.Summary.Sum ? SummaryType.Custom : SummaryType.CountAggregate, CustomAggregate = new DynamicGridDurationAggregate() }; return result; } public DynamicGridDurationColumn(DynamicGridColumn definition) : base(definition) { } }