/// <summary> /// Current height of this property. /// </summary> /// <param name="property"></param> /// <param name="label"></param> /// <returns></returns> public override float GetPropertyHeight(SerializedProperty property, GUIContent label) { float h = EditorGUIUtility.singleLineHeight; // Label if (property.isExpanded) { h += 2 * EditorGUIUtility.singleLineHeight; // Datum id & Internal data type SerializedProperty internalType = property.FindPropertyRelative("internalDataType"); if (internalDataType != null) { SerializedProperty internalData = property.FindPropertyRelative("data"); if (internalData != null) { VariableDatum.DatumDataType dataType = (VariableDatum.DatumDataType)internalType.intValue; switch (dataType) { case VariableDatum.DatumDataType.Doubles: case VariableDatum.DatumDataType.Longs: case VariableDatum.DatumDataType.ULongs: h += ((internalData.arraySize / 8) + 1) * EditorGUIUtility.singleLineHeight; break; case VariableDatum.DatumDataType.String: h += EditorGUIUtility.singleLineHeight; for (int i = 0; i < internalData.arraySize; ++i) { if (internalData.GetArrayElementAtIndex(i).intValue == '\n') { h += EditorGUIUtility.singleLineHeight; } } break; } } } } return(h); }
/// <summary> /// Draw property /// </summary> /// <param name="position"></param> /// <param name="property"></param> /// <param name="label"></param> public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { Init(property); EditorGUI.BeginProperty(position, label, property); position.height = EditorGUIUtility.singleLineHeight; // Label property.isExpanded = EditorGUI.Foldout(position, property.isExpanded, ObjectNames.NicifyVariableName((( DatumID )datumID.intValue).ToString())); position.y += EditorGUIUtility.singleLineHeight; if (property.isExpanded) { EditorGUI.indentLevel++; datumID.intValue = ( int )( DatumID )EditorGUI.EnumPopup(position, "Datum ID", ( DatumID )datumID.intValue); position.y += EditorGUIUtility.singleLineHeight; VariableDatum.DatumDataType dataType = (VariableDatum.DatumDataType)EditorGUI.EnumPopup(position, internalDataTypeLabel, (VariableDatum.DatumDataType)internalDataType.intValue); internalDataType.intValue = ( int )dataType; position.y += EditorGUIUtility.singleLineHeight; switch (dataType) { case VariableDatum.DatumDataType.Doubles: DrawDoublesField(position); break; case VariableDatum.DatumDataType.Longs: DrawLongsField(position); break; case VariableDatum.DatumDataType.ULongs: DrawULongsField(position); break; case VariableDatum.DatumDataType.String: DrawStringField(position); break; } EditorGUI.indentLevel--; } EditorGUI.EndProperty(); }