Beispiel #1
0
        public static PropertyDrawer Create([NotNull] LinkedMemberInfo memberInfo, [CanBeNull] IParentDrawer parent, [CanBeNull] GUIContent label, bool readOnly)
        {
            PropertyDrawer result;

            if (!DrawerPool.TryGet(out result))
            {
                result = new PropertyDrawer();
            }

            object useValue;

                        #if GET_VALUE_DURING_SETUP
            // call the getter of a property here, even though it could have side effects?
            // UPDATE: This results in errors if the property has index parameters!
            if (memberInfo.CanRead && (memberInfo.MemberInfo as PropertyInfo).GetIndexParameters().Length == 0)
            {
                try
                {
                    useValue = memberInfo.GetValue(0);
                }
                catch (Exception e)
                {
                    Debug.LogError(e);
                    useValue = memberInfo.DefaultValue();
                }
            }
            else
                        #endif
            {
                useValue = memberInfo.DefaultValue();
            }

            result.Setup(useValue, memberInfo.Type, memberInfo, parent, label, readOnly);
            result.LateSetup();
            return(result);
        }
Beispiel #2
0
        public static ICollectionDrawer Create(Array value, LinkedMemberInfo memberInfo, [CanBeNull] IParentDrawer parent, GUIContent label, bool readOnly)
        {
            if (value == null)
            {
                                #if DEV_MODE
                Debug.Assert(memberInfo != null, "Array.Create - both value and memberInfo null!");
                                #endif

                value = memberInfo.DefaultValue() as Array;
                if (value == null)
                {
                                        #if DEV_MODE
                    Debug.LogError("Array.Create(" + memberInfo + ") of type " + StringUtils.ToString(memberInfo.Type) + ": value was null and memberInfo.DefaultValue() returned null!");
                                        #endif
                    return(null);
                }

                if (memberInfo.CanWrite)
                {
                    memberInfo.SetValue(value);
                }
            }

            switch (value.Rank)
            {
            case 1:
                break;

            case 2:
                return(Array2DDrawer.Create(value, memberInfo, parent, label, readOnly));

            case 3:
                return(Array3DDrawer.Create(value, memberInfo, parent, label, readOnly));

            default:
                return(null);
            }

            ArrayDrawer result;
            if (!DrawerPool.TryGet(out result))
            {
                result = new ArrayDrawer();
            }
            result.Setup(value, DrawerUtility.GetType(memberInfo, value), memberInfo, parent, label, readOnly);
            result.LateSetup();
            return(result);
        }
Beispiel #3
0
        public static PropertyDrawer Create([NotNull] LinkedMemberInfo memberInfo, [CanBeNull] IParentDrawer parent, [CanBeNull] GUIContent label, bool readOnly, [CanBeNull] string getterErrorOrWarning, LogType getterErrorOrWarningType)
        {
            PropertyDrawer result;

            if (!DrawerPool.TryGet(out result))
            {
                result = new PropertyDrawer();
            }

            if (!string.IsNullOrEmpty(getterErrorOrWarning))
            {
                result.OnErrorOrWarningWhenCallingGetter(getterErrorOrWarning, getterErrorOrWarningType);
            }

            object useValue = memberInfo.Type.IsValueType ? memberInfo.DefaultValue() : null;

            result.Setup(useValue, memberInfo.Type, memberInfo, parent, label, readOnly);
            result.LateSetup();

            return(result);
        }