/// /// Copyright (c) 2013-2015 Sensus Metering Systems /// namespace TBF.Boxes { public class DoubleBox { /// Box value private double val; public double Val { get { return (valid ? val : 0); } set { val = value; valid = true; } } /// Box name string name; public string Name { get { return name; } set { name = value; } } /// Validity flag: true = the box value is valid private bool valid = false; public bool Valid { get { return valid; } } /// Parameterless constructor public DoubleBox() { } /// Constructor that initializes the value public DoubleBox(double val) { this.Val = val; } /// /// Clear the box value and the valid flag /// public void Clear() { val = 0; valid = false; } /// /// Specifies a conversion to a string. /// In the most complex case the conversion is: /// string.Format(FormatEx, val.ToString(Format)) /// If the value is invalid, the conversion result is 'FormatInvalid'. /// public string Format = null; public string FormatEx = "{0}"; public string FormatInvalid = "---"; public double Factor = 1.0; public double LimitLo = double.MinValue; public double LimitHi = double.MaxValue; /// /// Converts the box value to a string representation /// public override string ToString() { if (!valid) { return FormatInvalid; } else if (Format == null) { return string.Format(FormatEx, Val * Factor); } else { return string.Format(FormatEx, (Val * Factor).ToString(Format)); } } /// /// Validate the string representation of the box value /// /// String representation of the parameter /// true = string is OK, false = string is wrong (see 'message') public bool ValidateParam(string strVal) { float dummy; return Utils.TryParseSFloat(strVal, out dummy) && ((dummy / Factor) >= LimitLo) && ((dummy / Factor) <= LimitHi); } /// /// Update the parameter from a string /// /// String representation of the box value public void UpdateParam(string strVal) { try { Val = (double)Utils.ParseSFloat(strVal) / Factor; } catch { }; } public DoubleBox Clone() { DoubleBox newDoubleBox = new DoubleBox(); newDoubleBox.name = name; newDoubleBox.val = val; newDoubleBox.valid = valid; newDoubleBox.Format = Format; newDoubleBox.FormatInvalid = FormatInvalid; newDoubleBox.FormatEx = FormatEx; newDoubleBox.Factor = Factor; return newDoubleBox; } } }