265 lines
6.7 KiB
C#
265 lines
6.7 KiB
C#
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
|
|
}
|
|
}
|
|
}
|