From 234b5ecfa69bef26988f85bc62cc3d9e7c3e2c68 Mon Sep 17 00:00:00 2001 From: monitor1394 Date: Sat, 13 Mar 2021 04:21:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96`MultiComponentMode`=E5=BC=80?= =?UTF-8?q?=E5=90=AF=E5=90=8E=E7=9A=84=E7=BC=96=E8=BE=91=E4=BD=93=E9=AA=8C?= =?UTF-8?q?=E5=92=8C=E7=BB=84=E4=BB=B6=E5=88=B7=E6=96=B0=20#128?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/XCharts/CHANGELOG-EN.md | 1 + Assets/XCharts/CHANGELOG.md | 1 + Assets/XCharts/Editor/BaseChartEditor.cs | 39 ++++++++++++++++--- .../Runtime/Internal/Utility/ChartHelper.cs | 13 +++++++ 4 files changed, 48 insertions(+), 6 deletions(-) diff --git a/Assets/XCharts/CHANGELOG-EN.md b/Assets/XCharts/CHANGELOG-EN.md index 27f01f9d..9372c3e6 100644 --- a/Assets/XCharts/CHANGELOG-EN.md +++ b/Assets/XCharts/CHANGELOG-EN.md @@ -32,6 +32,7 @@ ## Latest +* (2021.03.13) Optimize the editing experience and component refresh after `MulticomponentMode` is enabled #128 * (2021.03.10) Added `CandlestickChart` #124 * (2021.03.06) Added `PieChart`'s `minAngle` parameter to support setting minimum sector angle #117 * (2021.03.05) Added support for `Legend` for several built-in ICONS #90 diff --git a/Assets/XCharts/CHANGELOG.md b/Assets/XCharts/CHANGELOG.md index 252979e1..04ee2c0a 100644 --- a/Assets/XCharts/CHANGELOG.md +++ b/Assets/XCharts/CHANGELOG.md @@ -32,6 +32,7 @@ ## Latest +* (2021.03.13) 优化`MultiComponentMode`开启后的编辑体验和组件刷新 #128 * (2021.03.10) 增加`CandlestickChart`K线图 #124 * (2021.03.06) 增加`PieChart`的`minAngle`参数支持设置最小扇区角度 #117 * (2021.03.05) 增加`Legend`几种内置图标的支持 #90 diff --git a/Assets/XCharts/Editor/BaseChartEditor.cs b/Assets/XCharts/Editor/BaseChartEditor.cs index b41088c8..7d13074e 100644 --- a/Assets/XCharts/Editor/BaseChartEditor.cs +++ b/Assets/XCharts/Editor/BaseChartEditor.cs @@ -21,8 +21,8 @@ namespace XCharts #if UNITY_2019_3_OR_NEWER private const float k_IconWidth = 14; private const float k_IconGap = 0f; - private const float k_IconXOffset = 7f; - private const float k_IconYOffset = -1f; + private const float k_IconXOffset = 10f; + private const float k_IconYOffset = -1.5f; #else private const float k_IconWidth = 14; private const float k_IconGap = 0f; @@ -200,20 +200,47 @@ namespace XCharts if (m_Flodouts[prop.displayName]) { EditorGUI.indentLevel++; - prop.arraySize = EditorGUILayout.IntField("Size", prop.arraySize); + //prop.arraySize = EditorGUILayout.IntField("Size", prop.arraySize); + var currRect = EditorGUILayout.GetControlRect(GUILayout.Height(0)); + currRect.y -= EditorGUIUtility.singleLineHeight; + var rect1 = new Rect(currRect.width + k_IconXOffset, + currRect.y + k_IconYOffset, + k_IconWidth, EditorGUIUtility.singleLineHeight); + if (GUI.Button(rect1, ChartEditorHelper.Styles.iconAdd, ChartEditorHelper.Styles.invisibleButton)) + { + prop.InsertArrayElementAtIndex(prop.arraySize > 0 ? prop.arraySize - 1 : 0); + } for (int i = 0; i < prop.arraySize; i++) { EditorGUILayout.PropertyField(prop.GetArrayElementAtIndex(i), true); - var currRect = EditorGUILayout.GetControlRect(GUILayout.Height(0)); + currRect = EditorGUILayout.GetControlRect(GUILayout.Height(0)); currRect.y -= EditorGUI.GetPropertyHeight(prop.GetArrayElementAtIndex(i)); - var rect1 = new Rect(currRect.width + k_IconXOffset, + 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); + if (prop.arraySize == 1) + { + if (EditorUtility.DisplayDialog("Delete component", "Confirm to delete last component?", "Sure", "Cancel")) + { + var chart = prop.GetArrayElementAtIndex(0).serializedObject.targetObject as BaseChart; + prop.DeleteArrayElementAtIndex(i); + serializedObject.ApplyModifiedProperties(); + chart.RemoveChartObject(); + chart.RefreshAllComponent(); + } + } + else if (i < prop.arraySize && i >= 0) + { + var chart = prop.GetArrayElementAtIndex(0).serializedObject.targetObject as BaseChart; + prop.DeleteArrayElementAtIndex(i); + serializedObject.ApplyModifiedProperties(); + chart.RemoveChartObject(); + chart.RefreshAllComponent(); + } } var rect2 = new Rect(currRect.width + k_IconXOffset - k_IconWidth - k_IconGap, currRect.y + k_IconYOffset, diff --git a/Assets/XCharts/Runtime/Internal/Utility/ChartHelper.cs b/Assets/XCharts/Runtime/Internal/Utility/ChartHelper.cs index 25b43555..8e8e8e0d 100644 --- a/Assets/XCharts/Runtime/Internal/Utility/ChartHelper.cs +++ b/Assets/XCharts/Runtime/Internal/Utility/ChartHelper.cs @@ -124,6 +124,19 @@ namespace XCharts GameObject.DestroyImmediate(go.gameObject); } } + public static void DestoryGameObjectByMatch(Transform parent, string match) + { + if (parent == null) return; + var childCount = parent.childCount; + for (int i = childCount - 1; i >= 0; i--) + { + var go = parent.GetChild(i); + if (go != null && go.name.StartsWith(match)) + { + GameObject.DestroyImmediate(go.gameObject); + } + } + } public static void DestoryGameObject(GameObject go) {