Xamarin Public Jenkins (auto-signing) 536cd135cc Imported Upstream version 5.4.0.167
Former-commit-id: 5624ac747d633e885131e8349322922b6a59baaa
2017-08-21 15:34:15 +00:00

195 lines
5.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//-------------------------------------------------------------
// <copyright company=Microsoft Corporation>
// Copyright © Microsoft Corporation. All Rights Reserved.
// </copyright>
//-------------------------------------------------------------
// @owner=alexgor, deliant
//=================================================================
// File: ValueConverter.cs
//
// Namespace: System.Web.UI.WebControls[Windows.Forms].Charting.Utilities
//
// Classes: ValueConverter
//
// Purpose: Helper class which converts DateTime or numeric
// values to string. It used to display data point
// values as labels, tooltips and axis labels.
//
// Reviewed: AG - August 7, 2002
// AG - Microsoft 5, 2007
//
//===================================================================
#region Used Namespaces
using System;
using System.Globalization;
#if Microsoft_CONTROL
using System.Windows.Forms.DataVisualization.Charting;
#else
using System.Web.UI.DataVisualization.Charting;
#endif
#endregion
#if Microsoft_CONTROL
namespace System.Windows.Forms.DataVisualization.Charting.Utilities
#else
namespace System.Web.UI.DataVisualization.Charting.Utilities
#endif
{
/// <summary>
/// ValueConverter class is used when numeric or DateTime
/// value needs to be converted to a string using specified format.
/// </summary>
internal static class ValueConverter
{
#region Methods
/// <summary>
/// Converts value to string using specified format.
/// </summary>
/// <param name="chart">Reference to the chart object.</param>
/// <param name="obj">Reference to the object being formatted.</param>
/// <param name="objTag">Additional object tag.</param>
/// <param name="value">Value converted to string.</param>
/// <param name="format">Format string.</param>
/// <param name="valueType">Value type.</param>
/// <param name="elementType">Chart element type being formatted.</param>
public static string FormatValue(
Chart chart,
object obj,
object objTag,
double value,
string format,
ChartValueType valueType,
ChartElementType elementType)
{
format = format ?? String.Empty;
string convertionFormat = format;
string result = "";
// Make sure value index is part of the format
if(convertionFormat != null && convertionFormat.Length > 0)
{
int bracketIndex = convertionFormat.IndexOf('{', 0);
if(bracketIndex >= 0)
{
while(bracketIndex >= 0)
{
// If format is not followed by the value index
if(!convertionFormat.Substring(bracketIndex).StartsWith("{0:", StringComparison.Ordinal))
{
// Check charcter prior to the bracket
if(bracketIndex >= 1 && convertionFormat.Substring(bracketIndex - 1, 1) == "{")
{
continue;
}
else
{
// Insert value index in format
convertionFormat = convertionFormat.Insert(bracketIndex + 1, "0:");
}
}
bracketIndex = convertionFormat.IndexOf('{', bracketIndex + 1);
}
}
else
{
convertionFormat = "{0:" + convertionFormat + "}";
}
}
// Date/time formating
if (valueType == ChartValueType.DateTime ||
valueType == ChartValueType.DateTimeOffset ||
valueType == ChartValueType.Date)
{
// Set default format
if(convertionFormat.Length == 0)
{
convertionFormat = "{0:d}";
if (valueType == ChartValueType.DateTimeOffset)
convertionFormat += " +0";
}
// Convert date to string
result = String.Format(CultureInfo.CurrentCulture, convertionFormat, DateTime.FromOADate(value));
}
else if(valueType == ChartValueType.Time)
{
// Set default format
if(convertionFormat.Length == 0)
{
convertionFormat = "{0:t}";
}
// Convert date to string
result = String.Format(CultureInfo.CurrentCulture, convertionFormat, DateTime.FromOADate(value));
}
else
{
bool failedFlag = false;
// Set default format
if(convertionFormat.Length == 0)
{
convertionFormat = "{0:G}";
}
try
{
// Numeric value formatting
result = String.Format(CultureInfo.CurrentCulture,convertionFormat, value);
}
catch(FormatException)
{
failedFlag = true;
}
// If numeric formatting failed try to format using decimal number
if(failedFlag)
{
failedFlag = false;
try
{
// Decimal value formatting
result = String.Format(CultureInfo.CurrentCulture, convertionFormat, (long)value);
}
catch (ArgumentNullException)
{
failedFlag = true;
}
catch (FormatException)
{
failedFlag = true;
}
}
// Return format string as result (literal) if all formatting methods failed
if(failedFlag)
{
result = format;
}
}
// For the Reporting Services chart a special number formatting
// handler may be set and used for all formatting needs.
if (chart != null)
{
// Call number formatter
FormatNumberEventArgs eventArguments = new FormatNumberEventArgs(value, format, valueType, result, objTag, elementType);
chart.CallOnFormatNumber(obj, eventArguments);
result = eventArguments.LocalizedValue;
}
return result;
}
#endregion
}
}