Exemplo n.º 1
0
        private void UpdateDrawInSingleRow()
        {
            bool setDrawInSingleRow;

            if (IsNull)
            {
                setDrawInSingleRow = true;
            }
                        #if DRAW_VALUE_IN_SINGLE_ROW_IF_POSSIBLE
            else if (memberBuildState == MemberBuildState.MembersBuilt)
            {
                setDrawInSingleRow = DrawerUtility.CanDrawInSingleRow(ValueDrawer);
            }
            else if (memberBuildState == MemberBuildState.BuildListGenerated)
            {
                setDrawInSingleRow = DrawerUtility.CanDrawInSingleRow(instanceType, DebugMode);
            }
                        #else
            else if (memberBuildState != MemberBuildState.Unstarted)
            {
                setDrawInSingleRow = DrawerUtility.CanDrawMultipleControlsOfTypeInSingleRow(instanceType);
            }
                        #endif
            else
            {
                setDrawInSingleRow = true;
            }

            if (setDrawInSingleRow != drawInSingleRow)
            {
                                #if DEV_MODE && DEBUG_UPDATE_DRAW_IN_SINGLE_ROW
                Debug.Log(Msg(ToString(), ".drawInSingleRow = ", setDrawInSingleRow, " (was: ", drawInSingleRow, ") with IsNull=", IsNull, ", memberBuildState = ", memberBuildState, ", instanceType=", instanceType));
                                #endif

                drawInSingleRow = setDrawInSingleRow;

                UpdatePrefixDrawer();

                if (DrawInSingleRow)
                {
                    if (inactive)
                    {
                        SetUnfoldedInstantly(true);
                    }
                    else
                    {
                        SetUnfolded(true);
                    }
                }

                UpdateVisibleMembers();
            }
            else if (prefixLabelDrawer == null)
            {
                                #if DEV_MODE
                Debug.LogError("This null check was needed!");
                                #endif
                UpdatePrefixDrawer();
            }
        }
Exemplo n.º 2
0
        private void Setup(ParameterInfo[] setParameterInfos, LinkedMemberInfo setMemberInfo, IParentDrawer setParent, GUIContent setLabel, bool setReadOnly)
        {
                        #if DEV_MODE
            if (setReadOnly)
            {
                Debug.LogWarning(StringUtils.ToColorizedString(ToString(), ".Setup - readonly=", true, ". Really don't allow editing parameter value? This is usually desired even for read-only properties."));
            }
                        #endif

            parameterInfos  = setParameterInfos;
            drawInSingleRow = parameterInfos.Length == 1 && DrawerUtility.CanDrawMultipleControlsOfTypeInSingleRow(parameterInfos[0].ParameterType);

            if (setLabel == null)
            {
                setLabel = GUIContentPool.Create("Parameters");
            }

            int count    = parameterInfos.Length;
            var setValue = ArrayPool <object> .Create(count);

            for (int n = count - 1; n >= 0; n--)
            {
                setValue[n] = ParameterValues.GetValue(parameterInfos[n]);
            }

            // always set readonly to false to fix issue where
            // parameters of read-only indexer Properties could not be modified
            base.Setup(setValue, typeof(object[]), setMemberInfo, setParent, setLabel, setReadOnly);
        }
Exemplo n.º 3
0
 /// <summary>
 /// Sets up the drawer so that it is ready to be used.
 /// LateSetup should be called right after this.
 /// </summary>
 /// <param name="setKeyType"> The type of the key used in the dictionary. Can not be null. </param>
 /// <param name="setValidateKey"> Function used for validating the current key value set up in the add button. Can be null. </param>
 /// <param name="setOnAddButtonClicked"> Delegate called when the add button is clicked. Can be null. </param>
 /// <param name="setMemberInfo"> LinkedMemberInfo for the field or property that these drawers represent. </param>
 /// <param name="setParent"> Drawer whose member these Drawer are. Can not be null. </param>
 /// <param name="setLabel"> The label (name) of the field. Can be null. </param>
 /// <param name="setReadOnly"> True if Drawer should be read only. </param>
 private void Setup([NotNull] Type setKeyType, [CanBeNull] Func <object[], bool> setValidateKey, [CanBeNull] Action setOnAddButtonClicked, [CanBeNull] LinkedMemberInfo setMemberInfo, [NotNull] IParentDrawer setParent, GUIContent setLabel, bool setReadOnly)
 {
     keyType            = setKeyType;
     drawInSingleRow    = DrawerUtility.CanDrawMultipleControlsOfTypeInSingleRow(keyType);
     validateKey        = setValidateKey;
     onAddButtonClicked = setOnAddButtonClicked;
     base.Setup(keyType.DefaultValue(), keyType, setMemberInfo, setParent, setLabel, setReadOnly);
 }
Exemplo n.º 4
0
        /// <inheritdoc />
        protected override void Setup(Type[] setValue, Type setValueType, LinkedMemberInfo setMemberInfo, IParentDrawer setParent, GUIContent setLabel, bool setReadOnly)
        {
            memberInfo       = setMemberInfo;
            genericArguments = setMemberInfo.MethodInfo.GetGenericArguments();

            drawInSingleRow = genericArguments.Length == 1 && DrawerUtility.CanDrawMultipleControlsOfTypeInSingleRow(genericArguments[0]);

            if (setLabel == null)
            {
                setLabel = GUIContentPool.Create("Generics");
            }

            base.Setup(setValue, setValueType, setMemberInfo, setParent, setLabel, setReadOnly);
        }
Exemplo n.º 5
0
        private void Setup(DictionaryEntry setValue, Type setValueType, Type entryKeyType, Type entryValueType, LinkedMemberInfo setMemberInfo, IParentDrawer setParent, GUIContent setLabel, bool setReadOnly, [CanBeNull] Func <int, object[], bool> setValidateKey)
        {
            keyType     = entryKeyType;
            valueType   = entryValueType;
            validateKey = setValidateKey == null ? ValidateNotNull : setValidateKey;

            drawInSingleRow = DrawerUtility.CanDrawMultipleControlsOfTypeInSingleRow(entryKeyType) && DrawerUtility.CanDrawMultipleControlsOfTypeInSingleRow(entryValueType);


            base.Setup(setValue, setValueType, setMemberInfo, setParent, setLabel, setReadOnly);

                        #if DEV_MODE && DEBUG_SETUP
            Debug.Log("DictionaryEntryDrawer<" + StringUtils.ToString(keyType) + "," + StringUtils.ToString(valueType) + "> created with drawInSingleRow=" + StringUtils.ToColorizedString(drawInSingleRow) + ", value=" + StringUtils.ToString(Value));
                        #endif
        }
Exemplo n.º 6
0
        /// <inheritdoc />
        protected override void Setup(object setValue, Type setValueType, LinkedMemberInfo setMemberInfo, IParentDrawer setParent, GUIContent setLabel, bool setReadOnly)
        {
            if (setValueType == null)
            {
                                #if DEV_MODE
                Debug.LogWarning(GetType().Name + ".Setup called with setValueType=null");
                                #endif
                setValueType = DrawerUtility.GetType(setMemberInfo, setValue);
            }
            var types     = setValueType.GetGenericArguments();
            var keyType   = types[0];
            var valueType = types[1];
            drawInSingleRow = DrawerUtility.CanDrawMultipleControlsOfTypeInSingleRow(keyType) && DrawerUtility.CanDrawMultipleControlsOfTypeInSingleRow(valueType);

            base.Setup(setValue, setValueType, setMemberInfo, setParent, setLabel, setReadOnly);

                        #if DEV_MODE && DEBUG_SETUP
            Debug.Log(StringUtils.ToColorizedString("ReadOnly=", ReadOnly));
                        #endif
        }
Exemplo n.º 7
0
        /// <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 (typeForValue.IsUnityObject())
            {
                return(ObjectReferenceDrawer.Create(null, 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));
        }