summaryrefslogtreecommitdiff
path: root/Assets/uGUI-2017.1/Editor/EventSystem/EventTriggerEditor.cs
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2021-05-08 23:15:13 +0800
committerchai <chaifix@163.com>2021-05-08 23:15:13 +0800
commitd07e14add74e017b52ab2371efeea1aa4ea10ced (patch)
treeefd07869326e4c428f5bfe43fad0c2583d32a401 /Assets/uGUI-2017.1/Editor/EventSystem/EventTriggerEditor.cs
+init
Diffstat (limited to 'Assets/uGUI-2017.1/Editor/EventSystem/EventTriggerEditor.cs')
-rw-r--r--Assets/uGUI-2017.1/Editor/EventSystem/EventTriggerEditor.cs122
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();
+ }
+ }
+}