diff --git a/Editor/BaseChartEditor.cs b/Editor/BaseChartEditor.cs index d1c3b2fe..b41088c8 100644 --- a/Editor/BaseChartEditor.cs +++ b/Editor/BaseChartEditor.cs @@ -18,10 +18,17 @@ namespace XCharts [CustomEditor(typeof(BaseChart), false)] public class BaseChartEditor : Editor { +#if UNITY_2019_3_OR_NEWER private const float k_IconWidth = 14; private const float k_IconGap = 0f; - private const float k_IconXOffset = 10f; - private const float k_IconYOffset = -5f; + private const float k_IconXOffset = 7f; + private const float k_IconYOffset = -1f; +#else + private const float k_IconWidth = 14; + private const float k_IconGap = 0f; + private const float k_IconXOffset = 4f; + private const float k_IconYOffset = -3f; +#endif protected BaseChart m_Chart; protected SerializedProperty m_Script; @@ -197,12 +204,13 @@ namespace XCharts for (int i = 0; i < prop.arraySize; i++) { EditorGUILayout.PropertyField(prop.GetArrayElementAtIndex(i), true); - EditorGUILayout.Space(); - var currRect = EditorGUILayout.GetControlRect(); - + var currRect = EditorGUILayout.GetControlRect(GUILayout.Height(0)); + currRect.y -= EditorGUI.GetPropertyHeight(prop.GetArrayElementAtIndex(i)); var rect1 = new Rect(currRect.width + k_IconXOffset, currRect.y + k_IconYOffset, k_IconWidth, EditorGUIUtility.singleLineHeight); + var oldColor = GUI.contentColor; + GUI.contentColor = Color.black; if (GUI.Button(rect1, ChartEditorHelper.Styles.iconRemove, ChartEditorHelper.Styles.invisibleButton)) { if (i < prop.arraySize && i >= 0) prop.DeleteArrayElementAtIndex(i); @@ -221,7 +229,7 @@ namespace XCharts { if (i > 0) prop.MoveArrayElement(i, i - 1); } - + GUI.contentColor = oldColor; } EditorGUI.indentLevel--; } diff --git a/Editor/PropertyDrawers/AxisDrawer.cs b/Editor/PropertyDrawers/AxisDrawer.cs index 70775991..c93aa7a5 100644 --- a/Editor/PropertyDrawers/AxisDrawer.cs +++ b/Editor/PropertyDrawers/AxisDrawer.cs @@ -22,7 +22,6 @@ namespace XCharts { SerializedProperty m_Type = prop.FindPropertyRelative("m_Type"); SerializedProperty m_LogBase = prop.FindPropertyRelative("m_LogBase"); - SerializedProperty m_Data = prop.FindPropertyRelative("m_Data"); SerializedProperty m_MinMaxType = prop.FindPropertyRelative("m_MinMaxType"); Axis.AxisType type = (Axis.AxisType)m_Type.enumValueIndex; var chart = prop.serializedObject.targetObject as BaseChart; diff --git a/Editor/PropertyDrawers/BasePropertyDrawer.cs b/Editor/PropertyDrawers/BasePropertyDrawer.cs index b7a43afd..e0d9b3ca 100644 --- a/Editor/PropertyDrawers/BasePropertyDrawer.cs +++ b/Editor/PropertyDrawers/BasePropertyDrawer.cs @@ -86,6 +86,12 @@ namespace XCharts m_DrawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; } + protected void AddHeight(float height) + { + m_Heights[m_KeyName] += height; + m_DrawRect.y += height; + } + protected void PropertyListField(SerializedProperty prop, string relativePropName, bool showOrder = true) { if (IngorePropertys.Contains(relativePropName)) return; @@ -106,6 +112,25 @@ namespace XCharts } } + protected void PropertyFieldLimitMin(SerializedProperty prop, string relativePropName, float minValue) + { + if (IngorePropertys.Contains(relativePropName)) return; + if (!ChartEditorHelper.PropertyFieldWithMinValue(ref m_DrawRect, m_Heights, m_KeyName, prop, + relativePropName, minValue)) + { + Debug.LogError("PropertyField ERROR:" + prop.displayName + ", " + relativePropName); + } + } + protected void PropertyFieldLimitMax(SerializedProperty prop, string relativePropName, float maxValue) + { + if (IngorePropertys.Contains(relativePropName)) return; + if (!ChartEditorHelper.PropertyFieldWithMaxValue(ref m_DrawRect, m_Heights, m_KeyName, prop, + relativePropName, maxValue)) + { + Debug.LogError("PropertyField ERROR:" + prop.displayName + ", " + relativePropName); + } + } + protected void PropertyField(SerializedProperty prop, SerializedProperty relativeProp) { if (!ChartEditorHelper.PropertyField(ref m_DrawRect, m_Heights, m_KeyName, relativeProp)) @@ -118,7 +143,8 @@ namespace XCharts { PropertyTwoFiled(prop, prop.FindPropertyRelative(relativeListProp), labelName); } - protected void PropertyTwoFiled(SerializedProperty prop, SerializedProperty relativeListProp, string labelName = null) + protected void PropertyTwoFiled(SerializedProperty prop, SerializedProperty relativeListProp, + string labelName = null) { if (string.IsNullOrEmpty(labelName)) { @@ -132,12 +158,14 @@ namespace XCharts { if (string.IsNullOrEmpty(relativePropName)) { - return ChartEditorHelper.MakeFoldout(ref m_DrawRect, m_Heights, m_PropToggles, m_KeyName, m_DisplayName, null); + return ChartEditorHelper.MakeFoldout(ref m_DrawRect, m_Heights, m_PropToggles, m_KeyName, + m_DisplayName, null); } else { var relativeProp = prop.FindPropertyRelative(relativePropName); - return ChartEditorHelper.MakeFoldout(ref m_DrawRect, m_Heights, m_PropToggles, m_KeyName, m_DisplayName, relativeProp); + return ChartEditorHelper.MakeFoldout(ref m_DrawRect, m_Heights, m_PropToggles, m_KeyName, + m_DisplayName, relativeProp); } } diff --git a/Editor/PropertyDrawers/SerieDrawer.cs b/Editor/PropertyDrawers/SerieDrawer.cs index 00120f52..4701cfd7 100644 --- a/Editor/PropertyDrawers/SerieDrawer.cs +++ b/Editor/PropertyDrawers/SerieDrawer.cs @@ -12,94 +12,24 @@ using UnityEngine; namespace XCharts { [CustomPropertyDrawer(typeof(Serie), true)] - public class SerieDrawer : PropertyDrawer + public class SerieDrawer : BasePropertyDrawer { - private Dictionary m_SerieModuleToggle = new Dictionary(); - private List m_DataFoldout = new List(); - private bool m_ShowJsonDataArea = false; - private string m_JsonDataAreaText; private bool m_IsPolar = false; - + private List m_DataFoldout = new List(); + public override string ClassName { get { return "Serie"; } } public override void OnGUI(Rect pos, SerializedProperty prop, GUIContent label) { - Rect drawRect = pos; - drawRect.height = EditorGUIUtility.singleLineHeight; - SerializedProperty show = prop.FindPropertyRelative("m_Show"); - SerializedProperty type = prop.FindPropertyRelative("m_Type"); - SerializedProperty name = prop.FindPropertyRelative("m_Name"); - SerializedProperty stack = prop.FindPropertyRelative("m_Stack"); - SerializedProperty m_AxisIndex = prop.FindPropertyRelative("m_AxisIndex"); - SerializedProperty m_XAxisIndex = prop.FindPropertyRelative("m_XAxisIndex"); - SerializedProperty m_YAxisIndex = prop.FindPropertyRelative("m_YAxisIndex"); - SerializedProperty m_RadarType = prop.FindPropertyRelative("m_RadarType"); - SerializedProperty m_RadarIndex = prop.FindPropertyRelative("m_RadarIndex"); - SerializedProperty m_VesselIndex = prop.FindPropertyRelative("m_VesselIndex"); - SerializedProperty m_PolarIndex = prop.FindPropertyRelative("m_PolarIndex"); - SerializedProperty m_MinShow = prop.FindPropertyRelative("m_MinShow"); - SerializedProperty m_MaxShow = prop.FindPropertyRelative("m_MaxShow"); - SerializedProperty m_MaxCache = prop.FindPropertyRelative("m_MaxCache"); - - SerializedProperty m_LineStyle = prop.FindPropertyRelative("m_LineStyle"); - SerializedProperty m_ItemStyle = prop.FindPropertyRelative("m_ItemStyle"); - SerializedProperty m_LineArrow = prop.FindPropertyRelative("m_LineArrow"); - SerializedProperty m_LineType = prop.FindPropertyRelative("m_LineType"); - SerializedProperty m_SampleDist = prop.FindPropertyRelative("m_SampleDist"); - SerializedProperty m_SampleType = prop.FindPropertyRelative("m_SampleType"); - SerializedProperty m_SampleAverage = prop.FindPropertyRelative("m_SampleAverage"); - SerializedProperty m_BarType = prop.FindPropertyRelative("m_BarType"); - SerializedProperty m_BarPercentStack = prop.FindPropertyRelative("m_BarPercentStack"); - SerializedProperty m_BarWidth = prop.FindPropertyRelative("m_BarWidth"); - SerializedProperty m_BarGap = prop.FindPropertyRelative("m_BarGap"); - SerializedProperty m_BarZebraWidth = prop.FindPropertyRelative("m_BarZebraWidth"); - SerializedProperty m_BarZebraGap = prop.FindPropertyRelative("m_BarZebraGap"); - SerializedProperty m_AreaStyle = prop.FindPropertyRelative("m_AreaStyle"); - SerializedProperty m_Symbol = prop.FindPropertyRelative("m_Symbol"); - SerializedProperty m_RoseType = prop.FindPropertyRelative("m_RoseType"); - SerializedProperty m_Space = prop.FindPropertyRelative("m_Space"); - SerializedProperty m_Center = prop.FindPropertyRelative("m_Center"); - SerializedProperty m_Radius = prop.FindPropertyRelative("m_Radius"); - SerializedProperty m_Label = prop.FindPropertyRelative("m_Label"); - SerializedProperty m_Emphasis = prop.FindPropertyRelative("m_Emphasis"); - SerializedProperty m_Animation = prop.FindPropertyRelative("m_Animation"); - SerializedProperty m_DataDimension = prop.FindPropertyRelative("m_ShowDataDimension"); - SerializedProperty m_ShowDataName = prop.FindPropertyRelative("m_ShowDataName"); - SerializedProperty m_ShowDataIcon = prop.FindPropertyRelative("m_ShowDataIcon"); - SerializedProperty m_Min = prop.FindPropertyRelative("m_Min"); - SerializedProperty m_Max = prop.FindPropertyRelative("m_Max"); - SerializedProperty m_StartAngle = prop.FindPropertyRelative("m_StartAngle"); - SerializedProperty m_EndAngle = prop.FindPropertyRelative("m_EndAngle"); - SerializedProperty m_RingGap = prop.FindPropertyRelative("m_RingGap"); - SerializedProperty m_SplitNumber = prop.FindPropertyRelative("m_SplitNumber"); - SerializedProperty m_Clockwise = prop.FindPropertyRelative("m_Clockwise"); - SerializedProperty m_RoundCap = prop.FindPropertyRelative("m_RoundCap"); - SerializedProperty m_GaugeType = prop.FindPropertyRelative("m_GaugeType"); - SerializedProperty m_GaugeAxis = prop.FindPropertyRelative("m_GaugeAxis"); - SerializedProperty m_GaugePointer = prop.FindPropertyRelative("m_GaugePointer"); - SerializedProperty m_TitleStyle = prop.FindPropertyRelative("m_TitleStyle"); - SerializedProperty m_Clip = prop.FindPropertyRelative("m_Clip"); - SerializedProperty m_Ignore = prop.FindPropertyRelative("m_Ignore"); - SerializedProperty m_IgnoreValue = prop.FindPropertyRelative("m_IgnoreValue"); - SerializedProperty m_ShowAsPositiveNumber = prop.FindPropertyRelative("m_ShowAsPositiveNumber"); - SerializedProperty m_Large = prop.FindPropertyRelative("m_Large"); - SerializedProperty m_LargeThreshold = prop.FindPropertyRelative("m_LargeThreshold"); - SerializedProperty m_AvoidLabelOverlap = prop.FindPropertyRelative("m_AvoidLabelOverlap"); - SerializedProperty m_WaveHeight = prop.FindPropertyRelative("m_WaveHeight"); - SerializedProperty m_WaveLength = prop.FindPropertyRelative("m_WaveLength"); - SerializedProperty m_WaveSpeed = prop.FindPropertyRelative("m_WaveSpeed"); - SerializedProperty m_WaveOffset = prop.FindPropertyRelative("m_WaveOffset"); - SerializedProperty m_Datas = prop.FindPropertyRelative("m_Data"); - - int index = InitToggle(prop); - string moduleName = "Serie " + index; - var toggle = ChartEditorHelper.MakeFoldout(ref drawRect, ref m_SerieModuleToggle, prop, moduleName, show); - if (!toggle) + pos.width -= 9; + base.OnGUI(pos, prop, label); + var type = prop.FindPropertyRelative("m_Type"); + if (!MakeFoldout(prop, "m_Show")) { var orderButton = 48; var gap = 4; + var drawRect = pos; drawRect.x += EditorGUIUtility.labelWidth + gap; drawRect.width = pos.width - drawRect.x + ChartEditorHelper.BOOL_WIDTH - orderButton; EditorGUI.PropertyField(drawRect, type, GUIContent.none); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; } else { @@ -107,351 +37,240 @@ namespace XCharts m_IsPolar = chart is PolarChart; var serieType = (SerieType)type.enumValueIndex; ++EditorGUI.indentLevel; - drawRect.x = pos.x; - drawRect.width = pos.width; - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, type); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, name); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - + PropertyField(prop, "m_Type"); + PropertyField(prop, "m_Name"); switch (serieType) { case SerieType.Line: - EditorGUI.PropertyField(drawRect, stack); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; + PropertyField(prop, "m_Stack"); if (m_IsPolar) { - EditorGUI.PropertyField(drawRect, m_PolarIndex); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; + PropertyField(prop, "m_PolarIndex"); } else { - EditorGUI.PropertyField(drawRect, m_XAxisIndex); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_YAxisIndex); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; + PropertyField(prop, "m_XAxisIndex"); + PropertyField(prop, "m_YAxisIndex"); } - EditorGUI.PropertyField(drawRect, m_MinShow); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_MaxShow); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_MaxCache); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - if (m_MinShow.intValue < 0) m_MinShow.intValue = 0; - if (m_MinShow.intValue < 0) m_MinShow.intValue = 0; - if (m_MaxCache.intValue < 0) m_MaxCache.intValue = 0; - EditorGUI.PropertyField(drawRect, m_LineType); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_SampleDist); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_SampleType); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_SampleAverage); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_Clip); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_Ignore); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_IgnoreValue); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_ShowAsPositiveNumber); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_Large); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_LargeThreshold); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_Symbol); - drawRect.y += EditorGUI.GetPropertyHeight(m_Symbol); - EditorGUI.PropertyField(drawRect, m_LineStyle); - drawRect.y += EditorGUI.GetPropertyHeight(m_LineStyle); - EditorGUI.PropertyField(drawRect, m_LineArrow); - drawRect.y += EditorGUI.GetPropertyHeight(m_LineArrow); - EditorGUI.PropertyField(drawRect, m_ItemStyle); - drawRect.y += EditorGUI.GetPropertyHeight(m_ItemStyle); - EditorGUI.PropertyField(drawRect, m_AreaStyle); - drawRect.y += EditorGUI.GetPropertyHeight(m_AreaStyle); - EditorGUI.PropertyField(drawRect, m_Label); - drawRect.y += EditorGUI.GetPropertyHeight(m_Label); - EditorGUI.PropertyField(drawRect, m_Emphasis); - drawRect.y += EditorGUI.GetPropertyHeight(m_Emphasis); + PropertyFieldLimitMin(prop, "m_MinShow", 0); + PropertyFieldLimitMin(prop, "m_MaxShow", 0); + PropertyFieldLimitMin(prop, "m_MaxCache", 0); + PropertyField(prop, "m_LineType"); + PropertyField(prop, "m_SampleDist"); + PropertyField(prop, "m_SampleType"); + PropertyField(prop, "m_SampleAverage"); + PropertyField(prop, "m_Clip"); + PropertyField(prop, "m_Ignore"); + PropertyField(prop, "m_IgnoreValue"); + PropertyField(prop, "m_ShowAsPositiveNumber"); + PropertyField(prop, "m_Large"); + PropertyField(prop, "m_LargeThreshold"); + PropertyField(prop, "m_Symbol"); + PropertyField(prop, "m_LineStyle"); + PropertyField(prop, "m_LineArrow"); + PropertyField(prop, "m_ItemStyle"); + PropertyField(prop, "m_AreaStyle"); + PropertyField(prop, "m_Label"); + PropertyField(prop, "m_Emphasis"); break; case SerieType.Bar: - EditorGUI.PropertyField(drawRect, stack); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; + PropertyField(prop, "m_Stack"); if (m_IsPolar) { - EditorGUI.PropertyField(drawRect, m_PolarIndex); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; + PropertyField(prop, "m_PolarIndex"); } else { - EditorGUI.PropertyField(drawRect, m_XAxisIndex); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_YAxisIndex); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; + PropertyField(prop, "m_XAxisIndex"); + PropertyField(prop, "m_YAxisIndex"); } - EditorGUI.PropertyField(drawRect, m_MinShow); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_MaxShow); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_MaxCache); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - if (m_MinShow.intValue < 0) m_MinShow.intValue = 0; - if (m_MinShow.intValue < 0) m_MinShow.intValue = 0; - if (m_MaxCache.intValue < 0) m_MaxCache.intValue = 0; - EditorGUI.PropertyField(drawRect, m_BarType); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_BarPercentStack); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_BarWidth); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_BarGap); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_BarZebraWidth); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_BarZebraGap); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_Clip); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_Ignore); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_IgnoreValue); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_ShowAsPositiveNumber); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_Large); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_LargeThreshold); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_ItemStyle); - drawRect.y += EditorGUI.GetPropertyHeight(m_ItemStyle); - EditorGUI.PropertyField(drawRect, m_Label); - drawRect.y += EditorGUI.GetPropertyHeight(m_Label); - EditorGUI.PropertyField(drawRect, m_Emphasis); - drawRect.y += EditorGUI.GetPropertyHeight(m_Emphasis); + PropertyFieldLimitMin(prop, "m_MinShow", 0); + PropertyFieldLimitMin(prop, "m_MaxShow", 0); + PropertyFieldLimitMin(prop, "m_MaxCache", 0); + PropertyField(prop, "m_BarType"); + PropertyField(prop, "m_BarPercentStack"); + PropertyField(prop, "m_BarWidth"); + PropertyField(prop, "m_BarGap"); + PropertyField(prop, "m_BarZebraWidth"); + PropertyField(prop, "m_BarZebraGap"); + PropertyField(prop, "m_Clip"); + PropertyField(prop, "m_Ignore"); + PropertyField(prop, "m_IgnoreValue"); + PropertyField(prop, "m_ShowAsPositiveNumber"); + PropertyField(prop, "m_Large"); + PropertyField(prop, "m_LargeThreshold"); + PropertyField(prop, "m_ItemStyle"); + PropertyField(prop, "m_Label"); + PropertyField(prop, "m_Emphasis"); break; case SerieType.Pie: - EditorGUI.PropertyField(drawRect, m_RoseType); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_Space); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - ChartEditorHelper.MakeTwoField(ref drawRect, pos.width, m_Center, "Center"); - ChartEditorHelper.MakeTwoField(ref drawRect, pos.width, m_Radius, "Radius"); - EditorGUI.PropertyField(drawRect, m_RoundCap); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_Ignore); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_IgnoreValue); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_AvoidLabelOverlap); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_ItemStyle); - drawRect.y += EditorGUI.GetPropertyHeight(m_ItemStyle); - EditorGUI.PropertyField(drawRect, m_Label); - drawRect.y += EditorGUI.GetPropertyHeight(m_Label); - EditorGUI.PropertyField(drawRect, m_Emphasis); - drawRect.y += EditorGUI.GetPropertyHeight(m_Emphasis); + PropertyField(prop, "m_RoseType"); + PropertyField(prop, "m_Space"); + PropertyTwoFiled(prop, "m_Center"); + PropertyTwoFiled(prop, "m_Radius"); + PropertyField(prop, "m_RoundCap"); + PropertyField(prop, "m_Ignore"); + PropertyField(prop, "m_IgnoreValue"); + PropertyField(prop, "m_AvoidLabelOverlap"); + PropertyField(prop, "m_ItemStyle"); + PropertyField(prop, "m_Label"); + PropertyField(prop, "m_Emphasis"); break; case SerieType.Ring: - ChartEditorHelper.MakeTwoField(ref drawRect, pos.width, m_Center, "Center"); - ChartEditorHelper.MakeTwoField(ref drawRect, pos.width, m_Radius, "Radius"); - EditorGUI.PropertyField(drawRect, m_StartAngle); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_RingGap); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_RoundCap); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_Clockwise); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_TitleStyle); - drawRect.y += EditorGUI.GetPropertyHeight(m_TitleStyle); - EditorGUI.PropertyField(drawRect, m_ItemStyle); - drawRect.y += EditorGUI.GetPropertyHeight(m_ItemStyle); - EditorGUI.PropertyField(drawRect, m_Label); - drawRect.y += EditorGUI.GetPropertyHeight(m_Label); - EditorGUI.PropertyField(drawRect, m_Emphasis); - drawRect.y += EditorGUI.GetPropertyHeight(m_Emphasis); + PropertyTwoFiled(prop, "m_Center"); + PropertyTwoFiled(prop, "m_Radius"); + PropertyField(prop, "m_StartAngle"); + PropertyField(prop, "m_RingGap"); + PropertyField(prop, "m_RoundCap"); + PropertyField(prop, "m_Clockwise"); + PropertyField(prop, "m_TitleStyle"); + PropertyField(prop, "m_ItemStyle"); + PropertyField(prop, "m_Label"); + PropertyField(prop, "m_Emphasis"); break; case SerieType.Radar: - EditorGUI.PropertyField(drawRect, m_RadarType); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_RadarIndex); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_Symbol); - drawRect.y += EditorGUI.GetPropertyHeight(m_Symbol); - EditorGUI.PropertyField(drawRect, m_LineStyle); - drawRect.y += EditorGUI.GetPropertyHeight(m_LineStyle); - EditorGUI.PropertyField(drawRect, m_ItemStyle); - drawRect.y += EditorGUI.GetPropertyHeight(m_ItemStyle); - EditorGUI.PropertyField(drawRect, m_AreaStyle); - drawRect.y += EditorGUI.GetPropertyHeight(m_AreaStyle); - EditorGUI.PropertyField(drawRect, m_Label); - drawRect.y += EditorGUI.GetPropertyHeight(m_Label); - EditorGUI.PropertyField(drawRect, m_Emphasis); - drawRect.y += EditorGUI.GetPropertyHeight(m_Emphasis); + PropertyField(prop, "m_RadarType"); + PropertyField(prop, "m_RadarIndex"); + PropertyField(prop, "m_Symbol"); + PropertyField(prop, "m_LineStyle"); + PropertyField(prop, "m_ItemStyle"); + PropertyField(prop, "m_AreaStyle"); + PropertyField(prop, "m_Label"); + PropertyField(prop, "m_Emphasis"); break; case SerieType.Scatter: case SerieType.EffectScatter: - EditorGUI.PropertyField(drawRect, m_Clip); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_Symbol); - drawRect.y += EditorGUI.GetPropertyHeight(m_Symbol); - EditorGUI.PropertyField(drawRect, m_ItemStyle); - drawRect.y += EditorGUI.GetPropertyHeight(m_ItemStyle); - EditorGUI.PropertyField(drawRect, m_Label); - drawRect.y += EditorGUI.GetPropertyHeight(m_Label); - EditorGUI.PropertyField(drawRect, m_Emphasis); - drawRect.y += EditorGUI.GetPropertyHeight(m_Emphasis); + PropertyField(prop, "m_Clip"); + PropertyField(prop, "m_Symbol"); + PropertyField(prop, "m_ItemStyle"); + PropertyField(prop, "m_Label"); + PropertyField(prop, "m_Emphasis"); break; case SerieType.Heatmap: - EditorGUI.PropertyField(drawRect, m_Ignore); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_IgnoreValue); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_ItemStyle); - drawRect.y += EditorGUI.GetPropertyHeight(m_ItemStyle); - EditorGUI.PropertyField(drawRect, m_Label); - drawRect.y += EditorGUI.GetPropertyHeight(m_Label); - EditorGUI.PropertyField(drawRect, m_Emphasis); - drawRect.y += EditorGUI.GetPropertyHeight(m_Emphasis); + PropertyField(prop, "m_Ignore"); + PropertyField(prop, "m_IgnoreValue"); + PropertyField(prop, "m_ItemStyle"); + PropertyField(prop, "m_Label"); + PropertyField(prop, "m_Emphasis"); break; case SerieType.Gauge: - EditorGUI.PropertyField(drawRect, m_GaugeType); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - ChartEditorHelper.MakeTwoField(ref drawRect, pos.width, m_Center, "Center"); - //ChartEditorHelper.MakeTwoField(ref drawRect, pos.width, m_Radius, "Radius"); - EditorGUI.PropertyField(drawRect, m_Radius.GetArrayElementAtIndex(0), new GUIContent("Radius")); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_Min); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_Max); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_StartAngle); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_EndAngle); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_SplitNumber); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - if (m_SplitNumber.intValue > 36) - { - m_SplitNumber.intValue = 36; - } - EditorGUI.PropertyField(drawRect, m_RoundCap); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_TitleStyle); - drawRect.y += EditorGUI.GetPropertyHeight(m_TitleStyle); - EditorGUI.PropertyField(drawRect, m_GaugeAxis); - drawRect.y += EditorGUI.GetPropertyHeight(m_GaugeAxis); - EditorGUI.PropertyField(drawRect, m_GaugePointer); - drawRect.y += EditorGUI.GetPropertyHeight(m_GaugePointer); - EditorGUI.PropertyField(drawRect, m_ItemStyle); - drawRect.y += EditorGUI.GetPropertyHeight(m_ItemStyle); - EditorGUI.PropertyField(drawRect, m_Label); - drawRect.y += EditorGUI.GetPropertyHeight(m_Label); - EditorGUI.PropertyField(drawRect, m_Emphasis); - drawRect.y += EditorGUI.GetPropertyHeight(m_Emphasis); + PropertyField(prop, "m_GaugeType"); + PropertyTwoFiled(prop, "m_Center"); + PropertyTwoFiled(prop, "m_Radius"); + PropertyField(prop, "m_Min"); + PropertyField(prop, "m_Max"); + PropertyField(prop, "m_StartAngle"); + PropertyField(prop, "m_EndAngle"); + PropertyFieldLimitMax(prop, "m_SplitNumber", 36); + PropertyField(prop, "m_RoundCap"); + PropertyField(prop, "m_TitleStyle"); + PropertyField(prop, "m_GaugeAxis"); + PropertyField(prop, "m_GaugePointer"); + PropertyField(prop, "m_ItemStyle"); + PropertyField(prop, "m_Label"); + PropertyField(prop, "m_Emphasis"); break; case SerieType.Liquid: - EditorGUI.PropertyField(drawRect, m_VesselIndex); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_Min); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_Max); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_WaveLength); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_WaveHeight); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_WaveSpeed); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_WaveOffset); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - EditorGUI.PropertyField(drawRect, m_ItemStyle); - drawRect.y += EditorGUI.GetPropertyHeight(m_ItemStyle); - EditorGUI.PropertyField(drawRect, m_Label); - drawRect.y += EditorGUI.GetPropertyHeight(m_Label); + PropertyField(prop, "m_VesselIndex"); + PropertyField(prop, "m_Min"); + PropertyField(prop, "m_Max"); + PropertyField(prop, "m_WaveLength"); + PropertyField(prop, "m_WaveHeight"); + PropertyField(prop, "m_WaveSpeed"); + PropertyField(prop, "m_WaveOffset"); + PropertyField(prop, "m_ItemStyle"); + PropertyField(prop, "m_Label"); break; } - EditorGUI.PropertyField(drawRect, m_Animation); - drawRect.y += EditorGUI.GetPropertyHeight(m_Animation); - drawRect.width = EditorGUIUtility.labelWidth + 10; - m_DataFoldout[index] = EditorGUI.Foldout(drawRect, m_DataFoldout[index], "Data"); - drawRect.width = pos.width; - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - if (m_DataFoldout[index]) - { - EditorGUI.indentLevel++; + PropertyField(prop, "m_Animation"); + //PropertyListField(prop, "m_Data"); + DrawData(pos, prop, serieType, ref m_DrawRect); + --EditorGUI.indentLevel; + } + } - float nameWid = 45; + private void DrawData(Rect pos, SerializedProperty prop, SerieType serieType, ref Rect drawRect) + { + SerializedProperty m_Datas = prop.FindPropertyRelative("m_Data"); + SerializedProperty m_DataDimension = prop.FindPropertyRelative("m_ShowDataDimension"); + SerializedProperty m_ShowDataName = prop.FindPropertyRelative("m_ShowDataName"); + SerializedProperty m_ShowDataIcon = prop.FindPropertyRelative("m_ShowDataIcon"); + int index = InitToggle(prop); + drawRect.width = EditorGUIUtility.labelWidth + 10; + m_DataFoldout[index] = EditorGUI.Foldout(drawRect, m_DataFoldout[index], "Data"); + drawRect.width = pos.width; + + AddSingleLineHeight(); + if (m_DataFoldout[index]) + { + EditorGUI.indentLevel++; + + float nameWid = 45; #if UNITY_2019_3_OR_NEWER var gap = 2; var namegap = 3; #else - var gap = 0; - var namegap = 0; + var gap = 0; + var namegap = 0; #endif - EditorGUI.PropertyField(new Rect(drawRect.x, drawRect.y, pos.width - 2 * nameWid - 2, pos.height), m_DataDimension); - var nameRect = new Rect(pos.width - 2 * nameWid + 14 + gap, drawRect.y, nameWid - gap, pos.height); - if (XChartsSettings.editorBlockEnable) - { - nameRect.x += ChartEditorHelper.BLOCK_WIDTH; - } - if (GUI.Button(nameRect, new GUIContent("Name"))) - { - m_ShowDataName.boolValue = !m_ShowDataName.boolValue; - } - var iconRect = new Rect(pos.width - nameWid + 14, drawRect.y, nameWid + namegap, pos.height); - if (XChartsSettings.editorBlockEnable) - { - iconRect.x += ChartEditorHelper.BLOCK_WIDTH; - } - if (GUI.Button(iconRect, new GUIContent("More..."))) - { - m_ShowDataIcon.boolValue = !m_ShowDataIcon.boolValue; - } - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - - var listSize = m_Datas.arraySize; - listSize = EditorGUI.IntField(drawRect, "Size", listSize); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - - if (listSize < 0) listSize = 0; - if (m_DataDimension.intValue < 1) m_DataDimension.intValue = 1; - int dimension = m_DataDimension.intValue; - bool showName = m_ShowDataName.boolValue; - bool showIcon = m_ShowDataIcon.boolValue; - bool showSelected = (serieType == SerieType.Pie); - if (listSize != m_Datas.arraySize) - { - while (listSize > m_Datas.arraySize) m_Datas.arraySize++; - while (listSize < m_Datas.arraySize) m_Datas.arraySize--; - } - if (listSize > 30 && !XChartsSettings.editorShowAllListData) - { - int num = listSize > 10 ? 10 : listSize; - for (int i = 0; i < num; i++) - { - DrawDataElement(ref drawRect, dimension, m_Datas, showName, showIcon, showSelected, i, pos.width); - } - if (num >= 10) - { - EditorGUI.LabelField(drawRect, "..."); - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - DrawDataElement(ref drawRect, dimension, m_Datas, showName, showIcon, showSelected, listSize - 1, pos.width); - } - } - else - { - for (int i = 0; i < m_Datas.arraySize; i++) - { - DrawDataElement(ref drawRect, dimension, m_Datas, showName, showIcon, showSelected, i, pos.width); - } - } - drawRect.y += EditorGUIUtility.standardVerticalSpacing; - EditorGUI.indentLevel--; + EditorGUI.PropertyField(new Rect(drawRect.x, drawRect.y, pos.width - 2 * nameWid - 2, pos.height), m_DataDimension); + var nameRect = new Rect(pos.width - 2 * nameWid + 14 + gap, drawRect.y, nameWid - gap, pos.height); + if (XChartsSettings.editorBlockEnable) + { + nameRect.x += ChartEditorHelper.BLOCK_WIDTH; } - --EditorGUI.indentLevel; + if (GUI.Button(nameRect, new GUIContent("Name"))) + { + m_ShowDataName.boolValue = !m_ShowDataName.boolValue; + } + var iconRect = new Rect(pos.width - nameWid + 14, drawRect.y, nameWid + namegap, pos.height); + if (XChartsSettings.editorBlockEnable) + { + iconRect.x += ChartEditorHelper.BLOCK_WIDTH; + } + if (GUI.Button(iconRect, new GUIContent("More..."))) + { + m_ShowDataIcon.boolValue = !m_ShowDataIcon.boolValue; + } + AddSingleLineHeight(); + var listSize = m_Datas.arraySize; + listSize = EditorGUI.IntField(drawRect, "Size", listSize); + AddSingleLineHeight(); + + if (listSize < 0) listSize = 0; + if (m_DataDimension.intValue < 1) m_DataDimension.intValue = 1; + int dimension = m_DataDimension.intValue; + bool showName = m_ShowDataName.boolValue; + bool showIcon = m_ShowDataIcon.boolValue; + bool showSelected = (serieType == SerieType.Pie); + if (listSize != m_Datas.arraySize) + { + while (listSize > m_Datas.arraySize) m_Datas.arraySize++; + while (listSize < m_Datas.arraySize) m_Datas.arraySize--; + } + if (listSize > 30 && !XChartsSettings.editorShowAllListData) + { + int num = listSize > 10 ? 10 : listSize; + for (int i = 0; i < num; i++) + { + DrawDataElement(ref drawRect, dimension, m_Datas, showName, showIcon, showSelected, i, pos.width); + } + if (num >= 10) + { + EditorGUI.LabelField(drawRect, "..."); + AddSingleLineHeight(); + DrawDataElement(ref drawRect, dimension, m_Datas, showName, showIcon, showSelected, listSize - 1, pos.width); + } + } + else + { + for (int i = 0; i < m_Datas.arraySize; i++) + { + DrawDataElement(ref drawRect, dimension, m_Datas, showName, showIcon, showSelected, i, pos.width); + } + } + AddHeight(EditorGUIUtility.standardVerticalSpacing); + EditorGUI.indentLevel--; } } @@ -491,7 +310,7 @@ namespace XCharts { EditorGUI.PropertyField(drawRect, element, new GUIContent("Element " + index)); } - drawRect.y += EditorGUI.GetPropertyHeight(element) + EditorGUIUtility.standardVerticalSpacing; + AddHeight(EditorGUI.GetPropertyHeight(element)); } else { @@ -527,8 +346,7 @@ namespace XCharts drawRect.width = dataWid + 40 + dimension * namegap; EditorGUI.PropertyField(drawRect, sereName, GUIContent.none); } - - drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; + AddSingleLineHeight(); drawRect.x = lastX; drawRect.width = lastWid; EditorGUIUtility.fieldWidth = lastFieldWid; @@ -547,149 +365,23 @@ namespace XCharts var m_EnableSymbol = serieData.FindPropertyRelative("m_EnableSymbol"); var m_Symbol = serieData.FindPropertyRelative("m_Symbol"); EditorGUI.PropertyField(drawRect, m_Icon); - drawRect.y += EditorGUI.GetPropertyHeight(m_Icon); + AddHeight(EditorGUI.GetPropertyHeight(m_Icon)); EditorGUI.PropertyField(drawRect, m_Symbol); ChartEditorHelper.MakeBool(drawRect, m_EnableSymbol, 1, "(enable)"); - drawRect.y += EditorGUI.GetPropertyHeight(m_Symbol); + AddHeight(EditorGUI.GetPropertyHeight(m_Symbol)); EditorGUI.PropertyField(drawRect, m_Label); ChartEditorHelper.MakeBool(drawRect, m_EnableLabel, 1, "(enable)"); - drawRect.y += EditorGUI.GetPropertyHeight(m_Label); + AddHeight(EditorGUI.GetPropertyHeight(m_Label)); EditorGUI.PropertyField(drawRect, m_ItemStyle); ChartEditorHelper.MakeBool(drawRect, m_EnableItemStyle, 1, "(enable)"); - drawRect.y += EditorGUI.GetPropertyHeight(m_ItemStyle); + AddHeight(EditorGUI.GetPropertyHeight(m_ItemStyle)); EditorGUI.PropertyField(drawRect, m_Emphasis); ChartEditorHelper.MakeBool(drawRect, m_EnableEmphasis, 1, "(enable)"); - drawRect.y += EditorGUI.GetPropertyHeight(m_Emphasis); + AddHeight(EditorGUI.GetPropertyHeight(m_Emphasis)); EditorGUI.indentLevel -= 2; } } - public override float GetPropertyHeight(SerializedProperty prop, GUIContent label) - { - float height = 0; - int index = InitToggle(prop); - if (!m_SerieModuleToggle.ContainsKey(prop.propertyPath) || !m_SerieModuleToggle[prop.propertyPath]) - { - return EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - } - else - { - SerializedProperty type = prop.FindPropertyRelative("m_Type"); - var serieType = (SerieType)type.enumValueIndex; - switch (serieType) - { - case SerieType.Line: - height += 20 * EditorGUIUtility.singleLineHeight + 19 * EditorGUIUtility.standardVerticalSpacing; - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_Symbol")); - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_LineStyle")); - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_LineArrow")); - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_ItemStyle")); - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_AreaStyle")); - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_Label")); - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_Emphasis")); - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_Animation")); - break; - case SerieType.Bar: - height += 22 * EditorGUIUtility.singleLineHeight + 21 * EditorGUIUtility.standardVerticalSpacing; - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_ItemStyle")); - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_Label")); - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_Emphasis")); - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_Animation")); - break; - case SerieType.Pie: - height += 12 * EditorGUIUtility.singleLineHeight + 11 * EditorGUIUtility.standardVerticalSpacing; - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_ItemStyle")); - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_Label")); - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_Emphasis")); - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_Animation")); - break; - case SerieType.Ring: - height += 10 * EditorGUIUtility.singleLineHeight + 9 * EditorGUIUtility.standardVerticalSpacing; - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_TitleStyle")); - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_ItemStyle")); - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_Label")); - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_Emphasis")); - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_Animation")); - break; - case SerieType.Radar: - height += 6 * EditorGUIUtility.singleLineHeight + 5 * EditorGUIUtility.standardVerticalSpacing; - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_Symbol")); - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_LineStyle")); - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_ItemStyle")); - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_AreaStyle")); - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_Label")); - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_Emphasis")); - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_Animation")); - break; - case SerieType.Scatter: - case SerieType.EffectScatter: - height += 5 * EditorGUIUtility.singleLineHeight + 4 * EditorGUIUtility.standardVerticalSpacing; - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_Symbol")); - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_ItemStyle")); - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_Label")); - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_Emphasis")); - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_Animation")); - break; - case SerieType.Heatmap: - height += 6 * EditorGUIUtility.singleLineHeight + 5 * EditorGUIUtility.standardVerticalSpacing; - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_ItemStyle")); - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_Label")); - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_Emphasis")); - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_Animation")); - break; - case SerieType.Gauge: - height += 13 * EditorGUIUtility.singleLineHeight + 12 * EditorGUIUtility.standardVerticalSpacing; - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_TitleStyle")); - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_GaugeAxis")); - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_GaugePointer")); - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_ItemStyle")); - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_Label")); - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_Emphasis")); - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_Animation")); - break; - case SerieType.Liquid: - height += 11 * EditorGUIUtility.singleLineHeight + 10 * EditorGUIUtility.standardVerticalSpacing; - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_ItemStyle")); - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_Label")); - height += EditorGUI.GetPropertyHeight(prop.FindPropertyRelative("m_Animation")); - break; - } - if (m_DataFoldout[index]) - { - SerializedProperty m_Data = prop.FindPropertyRelative("m_Data"); - height += 2 * EditorGUIUtility.singleLineHeight + 1 * EditorGUIUtility.standardVerticalSpacing; - int num = m_Data.arraySize; - if (num > 30) - { - num = 11; - height += (num + 1) * EditorGUIUtility.singleLineHeight + (num) * EditorGUIUtility.standardVerticalSpacing; - } - else - { - height += (num) * EditorGUIUtility.singleLineHeight + (num - 1) * EditorGUIUtility.standardVerticalSpacing; - } - height += EditorGUIUtility.standardVerticalSpacing; - if (prop.FindPropertyRelative("m_ShowDataIcon").boolValue) - { - for (int i = 0; i < num; i++) - { - var item = m_Data.GetArrayElementAtIndex(i); - height += EditorGUI.GetPropertyHeight(item.FindPropertyRelative("m_IconStyle")); - height += EditorGUI.GetPropertyHeight(item.FindPropertyRelative("m_Symbol")); - height += EditorGUI.GetPropertyHeight(item.FindPropertyRelative("m_Label")); - height += EditorGUI.GetPropertyHeight(item.FindPropertyRelative("m_ItemStyle")); - height += EditorGUI.GetPropertyHeight(item.FindPropertyRelative("m_Emphasis")); - } - } - } - if (m_ShowJsonDataArea) - { - height += EditorGUIUtility.singleLineHeight * 4 + EditorGUIUtility.standardVerticalSpacing; - } - return height; - } - } - private int InitToggle(SerializedProperty prop) { int index = 0; diff --git a/Editor/Utility/ChartEditorHelper.cs b/Editor/Utility/ChartEditorHelper.cs index 509e7a22..4ef9d4b4 100644 --- a/Editor/Utility/ChartEditorHelper.cs +++ b/Editor/Utility/ChartEditorHelper.cs @@ -14,7 +14,7 @@ public class ChartEditorHelper #else public const float INDENT_WIDTH = 15; public const float BOOL_WIDTH = 15; - public const float ARROW_WIDTH = 13; + public const float ARROW_WIDTH = 17.2f; public const float BLOCK_WIDTH = 0; public const float GAP_WIDTH = 0; #endif @@ -42,13 +42,17 @@ public class ChartEditorHelper drawRect = offset.Remove(drawRect); } - public static void MakeTwoField(ref Rect drawRect, float rectWidth, SerializedProperty arrayProp, string name) + public static void MakeTwoField(ref Rect drawRect, float rectWidth, SerializedProperty arrayProp, + string name) { while (arrayProp.arraySize < 2) arrayProp.arraySize++; - MakeTwoField(ref drawRect, rectWidth, arrayProp.GetArrayElementAtIndex(0), arrayProp.GetArrayElementAtIndex(1), name); + var prop1 = arrayProp.GetArrayElementAtIndex(0); + var prop2 = arrayProp.GetArrayElementAtIndex(1); + MakeTwoField(ref drawRect, rectWidth, prop1, prop2, name); } - public static void MakeDivideList(ref Rect drawRect, float rectWidth, SerializedProperty arrayProp, string name, int showNum) + public static void MakeDivideList(ref Rect drawRect, float rectWidth, SerializedProperty arrayProp, + string name, int showNum) { while (arrayProp.arraySize < showNum) arrayProp.arraySize++; EditorGUI.LabelField(drawRect, name); @@ -71,7 +75,8 @@ public class ChartEditorHelper drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; } - public static void MakeTwoField(ref Rect drawRect, float rectWidth, SerializedProperty prop1, SerializedProperty prop2, string name) + public static void MakeTwoField(ref Rect drawRect, float rectWidth, SerializedProperty prop1, + SerializedProperty prop2, string name) { EditorGUI.LabelField(drawRect, name); var startX = drawRect.x + EditorGUIUtility.labelWidth - EditorGUI.indentLevel * INDENT_WIDTH + GAP_WIDTH; @@ -135,21 +140,23 @@ public class ChartEditorHelper { float defaultWidth = drawRect.width; float defaultX = drawRect.x; + var style = bold ? Styles.foldoutStyle : EditorStyles.foldout; drawRect.width = EditorGUIUtility.labelWidth - EditorGUI.indentLevel * INDENT_WIDTH; - moduleToggle = EditorGUI.Foldout(drawRect, moduleToggle, content, bold ? Styles.foldoutStyle : EditorStyles.foldout); + moduleToggle = EditorGUI.Foldout(drawRect, moduleToggle, content, style); MakeBool(drawRect, prop); drawRect.width = defaultWidth; drawRect.x = defaultX; return moduleToggle; } - public static bool MakeFoldout(ref Rect drawRect, Dictionary heights, Dictionary moduleToggle, - string key, string content, SerializedProperty prop, bool bold = false) + public static bool MakeFoldout(ref Rect drawRect, Dictionary heights, + Dictionary moduleToggle, string key, string content, SerializedProperty prop, bool bold = false) { float defaultWidth = drawRect.width; float defaultX = drawRect.x; - drawRect.width = EditorGUIUtility.labelWidth - EditorGUI.indentLevel * INDENT_WIDTH; - moduleToggle[key] = EditorGUI.Foldout(drawRect, moduleToggle[key], content, bold ? Styles.foldoutStyle : EditorStyles.foldout); + var style = bold ? Styles.foldoutStyle : EditorStyles.foldout; + drawRect.width = EditorGUIUtility.labelWidth; + moduleToggle[key] = EditorGUI.Foldout(drawRect, moduleToggle[key], content, style); if (prop != null) { if (prop.propertyType == SerializedPropertyType.Boolean) @@ -201,10 +208,11 @@ public class ChartEditorHelper drawRect.x = defaultX; } - public static bool MakeFoldout(ref Rect drawRect, ref float height, ref Dictionary moduleToggle, SerializedProperty prop, - string moduleName, string showPropName, bool bold = false) + public static bool MakeFoldout(ref Rect drawRect, ref float height, ref Dictionary moduleToggle, + SerializedProperty prop, string moduleName, string showPropName, bool bold = false) { - var flag = MakeFoldout(ref drawRect, ref moduleToggle, prop, moduleName, prop.FindPropertyRelative(showPropName), bold); + var relativeProp = prop.FindPropertyRelative(showPropName); + var flag = MakeFoldout(ref drawRect, ref moduleToggle, prop, moduleName, relativeProp, bold); drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; height += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; return flag; @@ -256,13 +264,15 @@ public class ChartEditorHelper return toggle; } - public static bool MakeListWithFoldout(ref Rect drawRect, SerializedProperty listProp, bool foldout, bool showOrder = false, bool showSize = true) + public static bool MakeListWithFoldout(ref Rect drawRect, SerializedProperty listProp, bool foldout, + bool showOrder = false, bool showSize = true) { var height = 0f; return MakeListWithFoldout(ref drawRect, ref height, listProp, foldout, showOrder, showSize); } - public static bool MakeListWithFoldout(ref Rect drawRect, ref float height, SerializedProperty listProp, bool foldout, bool showOrder = false, bool showSize = true) + public static bool MakeListWithFoldout(ref Rect drawRect, ref float height, SerializedProperty listProp, + bool foldout, bool showOrder = false, bool showSize = true) { var rawWidth = drawRect.width; drawRect.width = EditorGUIUtility.labelWidth + 10; @@ -277,17 +287,19 @@ public class ChartEditorHelper return flag; } - public static void MakeList(ref Rect drawRect, SerializedProperty listProp, bool showOrder = false, bool showSize = true) + public static void MakeList(ref Rect drawRect, SerializedProperty listProp, bool showOrder = false, + bool showSize = true) { var height = 0f; MakeList(ref drawRect, ref height, listProp, showOrder, showSize); } - public static void MakeList(ref Rect drawRect, ref float height, SerializedProperty listProp, bool showOrder = false, bool showSize = true) + public static void MakeList(ref Rect drawRect, ref float height, SerializedProperty listProp, + bool showOrder = false, bool showSize = true) { EditorGUI.indentLevel++; var listSize = listProp.arraySize; - var iconWidth = 15; + var iconWidth = 14; var iconGap = 3f; if (showSize) { @@ -300,7 +312,9 @@ public class ChartEditorHelper { iconRect.x += BLOCK_WIDTH; } - if (GUI.Button(iconRect, Styles.iconAdd)) + var oldColor = GUI.contentColor; + GUI.contentColor = Color.black; + if (GUI.Button(iconRect, Styles.iconAdd, Styles.invisibleButton)) { if (listProp.displayName.Equals("Series")) { @@ -312,6 +326,7 @@ public class ChartEditorHelper listProp.arraySize++; } } + GUI.contentColor = oldColor; listSize = listProp.arraySize; listSize = EditorGUI.IntField(elementRect, "Size", listSize); } @@ -358,11 +373,10 @@ public class ChartEditorHelper SerializedProperty element = listProp.GetArrayElementAtIndex(i); if (showOrder) { - var temp = INDENT_WIDTH + GAP_WIDTH + iconGap; var isSerie = "Serie".Equals(element.type); var elementRect = isSerie - ? new Rect(drawRect.x, drawRect.y, drawRect.width + INDENT_WIDTH - iconGap, drawRect.height) + ? new Rect(drawRect.x, drawRect.y, drawRect.width + INDENT_WIDTH - 2 * iconGap, drawRect.height) : new Rect(drawRect.x, drawRect.y, drawRect.width - 3 * iconWidth, drawRect.height); EditorGUI.PropertyField(elementRect, element, new GUIContent("Element " + i)); var iconRect = new Rect(drawRect.width - 3 * iconWidth + temp, drawRect.y, iconWidth, drawRect.height); @@ -370,7 +384,9 @@ public class ChartEditorHelper { iconRect.x += BLOCK_WIDTH; } - if (GUI.Button(iconRect, Styles.iconUp)) + var oldColor = GUI.contentColor; + GUI.contentColor = Color.black; + if (GUI.Button(iconRect, Styles.iconUp, Styles.invisibleButton)) { if (i > 0) listProp.MoveArrayElement(i, i - 1); } @@ -379,7 +395,7 @@ public class ChartEditorHelper { iconRect.x += BLOCK_WIDTH; } - if (GUI.Button(iconRect, Styles.iconDown)) + if (GUI.Button(iconRect, Styles.iconDown, Styles.invisibleButton)) { if (i < listProp.arraySize - 1) listProp.MoveArrayElement(i, i + 1); } @@ -388,7 +404,7 @@ public class ChartEditorHelper { iconRect.x += BLOCK_WIDTH; } - if (GUI.Button(iconRect, Styles.iconRemove)) + if (GUI.Button(iconRect, Styles.iconRemove, Styles.invisibleButton)) { if (i < listProp.arraySize && i >= 0) listProp.DeleteArrayElementAtIndex(i); } @@ -397,6 +413,7 @@ public class ChartEditorHelper drawRect.y += EditorGUI.GetPropertyHeight(element) + EditorGUIUtility.standardVerticalSpacing; height += EditorGUI.GetPropertyHeight(element) + EditorGUIUtility.standardVerticalSpacing; } + GUI.contentColor = oldColor; } else { @@ -409,23 +426,62 @@ public class ChartEditorHelper EditorGUI.indentLevel--; } - public static bool PropertyField(ref Rect drawRect, Dictionary heights, string key, SerializedProperty prop) + public static bool PropertyField(ref Rect drawRect, Dictionary heights, string key, + SerializedProperty prop) { - if (prop == null) - { - return false; - } + if (prop == null) return false; EditorGUI.PropertyField(drawRect, prop, true); var hig = EditorGUI.GetPropertyHeight(prop); - // var hig = prop.hasVisibleChildren - // ? EditorGUI.GetPropertyHeight(prop) - // : EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; drawRect.y += hig; heights[key] += hig; return true; } - public static bool PropertyField(ref Rect drawRect, Dictionary heights, string key, SerializedProperty parentProp, string relativeName) + + public static bool PropertyFieldWithMinValue(ref Rect drawRect, Dictionary heights, string key, + SerializedProperty prop, float minValue) + { + if (prop == null) return false; + EditorGUI.PropertyField(drawRect, prop, true); + if (prop.propertyType == SerializedPropertyType.Float && prop.floatValue < minValue) + prop.floatValue = minValue; + if (prop.propertyType == SerializedPropertyType.Integer && prop.intValue < minValue) + prop.intValue = (int)minValue; + var hig = EditorGUI.GetPropertyHeight(prop); + drawRect.y += hig; + heights[key] += hig; + return true; + } + + public static bool PropertyFieldWithMaxValue(ref Rect drawRect, Dictionary heights, string key, + SerializedProperty prop, float maxValue) + { + if (prop == null) return false; + EditorGUI.PropertyField(drawRect, prop, true); + if (prop.propertyType == SerializedPropertyType.Float && prop.floatValue > maxValue) + prop.floatValue = maxValue; + if (prop.propertyType == SerializedPropertyType.Integer && prop.intValue > maxValue) + prop.intValue = (int)maxValue; + var hig = EditorGUI.GetPropertyHeight(prop); + drawRect.y += hig; + heights[key] += hig; + return true; + } + + public static bool PropertyField(ref Rect drawRect, Dictionary heights, string key, + SerializedProperty parentProp, string relativeName) { return PropertyField(ref drawRect, heights, key, parentProp.FindPropertyRelative(relativeName)); } + public static bool PropertyFieldWithMinValue(ref Rect drawRect, Dictionary heights, string key, + SerializedProperty parentProp, string relativeName, float minValue) + { + var relativeProp = parentProp.FindPropertyRelative(relativeName); + return PropertyFieldWithMinValue(ref drawRect, heights, key, relativeProp, minValue); + } + public static bool PropertyFieldWithMaxValue(ref Rect drawRect, Dictionary heights, string key, + SerializedProperty parentProp, string relativeName, float maxValue) + { + var relativeProp = parentProp.FindPropertyRelative(relativeName); + return PropertyFieldWithMaxValue(ref drawRect, heights, key, relativeProp, maxValue); + } } \ No newline at end of file diff --git a/Runtime/Internal/CoordinateChart.cs b/Runtime/Internal/CoordinateChart.cs index 485eabaa..85240113 100644 --- a/Runtime/Internal/CoordinateChart.cs +++ b/Runtime/Internal/CoordinateChart.cs @@ -26,7 +26,6 @@ namespace XCharts private float m_DataZoomLastStartIndex; private float m_DataZoomLastEndIndex; private bool m_CheckDataZoomLabel; - private Dictionary> m_StackSeries = new Dictionary>(); protected override void InitComponent() { diff --git a/Runtime/Internal/Helper/SerieLabelHelper.cs b/Runtime/Internal/Helper/SerieLabelHelper.cs index 61cdf0c7..ae11d392 100644 --- a/Runtime/Internal/Helper/SerieLabelHelper.cs +++ b/Runtime/Internal/Helper/SerieLabelHelper.cs @@ -228,7 +228,6 @@ namespace XCharts labelRadius = serie.runtimeOutsideRadius + serieLabel.lineLength1; labelCenter = new Vector2(serie.runtimeCenterPos.x + labelRadius * Mathf.Sin(currRad), serie.runtimeCenterPos.y + labelRadius * Mathf.Cos(currRad)); - float labelWidth = serieData.labelObject.label.GetPreferredWidth(); serieData.labelPosition = labelCenter; } break; diff --git a/Runtime/Internal/Utility/ChartDrawer.cs b/Runtime/Internal/Utility/ChartDrawer.cs index 3ca96c31..62fbde61 100644 --- a/Runtime/Internal/Utility/ChartDrawer.cs +++ b/Runtime/Internal/Utility/ChartDrawer.cs @@ -100,7 +100,6 @@ namespace XCharts public static void DrawLineStyle(VertexHelper vh, LineStyle.Type lineType, float lineWidth, Vector3 startPos, Vector3 endPos, Color32 color) { - var type = lineType; switch (lineType) { case LineStyle.Type.Dashed: diff --git a/Runtime/XChartsPackageResourceImporter.cs b/Runtime/XChartsPackageResourceImporter.cs index 92bd6740..d75ef947 100644 --- a/Runtime/XChartsPackageResourceImporter.cs +++ b/Runtime/XChartsPackageResourceImporter.cs @@ -12,7 +12,6 @@ namespace XCharts public class XChartsPackageResourceImporter { bool m_EssentialResourcesImported; - bool m_ExamplesAndExtrasResourcesImported; public XChartsPackageResourceImporter() { } @@ -23,7 +22,6 @@ namespace XCharts public void OnGUI() { m_EssentialResourcesImported = File.Exists("Assets/XCharts/Resources/XChartsSettings.asset"); - m_ExamplesAndExtrasResourcesImported = Directory.Exists("Assets/XCharts/Examples & Extras"); GUILayout.BeginVertical(); {