| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- //
- // System.ComponentModel.EnumConverter.cs
- //
- // Authors:
- // Gonzalo Paniagua Javier ([email protected])
- // Andreas Nahr ([email protected])
- //
- // (C) 2002 Ximian, Inc (http://www.ximian.com)
- // (C) 2003 Andreas Nahr
- //
- using System;
- using System.Collections;
- using System.Globalization;
- namespace System.ComponentModel
- {
- public class EnumConverter : TypeConverter
- {
- private Type type;
- private StandardValuesCollection stdValues;
- public EnumConverter (Type type)
- {
- this.type = type;
- }
- [MonoTODO]
- public override bool CanConvertTo (ITypeDescriptorContext context, Type destinationType)
- {
- return base.CanConvertTo (context, destinationType);
- }
- [MonoTODO]
- public override object ConvertTo (ITypeDescriptorContext context,
- CultureInfo culture,
- object value,
- Type destinationType)
- {
- if (destinationType == typeof (string))
- if (value != null)
- return Enum.Format (type, value, "G");
- return base.ConvertTo (context, culture, value, destinationType);
- }
- public override bool CanConvertFrom (ITypeDescriptorContext context, Type sourceType)
- {
- if (sourceType == typeof (string))
- return true;
- return base.CanConvertFrom (context, sourceType);
- }
- public override object ConvertFrom (ITypeDescriptorContext context,
- CultureInfo culture,
- object value)
- {
- string val = value as string;
- if (val == null)
- return base.ConvertFrom(context, culture, value);
- return Enum.Parse (type, val, true);
- }
- public override bool IsValid (ITypeDescriptorContext context, object value)
- {
- return Enum.IsDefined (type, value);
- }
- public override bool GetStandardValuesSupported (ITypeDescriptorContext context)
- {
- return true;
- }
- public override bool GetStandardValuesExclusive (ITypeDescriptorContext context)
- {
- return !(type.IsDefined (typeof (FlagsAttribute), false));
- }
- public override StandardValuesCollection GetStandardValues (ITypeDescriptorContext context)
- {
- if (stdValues == null) {
- Array values = Enum.GetValues (type);
- Array.Sort (values);
- stdValues = new StandardValuesCollection (values);
- }
- return stdValues;
- }
- protected virtual IComparer Comparer {
- get { return new EnumConverter.EnumComparer (); }
- }
- protected Type EnumType {
- get { return type; }
- }
- protected TypeConverter.StandardValuesCollection Values {
- get { return stdValues; }
- set { stdValues = value; }
- }
- private class EnumComparer : IComparer
- {
- int IComparer.Compare (object compareObject1, object compareObject2)
- {
- string CompareString1 = (compareObject1 as string);
- string CompareString2 = (compareObject2 as string);
- if ((CompareString1 == null) || (CompareString2 == null))
- return Collections.Comparer.Default.Compare (compareObject1, compareObject2);
- return CultureInfo.InvariantCulture.CompareInfo.Compare (CompareString1, CompareString2);
- }
- }
- }
- }
|