New test.
[mono.git] / mcs / class / System / System.ComponentModel / DecimalConverter.cs
index e74185cce90c6d07cbb251e127b264052d6953ad..b2bcd81792cfcd3fd88c2647b629fba108cbc36c 100644 (file)
 //
 
 using System.Globalization;
+using System.Reflection;
+using System.ComponentModel.Design.Serialization;
 
 namespace System.ComponentModel
 {
-    public class DecimalConverter : BaseNumberConverter
+       public class DecimalConverter : BaseNumberConverter
        {
                public DecimalConverter()
                {
+                       InnerType = typeof(Decimal);
+               }
+
+               internal override bool SupportHex {
+                       get { return false; }
                }
 
                public override bool CanConvertTo (ITypeDescriptorContext context,
                        Type destinationType)
                {
+                       if (destinationType == typeof (InstanceDescriptor))
+                               return true;
                        return base.CanConvertTo (context, destinationType);
                }
                
                public override object ConvertTo (ITypeDescriptorContext context,
                        CultureInfo culture, object value, Type destinationType)
                {
+                       if (destinationType == typeof (InstanceDescriptor) && value is Decimal) {
+                               Decimal cval = (Decimal) value;
+                               ConstructorInfo ctor = typeof(Decimal).GetConstructor (new Type[] {typeof(int[])});
+                               return new InstanceDescriptor (ctor, new object[] {Decimal.GetBits (cval)});
+                       }
+
                        return base.ConvertTo(context, culture, value, destinationType);
                }
+
+               internal override string ConvertToString (object value, NumberFormatInfo format)
+               {
+                       return ((decimal) value).ToString ("G", format);
+               }
+
+               internal override object ConvertFromString (string value, NumberFormatInfo format)
+               {
+                       return decimal.Parse (value, NumberStyles.Float, format);
+               }
        }
 }