private bool AddFrameButton()
    {
        Rect  rect      = GUILayoutUtility.GetRect(GUIContent.none, GUITools.NodeStyle, GUILayout.Height(75), GUILayout.Width(75));
        bool  clicked   = false;
        Event ev        = Event.current;
        int   controlID = GUIUtility.GetControlID(FocusType.Passive);

        GUITools.ButtonInfo info = GUIUtility.GetStateObject(typeof(GUITools.ButtonInfo), controlID) as GUITools.ButtonInfo;

        switch (ev.GetTypeForControl(controlID))
        {
        case EventType.MouseUp:
            info.mouseDown = false;
            if (rect.Contains(ev.mousePosition))
            {
                clicked = true;
            }
            if (GUIUtility.hotControl == controlID)
            {
                ev.Use();
                GUIUtility.hotControl = 0;
            }
            break;

        case EventType.MouseDown:
            if (rect.Contains(ev.mousePosition))
            {
                info.mouseDown = true;
                ev.Use();
                GUIUtility.hotControl = controlID;
            }
            break;

        case EventType.Repaint:
            if (info.mouseDown)
            {
                GUI.color = Color.gray;
            }
            rect = GUITools.PaddedContainer.padding.Remove(rect);
            GUITools.NodeStyle.Draw(rect, GUIContent.none, controlID);
            GUITools.BigWhiteText.Draw(rect, new GUIContent("+"), controlID);

            GUI.color = Color.white;
            break;
        }

        return(clicked);
    }
    private bool FramePreviewButton(LZFighterFrame frame, bool selected, int frameID)
    {
        Rect  rect      = GUILayoutUtility.GetRect(GUIContent.none, GUITools.NodeStyle, GUILayout.Height(75), GUILayout.Width(75));
        bool  clicked   = false;
        Event ev        = Event.current;
        int   controlID = GUIUtility.GetControlID(FocusType.Passive);

        GUITools.ButtonInfo info = GUIUtility.GetStateObject(typeof(GUITools.ButtonInfo), controlID) as GUITools.ButtonInfo;

        switch (ev.GetTypeForControl(controlID))
        {
        case EventType.MouseUp:
            info.mouseDown = false;
            if (rect.Contains(ev.mousePosition))
            {
                clicked = true;
            }
            if (GUIUtility.hotControl == controlID)
            {
                ev.Use();
                GUIUtility.hotControl = 0;
            }
            break;

        case EventType.MouseDown:
            if (rect.Contains(ev.mousePosition))
            {
                info.mouseDown = true;
                ev.Use();
                GUIUtility.hotControl = controlID;
                if (ev.clickCount == 2)
                {
                    EditorGUIUtility.ShowObjectPicker <Sprite>(frame.sprite, false, "", controlID);
                }
            }
            break;

        case EventType.ExecuteCommand:
            if (ev.commandName == "ObjectSelectorUpdated" && selectedFrame == frameID)
            {
                frame.sprite = (Sprite)EditorGUIUtility.GetObjectPickerObject();
                ev.Use();
            }
            break;

        case EventType.Repaint:
            Color rectangle = new Color(0.6f, 0.6f, 0.6f);
            if (selected)
            {
                rectangle = GUITools.darkCyan;
            }
            else if (info.mouseDown)
            {
                rectangle = Color.gray;
            }
            rect = GUITools.PaddedContainer.padding.Remove(rect);
            EditorGUI.DrawRect(rect, rectangle);

            if (frame.sprite != null)
            {
                GUI.DrawTextureWithTexCoords(rect, frame.sprite.texture, frame.sprite.GetSpriteRect());
            }
            break;
        }

        return(clicked);
    }