selectTradeLineData method

dynamic selectTradeLineData()

Implementation

selectTradeLineData() {
  bool result = false;
  //py检测偏移 如果线距离鼠标点在 +py 和 -py 之间 则算选中
  //btnPy检测偏移 如果按钮距离鼠标点在 +btnPy 和 -btnPy 之间 则算选中
  //py2 py3的绝对值 线距离鼠标点的物理距离 用来判断哪根线里鼠标点最近
  //py3 线和鼠标点在坐标系上的差值,鼠标在线上方为负值在线下方为正值
  //oy 线在坐标系k线区域的y坐标
  List selectLineList = [];
  var obj = {};
  double my = klineState.currentPosition.dy;
  int i = 0;
  //判断线是否在可选范围内
  //挂单
  if (chartData.orderData.isNotEmpty) {
    for (i = 0; i < chartData.orderData.length; i++) {
      obj = chartData.orderData[i];
      if (obj['codeId'] != klineState.widget.propertys['codeId'] ||
          obj['tr_price'] > kYMax ||
          obj['tr_price'] < kYMin) {
        continue;
      }
      if (obj['isShowHoverX'] ||
          obj['isShowHoverZyZs'] ||
          obj['isShowHoverLine']) {
        selectLineList.add({
          'oy': obj['oy'],
          'py2': my - obj['oy'],
          'line': json.decode(json.encode(obj)),
          'type': "gd"
        });
        result = true;
      } else if (obj['isShowHoverZyX']) {
        //委托止盈关闭按钮
        selectLineList.add({
          'oy': obj['zyoy'],
          'py2': my - obj['zyoy'],
          'line': json.decode(json.encode(obj)),
          'type': "gdzy"
        });
        result = true;
      } else if (obj['isShowHoverZsX']) {
        //委托止损关闭按钮
        selectLineList.add({
          'oy': obj['zsoy'],
          'py2': my - obj['zsoy'],
          'line': json.decode(json.encode(obj)),
          'type': "gdzs"
        });
        result = true;
      } else if (obj['isShowHoverZy']) {
        //委托止盈线
        selectLineList.add({
          'oy': obj['zyoy'],
          'py2': my - obj['zyoy'],
          'line': json.decode(json.encode(obj)),
          'type': "draggdzy"
        });
        result = true;
      } else if (obj['isShowHoverZs']) {
        //委托止损线
        selectLineList.add({
          'oy': obj['zsoy'],
          'py2': my - obj['zsoy'],
          'line': json.decode(json.encode(obj)),
          'type': "draggdzs"
        });
        result = true;
      } else if (obj['isOnLine']) {
        result = true;
      }
    }
  }
  //持仓
  if (chartData.positionData.isNotEmpty) {
    for (i = 0; i < chartData.positionData.length; i++) {
      obj = chartData.positionData[i];
      if (obj['codeId'] != klineState.widget.propertys['codeId'] ||
          obj['tr_price'] > kYMax ||
          obj['tr_price'] < kYMin) {
        continue;
      }
      if (obj['isShowHoverX'] ||
          obj['isShowHoverZyZs'] ||
          obj['isShowHoverLine']) {
        selectLineList.add({
          'oy': obj['oy'],
          'py2': my - obj['oy'],
          'line': json.decode(json.encode(obj)),
          'type': "cc"
        });
        result = true;
      } else if (obj['isShowHoverZyX']) {
        //持仓止盈关闭按钮
        selectLineList.add({
          'oy': obj['zyoy'],
          'py2': my - obj['zyoy'],
          'line': json.decode(json.encode(obj)),
          'type': "cczy"
        });
        result = true;
      } else if (obj['isShowHoverZsX']) {
        //持仓止损关闭按钮
        selectLineList.add({
          'oy': obj['zsoy'],
          'py2': my - obj['zsoy'],
          'line': json.decode(json.encode(obj)),
          'type': "cczs"
        });
        result = true;
      } else if (obj['isShowHoverZy']) {
        //持仓止盈线
        selectLineList.add({
          'oy': obj['zyoy'],
          'py2': my - obj['zyoy'],
          'line': json.decode(json.encode(obj)),
          'type': "dragcczy"
        });
        result = true;
      } else if (obj['isShowHoverZs']) {
        //持仓止损线
        selectLineList.add({
          'oy': obj['zsoy'],
          'py2': my - obj['zsoy'],
          'line': json.decode(json.encode(obj)),
          'type': "dragcczs"
        });
        result = true;
      } else if (obj['isOnLine']) {
        result = true;
      }
    }
  }

  //排序
  if (selectLineList.isNotEmpty) {
    selectLineList.sort((a, b) {
      return a['py2'].compareTo(b['py2']);
    });
    //只有按下的时候才确定具体选中了哪条线
    selectTradeData = selectLineList[selectLineList.length - 1];
  } else {
    selectTradeData = null;
  }
  return result;
}