/// <summary>
        /// Given a non-abstract explicitly chosen type, returns the drawer for the value of the drawer using said type.
        /// </summary>
        /// <param name="typeForValue"> Type of value. </param>
        /// <returns> Drawer instance to use for the value. </returns>
        protected virtual IDrawer BuildDrawerForValue(Type typeForValue)
        {
                        #if DEV_MODE && DEBUG_DRAW_IN_SINGLE_ROW
            Debug.Log("BuildDrawerForValue(" + typeForValue.Name + ") called with DrawInSingleRow=" + DrawInSingleRow + ", CanDrawInSingleRow(" + typeForValue.Name + ")=" + DrawerUtility.CanDrawInSingleRow(typeForValue, DebugMode) + ", CanDrawMultipleControlsOfTypeInSingleRow(" + typeForValue.Name + ")=" + DrawerUtility.CanDrawMultipleControlsOfTypeInSingleRow(typeForValue));
                        #endif

                        #if DEV_MODE
            Debug.Assert(typeForValue != null);
            Debug.Assert(!typeForValue.IsGenericTypeDefinition);
                        #endif

            if (typeForValue.IsUnityObject())
            {
                return(ObjectReferenceDrawer.Create(Value as Object, memberInfo, GetTypeForObjectReferenceField(), this, GUIContent.none, AllowSceneObjects(), false, ReadOnly));
            }

            var label = GUIContentPool.Create(StringUtils.SplitPascalCaseToWords(StringUtils.ToStringSansNamespace(typeForValue)));

            // infinite loop danger!
            if (memberInfo != null && typeForValue == memberInfo.Type)
            {
                                #if DEV_MODE
                Debug.LogError("Infinite loop! typeForValue " + StringUtils.ToString(typeForValue) + " same as Type! instanceType=" + StringUtils.ToString(instanceType) + ", userSelectedType=" + StringUtils.ToString(userSelectedType));
                                #endif
                return(ReadOnlyTextDrawer.Create(StringUtils.ToString(Value), memberInfo, this, label));
            }

            return(BuildDrawerForValue(typeForValue, Value, memberInfo, this, label, ReadOnly));
        }
Exemple #2
0
 private static void DisableEyedropperPreview(ObjectReferenceDrawer drawer)
 {
     if (instance != null)
     {
         ObjectReferenceDrawer.eyedropperCurrentTarget -= instance.GetMouseovered;
         instance.Dispose();
         instance = null;
     }
 }
