diff options
Diffstat (limited to 'Assets/uGUI-2017.1/Editor/EventSystem/EventTriggerEditor.cs')
-rw-r--r-- | Assets/uGUI-2017.1/Editor/EventSystem/EventTriggerEditor.cs | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/Assets/uGUI-2017.1/Editor/EventSystem/EventTriggerEditor.cs b/Assets/uGUI-2017.1/Editor/EventSystem/EventTriggerEditor.cs new file mode 100644 index 0000000..37811df --- /dev/null +++ b/Assets/uGUI-2017.1/Editor/EventSystem/EventTriggerEditor.cs @@ -0,0 +1,122 @@ +using System; +using UnityEngine; +using UnityEngine.EventSystems; + +namespace UnityEditor.EventSystems +{ + [CustomEditor(typeof(EventTrigger), true)] + public class EventTriggerEditor : Editor + { + SerializedProperty m_DelegatesProperty; + + GUIContent m_IconToolbarMinus; + GUIContent m_EventIDName; + GUIContent[] m_EventTypes; + GUIContent m_AddButonContent; + + protected virtual void OnEnable() + { + m_DelegatesProperty = serializedObject.FindProperty("m_Delegates"); + m_AddButonContent = new GUIContent("Add New Event Type"); + m_EventIDName = new GUIContent(""); + // Have to create a copy since otherwise the tooltip will be overwritten. + m_IconToolbarMinus = new GUIContent(EditorGUIUtility.IconContent("Toolbar Minus")); + m_IconToolbarMinus.tooltip = "Remove all events in this list."; + + string[] eventNames = Enum.GetNames(typeof(EventTriggerType)); + m_EventTypes = new GUIContent[eventNames.Length]; + for (int i = 0; i < eventNames.Length; ++i) + { + m_EventTypes[i] = new GUIContent(eventNames[i]); + } + } + + public override void OnInspectorGUI() + { + serializedObject.Update(); + int toBeRemovedEntry = -1; + + EditorGUILayout.Space(); + + Vector2 removeButtonSize = GUIStyle.none.CalcSize(m_IconToolbarMinus); + + for (int i = 0; i < m_DelegatesProperty.arraySize; ++i) + { + SerializedProperty delegateProperty = m_DelegatesProperty.GetArrayElementAtIndex(i); + SerializedProperty eventProperty = delegateProperty.FindPropertyRelative("eventID"); + SerializedProperty callbacksProperty = delegateProperty.FindPropertyRelative("callback"); + m_EventIDName.text = eventProperty.enumDisplayNames[eventProperty.enumValueIndex]; + + EditorGUILayout.PropertyField(callbacksProperty, m_EventIDName); + Rect callbackRect = GUILayoutUtility.GetLastRect(); + + Rect removeButtonPos = new Rect(callbackRect.xMax - removeButtonSize.x - 8, callbackRect.y + 1, removeButtonSize.x, removeButtonSize.y); + if (GUI.Button(removeButtonPos, m_IconToolbarMinus, GUIStyle.none)) + { + toBeRemovedEntry = i; + } + + EditorGUILayout.Space(); + } + + if (toBeRemovedEntry > -1) + { + RemoveEntry(toBeRemovedEntry); + } + + Rect btPosition = GUILayoutUtility.GetRect(m_AddButonContent, GUI.skin.button); + const float addButonWidth = 200f; + btPosition.x = btPosition.x + (btPosition.width - addButonWidth) / 2; + btPosition.width = addButonWidth; + if (GUI.Button(btPosition, m_AddButonContent)) + { + ShowAddTriggermenu(); + } + + serializedObject.ApplyModifiedProperties(); + } + + private void RemoveEntry(int toBeRemovedEntry) + { + m_DelegatesProperty.DeleteArrayElementAtIndex(toBeRemovedEntry); + } + + void ShowAddTriggermenu() + { + // Now create the menu, add items and show it + GenericMenu menu = new GenericMenu(); + for (int i = 0; i < m_EventTypes.Length; ++i) + { + bool active = true; + + // Check if we already have a Entry for the current eventType, if so, disable it + for (int p = 0; p < m_DelegatesProperty.arraySize; ++p) + { + SerializedProperty delegateEntry = m_DelegatesProperty.GetArrayElementAtIndex(p); + SerializedProperty eventProperty = delegateEntry.FindPropertyRelative("eventID"); + if (eventProperty.enumValueIndex == i) + { + active = false; + } + } + if (active) + menu.AddItem(m_EventTypes[i], false, OnAddNewSelected, i); + else + menu.AddDisabledItem(m_EventTypes[i]); + } + menu.ShowAsContext(); + Event.current.Use(); + } + + private void OnAddNewSelected(object index) + { + int selected = (int)index; + + m_DelegatesProperty.arraySize += 1; + SerializedProperty delegateEntry = m_DelegatesProperty.GetArrayElementAtIndex(m_DelegatesProperty.arraySize - 1); + SerializedProperty eventProperty = delegateEntry.FindPropertyRelative("eventID"); + eventProperty.enumValueIndex = selected; + serializedObject.ApplyModifiedProperties(); + } + } +} |