public static PropertyDrawer Create([NotNull] LinkedMemberInfo memberInfo, [CanBeNull] IParentDrawer parent, [CanBeNull] GUIContent label, bool readOnly) { PropertyDrawer result; if (!DrawerPool.TryGet(out result)) { result = new PropertyDrawer(); } object useValue; #if GET_VALUE_DURING_SETUP // call the getter of a property here, even though it could have side effects? // UPDATE: This results in errors if the property has index parameters! if (memberInfo.CanRead && (memberInfo.MemberInfo as PropertyInfo).GetIndexParameters().Length == 0) { try { useValue = memberInfo.GetValue(0); } catch (Exception e) { Debug.LogError(e); useValue = memberInfo.DefaultValue(); } } else #endif { useValue = memberInfo.DefaultValue(); } result.Setup(useValue, memberInfo.Type, memberInfo, parent, label, readOnly); result.LateSetup(); return(result); }
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); }
public static PropertyDrawer Create([NotNull] LinkedMemberInfo memberInfo, [CanBeNull] IParentDrawer parent, [CanBeNull] GUIContent label, bool readOnly, [CanBeNull] string getterErrorOrWarning, LogType getterErrorOrWarningType) { PropertyDrawer result; if (!DrawerPool.TryGet(out result)) { result = new PropertyDrawer(); } if (!string.IsNullOrEmpty(getterErrorOrWarning)) { result.OnErrorOrWarningWhenCallingGetter(getterErrorOrWarning, getterErrorOrWarningType); } object useValue = memberInfo.Type.IsValueType ? memberInfo.DefaultValue() : null; result.Setup(useValue, memberInfo.Type, memberInfo, parent, label, readOnly); result.LateSetup(); return(result); }