/// <summary> Creates a new instance of the drawer or returns a reusable instance from the pool. </summary> /// <param name="value"> The starting cached value of the drawer. </param> /// <param name="memberInfo"> LinkedMemberInfo for the field, property or parameter that the drawer represents. Can be null. </param> /// <param name="parent"> The parent drawer of the created drawer. Can be null. </param> /// <param name="label"> The prefix label. </param> /// <param name="readOnly"> True if control should be read only. </param> /// <returns> The instance, ready to be used. </returns> public static DelayedFloatDrawer Create(float value, LinkedMemberInfo memberInfo, IParentDrawer parent, GUIContent label, bool readOnly) { DelayedFloatDrawer result; if (!DrawerPool.TryGet(out result)) { result = new DelayedFloatDrawer(); } result.Setup(value, typeof(float), memberInfo, parent, label, readOnly); result.LateSetup(); return(result); }
/// <inheritdoc /> protected override void DoBuildMembers() { DrawerArrayPool.Resize(ref members, 2); // Making key be read-only for now until code has been added to handle on-the-fly changing of keys gracefully. // E.g. all keys should use delayed text fields and be marked with NotNull (e.g. using a custom DrawerProvider). var keyInfo = memberBuildList[0]; IDrawer keyMember; var keyValue = keyInfo.GetValue(0); var keyLabel = GUIContentPool.Create("K"); //var keyIsReadOnly = ReadOnly; const bool keyIsReadOnly = true; if (keyType == Types.Int) { keyMember = DelayedIntDrawer.Create((int)keyValue, keyInfo, this, keyLabel, keyIsReadOnly); } else if (keyType == Types.String) { keyMember = TextDrawer.Create((string)keyValue, keyInfo, this, keyLabel, keyIsReadOnly, false, true); } else if (keyType == Types.Float) { keyMember = DelayedFloatDrawer.Create((float)keyValue, keyInfo, this, keyLabel, keyIsReadOnly); } else { keyMember = DrawerProvider.GetForField(keyValue, keyType, keyInfo, this, keyLabel, keyIsReadOnly); } keyMember.OverrideValidateValue = ValidateKey; members[0] = keyMember; var valueInfo = memberBuildList[1]; var valueMember = DrawerProvider.GetForField(valueInfo.GetValue(0), valueType, valueInfo, this, GUIContentPool.Create("V"), ReadOnly); members[1] = valueMember; }