Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / wpf / src / Core / CSharp / MS / Internal / IListConverters.cs / 1 / IListConverters.cs
//---------------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // Description: Converters for IList, IList , IList // IList and IList . // // History: // 7/20/2005 garyyang - created // //--------------------------------------------------------------------------- using System; using System.Collections.Generic; using System.ComponentModel; using System.Globalization; using System.Text; using System.Windows; using MS.Internal; using SR=MS.Internal.PresentationCore.SR; using SRID=MS.Internal.PresentationCore.SRID; using MS.Internal.PresentationCore; namespace System.Windows.Media.Converters { // // The following are IList converters for IList , IList , IList , IList , IList . // More code sharing might be achieved by creating a generic TypeConverter. But XAML parser doesn't // support generic TypeConverter now. // /// /// The base converter for IList of T to string conversion in XAML serialization /// [FriendAccessAllowed] // all implementations are used by Framework at serialization public abstract class BaseIListConverter : TypeConverter { ////// Indicates if a type can be converted from (returns true for string). /// public override bool CanConvertFrom(ITypeDescriptorContext td, Type t) { return t == typeof(string); // can only convert from string } ////// Indicates if a type can be converted to (returns true for string). /// public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) { return destinationType == typeof(string); // can only convert to string } ////// Converts from a string. /// public override object ConvertFrom(ITypeDescriptorContext td, CultureInfo ci, object value) { if (null == value) { throw GetConvertFromException(value); } string s = value as string; if (null == s) { throw new ArgumentException(SR.Get(SRID.General_BadType, "ConvertFrom"), "value"); } return ConvertFromCore(td, ci, s); } ////// Converts to a string /// public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { if (destinationType != null) return ConvertToCore(context, culture, value, destinationType); // Pass unhandled cases to base class (which will throw exceptions for null value or destinationType.) return base.ConvertTo(context, culture, value, destinationType); } ////// To be implemented by subclasses to convert to various types from string. /// internal abstract object ConvertFromCore(ITypeDescriptorContext td, CultureInfo ci, string value); ////// To be implemented by subclasses to convert string to various types. /// internal abstract object ConvertToCore(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType); internal TokenizerHelper _tokenizer; internal const char DelimiterChar = ' '; } ////// TypeConverter to convert IList of double to and from string. /// The converted string is a sequence of delimited double number. /// public sealed class DoubleIListConverter : BaseIListConverter { internal sealed override object ConvertFromCore(ITypeDescriptorContext td, CultureInfo ci, string value) { _tokenizer = new TokenizerHelper(value, '\0' /* quote char */, DelimiterChar); // Estimate the output list's capacity from length of the input string. Listlist = new List (Math.Min(256, value.Length / EstimatedCharCountPerItem + 1)); while (_tokenizer.NextToken()) { list.Add(Convert.ToDouble(_tokenizer.GetCurrentToken(), ci)); } return list; } internal override object ConvertToCore(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { IList list = value as IList ; if (list == null) { throw GetConvertToException(value, destinationType); } // Estimate the output string's length from the element count of the List. StringBuilder builder = new StringBuilder(EstimatedCharCountPerItem * list.Count); for (int i = 0; i < list.Count; i++) { if (i > 0) builder.Append(DelimiterChar); builder.Append(list[i].ToString(culture)); } return builder.ToString(); } // A double is estimated to take 5 characters on average, plus 1 delimiter, e.g. "5.328 ". private const int EstimatedCharCountPerItem = 6; } /// /// TypeConverter to convert IList of ushort to and from string. /// The converted string is a sequence of delimited ushort number. /// public sealed class UShortIListConverter : BaseIListConverter { internal override object ConvertFromCore(ITypeDescriptorContext td, CultureInfo ci, string value) { _tokenizer = new TokenizerHelper(value, '\0' /* quote char */, DelimiterChar); Listlist = new List (Math.Min(256, value.Length / EstimatedCharCountPerItem + 1)); while (_tokenizer.NextToken()) { list.Add(Convert.ToUInt16(_tokenizer.GetCurrentToken(), ci)); } return list; } internal override object ConvertToCore(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { IList list = value as IList ; if (list == null) { throw GetConvertToException(value, destinationType); } StringBuilder builder = new StringBuilder(EstimatedCharCountPerItem * list.Count); for (int i = 0; i < list.Count; i++) { if (i > 0) builder.Append(DelimiterChar); builder.Append(list[i].ToString(culture)); } return builder.ToString(); } // A ushort is estimated to take 2 characters on average, plus 1 delimiter. private const int EstimatedCharCountPerItem = 3; } /// /// TypeConverter to convert IList of bool to and from string. /// The converted string is a sequence of delimited 0s and 1s. "0" for false and "1" for true. /// public sealed class BoolIListConverter : BaseIListConverter { internal override object ConvertFromCore(ITypeDescriptorContext td, CultureInfo ci, string value) { _tokenizer = new TokenizerHelper(value, '\0' /* quote char */, DelimiterChar); Listlist = new List (Math.Min(256, value.Length / EstimatedCharCountPerItem + 1)); while (_tokenizer.NextToken()) { list.Add(Convert.ToInt32(_tokenizer.GetCurrentToken(), ci) != 0); } return list; } internal override object ConvertToCore(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { IList list = value as IList ; if (list == null) { throw GetConvertToException(value, destinationType); } StringBuilder builder = new StringBuilder(EstimatedCharCountPerItem * list.Count); for (int i = 0; i < list.Count; i++) { if (i > 0) builder.Append(DelimiterChar); builder.Append((list[i] ? 1 : 0)); } return builder.ToString(); } // A bool takes 1 character plus 1 delimiter. private const int EstimatedCharCountPerItem = 2; } /// /// TypeConverter to convert IList of Point to and from string. /// The converted string is a sequence of delimited Point values. Point values are converted by PointConverter. /// public sealed class PointIListConverter : BaseIListConverter { internal override object ConvertFromCore(ITypeDescriptorContext td, CultureInfo ci, string value) { _tokenizer = new TokenizerHelper(value, '\0' /* quote char */, DelimiterChar); Listlist = new List (Math.Min(256, value.Length / EstimatedCharCountPerItem + 1)); while (_tokenizer.NextToken()) { list.Add((Point) converter.ConvertFrom(td, ci, _tokenizer.GetCurrentToken())); } return list; } internal override object ConvertToCore(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { IList list = value as IList ; if (list == null) { throw GetConvertToException(value, destinationType); } StringBuilder builder = new StringBuilder(EstimatedCharCountPerItem * list.Count); for (int i = 0; i < list.Count; i++) { if (i > 0) builder.Append(DelimiterChar); builder.Append((string) converter.ConvertTo(context, culture, list[i], typeof(string))); } return builder.ToString(); } private PointConverter converter = new PointConverter(); // A point takes 2 double and 2 delimiters. Estimated to be 12 characters. private const int EstimatedCharCountPerItem = 12; } /// /// TypeConverter to convert IList of Char to and from string. /// The converted string is a concatenation of all the chars in the IList. There is no delimiter. /// public sealed class CharIListConverter : BaseIListConverter { internal override object ConvertFromCore(ITypeDescriptorContext td, CultureInfo ci, string value) { return value.ToCharArray(); } internal override object ConvertToCore(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { IListlist = value as IList ; if (list == null) { throw GetConvertToException(value, destinationType); } // An intermediate allocation is needed to construct the string as string doesn't take IList // in its constructor. char[] chars = new char[list.Count]; list.CopyTo(chars, 0); return new string(chars); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // Description: Converters for IList , IList , IList // IList and IList . // // History: // 7/20/2005 garyyang - created // //--------------------------------------------------------------------------- using System; using System.Collections.Generic; using System.ComponentModel; using System.Globalization; using System.Text; using System.Windows; using MS.Internal; using SR=MS.Internal.PresentationCore.SR; using SRID=MS.Internal.PresentationCore.SRID; using MS.Internal.PresentationCore; namespace System.Windows.Media.Converters { // // The following are IList converters for IList , IList , IList , IList , IList . // More code sharing might be achieved by creating a generic TypeConverter. But XAML parser doesn't // support generic TypeConverter now. // /// /// The base converter for IList of T to string conversion in XAML serialization /// [FriendAccessAllowed] // all implementations are used by Framework at serialization public abstract class BaseIListConverter : TypeConverter { ////// Indicates if a type can be converted from (returns true for string). /// public override bool CanConvertFrom(ITypeDescriptorContext td, Type t) { return t == typeof(string); // can only convert from string } ////// Indicates if a type can be converted to (returns true for string). /// public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) { return destinationType == typeof(string); // can only convert to string } ////// Converts from a string. /// public override object ConvertFrom(ITypeDescriptorContext td, CultureInfo ci, object value) { if (null == value) { throw GetConvertFromException(value); } string s = value as string; if (null == s) { throw new ArgumentException(SR.Get(SRID.General_BadType, "ConvertFrom"), "value"); } return ConvertFromCore(td, ci, s); } ////// Converts to a string /// public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { if (destinationType != null) return ConvertToCore(context, culture, value, destinationType); // Pass unhandled cases to base class (which will throw exceptions for null value or destinationType.) return base.ConvertTo(context, culture, value, destinationType); } ////// To be implemented by subclasses to convert to various types from string. /// internal abstract object ConvertFromCore(ITypeDescriptorContext td, CultureInfo ci, string value); ////// To be implemented by subclasses to convert string to various types. /// internal abstract object ConvertToCore(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType); internal TokenizerHelper _tokenizer; internal const char DelimiterChar = ' '; } ////// TypeConverter to convert IList of double to and from string. /// The converted string is a sequence of delimited double number. /// public sealed class DoubleIListConverter : BaseIListConverter { internal sealed override object ConvertFromCore(ITypeDescriptorContext td, CultureInfo ci, string value) { _tokenizer = new TokenizerHelper(value, '\0' /* quote char */, DelimiterChar); // Estimate the output list's capacity from length of the input string. Listlist = new List (Math.Min(256, value.Length / EstimatedCharCountPerItem + 1)); while (_tokenizer.NextToken()) { list.Add(Convert.ToDouble(_tokenizer.GetCurrentToken(), ci)); } return list; } internal override object ConvertToCore(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { IList list = value as IList ; if (list == null) { throw GetConvertToException(value, destinationType); } // Estimate the output string's length from the element count of the List. StringBuilder builder = new StringBuilder(EstimatedCharCountPerItem * list.Count); for (int i = 0; i < list.Count; i++) { if (i > 0) builder.Append(DelimiterChar); builder.Append(list[i].ToString(culture)); } return builder.ToString(); } // A double is estimated to take 5 characters on average, plus 1 delimiter, e.g. "5.328 ". private const int EstimatedCharCountPerItem = 6; } /// /// TypeConverter to convert IList of ushort to and from string. /// The converted string is a sequence of delimited ushort number. /// public sealed class UShortIListConverter : BaseIListConverter { internal override object ConvertFromCore(ITypeDescriptorContext td, CultureInfo ci, string value) { _tokenizer = new TokenizerHelper(value, '\0' /* quote char */, DelimiterChar); Listlist = new List (Math.Min(256, value.Length / EstimatedCharCountPerItem + 1)); while (_tokenizer.NextToken()) { list.Add(Convert.ToUInt16(_tokenizer.GetCurrentToken(), ci)); } return list; } internal override object ConvertToCore(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { IList list = value as IList ; if (list == null) { throw GetConvertToException(value, destinationType); } StringBuilder builder = new StringBuilder(EstimatedCharCountPerItem * list.Count); for (int i = 0; i < list.Count; i++) { if (i > 0) builder.Append(DelimiterChar); builder.Append(list[i].ToString(culture)); } return builder.ToString(); } // A ushort is estimated to take 2 characters on average, plus 1 delimiter. private const int EstimatedCharCountPerItem = 3; } /// /// TypeConverter to convert IList of bool to and from string. /// The converted string is a sequence of delimited 0s and 1s. "0" for false and "1" for true. /// public sealed class BoolIListConverter : BaseIListConverter { internal override object ConvertFromCore(ITypeDescriptorContext td, CultureInfo ci, string value) { _tokenizer = new TokenizerHelper(value, '\0' /* quote char */, DelimiterChar); Listlist = new List (Math.Min(256, value.Length / EstimatedCharCountPerItem + 1)); while (_tokenizer.NextToken()) { list.Add(Convert.ToInt32(_tokenizer.GetCurrentToken(), ci) != 0); } return list; } internal override object ConvertToCore(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { IList list = value as IList ; if (list == null) { throw GetConvertToException(value, destinationType); } StringBuilder builder = new StringBuilder(EstimatedCharCountPerItem * list.Count); for (int i = 0; i < list.Count; i++) { if (i > 0) builder.Append(DelimiterChar); builder.Append((list[i] ? 1 : 0)); } return builder.ToString(); } // A bool takes 1 character plus 1 delimiter. private const int EstimatedCharCountPerItem = 2; } /// /// TypeConverter to convert IList of Point to and from string. /// The converted string is a sequence of delimited Point values. Point values are converted by PointConverter. /// public sealed class PointIListConverter : BaseIListConverter { internal override object ConvertFromCore(ITypeDescriptorContext td, CultureInfo ci, string value) { _tokenizer = new TokenizerHelper(value, '\0' /* quote char */, DelimiterChar); Listlist = new List (Math.Min(256, value.Length / EstimatedCharCountPerItem + 1)); while (_tokenizer.NextToken()) { list.Add((Point) converter.ConvertFrom(td, ci, _tokenizer.GetCurrentToken())); } return list; } internal override object ConvertToCore(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { IList list = value as IList ; if (list == null) { throw GetConvertToException(value, destinationType); } StringBuilder builder = new StringBuilder(EstimatedCharCountPerItem * list.Count); for (int i = 0; i < list.Count; i++) { if (i > 0) builder.Append(DelimiterChar); builder.Append((string) converter.ConvertTo(context, culture, list[i], typeof(string))); } return builder.ToString(); } private PointConverter converter = new PointConverter(); // A point takes 2 double and 2 delimiters. Estimated to be 12 characters. private const int EstimatedCharCountPerItem = 12; } /// /// TypeConverter to convert IList of Char to and from string. /// The converted string is a concatenation of all the chars in the IList. There is no delimiter. /// public sealed class CharIListConverter : BaseIListConverter { internal override object ConvertFromCore(ITypeDescriptorContext td, CultureInfo ci, string value) { return value.ToCharArray(); } internal override object ConvertToCore(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { IListlist = value as IList ; if (list == null) { throw GetConvertToException(value, destinationType); } // An intermediate allocation is needed to construct the string as string doesn't take IList // in its constructor. char[] chars = new char[list.Count]; list.CopyTo(chars, 0); return new string(chars); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- NavigationHelper.cs
- HttpProfileBase.cs
- CompilerWrapper.cs
- RenderData.cs
- SoapServerMessage.cs
- BamlBinaryReader.cs
- XamlFilter.cs
- AssemblyBuilder.cs
- OperatorExpressions.cs
- ResolvedKeyFrameEntry.cs
- FormatVersion.cs
- ResourceManagerWrapper.cs
- Double.cs
- GenericsInstances.cs
- ProcessInfo.cs
- Bold.cs
- Double.cs
- NetMsmqBindingElement.cs
- VariableBinder.cs
- CollectionChangeEventArgs.cs
- TextCompositionManager.cs
- XmlWellformedWriter.cs
- IssuedSecurityTokenParameters.cs
- UserControlBuildProvider.cs
- GeneralTransformGroup.cs
- QilLoop.cs
- FaultDescriptionCollection.cs
- EnumerableRowCollection.cs
- Button.cs
- WebRequestModuleElementCollection.cs
- Vector3DKeyFrameCollection.cs
- SoapObjectReader.cs
- TcpTransportManager.cs
- ColorDialog.cs
- Variable.cs
- XslCompiledTransform.cs
- GridViewSelectEventArgs.cs
- SimpleRecyclingCache.cs
- InputProcessorProfilesLoader.cs
- PerformanceCounterPermissionEntry.cs
- RNGCryptoServiceProvider.cs
- DefaultTextStoreTextComposition.cs
- ProviderConnectionPointCollection.cs
- HwndSource.cs
- UrlAuthFailureHandler.cs
- WeakReferenceList.cs
- WorkflowTransactionOptions.cs
- ContainerAction.cs
- ReachSerializationUtils.cs
- ActivationService.cs
- OutputCacheProfile.cs
- EntityContainerEmitter.cs
- DoubleKeyFrameCollection.cs
- infer.cs
- ValueHandle.cs
- CmsInterop.cs
- CustomMenuItemCollection.cs
- WebPartConnectionCollection.cs
- SqlConnectionManager.cs
- LayoutEvent.cs
- BlurBitmapEffect.cs
- SiteMapPath.cs
- OrderedDictionary.cs
- SafeBitVector32.cs
- MimeMapping.cs
- _LazyAsyncResult.cs
- OpCopier.cs
- TdsParameterSetter.cs
- MsmqSecureHashAlgorithm.cs
- XmlAutoDetectWriter.cs
- DeflateInput.cs
- RectConverter.cs
- DiscoveryDocumentReference.cs
- _NegoStream.cs
- Ref.cs
- XPathAncestorIterator.cs
- TcpTransportSecurity.cs
- ContextQuery.cs
- UInt16Storage.cs
- XmlSchemaAll.cs
- SqlDataReaderSmi.cs
- CompModSwitches.cs
- PeerFlooder.cs
- UnmanagedMarshal.cs
- ExpressionsCollectionEditor.cs
- WSDualHttpBindingCollectionElement.cs
- ElementsClipboardData.cs
- TypeSystem.cs
- PropertyItem.cs
- Helpers.cs
- WebPermission.cs
- RightNameExpirationInfoPair.cs
- CodeArgumentReferenceExpression.cs
- BindingEntityInfo.cs
- ClientBuildManager.cs
- CompositeControlDesigner.cs
- XmlReaderSettings.cs
- Material.cs
- DrawingGroupDrawingContext.cs
- TraceSection.cs