Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / System / Windows / figurelengthconverter.cs / 1305600 / figurelengthconverter.cs
//----------------------------------------------------------------------------
//
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
//
//
// Description: Figure length converter implementation
//
// History:
// 06/23/2005 : ghermann - Created (Adapted from GridLengthConverter)
//
//---------------------------------------------------------------------------
using MS.Internal;
using MS.Utility;
using System.ComponentModel;
using System.Windows;
using System;
using System.Security;
using System.ComponentModel.Design.Serialization;
using System.Diagnostics;
using System.Globalization;
using System.Reflection;
using System.Windows.Markup;
namespace System.Windows
{
///
/// FigureLengthConverter - Converter class for converting
/// instances of other types to and from FigureLength instances.
///
public class FigureLengthConverter: TypeConverter
{
//-------------------------------------------------------------------
//
// Public Methods
//
//-------------------------------------------------------------------
#region Public Methods
///
/// Checks whether or not this class can convert from a given type.
///
/// The ITypeDescriptorContext
/// for this call.
/// The Type being queried for support.
///
/// true if thie converter can convert from the provided type,
/// false otherwise.
///
public override bool CanConvertFrom(
ITypeDescriptorContext typeDescriptorContext,
Type sourceType)
{
// We can only handle strings, integral and floating types
TypeCode tc = Type.GetTypeCode(sourceType);
switch (tc)
{
case TypeCode.String:
case TypeCode.Decimal:
case TypeCode.Single:
case TypeCode.Double:
case TypeCode.Int16:
case TypeCode.Int32:
case TypeCode.Int64:
case TypeCode.UInt16:
case TypeCode.UInt32:
case TypeCode.UInt64:
return true;
default:
return false;
}
}
///
/// Checks whether or not this class can convert to a given type.
///
/// The ITypeDescriptorContext
/// for this call.
/// The Type being queried for support.
///
/// true if this converter can convert to the provided type,
/// false otherwise.
///
public override bool CanConvertTo(
ITypeDescriptorContext typeDescriptorContext,
Type destinationType)
{
return ( destinationType == typeof(InstanceDescriptor)
|| destinationType == typeof(string) );
}
///
/// Attempts to convert to a FigureLength from the given object.
///
/// The ITypeDescriptorContext for this call.
/// The CultureInfo which is respected when converting.
/// The object to convert to a FigureLength.
///
/// The FigureLength instance which was constructed.
///
///
/// An ArgumentNullException is thrown if the example object is null.
///
///
/// An ArgumentException is thrown if the example object is not null
/// and is not a valid type which can be converted to a FigureLength.
///
public override object ConvertFrom(
ITypeDescriptorContext typeDescriptorContext,
CultureInfo cultureInfo,
object source)
{
if (source != null)
{
if (source is string)
{
return (FromString((string)source, cultureInfo));
}
else
{
return new FigureLength(Convert.ToDouble(source, cultureInfo)); //conversion from numeric type
}
}
throw GetConvertFromException(source);
}
///
/// Attempts to convert a FigureLength instance to the given type.
///
/// The ITypeDescriptorContext for this call.
/// The CultureInfo which is respected when converting.
/// The FigureLength to convert.
/// The type to which to convert the FigureLength instance.
///
/// The object which was constructed.
///
///
/// An ArgumentNullException is thrown if the example object is null.
///
///
/// An ArgumentException is thrown if the object is not null and is not a FigureLength,
/// or if the destinationType isn't one of the valid destination types.
///
///
/// Critical: calls InstanceDescriptor ctor which LinkDemands
/// PublicOK: can only make an InstanceDescriptor for FigureLength, not an arbitrary class
///
[SecurityCritical]
public override object ConvertTo(
ITypeDescriptorContext typeDescriptorContext,
CultureInfo cultureInfo,
object value,
Type destinationType)
{
if (destinationType == null)
{
throw new ArgumentNullException("destinationType");
}
if ( value != null
&& value is FigureLength )
{
FigureLength fl = (FigureLength)value;
if (destinationType == typeof(string))
{
return (ToString(fl, cultureInfo));
}
if (destinationType == typeof(InstanceDescriptor))
{
ConstructorInfo ci = typeof(FigureLength).GetConstructor(new Type[] { typeof(double), typeof(FigureUnitType) });
return (new InstanceDescriptor(ci, new object[] { fl.Value, fl.FigureUnitType }));
}
}
throw GetConvertToException(value, destinationType);
}
#endregion Public Methods
//--------------------------------------------------------------------
//
// Internal Methods
//
//-------------------------------------------------------------------
#region Internal Methods
///
/// Converts a FigureLength instance to a String given the CultureInfo.
///
/// FigureLength instance to convert.
/// Culture Info.
/// String representation of the object.
static internal string ToString(FigureLength fl, CultureInfo cultureInfo)
{
switch (fl.FigureUnitType)
{
// for Auto print out "Auto". value is always "1.0"
case FigureUnitType.Auto:
return ("Auto");
case FigureUnitType.Pixel:
return Convert.ToString(fl.Value, cultureInfo);
default:
return Convert.ToString(fl.Value, cultureInfo) + " " + fl.FigureUnitType.ToString();
}
}
///
/// Parses a FigureLength from a string given the CultureInfo.
///
/// String to parse from.
/// Culture Info.
/// Newly created FigureLength instance.
///
/// Formats:
/// "[value][unit]"
/// [value] is a double
/// [unit] is a string in FigureLength._unitTypes connected to a FigureUnitType
/// "[value]"
/// As above, but the FigureUnitType is assumed to be FigureUnitType.Pixel
/// "[unit]"
/// As above, but the value is assumed to be 1.0
/// This is only acceptable for a subset of FigureUnitType: Auto
///
static internal FigureLength FromString(string s, CultureInfo cultureInfo)
{
double value;
FigureUnitType unit;
XamlFigureLengthSerializer.FromString(s, cultureInfo,
out value, out unit);
return (new FigureLength(value, unit));
}
#endregion Internal Methods
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- QuestionEventArgs.cs
- Utils.cs
- SqlFlattener.cs
- IPEndPointCollection.cs
- TimeoutConverter.cs
- EdgeModeValidation.cs
- PropertyToken.cs
- AnnotationAdorner.cs
- SrgsGrammar.cs
- TransformConverter.cs
- XappLauncher.cs
- RecipientServiceModelSecurityTokenRequirement.cs
- Speller.cs
- MouseCaptureWithinProperty.cs
- ProcessThread.cs
- IndependentAnimationStorage.cs
- GridItem.cs
- PtsPage.cs
- BaseCollection.cs
- RightsManagementEncryptedStream.cs
- DecimalConstantAttribute.cs
- SingleAnimation.cs
- Vector3D.cs
- TileBrush.cs
- TypedDatasetGenerator.cs
- ChildTable.cs
- WebBrowserDocumentCompletedEventHandler.cs
- TrustLevelCollection.cs
- MinimizableAttributeTypeConverter.cs
- DictionaryManager.cs
- HashAlgorithm.cs
- StylusEventArgs.cs
- EngineSiteSapi.cs
- Internal.cs
- BaseDataList.cs
- RoutedUICommand.cs
- NavigationCommands.cs
- ToolboxItemSnapLineBehavior.cs
- AssociationSetMetadata.cs
- RolePrincipal.cs
- MessageSmuggler.cs
- DataFormat.cs
- XamlRtfConverter.cs
- EntityClassGenerator.cs
- PasswordDeriveBytes.cs
- ApplyImportsAction.cs
- FlatButtonAppearance.cs
- CompiledQueryCacheKey.cs
- TextSelectionProcessor.cs
- EdmComplexPropertyAttribute.cs
- ImpersonationContext.cs
- oledbconnectionstring.cs
- OleDbReferenceCollection.cs
- HtmlShim.cs
- AsyncPostBackErrorEventArgs.cs
- Clock.cs
- SystemDiagnosticsSection.cs
- XPathAncestorIterator.cs
- XhtmlBasicLiteralTextAdapter.cs
- RegexCompiler.cs
- DataGridViewCellFormattingEventArgs.cs
- DesignerSerializerAttribute.cs
- ColumnResizeAdorner.cs
- ServicePointManagerElement.cs
- TypedTableHandler.cs
- XmlElementAttribute.cs
- CompilerResults.cs
- ISAPIApplicationHost.cs
- UnsafeNativeMethodsTablet.cs
- OleDbCommandBuilder.cs
- Pair.cs
- DataGridViewHeaderCell.cs
- WindowsClaimSet.cs
- MeasurementDCInfo.cs
- RepeatEnumerable.cs
- PropertyChangingEventArgs.cs
- odbcmetadatacollectionnames.cs
- InputLanguageSource.cs
- SecUtil.cs
- PackageDigitalSignatureManager.cs
- BinaryUtilClasses.cs
- GradientStopCollection.cs
- XamlBrushSerializer.cs
- TemplateContainer.cs
- Timer.cs
- PrintPreviewControl.cs
- ImageInfo.cs
- X509ServiceCertificateAuthentication.cs
- ColumnReorderedEventArgs.cs
- DataGridViewCellStyleContentChangedEventArgs.cs
- WebDescriptionAttribute.cs
- PopupControlService.cs
- XPathNode.cs
- DbParameterCollection.cs
- BookmarkTable.cs
- SiteMapProvider.cs
- ContextMenu.cs
- XmlResolver.cs
- EntityDataSourceConfigureObjectContextPanel.cs
- ThicknessKeyFrameCollection.cs