//------------------------------------------------------------------------------
/// <copyright from='1997' to='2001' company='Microsoft Corporation'>           
///    Copyright (c) Microsoft Corporation. All Rights Reserved.                
///    Information Contained Herein is Proprietary and Confidential.            
/// </copyright>                                                                
//------------------------------------------------------------------------------

/*
 */
namespace Microsoft.VSDesigner.WMI {
    using System.Runtime.Serialization.Formatters;
    using System.Globalization;
    using System.Runtime.Remoting;
    using System.Runtime.InteropServices;
    using System.ComponentModel;
	using System;

    using System.Diagnostics;


    /// <classonly/>
    /// <summary>
    ///    <para>
    ///       Provides a type converter to convert
    ///       byte objects to and from various other representations.
    ///    </para>
    /// </summary>
    [System.Security.SuppressUnmanagedCodeSecurityAttribute()]
    internal class SByteConverter : TypeConverter {

        /// <summary>
        ///      Determines if this converter can convert an object in the given source
        ///      type to the native type of the converter.
        /// </summary>
        /// <param name='context'>
        ///      A formatter context.  This object can be used to extract additional information
        ///      about the environment this converter is being invoked from.  This may be null,
        ///      so you should always check.  Also, properties on the context object may also
        ///      return null.
        /// </param>
        /// <param name='sourceType'>
        ///      The type you wish to convert from.
        /// </param>
        /// <returns>
        ///      True if this object can perform the conversion.
        /// </returns>
        /// <seealso cref='System.ComponentModel.TypeConverter' />
        public override bool CanConvertFrom(ITypeDescriptorContext context, System.Type sourceType) {
            if (sourceType == typeof(string)) {
                return true;
            }
            return base.CanConvertFrom(context, sourceType);
        }

        /// <summary>
        ///      Converts the given object to the converter's native type.
        /// </summary>
        /// <param name='context'>
        ///      A formatter context.  This object can be used to extract additional information
        ///      about the environment this converter is being invoked from.  This may be null,
        ///      so you should always check.  Also, properties on the context object may also
        ///      return null.
        /// </param>
        /// <param name='value'>
        ///      The object to convert.
        /// </param>
        /// <param name='arguments'>
        ///      An optional array of arguments to use when doing the conversion.  The arguments here
        ///      match the type and order of the Parse method on SByte.
        /// </param>
        /// <returns>
        ///      The converted object.  This will throw an excetpion if the converson
        ///      could not be performed.
        /// </returns>
        /// <seealso cref='System.ComponentModel.TypeConverter' />
        public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) {
            if (value is string) {
                string text = ((string)value).Trim();
                
				NumberFormatInfo formatInfo = culture.NumberFormat;
                return SByte.Parse(text, NumberStyles.Any, formatInfo);
                 
            }
            return base.ConvertFrom(context, culture, value);
        }
        
        /// <summary>
        ///      Converts the given object to another type.  The most common types to convert
        ///      are to and from a string object.  The default implementation will make a call
        ///      to ToString on the object if the object is valid and if the destination
        ///      type is string.  If this cannot convert to the desitnation type, this will
        ///      throw a NotSupportedException.
        /// </summary>
        /// <param name='context'>
        ///      A formatter context.  This object can be used to extract additional information
        ///      about the environment this converter is being invoked from.  This may be null,
        ///      so you should always check.  Also, properties on the context object may also
        ///      return null.
        /// </param>
        /// <param name='value'>
        ///      The object to convert.
        /// </param>
        /// <param name='destinationType'>
        ///      The type to convert the object to.
        /// </param>
        /// <param name='arguments'>
        ///      An optional array of arguments to use when doing the conversion.  The arguments here
        ///      match the type and order of the Format method on SByte.
        /// </param>
        /// <returns>
        ///      The converted object.
        /// </returns>
        public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, System.Type destinationType ) {
            if (destinationType == null) {
                throw new ArgumentNullException("destinationType");
            }

            if (destinationType == typeof(string) && value is SByte) {                
                return value.ToString();                
            }
            
            return base.ConvertTo(context, culture, value, destinationType);
        }
    }
}



