callTradeLineInMouse method

dynamic callTradeLineInMouse(
  1. dynamic obj,
  2. dynamic isOnlyClear
)

Implementation

callTradeLineInMouse(obj, isOnlyClear) {
  obj['isShowHoverX'] = false; //是否在关闭按钮
  obj['isShowHoverZyZs'] = false; //是否在止盈止损按钮
  obj['isShowHoverLine'] = false; //是否在挂单线 不用判断
  obj['isShowHoverZy'] = false; //是否在止盈线 不用判断
  obj['isShowHoverZyX'] = false; //是否在止盈线关闭按钮
  obj['isShowHoverZs'] = false; //是否在止损线 不用判断
  obj['isShowHoverZsX'] = false; //是否在止损线关闭按钮
  obj['isOnLine'] = false;
  if (!isOnlyClear) {
    //如果不仅仅是清除状态,则计算是否在线上
    bool result = false;
    //py检测偏移 如果线距离鼠标点在 +py 和 -py 之间 则算选中
    //btnPy检测偏移 如果按钮距离鼠标点在 +btnPy 和 -btnPy 之间 则算选中
    //py2 py3的绝对值 线距离鼠标点的物理距离 用来判断哪根线里鼠标点最近
    //py3 线和鼠标点在坐标系上的差值,鼠标在线上方为负值在线下方为正值
    //oy 线在坐标系k线区域的y坐标
    //暂时只精准检测按钮,整个左侧按钮区域不检测
    double py2 = 0, btnPy = 14;
    double my = klineState.currentPosition.dy;
    double mx = klineState.currentPosition.dx;
    if (obj.containsKey('oy') && obj['oy'] > 0) {
      py2 = (my - obj['oy']).abs();
      if (py2 < btnPy) {
        if (obj['leftSize'].containsKey('x') &&
            mx > obj['leftSize']['x'] &&
            mx < obj['leftSize']['x'] + obj['leftSize']['w']) {
          //检测是否在x上
          if (obj['xSize'].containsKey('x') &&
              mx > obj['xSize']['x'] &&
              mx < obj['xSize']['x'] + obj['xSize']['w']) {
            //在关闭按钮上
            // print('在关闭按钮上');
            obj['isShowHoverX'] = true;
            result = true;
          }
          //检测是否在止盈止损上
          else if (obj['zyzsSize'].containsKey('x') &&
              mx > obj['zyzsSize']['x'] &&
              mx < obj['zyzsSize']['x'] + obj['zyzsSize']['w']) {
            //在止盈止损上
            // print('在止盈止损按钮上');
            obj['isShowHoverZyZs'] = true;
            result = true;
          } else {
            //检测是否在
            // print('在线上');
            obj['isShowHoverLine'] = true;
            result = true;
          }
        }
      }
    }
    if (obj.containsKey('zyoy') && obj['zyoy'] > 0 && !result) {
      py2 = (my - obj['zyoy']).abs();
      if (py2 < btnPy) {
        if (obj['leftZySize'].containsKey('x') &&
            mx > obj['leftZySize']['x'] &&
            mx < obj['leftZySize']['x'] + obj['leftZySize']['w']) {
          //检测是否在x上
          if (obj['zyxSize'].containsKey('x') &&
              mx > obj['zyxSize']['x'] &&
              mx < obj['zyxSize']['x'] + obj['zyxSize']['w']) {
            //在止盈关闭按钮上
            // print('在止盈关闭按钮上');
            obj['isShowHoverZyX'] = true;
            result = true;
          } else {
            //检测是否在
            // print('在止盈上');
            obj['isShowHoverZy'] = true;
            result = true;
          }
        }
      }
    }
    if (obj.containsKey('zsoy') && obj['zsoy'] > 0 && !result) {
      py2 = (my - obj['zsoy']).abs();
      if (py2 < btnPy) {
        if (obj['leftZsSize'].containsKey('x') &&
            mx > obj['leftZsSize']['x'] &&
            mx < obj['leftZsSize']['x'] + obj['leftZsSize']['w']) {
          //检测是否在x上
          if (obj['zsxSize'].containsKey('x') &&
              mx > obj['zsxSize']['x'] &&
              mx < obj['zsxSize']['x'] + obj['zsxSize']['w']) {
            //在止盈关闭按钮上
            // print('在止损关闭按钮上');
            obj['isShowHoverZsX'] = true;
            result = true;
          } else {
            // print('在止损上');
            obj['isShowHoverZs'] = true;
            result = true;
          }
        }
      }
    }
    obj['isOnLine'] = result; //是否在线上

    // print('是否在线上: $result');
    return result;
  } else {
    return false;
  }
}