public FixerData(ViewElementEventData viewElementEventData)
 {
     this.viewElementEventData = viewElementEventData;
     originalMethodName        = viewElementEventData.methodName;
     originalScriptName        = viewElementEventData.scriptName;
 }
        private void CacheComponent()
        {
            if (m_ComponentTreeViewState == null)
            {
                m_ComponentTreeViewState = new TreeViewState();
            }

            componentTreeView = new ComponentTreeView(
                currentSelectGameObject,
                viewPageItem.viewElement,
                m_ComponentTreeViewState,
                currentSelectGameObject == target,
                (sp, path) =>
            {
                return(viewPageItem.overrideDatas.Where(
                           m =>
                           m.targetPropertyName == sp.name &&
                           m.targetTransformPath == path &&
                           m.targetComponentType == sp.serializedObject.targetObject.GetType().ToString()
                           ).Count() > 0);
            },
                () =>
            {
            });

            componentTreeView.OnItemClick += (sp) =>
            {
                Component c;
                try
                {
                    c = (Component)sp.serializedObject.targetObject;
                }
                catch
                {
                    c = ((GameObject)sp.serializedObject.targetObject).transform;
                }

                if (sp.propertyType == SerializedPropertyType.Generic)
                {
                    System.Type parentType = sp.serializedObject.targetObject.GetType();

                    System.Reflection.FieldInfo fi = parentType.GetField(sp.propertyPath);

                    System.Type propertyType = null;
                    if (fi != null)
                    {
                        propertyType = fi.FieldType;
                    }

                    string propertyName = sp.propertyPath;

                    if (parentType.ToString().Contains("UnityEngine."))
                    {
                        if (propertyName == "m_Navigation")
                        {
                            var content = new GUIContent("UnityEngine.UI.Navigation is not supported with ViewSystem OverrideSystem");
#if UNITY_2019_1_OR_NEWER
                            editor.ShowNotification(content, toastMessageFadeOutTimt);
#else
                            editor.ShowNotification(content);
#endif
                            return;
                        }
                        propertyName = ViewSystemUtilitys.ParseUnityEngineProperty(sp.propertyPath);
                    }

                    System.Reflection.PropertyInfo pi = parentType.GetProperty(propertyName);
                    if (pi != null && fi == null)
                    {
                        // ViewSystemLog.LogError("property not found");
                        // editor.ShowNotification(new GUIContent("property not found"), toastMessageFadeOutTimt);
                        // return;
                        propertyType = pi.PropertyType;
                    }

                    if (!propertyType.IsSubclassOf(typeof(UnityEngine.Events.UnityEvent)) &&
                        !propertyType.IsAssignableFrom(typeof(UnityEngine.Events.UnityEvent)))
                    {
                        var content = new GUIContent("Currently only support UnityEvent without parameters");
                        ViewSystemLog.LogError(content.text);
#if UNITY_2019_1_OR_NEWER
                        editor.ShowNotification(content, toastMessageFadeOutTimt);
#else
                        editor.ShowNotification(content);
#endif
                        return;
                    }

                    var eventData = new ViewElementEventData();
                    eventData.targetTransformPath = AnimationUtility.CalculateTransformPath(c.transform, target.transform);
                    eventData.targetPropertyName  = sp.name;
                    eventData.targetComponentType = sp.serializedObject.targetObject.GetType().ToString();
                    //eventData.targetPropertyType = sp.propertyType.ToString();
                    //eventData.targetPropertyPath = propertyName;

                    if (viewPageItem.eventDatas == null)
                    {
                        viewPageItem.eventDatas = new List <ViewElementEventData>();
                    }

                    var current = viewPageItem.eventDatas
                                  .Where(x =>
                                         x.targetTransformPath == eventData.targetTransformPath &&
                                         x.targetComponentType == eventData.targetComponentType &&
                                         x.targetPropertyName == eventData.targetPropertyName
                                         );

                    if (current.Count() > 0)
                    {
                        if (current.Where(m => string.IsNullOrEmpty(m.scriptName) && string.IsNullOrEmpty(m.methodName)).Count() > 0)
                        {
                            ViewSystemLog.LogError("You Have 1 event doesn't setup yet");
                            var errorContent = new GUIContent("You Have 1 event doesn't setup yet");
#if UNITY_2019_1_OR_NEWER
                            editor.ShowNotification(errorContent, toastMessageFadeOutTimt);
#else
                            editor.ShowNotification(errorContent);
#endif
                            return;
                        }
                    }

                    var error = new GUIContent("Event Add Success");
                    viewPageItem.eventDatas.Add(eventData);
#if UNITY_2019_1_OR_NEWER
                    editor.ShowNotification(error, toastMessageFadeOutTimt);
#else
                    editor.ShowNotification(error);
#endif
                }
                else
                {
                    var overrideData = new ViewElementPropertyOverrideData();
                    overrideData.targetTransformPath = AnimationUtility.CalculateTransformPath(c.transform, target.transform);
                    overrideData.targetPropertyName  = sp.name;
                    overrideData.targetComponentType = sp.serializedObject.targetObject.GetType().ToString();
                    //overrideData.targetPropertyType = sp.propertyType.ToString();
                    //overrideData.targetPropertyPath = VS_EditorUtility.ParseUnityEngineProperty(sp.propertyPath);
                    overrideData.Value.SetValue(sp);
                    if (viewPageItem.overrideDatas == null)
                    {
                        viewPageItem.overrideDatas = new List <ViewElementPropertyOverrideData>();
                    }

                    var current = viewPageItem.overrideDatas
                                  .SingleOrDefault(x =>
                                                   x.targetTransformPath == overrideData.targetTransformPath &&
                                                   x.targetComponentType == overrideData.targetComponentType &&
                                                   x.targetPropertyName == overrideData.targetPropertyName
                                                   );

                    if (current != null)
                    {
                        current = overrideData;
#if UNITY_2019_1_OR_NEWER
                        editor.ShowNotification(new GUIContent("This property is already in override list."), toastMessageFadeOutTimt);
#else
                        editor.ShowNotification(new GUIContent("This property is already in override list."));
#endif
                    }
                    else
                    {
                        viewPageItem.overrideDatas.Add(overrideData);
#if UNITY_2019_1_OR_NEWER
                        editor.ShowNotification(new GUIContent("Property override add success"), toastMessageFadeOutTimt);
#else
                        editor.ShowNotification(new GUIContent("Property override add success"));
#endif
                    }
                }
            };
        }