/// <summary>
    /// Determine whether stay in CLICK or move to SWIPE/ SCROLL
    /// WILL NOT move status from LONGPress to SWIPE/ SCROLL
    /// It is an One-way gate for state change
    /// </summary>
    /// <param name="_data"></param>
    public void DetermineClickOrDrag(PointerEventData _data)
    {
        // do nothing if already in status LongPress/ SwipeMenu/ Scroll
        if (myBoardStatus != TouchBoardStatus.SingleClick)
        {
            return;
        }

        // if total movement too little, wait for more data to determine
        if (acuumlatedSwipePixel.magnitude < minPixelLeaveClick)
        {
            return;
        }

        //cancel Long Press CountDown!
        myDnDHelper.CancelCountDownInvoke();

        //Debug.Log("Drag/ Scroll");
        _data.eligibleForClick = false;

        ////determine which direction is swiping
        if (acuumlatedSwipePixel.x > acuumlatedSwipePixel.y)// Left or Right
        {
            myBoardStatus = TouchBoardStatus.LeftRight;
        }
        else  // Up or Down
        {
            myBoardStatus = TouchBoardStatus.UpDown;

            //Delayed Scrolling Setup from OnBeginDrag
            myScrollRect.OnBeginDrag(_data);
            _data.pointerDrag = myScrollRect.gameObject;
        }
    }
    public override void OnPointerDown(PointerEventData eventData)
    {
        myBoardStatus = TouchBoardStatus.SingleClick;

        btnHolderWidth = BtnHolder.sizeDelta.x;
        widthToOpen    = -btnHolderWidth * ratioToOpen;

        myDnDHelper.OnBtnPointerDown(() => { myBoardStatus = TouchBoardStatus.LongPress; });

        base.OnPointerDown(eventData);
    }