Ejemplo n.º 1
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);
        }