using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Globalization; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Data; using Tango.BL.Entities; using Tango.PPC.Jobs.Models; namespace Tango.PPC.Jobs.Converters { /// /// For "intersegment" return length this segment and next segment, for segment return 0d /// /// public class InterSegmentLengthToWidthConverter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { try { if (values.Length == 4) { if (values[0] is double) { double jobLength = System.Convert.ToDouble(values[0]); double elementWidth = System.Convert.ToDouble(values[1]); Segment segment = values[2] as Segment; ObservableCollection collection = values[3] as ObservableCollection; if(collection != null && segment != null ) { //var item = collection.First(f => f.Guid == segment.Guid); //grab its index var itemIndex = collection.IndexOf(segment); double segmentLength = segment.LengthWithFactor; if(itemIndex == 0) { double result = (( segmentLength) / jobLength) * elementWidth; return double.IsInfinity(result) ? 0d : result; } if( segment.IsInterSegment) { Segment nextsegment = null; double nextLength = 0; if (itemIndex + 1 < collection.Count) { nextsegment = collection[itemIndex + 1]; nextLength = nextsegment.LengthWithFactor; } double result = ((nextLength + segmentLength) / jobLength) * elementWidth; return double.IsInfinity(result) ? 0d : result; } } return 0d; } else { return 0d; } } else { return 0d; } } catch { return 0d; } } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } }