New test.
[mono.git] / mcs / class / System / System.ComponentModel / DefaultValueAttribute.cs
old mode 100755 (executable)
new mode 100644 (file)
index 2b15ae9..135c984
 //
-// System.ComponentModel.DefaultValueAttribute
+// System.ComponentModel.DefaultValueAttribute.cs
 //
 // Authors:
-//  Andreas Nahr (ClassDevelopment@A-SoftTech.com)
+//   Andreas Nahr (ClassDevelopment@A-SoftTech.com)
 //
 // (C) 2003 Andreas Nahr
 //
 
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System.Globalization;
 namespace System.ComponentModel
 {
-    [AttributeUsage(AttributeTargets.All)]
-    public sealed class DefaultValueAttribute : Attribute
-    {
-
-        private object DefaultValue;
-
-        public DefaultValueAttribute (bool value)
-        {
-            DefaultValue = value;
-        }
-
-        public DefaultValueAttribute (byte value)
-        {
-            DefaultValue = value;
-        }
-
-        public DefaultValueAttribute (char value)
-        {
-            DefaultValue = value;
-        }
-
-        public DefaultValueAttribute (double value)
-        {
-            DefaultValue = value;
-        }
-
-        public DefaultValueAttribute (short value)
-        {
-            DefaultValue = value;
-        }
-
-        public DefaultValueAttribute (int value)
-        {
-            DefaultValue = value;
-        }
-
-        public DefaultValueAttribute (long value)
-        {
-            DefaultValue = value;
-        }
-
-        public DefaultValueAttribute (object value)
-        {
-            DefaultValue = value;
-        }
-
-        public DefaultValueAttribute (float value)
-        {
-            DefaultValue = value;
-        }
-
-        public DefaultValueAttribute (string value)
-        {
-            DefaultValue = value;
-        }
-
-        public DefaultValueAttribute (Type type, string value)
-        {
-            // TODO check if this implementation is correct
-            try
-            {
-                DefaultValue = Convert.ChangeType (value, type);
-            }
-            catch
-            {
-                DefaultValue = null;
-            }
-        }
-
-        public object Value 
-        {
-            get { return DefaultValue; }
-        }
-
-        public override bool Equals (object obj)
-        {
-            if (!(obj is DefaultValueAttribute))
-                return false;
-            if (obj == this)
-                return true;
-            return ((DefaultValueAttribute) obj).Value == DefaultValue;
-        }
-
-        public override int GetHashCode()
-        {
-            return DefaultValue.GetHashCode();
-        }
-    }
+       [AttributeUsage(AttributeTargets.All)]
+       public sealed class DefaultValueAttribute : Attribute
+       {
+
+               private object DefaultValue;
+
+               public DefaultValueAttribute (bool value)
+               {
+                       DefaultValue = value;
+               }
+
+               public DefaultValueAttribute (byte value)
+               {
+                       DefaultValue = value;
+               }
+
+               public DefaultValueAttribute (char value)
+               {
+                       DefaultValue = value;
+               }
+
+               public DefaultValueAttribute (double value)
+               {
+                       DefaultValue = value;
+               }
+
+               public DefaultValueAttribute (short value)
+               {
+                       DefaultValue = value;
+               }
+
+               public DefaultValueAttribute (int value)
+               {
+                       DefaultValue = value;
+               }
+
+               public DefaultValueAttribute (long value)
+               {
+                       DefaultValue = value;
+               }
+
+               public DefaultValueAttribute (object value)
+               {
+                       DefaultValue = value;
+               }
+
+               public DefaultValueAttribute (float value)
+               {
+                       DefaultValue = value;
+               }
+
+               public DefaultValueAttribute (string value)
+               {
+                       DefaultValue = value;
+               }
+
+               public DefaultValueAttribute (Type type, string value)
+               {
+                       try {
+                               TypeConverter converter = TypeDescriptor.GetConverter (type);
+                               DefaultValue = converter.ConvertFromString (null, CultureInfo.InvariantCulture, value);
+                       } catch { }
+               }
+
+               public object Value {
+                       get { return DefaultValue; }
+               }
+
+               public override bool Equals (object obj)
+               {
+                       if (!(obj is DefaultValueAttribute))
+                               return false;
+                       if (obj == this)
+                               return true;
+                       return ((DefaultValueAttribute) obj).Value == DefaultValue;
+               }
+
+               public override int GetHashCode()
+               {
+                       return DefaultValue.GetHashCode();
+               }
+       }
 }
-
-
-// OLD IMPLEMENTATION
-//using System;
-//
-//
-//
-//namespace System.ComponentModel
-//
-//{
-//
-//     /// <summary>
-//
-//     /// Specifies the default value for a property.
-//
-//     /// </summary>
-//
-//
-//
-//     [MonoTODO("Needs testing. DefaultValueAttribute(System.Type type, string value) is not implemented. Value has no description.")]
-//
-//     [AttributeUsage(AttributeTargets.All)]
-//
-//     public sealed class DefaultValueAttribute : Attribute
-//
-//     {
-//
-//
-//
-//             private object defaultValue;
-//
-//
-//
-//             /// <summary>
-//
-//             /// FIXME: Summary description for Value.
-//
-//             /// </summary>
-//
-//             public object Value
-//
-//             {
-//
-//                     get 
-//
-//                     {
-//
-//                             return defaultValue;
-//
-//                     }
-//
-//             }
-//
-//
-//
-//             /// <summary>
-//
-//             /// Initializes a new instance of the System.ComponentModel.DefaultValueAttribute class.
-//
-//             /// </summary>
-//
-//             /// <param name="value">An System.Object that represents the default value.</param>
-//
-//             public DefaultValueAttribute(object value)
-//
-//             {
-//
-//                     defaultValue = value;
-//
-//             }
-//
-//
-//
-//             /// <summary>
-//
-//             /// Initializes a new instance of the System.ComponentModel.DefaultValueAttribute class using a System.Boolean value.
-//
-//             /// </summary>
-//
-//             /// <param name="value">An System.Boolean that represents the default value.</param>
-//
-//             public DefaultValueAttribute(bool value)
-//
-//             {
-//
-//                     defaultValue = value;
-//
-//             }
-//
-//
-//
-//
-//
-//             /// <summary>
-//
-//             /// Initializes a new instance of the System.ComponentModel.DefaultValueAttribute class using an 8-bit unsigned integer.
-//
-//             /// </summary>
-//
-//             /// <param name="value">An 8-bit unsigned integer that is the default value.</param>
-//
-//             public DefaultValueAttribute(byte value)
-//
-//             {
-//
-//                     defaultValue = value;
-//
-//             }
-//
-//
-//
-//             /// <summary>
-//
-//             /// Initializes a new instance of the System.ComponentModel.DefaultValueAttribute class using a Unicode character.
-//
-//             /// </summary>
-//
-//             /// <param name="value">A Unicode character that is the default value.</param>
-//
-//             public DefaultValueAttribute(char value)
-//
-//             {
-//
-//                     defaultValue = value;
-//
-//             }
-//
-//
-//
-//             /// <summary>
-//
-//             /// Initializes a new instance of the System.ComponentModel.DefaultValueAttribute class using a double-precision floating point number.
-//
-//             /// </summary>
-//
-//             /// <param name="value">A double-precision floating point number that is the default value.</param>
-//
-//             public DefaultValueAttribute(double value)
-//
-//             {
-//
-//                     defaultValue = value;
-//
-//             }
-//
-//
-//
-//             /// <summary>
-//
-//             /// Initializes a new instance of the System.ComponentModel.DefaultValueAttribute class using a 32-bit signed integer.
-//
-//             /// </summary>
-//
-//             /// <param name="value">A 32-bit signed integer that is the default value.</param>
-//
-//             public DefaultValueAttribute(int value)
-//
-//             {
-//
-//                     defaultValue = value;
-//
-//             }
-//
-//
-//
-//             /// <summary>
-//
-//             /// Initializes a new instance of the System.ComponentModel.DefaultValueAttribute class using a 64-bit signed integer.
-//
-//             /// </summary>
-//
-//             /// <param name="value">A 64-bit signed integer that is the default value.</param>
-//
-//             public DefaultValueAttribute(long value)
-//
-//             {
-//
-//                     defaultValue = value;
-//
-//             }
-//
-//
-//
-//             /// <summary>
-//
-//             /// Initializes a new instance of the System.ComponentModel.DefaultValueAttribute class using a 16-bit signed integer.
-//
-//             /// </summary>
-//
-//             /// <param name="value">A 16-bit signed integer that is the default value.</param>
-//
-//             public DefaultValueAttribute(short value)
-//
-//             {
-//
-//                     defaultValue = value;
-//
-//             }
-//
-//
-//
-//             /// <summary>
-//
-//             /// Initializes a new instance of the System.ComponentModel.DefaultValueAttribute class using a single-precision floating point number.
-//
-//             /// </summary>
-//
-//             /// <param name="value">A single-precision floating point number that is the default value.</param>
-//
-//             public DefaultValueAttribute(System.Single value)
-//
-//             {
-//
-//                     defaultValue = value;
-//
-//             }
-//
-//
-//
-//             /// <summary>   
-//
-//             /// Initializes a new instance of the System.ComponentModel.DefaultValueAttribute class using a System.String.
-//
-//             /// </summary>
-//
-//             /// <param name="value">A System.String that is the default value.</param>
-//
-//             public DefaultValueAttribute(string value)
-//
-//             {
-//
-//                     defaultValue = value;
-//
-//             }
-//
-//
-//
-//             /*
-//
-//             /// <summary>   
-//
-//             /// Initializes a new instance of the System.ComponentModel.DefaultValueAttribute class, converting the specified value to the specified type, and using an invariant culture as the translation context.
-//
-//             /// </summary>
-//
-//             /// <param name="type">A System.Type that represents the type to convert the value to.</param>
-//
-//             /// <param name="value">A System.String that can be converted to the type using the System.ComponentModel.TypeConverter for the type and the U.S. English culture.</param>
-//
-//             public DefaultValueAttribute(System.Type type, string value)
-//
-//             {
-//
-//                     //FIXME
-//
-//                     throw new NotImplementedException(); 
-//
-//             }
-//
-//             */
-//
-//     }
-//
-//
-//
-//}
-
-
-