コード例 #1
0
ファイル: EditorMember.cs プロジェクト: Khaled-Almoukhtar/VFW
        public static EditorMember WrapGetSet(Func <object> get, Action <object> set, object rawTarget, UnityObject unityTarget, Type dataType, string name, int id, Attribute[] attributes)
        {
            var result = new EditorMember(null, dataType, name, rawTarget, unityTarget, id, attributes);

            result.InitGetSet(get, set);
            return(result);
        }
コード例 #2
0
ファイル: EditorMember.cs プロジェクト: Khaled-Almoukhtar/VFW
        public static EditorMember WrapIListElement(string elementName, Type elementType, int elementId, Attribute[] attributes)
        {
            var result = new EditorMember(null, elementType, elementName, null, null, elementId, attributes);

            result.InitGetSet(result.GetListElement, result.SetListElement);
            return(result);
        }
コード例 #3
0
ファイル: EditorMember.cs プロジェクト: Khaled-Almoukhtar/VFW
        public static EditorMember WrapMember(MemberInfo memberInfo, object rawTarget, UnityObject unityTarget, int id)
        {
            var field = memberInfo as FieldInfo;

            if (field != null)
            {
                if (field.IsLiteral)
                {
                    throw new InvalidOperationException("Field is const, this is not supported: " + field);
                }

                var result = new EditorMember(field, field.FieldType, field.Name, rawTarget, unityTarget, id, field.GetAttributes());
                result.InitGetSet(result.GetWrappedMemberValue, result.SetWrappedMemberValue);
                result._memberGetter = field.DelegateForGet();
                result._memberSetter = field.DelegateForSet();
                return(result);
            }
            else
            {
                var property = memberInfo as PropertyInfo;

                if (property == null)
                {
                    throw new InvalidOperationException("Member " + memberInfo + " is not a field nor property.");
                }

                if (!property.CanRead)
                {
                    throw new InvalidOperationException("Property doesn't have a getter method: " + property);
                }

                if (property.IsIndexer())
                {
                    throw new InvalidOperationException("Property is an indexer, this is not supported: " + property);
                }

                var result = new EditorMember(property, property.PropertyType, property.Name, rawTarget, unityTarget, id, property.GetAttributes());
                result.InitGetSet(result.GetWrappedMemberValue, result.SetWrappedMemberValue);

                result._memberGetter = property.DelegateForGet();

                if (property.CanWrite)
                {
                    result._memberSetter = property.DelegateForSet();
                }
                else
                {
                    result._memberSetter = delegate(ref object obj, object value) { }
                };

                return(result);
            }
        }
コード例 #4
0
ファイル: EditorMember.cs プロジェクト: Khaled-Almoukhtar/VFW
        public static bool IsNull(this EditorMember member)
        {
            object value;

            return((member == null || member.Equals(null)) || ((value = member.Value) == null || value.Equals(null)));
        }