/// <summary> /// <para> /// Gets an editor of the specified type. /// </para> /// </summary> public virtual object GetEditor(Type editorBaseType) { object editor = null; // Always grab the attribute collection first here, because if the metadata version // changes it will invalidate our editor cache. AttributeCollection attrs = Attributes; // Check the editors we've already created for this type. // if (_editorTypes != null) { for (int i = 0; i < _editorCount; i++) { if (_editorTypes[i] == editorBaseType) { return(_editors[i]); } } } // If one wasn't found, then we must go through the attributes. // if (editor == null) { #if FEATURE_EDITORATTRIBUTE for (int i = 0; i < attrs.Count; i++) { EditorAttribute attr = attrs[i] as EditorAttribute; if (attr == null) { continue; } Type editorType = GetTypeFromName(attr.EditorBaseTypeName); if (editorBaseType == editorType) { Type type = GetTypeFromName(attr.EditorTypeName); if (type != null) { editor = CreateInstance(type); break; } } } #endif // Now, if we failed to find it in our own attributes, go to the // component descriptor. // if (editor == null) { editor = TypeDescriptor.GetEditor(PropertyType, editorBaseType); } // Now, another slot in our editor cache for next time // if (_editorTypes == null) { _editorTypes = new Type[5]; _editors = new object[5]; } if (_editorCount >= _editorTypes.Length) { Type[] newTypes = new Type[_editorTypes.Length * 2]; object[] newEditors = new object[_editors.Length * 2]; Array.Copy(_editorTypes, newTypes, _editorTypes.Length); Array.Copy(_editors, newEditors, _editors.Length); _editorTypes = newTypes; _editors = newEditors; } _editorTypes[_editorCount] = editorBaseType; _editors[_editorCount++] = editor; } return(editor); }
public object GetEditor(Type editorBaseType) => NativeTypeDesc.GetEditor(_entityType, editorBaseType, true);