public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context, object value, Attribute[] attributes) { var props = new PropertyDescriptorCollection(null); var processor = value as ProcessorTypeDescription; if (context.Instance is Array) { var array = context.Instance as object[]; foreach (PropertyDescriptor prop in TypeDescriptor.GetProperties(value, attributes, true)) { props.Add(new MultiTargetPropertyDescriptor(prop.Name, prop.PropertyType, prop.ComponentType, prop, array)); } var paramArray = array.Select(e => ((ContentItem)e).ProcessorParams).ToArray(); foreach (var p in processor.Properties) { var prop = new OpaqueDataDictionaryElementPropertyDescriptor(p.Name, p.Type, null); var prop2 = new MultiTargetPropertyDescriptor(prop.Name, prop.PropertyType, prop.ComponentType, prop, paramArray); props.Add(prop2); } } else { var contentItem = context.Instance as ContentItem; if (value == PipelineTypes.MissingProcessor) { props.Add(new ReadonlyPropertyDescriptor("Name", typeof(string), typeof(ProcessorTypeDescription), contentItem.ProcessorName)); foreach (var p in contentItem.ProcessorParams) { var desc = new OpaqueDataDictionaryElementPropertyDescriptor(p.Key, p.Value.GetType(), contentItem.ProcessorParams); props.Add(desc); } } else { // Emit regular properties. foreach (PropertyDescriptor prop in TypeDescriptor.GetProperties(value, attributes, true)) { props.Add(prop); } // Emit processor parameters. foreach (var p in processor.Properties) { var desc = new OpaqueDataDictionaryElementPropertyDescriptor(p.Name, p.Type, contentItem.ProcessorParams); props.Add(desc); } } } return(props); }
public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context, object value, Attribute[] attributes) { var props = new PropertyDescriptorCollection(null); var processor = value as ProcessorTypeDescription; if (context.Instance is Array) { var array = context.Instance as object[]; foreach (PropertyDescriptor prop in TypeDescriptor.GetProperties(value, attributes, true)) props.Add(new MultiTargetPropertyDescriptor(prop.Name, prop.PropertyType, prop.ComponentType, prop, array)); var paramArray = array.Select(e => ((ContentItem)e).ProcessorParams).ToArray(); foreach (var p in processor.Properties) { var prop = new OpaqueDataDictionaryElementPropertyDescriptor(p.Name, p.Type, null); var prop2 = new MultiTargetPropertyDescriptor(prop.Name, prop.PropertyType, prop.ComponentType, prop, paramArray); props.Add(prop2); } } else { var contentItem = context.Instance as ContentItem; if (value == PipelineTypes.MissingProcessor) { props.Add(new ReadonlyPropertyDescriptor("Name", typeof (string), typeof (ProcessorTypeDescription), contentItem.ProcessorName)); foreach (var p in contentItem.ProcessorParams) { var desc = new OpaqueDataDictionaryElementPropertyDescriptor(p.Key, p.Value.GetType(), contentItem.ProcessorParams); props.Add(desc); } } else { // Emit regular properties. foreach (PropertyDescriptor prop in TypeDescriptor.GetProperties(value, attributes, true)) props.Add(prop); // Emit processor parameters. foreach (var p in processor.Properties) { var desc = new OpaqueDataDictionaryElementPropertyDescriptor(p.Name, p.Type, contentItem.ProcessorParams); props.Add(desc); } } } return props; }