protected static DescriptorPropertyInfo CreatePropertyInfo(System.ComponentModel.PropertyDescriptor propertyDescriptor, object propertyProvider)
        {
            var typeDescriptorContext = new TypeDescriptorContext(propertyProvider, propertyDescriptor);

            var valueSources = ValueSources.Local | ValueSources.Default;

            if (propertyDescriptor.PropertyType.IsEnum)
            {
                if (propertyDescriptor.PropertyType.IsDefined(typeof(FlagsAttribute), inherit: false))
                {
                    return(new FlagDescriptorPropertyInfo(typeDescriptorContext, valueSources));
                }
                return(new EnumDescriptorPropertyInfo(typeDescriptorContext, valueSources));
            }

            if (propertyDescriptor.PropertyType.IsAssignableFrom(typeof(Core.FilePath)))
            {
                //var isDirectoryPropertyDescriptor = GetPropertyDescriptor (propertyDescriptor.GetChildProperties (), nameof (Core.FilePath.IsDirectory));
                //if (isDirectoryPropertyDescriptor != null && (bool)isDirectoryPropertyDescriptor.GetValue (propertyItem)) {
                //	return new DirectoryPathPropertyInfo (propertyDescriptor, PropertyProvider, valueSources);
                //}
                return(new FilePathPropertyInfo(typeDescriptorContext, valueSources));
            }

            if (HasStandardValues(propertyDescriptor))
            {
                var standardValues = propertyDescriptor.Converter.GetStandardValues(typeDescriptorContext);
                if (standardValues.Count > 0)
                {
                    return(new StringStandardValuesPropertyInfo(standardValues, typeDescriptorContext, valueSources));
                }
            }

            return(new DescriptorPropertyInfo(typeDescriptorContext, valueSources));
        }
示例#2
0
        public EnumDescriptorPropertyInfo(TypeDescriptorContext typeDescriptorContext, ValueSources valueSources)
            : base(typeDescriptorContext, valueSources)
        {
            values = Enum.GetValues(PropertyDescriptor.PropertyType);

            var fields = PropertyDescriptor.PropertyType.GetFields();

            names = new Hashtable();
            foreach (System.Reflection.FieldInfo f in fields)
            {
                var att = (DescriptionAttribute)Attribute.GetCustomAttribute(f, typeof(DescriptionAttribute));
                if (att != null)
                {
                    names [f.Name] = att.Description;
                }
                else
                {
                    names [f.Name] = f.Name;
                }
            }

            for (int i = 0; i < values.Length; i++)
            {
                //name
                var    value = values.GetValue(i);
                string str   = PropertyDescriptor.Converter.ConvertToString(value);
                if (names.Contains(str))
                {
                    str = (string)names [str];
                }
                predefinedValues.Add(str, i.ToString());
            }
        }
        public FlagDescriptorPropertyInfo(TypeDescriptorContext typeDescriptorContext, ValueSources valueSources) : base(typeDescriptorContext, valueSources)
        {
            IsValueCombinable = true;

            elements = Enum.GetValues(typeDescriptorContext.PropertyDescriptor.PropertyType);

            foreach (object value in elements)
            {
                ulong uintVal = Convert.ToUInt64(value);
                predefinedValues.Add(value.ToString(), uintVal.ToString());
            }
        }
 public DescriptorPropertyInfo(TypeDescriptorContext typeDescriptorContext, ValueSources valueSources)
 {
     this.typeDescriptorContext = typeDescriptorContext;
     this.ValueSources          = valueSources;
 }
 public FilePathPropertyInfo(TypeDescriptorContext typeDescriptorContext, ValueSources valueSources) : base(typeDescriptorContext, valueSources)
 {
 }
 public StringStandardValuesPropertyInfo(TypeConverter.StandardValuesCollection standardValuesCollection, TypeDescriptorContext typeDescriptorContext, ValueSources valueSources) : base(typeDescriptorContext, valueSources)
 {
     foreach (object stdValue in standardValuesCollection)
     {
         var value = PropertyDescriptor.Converter.ConvertToString(stdValue);
         if (value == ComponentModelObjectEditor.ComboSeparatorString)
         {
             //TODO: we need implement in proppy a way to allow separators
             continue;
         }
         standardValues.Add(value, stdValue);
         predefinedValues.Add(value, value);
     }
 }