using System; using CPF.Drawing; using CPF.ReoGrid.Core; namespace CPF.ReoGrid.DataFormat { [DataFormat(CellDataFormatFlag.Number)] public class NumberDataFormatter : IDataFormatter { public string FormatCell(Cell cell) { object innerData = cell.InnerData; bool flag = false; double num = 0.0; bool flag2 = innerData is double; if (flag2) { num = (double)innerData; flag = true; } else { bool flag3 = innerData is int; if (flag3) { num = (double)((int)innerData); flag = true; } else { bool flag4 = innerData is long; if (flag4) { num = (double)((long)innerData); } else { bool flag5 = innerData is float; if (flag5) { num = (double)((float)innerData); flag = true; } else { bool flag6 = innerData is decimal; if (flag6) { num = (double)((decimal)innerData); flag = true; } else { bool flag7 = innerData is string; if (flag7) { string text = (innerData as string).Trim(); flag = double.TryParse(text, out num); bool flag8 = !flag; if (flag8) { flag = double.TryParse(text.Replace(",", ""), out num); } bool flag9 = flag; if (flag9) { cell.InnerData = num; } } else { bool flag10 = innerData is DateTime; if (flag10) { num = ((DateTime)innerData - new DateTime(1900, 1, 1)).TotalDays; flag = true; } } } } } } } bool flag11 = flag; string result; if (flag11) { string str = null; string str2 = null; NumberDataFormatter.INumberFormatArgs numberFormatArgs = cell.DataFormatArgs as NumberDataFormatter.INumberFormatArgs; string text2 = NumberDataFormatter.FormatNumberCellAndGetPattern(cell, ref num, numberFormatArgs); bool flag12 = numberFormatArgs is NumberDataFormatter.NumberFormatArgs; if (flag12) { NumberDataFormatter.NumberFormatArgs numberFormatArgs2 = (NumberDataFormatter.NumberFormatArgs)cell.DataFormatArgs; str = numberFormatArgs2.CustomNegativePrefix; str2 = numberFormatArgs2.CustomNegativePostfix; } bool flag13 = numberFormatArgs != null && (numberFormatArgs.NegativeStyle & NumberDataFormatter.NumberNegativeStyle.CustomSymbol) == NumberDataFormatter.NumberNegativeStyle.CustomSymbol; if (flag13) { text2 = ((num < 0.0) ? (str + text2 + str2) : text2); } result = num.ToString(text2); } else { result = null; } return result; } internal static string FormatNumberCellAndGetPattern(Cell cell, ref double value, NumberDataFormatter.INumberFormatArgs arg) { bool flag = cell.InnerStyle.HAlign == ReoGridHorAlign.General; if (flag) { cell.RenderHorAlign = ReoGridRenderHorAlign.Right; } short count = 2; bool flag2 = true; NumberDataFormatter.NumberNegativeStyle numberNegativeStyle = NumberDataFormatter.NumberNegativeStyle.Default; bool flag3 = arg != null; if (flag3) { count = arg.DecimalPlaces; flag2 = arg.UseSeparator; numberNegativeStyle = arg.NegativeStyle; } bool flag4 = value < 0.0; if (flag4) { bool flag5 = (numberNegativeStyle & NumberDataFormatter.NumberNegativeStyle.Red) == NumberDataFormatter.NumberNegativeStyle.Red; if (flag5) { cell.RenderColor = Color.Red; } else { cell.RenderColor = Color.Transparent; } } string str = new string('0', (int)count); string text = (flag2 ? "#,##0." : "0.") + str; bool flag6 = (numberNegativeStyle & NumberDataFormatter.NumberNegativeStyle.Brackets) == NumberDataFormatter.NumberNegativeStyle.Brackets; if (flag6) { text = ((value < 0.0) ? ("(" + text + ")") : text); } else { bool flag7 = (numberNegativeStyle & NumberDataFormatter.NumberNegativeStyle.Prefix_Sankaku) == NumberDataFormatter.NumberNegativeStyle.Prefix_Sankaku; if (flag7) { text = ((value < 0.0) ? ("▲ " + text) : text); } } bool flag8 = (numberNegativeStyle & NumberDataFormatter.NumberNegativeStyle.Default) == ~(NumberDataFormatter.NumberNegativeStyle.Default | NumberDataFormatter.NumberNegativeStyle.Red | NumberDataFormatter.NumberNegativeStyle.Brackets | NumberDataFormatter.NumberNegativeStyle.Prefix_Sankaku | NumberDataFormatter.NumberNegativeStyle.CustomSymbol); if (flag8) { value = Math.Abs(value); } return text; } public static NumberDataFormatter.NumberFormatArgs TwoDecimalDigitsArgument { get { return new NumberDataFormatter.NumberFormatArgs { DecimalPlaces = 2, UseSeparator = true }; } } public static NumberDataFormatter.NumberFormatArgs NoDecimalDigitsArgument { get { return new NumberDataFormatter.NumberFormatArgs { DecimalPlaces = 0, UseSeparator = true }; } } public bool PerformTestFormat() { return true; } public interface INumberFormatArgs { short DecimalPlaces { get; set; } NumberDataFormatter.NumberNegativeStyle NegativeStyle { get; set; } bool UseSeparator { get; set; } string CustomNegativePrefix { get; set; } string CustomNegativePostfix { get; set; } } [Serializable] public class NumberFormatArgs : NumberDataFormatter.INumberFormatArgs { public NumberFormatArgs() { this.DecimalPlaces = 2; this.NegativeStyle = NumberDataFormatter.NumberNegativeStyle.Default; } public short DecimalPlaces { get; set; } public NumberDataFormatter.NumberNegativeStyle NegativeStyle { get; set; } public bool UseSeparator { get; set; } public string CustomNegativePrefix { get; set; } public string CustomNegativePostfix { get; set; } public override bool Equals(object obj) { bool flag = !(obj is NumberDataFormatter.NumberFormatArgs); bool result; if (flag) { result = false; } else { NumberDataFormatter.NumberFormatArgs numberFormatArgs = (NumberDataFormatter.NumberFormatArgs)obj; result = (this.DecimalPlaces == numberFormatArgs.DecimalPlaces && this.NegativeStyle == numberFormatArgs.NegativeStyle && this.UseSeparator == numberFormatArgs.UseSeparator && this.CustomNegativePrefix == numberFormatArgs.CustomNegativePrefix && this.CustomNegativePostfix == numberFormatArgs.CustomNegativePostfix); } return result; } public override int GetHashCode() { return base.GetHashCode(); } } [Flags] public enum NumberNegativeStyle : byte { Default = 1, Minus = 1, Red = 2, Brackets = 4, RedMinus = 3, BracketsMinus = 5, RedBrackets = 6, RedBracketsMinus = 7, Prefix_Sankaku = 8, CustomSymbol = 240 } } }