//clones another dropdown item from template
    private tk2dUIDropDownItem CreateAnotherDropDownItem()
    {
        GameObject go = Instantiate(dropDownItemTemplate.gameObject) as GameObject;

        go.name                    = "DropDownItem";
        go.transform.parent        = transform;
        go.transform.localPosition = dropDownItemTemplate.transform.localPosition;
        go.transform.localRotation = dropDownItemTemplate.transform.localRotation;
        go.transform.localScale    = dropDownItemTemplate.transform.localScale;
        tk2dUIDropDownItem item = go.GetComponent <tk2dUIDropDownItem>();

        item.OnItemSelected += ItemSelected;

        tk2dUIUpDownHoverButton itemUpDownHoverBtn = go.GetComponent <tk2dUIUpDownHoverButton>();

        item.upDownHoverBtn = itemUpDownHoverBtn;

        itemUpDownHoverBtn.OnToggleOver += DropDownItemHoverBtnToggle;

#if UNITY_3_0 || UNITY_3_1 || UNITY_3_2 || UNITY_3_3 || UNITY_3_4 || UNITY_3_5 || UNITY_3_6 || UNITY_3_7 || UNITY_3_8 || UNITY_3_9
        go.SetActiveRecursively(false);
#endif

        return(item);
    }
    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();

        tk2dUIUpDownHoverButton upDownHoverButton = (tk2dUIUpDownHoverButton)target;

        upDownHoverButton.upStateGO        = tk2dUICustomEditorGUILayout.SceneObjectField("Up State GameObject", upDownHoverButton.upStateGO, target);
        upDownHoverButton.downStateGO      = tk2dUICustomEditorGUILayout.SceneObjectField("Down State GameObject", upDownHoverButton.downStateGO, target);
        upDownHoverButton.hoverOverStateGO = tk2dUICustomEditorGUILayout.SceneObjectField("Hover State GameObject", upDownHoverButton.hoverOverStateGO, target);

        EditorGUIUtility.LookLikeControls(200);

        bool newUseOnReleaseInsteadOfOnUp = EditorGUILayout.Toggle("Use OnRelease Instead of OnUp", upDownHoverButton.UseOnReleaseInsteadOfOnUp);

        if (newUseOnReleaseInsteadOfOnUp != upDownHoverButton.UseOnReleaseInsteadOfOnUp)
        {
            upDownHoverButton.InternalSetUseOnReleaseInsteadOfOnUp(newUseOnReleaseInsteadOfOnUp);
            GUI.changed = true;
        }

        if (GUI.changed)
        {
            EditorUtility.SetDirty(upDownHoverButton);
        }
    }
    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();

        tk2dUIUpDownHoverButton upDownHoverButton = (tk2dUIUpDownHoverButton)target;

        upDownHoverButton.upStateGO        = tk2dUICustomEditorGUILayout.SceneObjectField("Up State GameObject", upDownHoverButton.upStateGO, target);
        upDownHoverButton.downStateGO      = tk2dUICustomEditorGUILayout.SceneObjectField("Down State GameObject", upDownHoverButton.downStateGO, target);
        upDownHoverButton.hoverOverStateGO = tk2dUICustomEditorGUILayout.SceneObjectField("Hover State GameObject", upDownHoverButton.hoverOverStateGO, target);

        EditorGUIUtility.LookLikeControls(200);

        bool newUseOnReleaseInsteadOfOnUp = EditorGUILayout.Toggle("Use OnRelease Instead of OnUp", upDownHoverButton.UseOnReleaseInsteadOfOnUp);

        if (newUseOnReleaseInsteadOfOnUp != upDownHoverButton.UseOnReleaseInsteadOfOnUp)
        {
            upDownHoverButton.InternalSetUseOnReleaseInsteadOfOnUp(newUseOnReleaseInsteadOfOnUp);
            GUI.changed = true;
        }

        BeginMessageGUI();
        methodBindingUtil.MethodBinding("On Toggle Over", typeof(tk2dUIUpDownHoverButton), upDownHoverButton.SendMessageTarget, ref upDownHoverButton.SendMessageOnToggleOverMethodName);
        EndMessageGUI();

        if (GUI.changed)
        {
            EditorUtility.SetDirty(upDownHoverButton);
        }
    }
 private void DropDownItemHoverBtnToggle(tk2dUIUpDownHoverButton upDownHoverButton)
 {
     if (upDownHoverButton.IsOver)
     {
         foreach (tk2dUIDropDownItem item in dropDownItems)
         {
             if (item.upDownHoverBtn != upDownHoverButton && item.upDownHoverBtn != null)
             {
                 item.upDownHoverBtn.IsOver = false;
             }
         }
     }
 }
 private void DropDownItemHoverBtnToggle(tk2dUIUpDownHoverButton upDownHoverButton)
 {
     if (upDownHoverButton.IsOver)
     {
         foreach (tk2dUIDropDownItem item in this.dropDownItems)
         {
             if ((item.upDownHoverBtn != upDownHoverButton) && (item.upDownHoverBtn != null))
             {
                 item.upDownHoverBtn.IsOver = false;
             }
         }
     }
 }