editLineData method

dynamic editLineData(
  1. dynamic value
)

Implementation

editLineData(value) {
  double dx = klineState.currentPosition.dx;
  dx = Tools.max(0.0, dx);
  dx = Tools.min(kElement['k']!['x']+kElement['k']!['w'], dx);
  double dy = klineState.currentPosition.dy;
  dy = Tools.max(0.0, dy);
  dy = Tools.min(kElement['k']!['y']+kElement['k']!['h'], dy);
  for (var line in lineData.values) {
    int lineL = line.length;
    for (int i = 0; i < lineL; i++) {
      var lineObj = line[i];
      if (lineObj.containsKey('selected') && lineObj['selected'] && !lineObj['style']['lock']) {
        if (lineObj['point'] != -1) {
          //点被选中
          var xx =
              (dx - kElement['k']!['x'] - kStartX)
                  .floor();
          //在屏幕中的x坐标占比 给x轴不跟k线绑定的画线使用,在屏幕尺寸发生变化的时候,这些线的x坐标需要根据占比从新计算新的x坐标 xxbfb * grail.w
          var xxbfb = xx / kElement['k']!['w'];
          int xi = ((dx -
                          kElement['k']!['x'] -
                          kStartX) /
                      kWG)
                  .floor() +
              kStartI;

          //将鼠标x坐标转换成k线时间
          var xt = Tools.getKTime(xi,chartData.kDataL-1,chartData.klineData,klineState.widget.propertys['interval']);
          num xp = dx -
              kElement['k']!['x'] -
              (xi - kStartI) * kWG -
              kStartX;
          dynamic y = Tools.yToPrice(kYh, dy,
              kYMin, kScale, klineState.widget.propertys['priceDigits']);
          lineObj['p'][lineObj['point']] = {
            'x': xi,
            'xt':xt,
            'xx': xx,
            'xxbfb': xxbfb,
            'xp': xp,
            'y': num.parse(y)
          };
        } else {
          //线被选中更新所有点位置
          //循环改变每一个点
          for (int j = 0, jl = lineObj['oldPoint'].length; j < jl; j++) {
            var jobj = lineObj['oldPoint'][j]; //获取老的位置
            num nx = jobj['x'] + value['md']; //计算新的位置
            num ny = jobj['y'] + value['my']; //计算新的位置
            var xx = (nx - kElement['k']!['x'] - kStartX).floor();
            //在屏幕中的x坐标占比 给x轴不跟k线绑定的画线使用,在屏幕尺寸发生变化的时候,这些线的x坐标需要根据占比从新计算新的x坐标 xxbfb * grail.w
            var xxbfb = xx / kElement['k']!['w'];
            int xi = ((nx - kElement['k']!['x'] - kStartX) / kWG).floor() +
                kStartI;
                        //将鼠标x坐标转换成k线时间
            var xt = Tools.getKTime(xi,chartData.kDataL-1,chartData.klineData,klineState.widget.propertys['interval']);
            num xp =
                nx - kElement['k']!['x'] - (xi - kStartI) * kWG - kStartX;
            dynamic y = Tools.yToPrice(kYh, ny, kYMin, kScale,
                klineState.widget.propertys['priceDigits']);
            lineObj['p'][j] = {
              'x': xi,
              'xx': xx,
              'xt':xt,
              'xxbfb': xxbfb,
              'xp': xp,
              'y': num.parse(y)
            };
          }
        }
      }
    }
  }
}