public ExpandableExtensionConverter(IORMPropertyExtension extension, PropertyDescriptor descriptor) { this.myExtensionElement = extension; this.myExtensionElementType = extension.GetType(); this.myOriginalDescriptor = descriptor; this.myContextWrapper = new ContextWrapper(descriptor, myExtensionElement); }
/// <summary> /// Adds the properties from the extension <see cref="ModelElement"/>s of the /// <see cref="IORMExtendableElement"/> specified by <paramref name="extendableElement"/> /// to the <see cref="PropertyDescriptorCollection"/> specified by <paramref name="properties"/>. /// </summary> /// <param name="extendableElement">The <see cref="IORMExtendableElement"/> from which the extension properties should be retrieved.</param> /// <param name="properties">The <see cref="PropertyDescriptorCollection"/> to which the extension properties should be added.</param> /// <param name="displayedWithComponentType">The <see cref="Type"/> of the element the extensions will be displayed with.</param> public static void GetExtensionProperties(IORMExtendableElement extendableElement, PropertyDescriptorCollection properties, Type displayedWithComponentType) { if (extendableElement == null) { throw new ArgumentNullException("extendableElement"); } if (properties == null) { throw new ArgumentNullException("properties"); } foreach (ModelElement extension in extendableElement.ExtensionCollection) { IORMPropertyExtension customPropertyExtension = extension as IORMPropertyExtension; ORMExtensionPropertySettings settings = (customPropertyExtension != null) ? customPropertyExtension.ExtensionPropertySettings : ORMExtensionPropertySettings.MergeAsTopLevelProperty; if (0 != (settings & ORMExtensionPropertySettings.MergeAsExpandableProperty)) { PropertyDescriptor descriptor = ExpandableExtensionPropertyDescriptor.CreateExtensionDescriptor(customPropertyExtension); properties.Add(displayedWithComponentType != null ? EditorUtility.RedirectPropertyDescriptor(extension, descriptor, displayedWithComponentType) : descriptor); } if (0 != (settings & ORMExtensionPropertySettings.MergeAsTopLevelProperty)) { foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(extension)) { properties.Add(displayedWithComponentType != null ? EditorUtility.RedirectPropertyDescriptor(extension, descriptor, displayedWithComponentType) : descriptor); } } } }
private ExpandableExtensionPropertyDescriptor(IORMPropertyExtension extensionElement, TypeConverter converter, bool readOnly, PropertyDescriptor descriptor) : base(extensionElement.ToString(), null) { this.myExtensionElement = extensionElement; this.myConverter = converter; this.myReadOnly = readOnly; this.myOriginalDescriptor = descriptor; }
public static ExpandableExtensionPropertyDescriptor CreateExtensionDescriptor(IORMPropertyExtension extensionElement) { ModelElement element = extensionElement as ModelElement; DomainPropertyInfo extensionExpandableTopLevelPropertyInfo = element.Store.DomainDataDirectory.FindDomainProperty(extensionElement.ExtensionExpandableTopLevelPropertyId); // If ExtensionExpandableTopLevelPropertyGuid is invalid or Guid.Empty, FindDomainProperty returns null. bool readOnly = (extensionExpandableTopLevelPropertyInfo == null); PropertyDescriptor descriptor; ExpandableObjectConverter expandableConverter; if (!readOnly) { descriptor = DomainTypeDescriptor.CreatePropertyDescriptor(element, extensionExpandableTopLevelPropertyInfo); expandableConverter = new ExpandableExtensionConverter(extensionElement, descriptor); } else { descriptor = null; expandableConverter = new ExpandableObjectConverter(); } return new ExpandableExtensionPropertyDescriptor(extensionElement, expandableConverter, readOnly, descriptor); }
public ContextWrapper(PropertyDescriptor descriptor, IORMPropertyExtension extensionElement) { myOriginalDescriptor = descriptor; myExtensionElement = extensionElement; }
public static ExpandableExtensionPropertyDescriptor CreateExtensionDescriptor(IORMPropertyExtension extensionElement) { ModelElement element = extensionElement as ModelElement; DomainPropertyInfo extensionExpandableTopLevelPropertyInfo = element.Store.DomainDataDirectory.FindDomainProperty(extensionElement.ExtensionExpandableTopLevelPropertyId); // If ExtensionExpandableTopLevelPropertyGuid is invalid or Guid.Empty, FindDomainProperty returns null. bool readOnly = (extensionExpandableTopLevelPropertyInfo == null); PropertyDescriptor descriptor; ExpandableObjectConverter expandableConverter; if (!readOnly) { descriptor = DomainTypeDescriptor.CreatePropertyDescriptor(element, extensionExpandableTopLevelPropertyInfo); expandableConverter = new ExpandableExtensionConverter(extensionElement, descriptor); } else { descriptor = null; expandableConverter = new ExpandableObjectConverter(); } return(new ExpandableExtensionPropertyDescriptor(extensionElement, expandableConverter, readOnly, descriptor)); }