// TODO: Need none in the popup to clear a channel
    public override void OnInspectorGUI()
    {
        MegaMorphLink anim = (MegaMorphLink)target;

        anim.morph = (MegaMorph)EditorGUILayout.ObjectField("Morph", anim.morph, typeof(MegaMorph), true);

        MegaMorph morph = anim.morph;	//gameObject.GetComponent<MegaMorph>();

        if ( morph != null )
        {
            if ( GUILayout.Button("Add Link") )
            {
                MegaMorphLinkDesc desc = new MegaMorphLinkDesc();
                anim.links.Add(desc);
            }

            string[] channels = morph.GetChannelNames();

            for ( int i = 0; i < anim.links.Count; i++ )
            {
                MegaMorphLinkDesc md = anim.links[i];
                md.name = EditorGUILayout.TextField("Name", md.name);
                //md.active = EditorGUILayout.Toggle("Active", md.active);

                //if ( md.active )
                md.active = EditorGUILayout.BeginToggleGroup("Active", md.active);
                {
                    md.channel = EditorGUILayout.Popup("Channel", md.channel, channels);

                    md.target = (Transform)EditorGUILayout.ObjectField("Target", md.target, typeof(Transform), true);
                    md.src = (MegaLinkSrc)EditorGUILayout.EnumPopup("Source", md.src);

                    if ( md.src != MegaLinkSrc.Angle && md.src != MegaLinkSrc.DotRotation )
                        md.axis = (MegaAxis)EditorGUILayout.EnumPopup("Axis", md.axis);

                    EditorGUILayout.LabelField("Val", md.GetVal().ToString());
                    md.min = EditorGUILayout.FloatField("Min", md.min);
                    md.max = EditorGUILayout.FloatField("Max", md.max);
                    md.low = EditorGUILayout.FloatField("Low", md.low);
                    md.high = EditorGUILayout.FloatField("High", md.high);

                    md.useCurve = EditorGUILayout.BeginToggleGroup("Use Curve", md.useCurve);
                    md.curve = EditorGUILayout.CurveField("Curve", md.curve);
                    EditorGUILayout.EndToggleGroup();

                    if ( md.src == MegaLinkSrc.Angle || md.src == MegaLinkSrc.DotRotation )
                    {
                        EditorGUILayout.BeginHorizontal();
                        if ( GUILayout.Button("Set Start Rot") )
                        {
                            if ( md.target )
                                md.rot = md.target.localRotation;
                        }

                        //if ( GUILayout.Button("Set End Rot") )
                        //{
                            //if ( md.target )
                            //{
                                //Quaternion rot = md.target.localRotation;
                            //	md.max = md.GetVal();
                            //}
                        //}

                        EditorGUILayout.EndHorizontal();
                    }

                    EditorGUILayout.BeginHorizontal();
                    if ( GUILayout.Button("Set Min Val") )
                    {
                        if ( md.target )
                            md.min = md.GetVal();
                            //md.rot = md.target.localRotation;
                    }

                    if ( GUILayout.Button("Set Max Val") )
                    {
                        if ( md.target )
                        {
                            //Quaternion rot = md.target.localRotation;
                            md.max = md.GetVal();
                        }
                    }

                    EditorGUILayout.EndHorizontal();

                }
                EditorGUILayout.EndToggleGroup();
                if ( GUILayout.Button("Delete") )
                {
                    anim.links.RemoveAt(i);
                    i--;
                }
            }

            if ( GUI.changed )
            {
                EditorUtility.SetDirty(target);
            }
        }
    }
    // TODO: Need none in the popup to clear a channel
    public override void OnInspectorGUI()
    {
        MegaMorphLink anim = (MegaMorphLink)target;

        anim.morph = (MegaMorph)EditorGUILayout.ObjectField("Morph", anim.morph, typeof(MegaMorph), true);

        MegaMorph morph = anim.morph;           //gameObject.GetComponent<MegaMorph>();

        if (morph != null)
        {
            if (GUILayout.Button("Add Link"))
            {
                MegaMorphLinkDesc desc = new MegaMorphLinkDesc();
                anim.links.Add(desc);
            }

            string[] channels = morph.GetChannelNames();

            for (int i = 0; i < anim.links.Count; i++)
            {
                MegaMorphLinkDesc md = anim.links[i];
                md.name = EditorGUILayout.TextField("Name", md.name);
                //md.active = EditorGUILayout.Toggle("Active", md.active);

                //if ( md.active )
                md.active = EditorGUILayout.BeginToggleGroup("Active", md.active);
                {
                    md.channel = EditorGUILayout.Popup("Channel", md.channel, channels);

                    md.target = (Transform)EditorGUILayout.ObjectField("Target", md.target, typeof(Transform), true);
                    md.src    = (MegaLinkSrc)EditorGUILayout.EnumPopup("Source", md.src);

                    if (md.src != MegaLinkSrc.Angle && md.src != MegaLinkSrc.DotRotation)
                    {
                        md.axis = (MegaAxis)EditorGUILayout.EnumPopup("Axis", md.axis);
                    }

                    EditorGUILayout.LabelField("Val", md.GetVal().ToString());
                    md.min  = EditorGUILayout.FloatField("Min", md.min);
                    md.max  = EditorGUILayout.FloatField("Max", md.max);
                    md.low  = EditorGUILayout.FloatField("Low", md.low);
                    md.high = EditorGUILayout.FloatField("High", md.high);

                    md.useCurve = EditorGUILayout.BeginToggleGroup("Use Curve", md.useCurve);
                    md.curve    = EditorGUILayout.CurveField("Curve", md.curve);
                    EditorGUILayout.EndToggleGroup();

                    if (md.src == MegaLinkSrc.Angle || md.src == MegaLinkSrc.DotRotation)
                    {
                        EditorGUILayout.BeginHorizontal();
                        if (GUILayout.Button("Set Start Rot"))
                        {
                            if (md.target)
                            {
                                md.rot = md.target.localRotation;
                            }
                        }

                        //if ( GUILayout.Button("Set End Rot") )
                        //{
                        //if ( md.target )
                        //{
                        //Quaternion rot = md.target.localRotation;
                        //	md.max = md.GetVal();
                        //}
                        //}

                        EditorGUILayout.EndHorizontal();
                    }

                    EditorGUILayout.BeginHorizontal();
                    if (GUILayout.Button("Set Min Val"))
                    {
                        if (md.target)
                        {
                            md.min = md.GetVal();
                        }
                        //md.rot = md.target.localRotation;
                    }

                    if (GUILayout.Button("Set Max Val"))
                    {
                        if (md.target)
                        {
                            //Quaternion rot = md.target.localRotation;
                            md.max = md.GetVal();
                        }
                    }

                    EditorGUILayout.EndHorizontal();
                }
                EditorGUILayout.EndToggleGroup();
                if (GUILayout.Button("Delete"))
                {
                    anim.links.RemoveAt(i);
                    i--;
                }
            }

            if (GUI.changed)
            {
                EditorUtility.SetDirty(target);
            }
        }
    }