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
- EntityDataSourceWizardForm.cs
- CorrelationHandle.cs
- PermissionListSet.cs
- DesignTimeXamlWriter.cs
- X509CertificateCollection.cs
- SrgsGrammarCompiler.cs
- TextInfo.cs
- TiffBitmapEncoder.cs
- MultiPropertyDescriptorGridEntry.cs
- QilInvokeLateBound.cs
- DesignerTransaction.cs
- AutomationEventArgs.cs
- EntityViewGenerator.cs
- SelectionListDesigner.cs
- IntSecurity.cs
- PackagePartCollection.cs
- XmlSerializableReader.cs
- ErrorHandler.cs
- Attributes.cs
- FormDocumentDesigner.cs
- GenericUI.cs
- Paragraph.cs
- ECDiffieHellman.cs
- RefType.cs
- DispatcherEventArgs.cs
- Helper.cs
- InputScope.cs
- HwndSource.cs
- DataGridViewAccessibleObject.cs
- DurableInstancingOptions.cs
- DelegateArgumentReference.cs
- SelectorAutomationPeer.cs
- XamlBuildTaskServices.cs
- ScrollEvent.cs
- DataObjectFieldAttribute.cs
- HtmlInputButton.cs
- PolyLineSegment.cs
- FormatException.cs
- LassoHelper.cs
- LayoutEditorPart.cs
- WebBaseEventKeyComparer.cs
- RangeValueProviderWrapper.cs
- PrefixQName.cs
- BackEase.cs
- LabelInfo.cs
- DateTimeOffsetStorage.cs
- HandleRef.cs
- WorkflowApplicationEventArgs.cs
- COAUTHINFO.cs
- OleDbError.cs
- Attributes.cs
- ExternalFile.cs
- WindowsToolbar.cs
- LoginCancelEventArgs.cs
- DataGridViewDataErrorEventArgs.cs
- TranslateTransform3D.cs
- ToolStripDropTargetManager.cs
- Subtree.cs
- AppLevelCompilationSectionCache.cs
- RegexParser.cs
- ExtenderControl.cs
- TableRowsCollectionEditor.cs
- CallbackWrapper.cs
- NativeObjectSecurity.cs
- input.cs
- DBConcurrencyException.cs
- FreezableDefaultValueFactory.cs
- XmlDataProvider.cs
- FakeModelItemImpl.cs
- TextTabProperties.cs
- RectAnimationClockResource.cs
- AspNetHostingPermission.cs
- ZipIOBlockManager.cs
- PermissionSet.cs
- RuleDefinitions.cs
- ErrorProvider.cs
- MenuAutoFormat.cs
- ScaleTransform3D.cs
- BaseValidator.cs
- Expander.cs
- ApplicationSettingsBase.cs
- DbConnectionOptions.cs
- EntitySqlQueryCacheKey.cs
- DataObjectAttribute.cs
- QueryContinueDragEventArgs.cs
- FieldToken.cs
- HandlerFactoryCache.cs
- TailPinnedEventArgs.cs
- SessionEndingCancelEventArgs.cs
- NumericPagerField.cs
- MessageFilter.cs
- WindowsClaimSet.cs
- EdmError.cs
- ThreadStateException.cs
- BatchWriter.cs
- DbProviderFactoriesConfigurationHandler.cs
- OleDbErrorCollection.cs
- Baml2006Reader.cs
- Message.cs
- TextSelectionHighlightLayer.cs