private void SetupNewObject(object editObject) { _currentEditableMembers.Clear(); if (editObject != null) { _editObjectAccessor = ObjectAccessor.Create(editObject); var defaultVisibility = editObject.GetType().GetCustomAttribute <ObjectEditorVisibleAttribute>()?.Visible ?? DefaultObjectEditorMemberVisibility; var index = 0; foreach (var info in editObject.GetType().GetMembers(BindingFlags.Public | BindingFlags.Instance)) { (var memberType, var isWritable) = GetMemberData(info); if (memberType != null && isWritable) { var visible = info.GetCustomAttribute <ObjectEditorVisibleAttribute>()?.Visible ?? defaultVisibility; if (visible) { EditableMemberFactory factory = null; if (memberType.IsEnum) { factory = _enumEditableMemberTypeFactory; } else { _editableMemberTypes.TryGetValue(memberType, out factory); } if (factory != null) { var editableMember = factory(index, editObject, info, memberType, _editObjectAccessor); editableMember.Initialize(index, editObject, info, _editObjectAccessor); _currentEditableMembers.Add(editableMember); } ++index; } } } } else { _editObjectAccessor = null; } }
private ComponentData SetupComponentData(Component component) { var accessor = ObjectAccessor.Create(component); var defaultVisibility = component.GetType().GetCustomAttribute <ObjectEditorVisibleAttribute>()?.Visible ?? DefaultObjectEditorMemberVisibility; var editableMembers = new List <IEditableMemberType>(); foreach (var info in component.GetType().GetMembers(BindingFlags.Public | BindingFlags.Instance)) { (var memberType, var isWritable) = GetMemberData(info); if (memberType != null && isWritable) { var visible = info.GetCustomAttribute <ObjectEditorVisibleAttribute>()?.Visible ?? defaultVisibility; if (visible) { EditableMemberFactory factory = null; if (memberType.IsEnum) { factory = _enumEditableMemberTypeFactory; } else { _editableMemberTypes.TryGetValue(memberType, out factory); } if (factory != null) { var index = editableMembers.Count; var editableMember = factory(index, component, info, memberType, accessor); editableMember.Initialize(index, component, info, accessor); editableMembers.Add(editableMember); } } } } return(new ComponentData(component, accessor, editableMembers)); }