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)); }
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); } }