Exemple #3
0
 private static void EnableEyedropperPreview(ObjectReferenceDrawer drawer)
 {
     if (instance == null)
     {
         instance = new Eyedropper();
         ObjectReferenceDrawer.eyedropperCurrentTarget += instance.GetMouseovered;
         instance.type = drawer.Type;
     }
 }
        protected override void DoBuildMembers()
        {
            Array.Resize(ref members, 26);

            var first = Value;

            bool readOnly = ReadOnly;

            //NOTE: This didn't have a LinkedMemberInfo earlier for some reason. Did it cause problems?
            members[0] = TextDrawer.Create(first.name, memberBuildList[0], this, GUIContentPool.Create("Name"), readOnly, false);

            members[1] = GUIStyleStateDrawer.Create(first.normal, memberBuildList[1], this, GUIContentPool.Create("Normal"), readOnly);
            members[2] = GUIStyleStateDrawer.Create(first.hover, memberBuildList[2], this, GUIContentPool.Create("Hover"), readOnly);
            members[3] = GUIStyleStateDrawer.Create(first.active, memberBuildList[3], this, GUIContentPool.Create("Active"), readOnly);
            members[4] = GUIStyleStateDrawer.Create(first.focused, memberBuildList[4], this, GUIContentPool.Create("Focused"), readOnly);

            members[5] = GUIStyleStateDrawer.Create(first.onNormal, memberBuildList[5], this, GUIContentPool.Create("On Normal"), readOnly);
            members[6] = GUIStyleStateDrawer.Create(first.onHover, memberBuildList[6], this, GUIContentPool.Create("On Hover"), readOnly);
            members[7] = GUIStyleStateDrawer.Create(first.onActive, memberBuildList[7], this, GUIContentPool.Create("On Active"), readOnly);
            members[8] = GUIStyleStateDrawer.Create(first.onFocused, memberBuildList[8], this, GUIContentPool.Create("On Focused"), readOnly);

            members[9]  = RectOffsetDrawer.Create(first.border, memberBuildList[9], this, GUIContentPool.Create("Border"), readOnly);
            members[10] = RectOffsetDrawer.Create(first.margin, memberBuildList[10], this, GUIContentPool.Create("Margin"), readOnly);
            members[11] = RectOffsetDrawer.Create(first.padding, memberBuildList[11], this, GUIContentPool.Create("Padding"), readOnly);
            members[12] = RectOffsetDrawer.Create(first.overflow, memberBuildList[12], this, GUIContentPool.Create("Overflow"), readOnly);

            members[13] = ObjectReferenceDrawer.Create(first.font, memberBuildList[13], this, GUIContentPool.Create("Font"), true, false, readOnly);
            members[14] = IntDrawer.Create(first.fontSize, memberBuildList[14], this, GUIContentPool.Create("Font Size"), readOnly);
            members[15] = EnumDrawer.Create(first.fontStyle, memberBuildList[15], this, GUIContentPool.Create("Font Style"), readOnly);

            members[16] = EnumDrawer.Create(first.alignment, memberBuildList[16], this, GUIContentPool.Create("Alignment"), readOnly);
            members[17] = ToggleDrawer.Create(first.wordWrap, memberBuildList[17], this, GUIContentPool.Create("Word Wrap"), readOnly);
            members[18] = ToggleDrawer.Create(first.richText, memberBuildList[18], this, GUIContentPool.Create("Rich Text"), readOnly);
            members[19] = EnumDrawer.Create(first.clipping, memberBuildList[19], this, GUIContentPool.Create("Text Clipping"), readOnly);

            members[20] = EnumDrawer.Create(first.imagePosition, memberBuildList[20], this, GUIContentPool.Create("Image Position"), readOnly);
            members[21] = Vector2Drawer.Create(first.contentOffset, memberBuildList[21], this, GUIContentPool.Create("Content Offset"), readOnly);
            members[22] = FloatDrawer.Create(first.fixedWidth, memberBuildList[22], this, GUIContentPool.Create("Fixed Width"), readOnly);
            members[23] = FloatDrawer.Create(first.fixedHeight, memberBuildList[23], this, GUIContentPool.Create("Fixed Height"), readOnly);
            members[24] = ToggleDrawer.Create(first.stretchWidth, memberBuildList[24], this, GUIContentPool.Create("Strech Width"), readOnly);
            members[25] = ToggleDrawer.Create(first.stretchHeight, memberBuildList[25], this, GUIContentPool.Create("Strech Height"), readOnly);

                        #if DEV_MODE
            Debug.Assert(memberBuildList.Count == members.Length);
                        #endif
        }
        /// <inheritdoc/>
        protected override void DoBuildMembers()
        {
            if (DebugMode)
            {
                base.DoBuildMembers();
                return;
            }

                        #if DEV_MODE && PI_ASSERTATIONS
            Debug.Assert(memberBuildList.Count == 3);
                        #endif

            var first = Value;
            Array.Resize(ref members, 3);
            var readOnly = ReadOnly;
            members[0] = TextDrawer.Create(first.text, memberBuildList[0], this, GUIContentPool.Create("Text"), readOnly, false);
            members[1] = ObjectReferenceDrawer.Create(first.image, memberBuildList[1], this, GUIContentPool.Create("Image"), false, false, readOnly);
            members[2] = TextDrawer.Create(first.tooltip, memberBuildList[2], this, GUIContentPool.Create("Tooltip"), readOnly, false);
        }
        /// <inheritdoc/>
        protected override void DoBuildMembers()
        {
                        #if UNITY_EDITOR
            Array.Resize(ref members, 3);
                        #else
            Array.Resize(ref members, 2);
                        #endif

            var first = Value;
            members[0] = ObjectReferenceDrawer.Create(first.background, memberBuildList[0], this, GUIContentPool.Create("Background"), false, false, false);

            int index = 1;
                        #if UNITY_EDITOR
            //scaledBackgrounds field is not accessible from player code
            members[index] = ArrayDrawer.Create(first.scaledBackgrounds, memberBuildList[index], this, GUIContentPool.Create("Scaled Backgrounds"), false);
            index++;
                        #endif
            members[index] = ColorDrawer.Create(first.textColor, memberBuildList[index], this, GUIContentPool.Create("Text Color"), false);
        }
        /// <inheritdoc />
        protected override void DoBuildMembers()
        {
                        #if DEV_MODE && DEBUG_BUILD_MEMBERS
            Debug.Log(StringUtils.ToColorizedString(ToString(), ".DoBuildMembers called with memberBuildList=", memberBuildList, ", IsNull = ", IsNull, ", CanBeUnityObject=", CanBeUnityObject, ", DrawToggleNullButton=", DrawToggleNullButton, ", memberInfo=", memberInfo, ", memberInfo.Data=", (memberInfo == null ? "n/a" : StringUtils.ToString(memberInfo.Data))));
                        #endif

            var typeForValue = TypeForValue;

            if (typeForValue == null)
            {
                if (CanBeUnityObject)
                {
                    var referenceField = ObjectReferenceDrawer.Create(null, memberInfo, GetTypeForObjectReferenceField(), this, GUIContent.none, AllowSceneObjects(), false, ReadOnly);
                    if (DrawToggleNullButton)
                    {
                        DrawerArrayPool.Resize(ref members, 2);
                        members[0] = NullToggleDrawer.Create(OnNullToggleButtonClicked, this, ReadOnly);
                        members[1] = referenceField;
                    }
                    else
                    {
                        DrawerArrayPool.Resize(ref members, 1);
                        members[0] = referenceField;
                    }
                }
                else if (DrawToggleNullButton)
                {
                    DrawerArrayPool.Resize(ref members, 1);
                    members[0] = NullToggleDrawer.Create(OnNullToggleButtonClicked, this, ReadOnly);
                }
                else
                {
                    DrawerArrayPool.Resize(ref members, 1);
                    members[0] = ReadOnlyTextDrawer.Create("null", null, this, GUIContent.none);
                }
            }
            else
            {
                                #if DEV_MODE && PI_ASSERTATIONS
                Assert(typeForValue != null, ToString(), ".BuildMembers was called with isNull=false but with userSelectedType=", null, ".\nDrawInSingleRow=", DrawInSingleRow, ", Value=", Value, ", Value.Type=", StringUtils.TypeToString(Value));
                Assert(!typeForValue.IsAbstract, ToString(), ".BuildMembers was called with isNull=false but with userSelectedType ", userSelectedType, " IsAbstract=" + true + ".\nDrawInSingleRow=", DrawInSingleRow, ", Value=", Value, ", Value.Type=", StringUtils.TypeToString(Value));
                                #endif

                var valueDrawer = BuildDrawerForValue(typeForValue);

                                #if DEV_MODE && PI_ASSERTATIONS
                Assert(valueDrawer.GetType() != GetType());
                                #endif

                valueDrawer.OnValueChanged += (changed, setValue) => SetValue(setValue);
                if (DrawToggleNullButton)
                {
                    DrawerArrayPool.Resize(ref members, 2);
                    members[0] = NullToggleDrawer.Create(OnNullToggleButtonClicked, this, ReadOnly);
                    members[1] = valueDrawer;
                }
                else
                {
                    DrawerArrayPool.Resize(ref members, 1);
                    members[0] = valueDrawer;
                }

                                #if DRAW_VALUE_IN_SINGLE_ROW_IF_POSSIBLE
                if (DrawerUtility.CanDrawInSingleRow(valueDrawer))
                {
                    valueDrawer.Label = GUIContentPool.Empty();
                }
                                #endif
            }
        }
