コード例 #1
0
        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;
            }
        }
コード例 #2
0
        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));
        }