using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Data; using Tango.BL.Enumerations; using Tango.PPC.Common.Build; namespace Tango.PPC.UI.Converters { public class ProgressLengthSpoolConverter : IMultiValueConverter { private static IBuildProvider _buildProvider; public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { try { if (_buildProvider == null) { _buildProvider = Core.DI.TangoIOC.Default.GetInstance(); } if (values.Count() == 3) { double length = System.Convert.ToDouble(values[0]); bool forOneSpool = System.Convert.ToBoolean(values[1]); int number_of_spools = System.Convert.ToInt16(values[2]); var totalBy4Spools = _buildProvider.MachineType == MachineTypes.Eureka ? (double)length * number_of_spools : length; if (forOneSpool) { return (double)totalBy4Spools / number_of_spools; } return totalBy4Spools; } if (values.Count() == 4) { double length = System.Convert.ToDouble(values[0]); bool forOneSpool = System.Convert.ToBoolean(values[1]); double currentProgresslength = System.Convert.ToDouble(values[2]); int number_of_spools = System.Convert.ToInt16(values[3]); var totalBy4Spools = _buildProvider.MachineType == MachineTypes.Eureka ? (double)length * number_of_spools : (double)length; var currentProgressBy4Spools = _buildProvider.MachineType == MachineTypes.Eureka ? (double)currentProgresslength * number_of_spools : currentProgresslength; int coeff = (int)currentProgressBy4Spools / (int)totalBy4Spools; var progressCurrent = (coeff == 0 || coeff == 1) ? currentProgressBy4Spools : currentProgressBy4Spools % (coeff * totalBy4Spools);//show for progress if (forOneSpool) { if (_buildProvider.MachineType == MachineTypes.Eureka) { return (double)progressCurrent / number_of_spools; } else { double lengthPerSpool = length / number_of_spools; // Get the current spool int currentSpool = (int)(Math.Floor(progressCurrent / lengthPerSpool)) + 1; // Calculate progress on the current spool double spoolProgress = progressCurrent % lengthPerSpool; if (currentSpool > number_of_spools) { currentSpool = number_of_spools; spoolProgress = lengthPerSpool; } return spoolProgress; } } return progressCurrent; } return "-"; } catch { return "-"; } } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } }