コード例 #1
0
        /// <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
            {
                var isGenericTypeDefinition = typeForValue.IsGenericTypeDefinition;
                if (isGenericTypeDefinition)
                {
                    DrawerArrayPool.Resize(ref members, 1);
                    members[0] = GenericTypeArgumentDrawer.Create(typeForValue, memberInfo, this, null, ReadOnly);
                }
                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
                }
            }
        }