public override object EditValue(ITypeDescriptorContext typeDescriptorContext, IServiceProvider serviceProvider, object value) { if (typeDescriptorContext == null) { throw new ArgumentNullException("typeDescriptorContext"); } if (serviceProvider == null) { throw new ArgumentNullException("serviceProvider"); } object returnVal = value; this.editorService = (IWindowsFormsEditorService)serviceProvider.GetService(typeof(IWindowsFormsEditorService)); if (editorService != null) { ITypeFilterProvider typeFilterProvider = null; TypeFilterProviderAttribute typeFilterProvAttr = null; if (typeDescriptorContext.PropertyDescriptor != null && typeDescriptorContext.PropertyDescriptor.Attributes != null) { typeFilterProvAttr = typeDescriptorContext.PropertyDescriptor.Attributes[typeof(TypeFilterProviderAttribute)] as TypeFilterProviderAttribute; } if (typeFilterProvAttr != null) { ITypeProvider typeProvider = serviceProvider.GetService(typeof(ITypeProvider)) as ITypeProvider; if (typeProvider == null) { throw new Exception(SR.GetString(SR.General_MissingService, typeof(ITypeProvider).FullName)); } Type typeFilterProviderType = Type.GetType(typeFilterProvAttr.TypeFilterProviderTypeName); //typeProvider.GetType(typeFilterProvAttr.TypeFilterProviderTypeName); if (typeFilterProviderType != null) { typeFilterProvider = Activator.CreateInstance(typeFilterProviderType, new object[] { serviceProvider }) as ITypeFilterProvider; } } if (typeFilterProvider == null) { typeFilterProvider = ((typeDescriptorContext.Instance is object[]) ? ((object[])typeDescriptorContext.Instance)[0] : typeDescriptorContext.Instance) as ITypeFilterProvider; } if (typeFilterProvider == null) { typeFilterProvider = value as ITypeFilterProvider; } if (typeFilterProvider == null) { IReferenceService rs = serviceProvider.GetService(typeof(IReferenceService)) as IReferenceService; if (rs != null) { IComponent baseComponent = rs.GetComponent(typeDescriptorContext.Instance); if (baseComponent is ITypeFilterProvider) { typeFilterProvider = baseComponent as ITypeFilterProvider; } } } if (typeFilterProvider == null) { typeFilterProvider = typeDescriptorContext.PropertyDescriptor as ITypeFilterProvider; } string oldTypeName = value as string; if (value != null && typeDescriptorContext.PropertyDescriptor.PropertyType != typeof(string) && typeDescriptorContext.PropertyDescriptor.Converter != null && typeDescriptorContext.PropertyDescriptor.Converter.CanConvertTo(typeof(string))) { oldTypeName = typeDescriptorContext.PropertyDescriptor.Converter.ConvertTo(typeDescriptorContext, CultureInfo.CurrentCulture, value, typeof(string)) as string; } using (TypeBrowserDialog dlg = new TypeBrowserDialog(serviceProvider, typeFilterProvider as ITypeFilterProvider, oldTypeName)) { if (DialogResult.OK == editorService.ShowDialog(dlg)) { if (typeDescriptorContext.PropertyDescriptor.PropertyType == typeof(Type)) { returnVal = dlg.SelectedType; } else if (typeDescriptorContext.PropertyDescriptor.PropertyType == typeof(string)) { returnVal = dlg.SelectedType.FullName; } else if (typeDescriptorContext.PropertyDescriptor.Converter != null && typeDescriptorContext.PropertyDescriptor.Converter.CanConvertFrom(typeDescriptorContext, typeof(string))) { returnVal = typeDescriptorContext.PropertyDescriptor.Converter.ConvertFrom(typeDescriptorContext, CultureInfo.CurrentCulture, dlg.SelectedType.FullName); } } } } return(returnVal); }
public override object EditValue(ITypeDescriptorContext typeDescriptorContext, IServiceProvider serviceProvider, object value) { if (typeDescriptorContext == null) { throw new ArgumentNullException("typeDescriptorContext"); } if (serviceProvider == null) { throw new ArgumentNullException("serviceProvider"); } object obj2 = value; this.editorService = (IWindowsFormsEditorService)serviceProvider.GetService(typeof(IWindowsFormsEditorService)); if (this.editorService != null) { ITypeFilterProvider filterProvider = null; TypeFilterProviderAttribute attribute = null; if ((typeDescriptorContext.PropertyDescriptor != null) && (typeDescriptorContext.PropertyDescriptor.Attributes != null)) { attribute = typeDescriptorContext.PropertyDescriptor.Attributes[typeof(TypeFilterProviderAttribute)] as TypeFilterProviderAttribute; } if (attribute != null) { if (!(serviceProvider.GetService(typeof(ITypeProvider)) is ITypeProvider)) { throw new Exception(SR.GetString("General_MissingService", new object[] { typeof(ITypeProvider).FullName })); } System.Type type = System.Type.GetType(attribute.TypeFilterProviderTypeName); if (type != null) { filterProvider = Activator.CreateInstance(type, new object[] { serviceProvider }) as ITypeFilterProvider; } } if (filterProvider == null) { filterProvider = ((typeDescriptorContext.Instance is object[]) ? ((ITypeFilterProvider)((object[])typeDescriptorContext.Instance)[0]) : ((ITypeFilterProvider)typeDescriptorContext.Instance)) as ITypeFilterProvider; } if (filterProvider == null) { filterProvider = value as ITypeFilterProvider; } if (filterProvider == null) { IReferenceService service = serviceProvider.GetService(typeof(IReferenceService)) as IReferenceService; if (service != null) { IComponent component = service.GetComponent(typeDescriptorContext.Instance); if (component is ITypeFilterProvider) { filterProvider = component as ITypeFilterProvider; } } } if (filterProvider == null) { filterProvider = typeDescriptorContext.PropertyDescriptor as ITypeFilterProvider; } string selectedTypeName = value as string; if (((value != null) && (typeDescriptorContext.PropertyDescriptor.PropertyType != typeof(string))) && ((typeDescriptorContext.PropertyDescriptor.Converter != null) && typeDescriptorContext.PropertyDescriptor.Converter.CanConvertTo(typeof(string)))) { selectedTypeName = typeDescriptorContext.PropertyDescriptor.Converter.ConvertTo(typeDescriptorContext, CultureInfo.CurrentCulture, value, typeof(string)) as string; } using (TypeBrowserDialog dialog = new TypeBrowserDialog(serviceProvider, filterProvider, selectedTypeName)) { if (DialogResult.OK != this.editorService.ShowDialog(dialog)) { return(obj2); } if (typeDescriptorContext.PropertyDescriptor.PropertyType == typeof(System.Type)) { return(dialog.SelectedType); } if (typeDescriptorContext.PropertyDescriptor.PropertyType == typeof(string)) { return(dialog.SelectedType.FullName); } if ((typeDescriptorContext.PropertyDescriptor.Converter != null) && typeDescriptorContext.PropertyDescriptor.Converter.CanConvertFrom(typeDescriptorContext, typeof(string))) { obj2 = typeDescriptorContext.PropertyDescriptor.Converter.ConvertFrom(typeDescriptorContext, CultureInfo.CurrentCulture, dialog.SelectedType.FullName); } } } return(obj2); }