/*
//------------------------------------------------------------------------------
/// <copyright from='1997' to='2001' company='Microsoft Corporation'>           
///    Copyright (c) Microsoft Corporation. All Rights Reserved.                
///    Information Contained Herein is Proprietary and Confidential.            
/// </copyright>                                                                
//------------------------------------------------------------------------------


namespace Microsoft.VSDesigner.WMI {
    using System.Runtime.Serialization.Formatters;
    using System.Globalization;
    using System.Runtime.Remoting;
    using System.Runtime.InteropServices;
    using System.ComponentModel;
	using System;
	using System.Windows.Forms;

    using System.Diagnostics;

    //using System.Core;

    /// <classonly/>
    /// <summary>
    ///    <para>
    ///       Provides a type converter to convert
    ///       SByte objects to and from various other representations.
    ///    </para>
    /// </summary>
    [System.Security.SuppressUnmanagedCodeSecurityAttribute()]
    internal class SByteConverter : TypeConverter {

        /// <summary>
        ///      Determines if this converter can convert an object in the given source
        ///      type to the native type of the converter.
        /// </summary>
        /// <param name='context'>
        ///      A formatter context.  This object can be used to extract additional information
        ///      about the environment this converter is being invoked from.  This may be null,
        ///      so you should always check.  Also, properties on the context object may also
        ///      return null.
        /// </param>
        /// <param name='sourceType'>
        ///      The type you wish to convert from.
        /// </param>
        /// <returns>
        ///      True if this object can perform the conversion.
        /// </returns>
        /// <seealso cref='System.ComponentModel.TypeConverter' />
        public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) {
            if (sourceType == typeof(string)) {
                return true;
            }
            return base.CanConvertFrom(context, sourceType);
        }

        /// <summary>
        ///      Converts the given object to the converter's native type.
        /// </summary>
        /// <param name='context'>
        ///      A formatter context.  This object can be used to extract additional information
        ///      about the environment this converter is being invoked from.  This may be null,
        ///      so you should always check.  Also, properties on the context object may also
        ///      return null.
        /// </param>
        /// <param name='value'>
        ///      The object to convert.
        /// </param>
        /// <param name='arguments'>
        ///      An optional array of arguments to use when doing the conversion.  The arguments here
        ///      match the type and order of the Parse method on SByte.
        /// </param>
        /// <returns>
        ///      The converted object.  This will throw an excetpion if the converson
        ///      could not be performed.
        /// </returns>
        /// <seealso cref='System.ComponentModel.TypeConverter' />
        public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) {
            if (value is string) {
                string text = ((string)value).Trim();

                try {
                    if (arguments == null || arguments.Length == 0) {
                        return SByte.Parse(text);
                    }
                    else if (arguments.Length == 1) {
                        // This argument can either be the beginning to the parse parameters, or it may
                        // be a CultureInfo.
                        //
                        if (arguments[0] is CultureInfo) {
                            CultureInfo ci = (CultureInfo)arguments[0];
                            NumberFormatInfo formatInfo = (NumberFormatInfo)ci.GetServiceObject(typeof(NumberFormatInfo));
                            return SByte.Parse(text, NumberStyles.Any, formatInfo);
                        }
                        else {
                            return SByte.Parse(text, (NumberStyles)arguments[0]);
                        }
                    }
                    else {
                        return SByte.Parse(text, (NumberStyles)arguments[0], (NumberFormatInfo)arguments[1]);
                    }
                }
                catch (Exception e) {
					throw e;
                }
            }
            return base.ConvertFrom(context, value, arguments);
        }
        
        /// <summary>
        ///      Converts the given object to another type.  The most common types to convert
        ///      are to and from a string object.  The default implementation will make a call
        ///      to ToString on the object if the object is valid and if the destination
        ///      type is string.  If this cannot convert to the desitnation type, this will
        ///      throw a NotSupportedException.
        /// </summary>
        /// <param name='context'>
        ///      A formatter context.  This object can be used to extract additional information
        ///      about the environment this converter is being invoked from.  This may be null,
        ///      so you should always check.  Also, properties on the context object may also
        ///      return null.
        /// </param>
        /// <param name='value'>
        ///      The object to convert.
        /// </param>
        /// <param name='destinationType'>
        ///      The type to convert the object to.
        /// </param>
        /// <param name='arguments'>
        ///      An optional array of arguments to use when doing the conversion.  The arguments here
        ///      match the type and order of the Format method on SByte.
        /// </param>
        /// <returns>
        ///      The converted object.
        /// </returns>
        public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) {
            if (destinationType == null) {
                throw new ArgumentNullException("destinationType");
            }

            if (destinationType == typeof(string) && value is SByte) {
                
                if (arguments == null || arguments.Length == 0) {
                    return value.ToString();
                }
                else if (arguments.Length == 1) {
                    return SByte.Format((SByte)value, (string)arguments[0]);
                }
                else {
                    return SByte.Format((SByte)value, (string)arguments[0], (NumberFormatInfo)arguments[1]);
                }
            }
            
            return base.ConvertTo(context, value, destinationType, arguments);
        }
    }
}

*/