private void ShowAddTriggerMenu(AttachEventTrigger eventTrigger)
        {
            GenericMenu genericMenu = new GenericMenu();

            for (int i = 0; i < eventTrigger.supportedEventTypes.Length; i++)
            {
                AttachEventType eventType = eventTrigger.supportedEventTypes[i];
                if (!eventTrigger.HasVisibleEntryForEventType(eventTrigger.supportedEventTypes[i]))
                {
                    genericMenu.AddItem(new GUIContent(eventType.ToString()), false,
                                        new GenericMenu.MenuFunction2((object index) => {
                        eventTrigger.GetOrCreateEvent(eventType, hideInInspector: false);
                    }), i);
                }
                else
                {
                    genericMenu.AddDisabledItem(new GUIContent(eventType.ToString()));
                }
            }
            genericMenu.ShowAsContext();
            Event.current.Use();
        }
        public override void OnGUI(Rect position, SerializedProperty prop, GUIContent label)
        {
            AttachEventTrigger eventTrigger = (AttachEventTrigger)
                                              fieldInfo.GetValue(prop.serializedObject.targetObject);
            SerializedProperty entriesProp = prop.FindPropertyRelative("entries");
            float y             = position.y + EditorGUIUtility.standardVerticalSpacing;
            int   indexToDelete = -1;

            for (int i = 0; i < entriesProp.arraySize; i++)
            {
                if (entriesProp.GetArrayElementAtIndex(i).FindPropertyRelative("hideInInspector").boolValue)
                {
                    continue;
                }
                SerializedProperty callback  = entriesProp.GetArrayElementAtIndex(i).FindPropertyRelative("callback");
                SerializedProperty eventType = entriesProp.GetArrayElementAtIndex(i).FindPropertyRelative("eventType");
                float h = EditorGUI.GetPropertyHeight(callback);
                EditorGUI.PropertyField(new Rect(position.x, y, position.width, h), callback,
                                        new GUIContent(((AttachEventType)eventType.intValue).ToString()));
                Vector2 vector = GUIStyle.none.CalcSize(this.deleteButton);
                Rect    delete = new Rect(position.xMax - vector.x - 8f, y + 1f, vector.x, vector.y);
                if (GUI.Button(delete, this.deleteButton, GUIStyle.none))
                {
                    indexToDelete = i;
                }
                y += EditorGUI.GetPropertyHeight(callback) + EditorGUIUtility.standardVerticalSpacing;
            }
            if (indexToDelete != -1)
            {
                entriesProp.DeleteArrayElementAtIndex(indexToDelete);
            }
            if (GUI.Button(new Rect(position.center.x - buttonWidth / 2, y, buttonWidth, buttonHeight),
                           "Add Event Listener"))
            {
                ShowAddTriggerMenu(eventTrigger);
            }
        }