Exemple #8
0
 /// <inheritdoc />
 protected override void DoBuildMembers()
 {
     DrawerArrayPool.Resize(ref members, 1);
     members[0] = ObjectReferenceDrawer.Create(Value, Types.MonoScript, this, GUIContent.none, false, false, ReadOnly);
 }
        /// <inheritdoc />
        protected override void DoBuildMembers()
        {
            var value = Value;

            if (value == null)
            {
                DrawerArrayPool.Resize(ref members, 2);
                members[0] = NullToggleDrawer.Create(OnNullToggleButtonClicked, this, ReadOnly);
                members[1] = ObjectReferenceDrawer.Create(null, Types.UnityObject, this, GUIContent.none, true, false, ReadOnly);
            }
            else
            {
                var    target    = value.Target;
                bool   hasTarget = target != null;
                Object unityObject;
                bool   isUnityObject;
                bool   isAnonymous;
                string methodName;
                Type   targetType;
                int    methodIndex;
                var    method = value.Method;

                if (hasTarget)
                {
                    targetType = target.GetType();

                    UpdateMethodOptions(targetType, true);

                    unityObject   = target as Object;
                    isUnityObject = unityObject != null;

                    methodName  = method.Name;
                    isAnonymous = methodName[0] == '<';

                    if (isAnonymous)
                    {
                        string methodOrigin = methodName.Substring(1, methodName.IndexOf('>') - 1);
                        methodName = string.Concat("Anonymous Method (", methodOrigin, ")");
                    }

                    methodIndex = Array.IndexOf(methodOptionNames, methodName);
                    if (methodIndex == -1)
                    {
                        methodOptions     = methodOptions.InsertAt(0, method);
                        methodOptionNames = methodOptionNames.InsertAt(0, methodName);
                        methodIndex       = 0;
                    }
                }
                else
                {
                    methodIndex = 0;

                    if (method == null)
                    {
                        targetType    = null;
                        methodName    = "{ }";
                        unityObject   = null;
                        isUnityObject = false;
                        isAnonymous   = false;

                        ArrayPool <MethodInfo> .Resize(ref methodOptions, 1);

                        methodOptions[0] = method;
                        ArrayPool <string> .Resize(ref methodOptionNames, 1);

                        methodOptionNames[0] = methodName;
                    }
                    else
                    {
                        targetType = method.ReflectedType;

                        UpdateMethodOptions(targetType, false);

                        methodName    = method.Name;
                        unityObject   = null;
                        isUnityObject = false;
                        isAnonymous   = methodName[0] == '<';

                        if (isAnonymous)
                        {
                            string methodOrigin = methodName.Substring(1, methodName.IndexOf('>') - 1);
                            methodName = string.Concat("Anonymous Method (", methodOrigin, ")");
                        }

                        methodIndex = Array.IndexOf(methodOptionNames, methodName);
                        if (methodIndex == -1)
                        {
                            methodOptions     = methodOptions.InsertAt(0, method);
                            methodOptionNames = methodOptionNames.InsertAt(0, methodName);
                            methodIndex       = 0;
                        }
                    }
                }

                                #if DEV_MODE && PI_ASSERTATIONS
                Debug.Assert(methodOptions.Length == methodOptionNames.Length);
                                #endif

                                #if DEV_MODE
                Debug.Log(Msg(ToString() + ".DoBuildMembers with target=", target, ", type=", targetType, ", isUnityObject=", isUnityObject, ", methodName=", methodName, ", isAnonymous=", isAnonymous + ", methodNames=", StringUtils.ToString(methodOptionNames)));
                                #endif

                if (isUnityObject)
                {
                    DrawerArrayPool.Resize(ref members, 2);
                    members[0] = ObjectReferenceDrawer.Create(unityObject, Types.UnityObject, this, GUIContentPool.Empty(), true, false, ReadOnly);
                    members[1] = PopupMenuDrawer.Create(methodIndex, methodOptionNames, null, this, GUIContentPool.Empty(), ReadOnly);
                }
                else
                {
                    DrawerArrayPool.Resize(ref members, 3);
                    members[0] = NullToggleDrawer.Create(OnNullToggleButtonClicked, this, ReadOnly);
                    members[1] = TypeDrawer.Create(targetType, null, this, GUIContentPool.Empty(), ReadOnly);
                    members[2] = PopupMenuDrawer.Create(methodIndex, methodOptionNames, null, this, GUIContentPool.Empty(), ReadOnly);
                }
            }
        }