hqchart 1.1.14576 → 1.1.14593

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -441,6 +441,12 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
441
441
  if (IFrameSplitOperator.IsNumber(item.ZIndex)) zindex=item.ZIndex;
442
442
  if (item.Enable) this.CreateExtraCanvasElement(JSChart.RectDragCanvasKey, { ZIndex:zindex }); //创建独立的区间选择画布
443
443
  }
444
+
445
+ if (option.DragKLine)
446
+ {
447
+ var item=option.DragKLine;
448
+ if (IFrameSplitOperator.IsBool(item.EnableShfit)) chart.KLineDragConfig.EnableShfit=item.EnableShfit;
449
+ }
444
450
  }
445
451
 
446
452
  //创建子窗口
@@ -492,6 +498,7 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
492
498
  if (IFrameSplitOperator.IsNumber(item.PriceFormatType)) chart.ChartCorssCursor.StringFormatY.PriceFormatType=item.PriceFormatType;
493
499
  if (IFrameSplitOperator.IsNumber(item.DataFormatType)) chart.ChartCorssCursor.StringFormatY.DataFormatType=item.DataFormatType;
494
500
  if (IFrameSplitOperator.IsBool(item.EnableKeyboard)) chart.ChartCorssCursor.EnableKeyboard=item.EnableKeyboard;
501
+ if (IFrameSplitOperator.IsBool(item.EnableDBClick)) chart.ChartCorssCursor.EnableDBClick=item.EnableDBClick;
495
502
 
496
503
  if (IFrameSplitOperator.IsBool(item.IsShowCorssPoint)) chart.ChartCorssCursor.CorssPointConfig.Enable=item.IsShowCorssPoint;
497
504
 
@@ -997,6 +1004,7 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
997
1004
  if (IFrameSplitOperator.IsNumber(item.HPenType)) chart.ChartCorssCursor.HPenType=item.HPenType;
998
1005
  if (IFrameSplitOperator.IsNumber(item.VPenType)) chart.ChartCorssCursor.VPenType=item.VPenType;
999
1006
  if (IFrameSplitOperator.IsBool(item.EnableKeyboard)) chart.ChartCorssCursor.EnableKeyboard=item.EnableKeyboard;
1007
+ if (IFrameSplitOperator.IsBool(item.EnableDBClick)) chart.ChartCorssCursor.EnableDBClick=item.EnableDBClick;
1000
1008
  if (IFrameSplitOperator.IsBool(item.IsShowCorssPoint)) chart.ChartCorssCursor.CorssPointConfig.Enable=item.IsShowCorssPoint;
1001
1009
  if (IFrameSplitOperator.IsNumber(item.VLineType)) chart.ChartCorssCursor.VLineType=item.VLineType;
1002
1010
  }
@@ -2895,12 +2903,14 @@ var JSCHART_MENU_ID=
2895
2903
  CMD_CORSS_ON_VAILD_TIME_ID:50, //超出当前时间的,X轴调整到当前最后的时间(分时图)
2896
2904
  CMD_CORSS_ON_KLINE_ID:51, //十字光标只能画在K线上
2897
2905
  CMD_CORSS_POINT_ID:52, //十字光标圆点
2906
+
2898
2907
 
2899
2908
  CMD_RBUTTON_SELECT_RECT_ID:53, //右键区间选择
2900
2909
  CMD_LBUTTON_SELECT_RECT_ID:54, //左键区间选择
2901
2910
  CMD_ENABLE_XDRAG_BOTTOM_ID:55, //X轴拖动缩放
2902
2911
 
2903
2912
  CMD_FULLSCREEN_SUMMARY_ID:56, //当前屏区间统计
2913
+ CMD_CORSS_DBCLICK_ID:57, //双击显示隐藏十字光标
2904
2914
 
2905
2915
 
2906
2916
 
@@ -4194,6 +4204,17 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
4194
4204
  document.oncontextmenu=(e)=> { this.DocContextMenu(e); }
4195
4205
  }
4196
4206
 
4207
+
4208
+ this.IsShfitDragKLine=function(e)
4209
+ {
4210
+ if (this.DragMode!=1) return false;
4211
+ if (!this.KLineDragConfig) return false;
4212
+ if (!this.KLineDragConfig.EnableShfit) return false;
4213
+ if (!e.shiftKey) return false;
4214
+
4215
+ return true;
4216
+ }
4217
+
4197
4218
  this.DocOnMouseMove=function(e)
4198
4219
  {
4199
4220
  //加载数据中,禁用鼠标事件
@@ -4209,6 +4230,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
4209
4230
  var moveSetpY=Math.abs(drag.LastMove.Y-e.clientY);
4210
4231
  var isDragSelectRect=(this.RectSelectDrag && this.RectSelectDrag.Index>=0);
4211
4232
  var isDragSubSelectRect=(this.RectSelectDrag && this.RectSelectDrag.Type==4);
4233
+ var bShfitDragKLine=this.IsShfitDragKLine(e); //shift+鼠标移动K线
4212
4234
  if (drag.CurrentMove)
4213
4235
  {
4214
4236
  drag.CurrentMove.X=e.clientX;
@@ -4316,7 +4338,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
4316
4338
  {
4317
4339
  this.OnDragXCoordinateZoom(drag, {X:moveSetp, Y:moveSetpY}, e);
4318
4340
  }
4319
- else if ((bLButtonSelectRect || bRButtonSelectRect) && !isDragSelectRect && !isDragSubSelectRect) //左右键区间选择
4341
+ else if ((bLButtonSelectRect || bRButtonSelectRect) && !isDragSelectRect && !isDragSubSelectRect && !bShfitDragKLine) //左右键区间选择
4320
4342
  {
4321
4343
  var yMoveSetp=Math.abs(drag.LastMove.Y-e.clientY);
4322
4344
 
@@ -4428,6 +4450,9 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
4428
4450
  var isLeft=true;
4429
4451
  if (drag.LastMove.X<e.clientX) isLeft=false;//右移数据
4430
4452
 
4453
+ //按住shift才能移动K线
4454
+ if (this.KLineDragConfig && this.KLineDragConfig.EnableShfit && !e.shiftKey) return;
4455
+
4431
4456
  var cursorStatus="pointer";
4432
4457
  var oneStepWidth=this.GetMoveOneStepWidth();
4433
4458
  if (moveSetp<oneStepWidth)
@@ -4525,6 +4550,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
4525
4550
  var isDragSelectRect=(this.RectSelectDrag && this.RectSelectDrag.Index>=0);
4526
4551
  var isDragSubSelectRect=(this.RectSelectDrag && this.RectSelectDrag.Type==4);
4527
4552
  var bClearDrawPicture=true;
4553
+ var bShfitDragKLine=this.IsShfitDragKLine(e);
4528
4554
  if (this.CurrentChartDrawPicture)
4529
4555
  {
4530
4556
  var drawPicture=this.CurrentChartDrawPicture;
@@ -4567,7 +4593,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
4567
4593
  {
4568
4594
  if (this.OnMinuteSelectRectMouseUp) this.OnMinuteSelectRectMouseUp(e); //分时图区间选择
4569
4595
  }
4570
- else if (bLButtonSelectRect || bRButtonSelectRect) //K线图区间选择
4596
+ else if ((bLButtonSelectRect || bRButtonSelectRect) && !bShfitDragKLine) //K线图区间选择
4571
4597
  {
4572
4598
  var drag=this.MouseDrag;
4573
4599
  drag.LastMove.X=e.clientX;
@@ -5856,6 +5882,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
5856
5882
  item.Draw();
5857
5883
  }
5858
5884
 
5885
+ this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_5);
5886
+
5859
5887
  if (this.Frame.DrawOveraly)
5860
5888
  this.Frame.DrawOveraly(true); //画叠加指标
5861
5889
 
@@ -5879,9 +5907,14 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
5879
5907
  item.Draw();
5880
5908
  }
5881
5909
 
5910
+ this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_8);
5911
+
5882
5912
  if (this.Frame.DrawOveraly)
5883
5913
  this.Frame.DrawOveraly(false); //画叠加指标
5884
5914
 
5915
+ this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_10);
5916
+
5917
+ /*
5885
5918
  //固定扩展图形
5886
5919
  for(var i=0;i<this.ExtendChartPaint.length;++i)
5887
5920
  {
@@ -5890,6 +5923,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
5890
5923
  if (item.DrawAfterPicture) continue;
5891
5924
  if (!item.IsDynamic && item.IsAnimation==false) item.Draw();
5892
5925
  }
5926
+ */
5893
5927
 
5894
5928
  if (this.Frame.DrawInsideHorizontal) this.Frame.DrawInsideHorizontal();
5895
5929
  this.KLineIncreaseCustomHorizontal();
@@ -5918,6 +5952,10 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
5918
5952
 
5919
5953
  var moveonPoint=null;
5920
5954
  if (this.LastMouseStatus && this.LastMouseStatus.MoveOnPoint) moveonPoint=this.LastMouseStatus.MoveOnPoint;
5955
+
5956
+ this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_20, { MoveonPoint:moveonPoint} );
5957
+
5958
+ /*
5921
5959
  for(var i=0;i<this.ExtendChartPaint.length;++i) //动态扩展图形
5922
5960
  {
5923
5961
  var item=this.ExtendChartPaint[i];
@@ -5929,6 +5967,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
5929
5967
  if (item.DrawToolbar) item.DrawToolbar(moveonPoint);
5930
5968
  }
5931
5969
  }
5970
+ */
5932
5971
 
5933
5972
  for(var i=0;i<this.ChartDrawPicture.length;++i)
5934
5973
  {
@@ -6018,6 +6057,8 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
6018
6057
  item.Draw(moveonPoint, this.LastMouseStatus);
6019
6058
  }
6020
6059
 
6060
+ this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25);
6061
+ /*
6021
6062
  for(var i=0;i<this.ExtendChartPaint.length;++i) //动态扩展图形
6022
6063
  {
6023
6064
  var item=this.ExtendChartPaint[i];
@@ -6025,7 +6066,11 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
6025
6066
  if (item.DrawAfterPicture) continue;
6026
6067
  if (item.IsDynamic && item.DrawAfterTitle===true && item.IsAnimation==false) item.Draw();
6027
6068
  }
6069
+ */
6070
+
6071
+ if (this.EnableAnimation) this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_30);
6028
6072
 
6073
+ /*
6029
6074
  if (this.EnableAnimation)
6030
6075
  {
6031
6076
  for(var i=0;i<this.ExtendChartPaint.length;++i) //动画
@@ -6034,6 +6079,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
6034
6079
  if (item.IsAnimation===true) item.Draw();
6035
6080
  }
6036
6081
  }
6082
+ */
6037
6083
 
6038
6084
  for(var i=0;i<this.ChartDrawPicture.length;++i)
6039
6085
  {
@@ -6052,12 +6098,15 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
6052
6098
  this.CurrentChartDrawPicture.Draw();
6053
6099
  }
6054
6100
 
6101
+ this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_50);
6102
+ /*
6055
6103
  for(var i=0;i<this.ExtendChartPaint.length;++i) //画图工具绘制完成以后 动态扩展图形
6056
6104
  {
6057
6105
  var item=this.ExtendChartPaint[i];
6058
6106
  if (item.DrawAfterPicture)
6059
6107
  item.Draw();
6060
6108
  }
6109
+ */
6061
6110
 
6062
6111
  this.OffscreenToShowCanvas();
6063
6112
 
@@ -6086,6 +6135,45 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
6086
6135
  ++this.TouchDrawCount;
6087
6136
  }
6088
6137
 
6138
+ this.DrawExtendChartPaint=function(level, option)
6139
+ {
6140
+ if (!IFrameSplitOperator.IsNonEmptyArray(this.ExtendChartPaint)) return;
6141
+
6142
+ //扩展图形
6143
+ for(var i=0;i<this.ExtendChartPaint.length;++i)
6144
+ {
6145
+ var item=this.ExtendChartPaint[i];
6146
+ if (item.IsCallbackDraw) continue;
6147
+
6148
+ var value=item.GetPriority(); //绘图优先级
6149
+ if (value!=level) continue;
6150
+
6151
+ if (level==IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_20)
6152
+ {
6153
+ item.Draw();
6154
+ if (item.DrawToolbar && option) item.DrawToolbar(option.MoveonPoint, option.LastMouseStatus);
6155
+ }
6156
+ else if (level==IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25 && option)
6157
+ {
6158
+ if (item.ClassName=='KLineTooltipPaint' && option)
6159
+ {
6160
+ if (option.Tooltip==false) continue;
6161
+ if (option.Point) item.LatestPoint=option.Point;
6162
+ }
6163
+ else if (item.ClassName=="MinuteTooltipPaint" && option)
6164
+ {
6165
+ if (option.Point) item.LatestPoint=option.Point;
6166
+ }
6167
+
6168
+ item.Draw(option.MoveonPoint, option.LastMouseStatus);
6169
+ }
6170
+ else
6171
+ {
6172
+ item.Draw();
6173
+ }
6174
+ }
6175
+ }
6176
+
6089
6177
  this.PtInButton=function(x, y)
6090
6178
  {
6091
6179
  var button=this.Frame.PtInButtons(x,y);
@@ -6398,6 +6486,10 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
6398
6486
 
6399
6487
  var moveonPoint=null;
6400
6488
  if (this.LastMouseStatus && this.LastMouseStatus.MoveOnPoint) moveonPoint=this.LastMouseStatus.MoveOnPoint;
6489
+
6490
+ this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_20, { MoveonPoint:moveonPoint, LastMouseStatus:this.LastMouseStatus } );
6491
+
6492
+ /*
6401
6493
  for(var i=0;i<this.ExtendChartPaint.length;++i) //动态扩展图形
6402
6494
  {
6403
6495
  var item=this.ExtendChartPaint[i];
@@ -6409,6 +6501,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
6409
6501
  if (item.DrawToolbar) item.DrawToolbar(moveonPoint, this.LastMouseStatus);
6410
6502
  }
6411
6503
  }
6504
+ */
6412
6505
 
6413
6506
  for(var i=0;i<this.ChartDrawPicture.length;++i)
6414
6507
  {
@@ -6507,6 +6600,15 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
6507
6600
  item.Draw(moveonPoint, this.LastMouseStatus);
6508
6601
  }
6509
6602
 
6603
+
6604
+ var exChartOption={ MoveonPoint:moveonPoint, LastMouseStatus:this.LastMouseStatus };
6605
+ if (option)
6606
+ {
6607
+ exChartOption.Tooltip=option.Tooltip;
6608
+ exChartOption.Point=option.Point;
6609
+ }
6610
+ this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25,exChartOption);
6611
+ /*
6510
6612
  for(var i=0;i<this.ExtendChartPaint.length;++i) //动态扩展图形 在动态标题以后画
6511
6613
  {
6512
6614
  var item=this.ExtendChartPaint[i];
@@ -6524,7 +6626,10 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
6524
6626
 
6525
6627
  if (item.IsDynamic && item.DrawAfterTitle===true) item.Draw(moveonPoint, this.LastMouseStatus);
6526
6628
  }
6629
+ */
6527
6630
 
6631
+ if (this.EnableAnimation) this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_30);
6632
+ /*
6528
6633
  if (this.EnableAnimation)
6529
6634
  {
6530
6635
  for(var i=0;i<this.ExtendChartPaint.length;++i) //动画
@@ -6533,6 +6638,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
6533
6638
  if (item.IsAnimation===true) item.Draw();
6534
6639
  }
6535
6640
  }
6641
+ */
6536
6642
 
6537
6643
  for(var i=0;i<this.ChartDrawPicture.length;++i)
6538
6644
  {
@@ -6554,12 +6660,15 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
6554
6660
  this.CurrentChartDrawPicture.Draw();
6555
6661
  }
6556
6662
 
6663
+ this.DrawExtendChartPaint(IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_50);
6664
+ /*
6557
6665
  for(var i=0;i<this.ExtendChartPaint.length;++i) //动态扩展图形
6558
6666
  {
6559
6667
  var item=this.ExtendChartPaint[i];
6560
6668
  if (item.DrawAfterPicture)
6561
6669
  item.Draw();
6562
6670
  }
6671
+ */
6563
6672
 
6564
6673
  if (this.LastMouseStatus.MouseOnToolbar) //工具栏按钮提示信息
6565
6674
  {
@@ -7036,7 +7145,12 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
7036
7145
  }
7037
7146
 
7038
7147
  var draw=false;
7039
- if (this.ChartCorssCursor && this.ChartCorssCursor.OnKeyDown) //十字光标 隐藏显示
7148
+ if (keyID==27 && this.PopMinuteChart && this.PopMinuteChart.IsShow())
7149
+ {
7150
+ this.PopMinuteChart.Close();
7151
+ draw=true;
7152
+ }
7153
+ else if (this.ChartCorssCursor && this.ChartCorssCursor.OnKeyDown) //十字光标 隐藏显示
7040
7154
  {
7041
7155
  var sendData={ e:e, KeyID:keyID, Draw:false, PreventDefault:false };
7042
7156
  this.ChartCorssCursor.OnKeyDown(sendData);
@@ -7059,6 +7173,15 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
7059
7173
  if (this.OnCustomKeyDown(keyID, e))
7060
7174
  break;
7061
7175
  }
7176
+
7177
+ //K线 如果超出K线数据了 调整到最后一个数据
7178
+ if (this.FixCursorIndexValid && this.FixCursorIndexValid())
7179
+ {
7180
+ this.UpdatePointByCursorIndex();
7181
+ this.DrawDynamicInfo();
7182
+ this.ShowTooltipByKeyDown();
7183
+ break;
7184
+ }
7062
7185
 
7063
7186
  if (this.CursorIndex<=0.99999)
7064
7187
  {
@@ -7090,6 +7213,15 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
7090
7213
  break;
7091
7214
  }
7092
7215
 
7216
+ //K线 如果超出K线数据了 调整到最后一个数据
7217
+ if (this.FixCursorIndexValid && this.FixCursorIndexValid())
7218
+ {
7219
+ this.UpdatePointByCursorIndex();
7220
+ this.DrawDynamicInfo();
7221
+ this.ShowTooltipByKeyDown();
7222
+ break;
7223
+ }
7224
+
7093
7225
  var xPointcount=0;
7094
7226
  if (this.Frame.XPointCount) xPointcount=this.Frame.XPointCount;
7095
7227
  else xPointcount=this.Frame.SubFrame[0].Frame.XPointCount;
@@ -7200,6 +7332,9 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
7200
7332
  this.CurrentChartDrawPicture=null;
7201
7333
  }
7202
7334
  break;
7335
+ case 13: //回车
7336
+ if (this.OnCustomKeyDown) this.OnCustomKeyDown(keyID, e);
7337
+ break;
7203
7338
  default:
7204
7339
  return;
7205
7340
  }
@@ -7213,7 +7348,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
7213
7348
 
7214
7349
  this.OnDoubleClick=function(x,y,e)
7215
7350
  {
7216
- //JSConsole.Chart.Log(e);
7351
+
7217
7352
  }
7218
7353
 
7219
7354
  this.ZoomIndexWindow=function(frameID, option) //最大化/最小化指标窗口
@@ -7507,13 +7642,21 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
7507
7642
  return;
7508
7643
  }
7509
7644
 
7645
+ var kData=this.GetKData();
7646
+ if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return;
7647
+
7510
7648
  var index=Math.abs(this.CursorIndex-0.5);
7511
7649
  index=parseInt(index.toFixed(0));
7512
7650
  if (this.ClassName=='KLineChartContainer' || this.ClassName=='KLineTrainChartContainer') index=this.CursorIndex;
7513
7651
 
7652
+ var dataIndex=kData.DataOffset+index;
7653
+ if (dataIndex<0 || dataIndex>=kData.Data.length) return;
7654
+ var kItem=kData.Data[dataIndex];
7655
+ if (!kItem) return;
7656
+
7514
7657
  var data=this.Frame.Data;
7515
7658
  var toolTip=new TooltipData();
7516
- toolTip.Data=data.Data[data.DataOffset+index];
7659
+ toolTip.Data=kItem;
7517
7660
  toolTip.ChartPaint=this.ChartPaint[0];
7518
7661
 
7519
7662
  var pixelTatio = GetDevicePixelRatio();
@@ -10569,6 +10712,9 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
10569
10712
  case JSCHART_MENU_ID.CMD_CORSS_POINT_ID:
10570
10713
  if (IFrameSplitOperator.IsBool(srcParam) && this.ChartCorssCursor) this.ChartCorssCursor.CorssPointConfig.Enable=srcParam;
10571
10714
  break;
10715
+ case JSCHART_MENU_ID.CMD_CORSS_DBCLICK_ID:
10716
+ if (IFrameSplitOperator.IsBool(srcParam) && this.ChartCorssCursor) this.ChartCorssCursor.EnableDBClick=srcParam;
10717
+ break;
10572
10718
  case JSCHART_MENU_ID.CMD_RBUTTON_SELECT_RECT_ID:
10573
10719
  if (IFrameSplitOperator.IsBool(srcParam) && this.ChartDragSelectRect) this.ChartDragSelectRect.EnableRButton=srcParam;
10574
10720
  break;
@@ -45251,12 +45397,34 @@ function IExtendChartPainting()
45251
45397
  this.IsCallbackDraw=false; //在回调函数里绘制, 不在Draw()中绘制
45252
45398
  this.ID=Guid();
45253
45399
 
45400
+ this.DrawPriority=null; //绘图优先级
45401
+
45254
45402
  //上下左右间距
45255
45403
  this.Left=5;
45256
45404
  this.Right=5;
45257
45405
  this.Top=5;
45258
45406
  this.Bottom=5;
45259
45407
 
45408
+
45409
+ this.GetPriority=function()
45410
+ {
45411
+ if (IFrameSplitOperator.IsNumber(this.DrawPriority)) return this.DrawPriority; //新版本
45412
+
45413
+ //老版本转换
45414
+
45415
+ if (!this.IsDynamic && !this.DrawAfterPicture) return IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_10;
45416
+
45417
+ if (this.DrawAfterTitle===false && this.IsAnimation==false) return IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_20;
45418
+
45419
+ if (this.DrawAfterTitle===true) return IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25;
45420
+
45421
+ if (this.IsAnimation===true) return IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_35;
45422
+
45423
+ if (this.DrawAfterPicture===true) IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_50;
45424
+
45425
+ return IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_50
45426
+ }
45427
+
45260
45428
  this.Draw=function()
45261
45429
  {
45262
45430
 
@@ -45293,6 +45461,23 @@ function IExtendChartPainting()
45293
45461
  }
45294
45462
  }
45295
45463
 
45464
+ //绘图优先级
45465
+ IExtendChartPainting.DRAW_PRIORITY_ID=
45466
+ {
45467
+ LEVEL_1:1,
45468
+ LEVEL_5:5, // 叠加指数图形前面 指标图形 IsDrawFirst=true
45469
+ LEVEL_8:8, // 叠加指数图形前面 指标图形 IsDrawFirst=false
45470
+ LEVEL_10:10, // IsDynamic=false
45471
+
45472
+ LEVEL_20:20, // IsDynamic=true
45473
+
45474
+ LEVEL_25:25, // DrawAfterTitle=true 标题栏绘制完成以后
45475
+
45476
+ LEVEL_35:35, // IsAnimation=true
45477
+
45478
+ LEVEL_50:50, // DrawAfterPicture=true; 是否在画图工具以后绘制
45479
+ }
45480
+
45296
45481
  //K线Tooltip, 显示在左边或右边
45297
45482
  function KLineTooltipPaint()
45298
45483
  {
@@ -45312,6 +45497,7 @@ function KLineTooltipPaint()
45312
45497
  this.AmountColor=g_JSChartResource.TooltipPaint.AmountColor; //成交金额
45313
45498
  this.LatestPoint; //手势位置
45314
45499
  this.ShowPosition=0; //显示位置 0=左 1=右
45500
+ this.DrawPriority=IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25;
45315
45501
 
45316
45502
  this.Left=1*GetDevicePixelRatio();
45317
45503
  this.Top=5*GetDevicePixelRatio();
@@ -46055,6 +46241,7 @@ function MinuteLeftTooltipPaint()
46055
46241
  this.IsDynamic=true;
46056
46242
  this.IsEraseBG=true;
46057
46243
  this.DrawAfterTitle=true;
46244
+ this.DrawPriority=IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25;
46058
46245
  this.ClassName='MinuteLeftTooltipPaint';
46059
46246
  this.BorderColor=g_JSChartResource.PCTooltipPaint.BorderColor; //边框颜色
46060
46247
  this.BGColor=g_JSChartResource.PCTooltipPaint.BGColor; //背景色
@@ -46465,6 +46652,7 @@ function StockChip()
46465
46652
  this.PixelRatio=GetDevicePixelRatio();
46466
46653
  this.ShowType=0; //0=所有筹码 1=周期前 2=周期内
46467
46654
  this.IsDynamic=true;
46655
+ this.DrawPriority=IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_20;
46468
46656
  this.ClientRect={};
46469
46657
  this.Font=g_JSChartResource.StockChip.Font;
46470
46658
  this.InfoColor=g_JSChartResource.StockChip.InfoColor;
@@ -50144,6 +50332,7 @@ function FrameButtomToolbarPaint()
50144
50332
  this.FrameGuid=null;
50145
50333
  this.IsDynamic=true;
50146
50334
  this.DrawAfterTitle=true;
50335
+ this.DrawPriority=IExtendChartPainting.DRAW_PRIORITY_ID.LEVEL_25;
50147
50336
 
50148
50337
  this.AryButton=[]; // { Title:, ID:, Data:数据, TooltipText:提示信息 }
50149
50338
  this.SelectedID=null; // 选中按钮ID
@@ -54289,6 +54478,7 @@ function ChartCorssCursor()
54289
54478
  this.CallAcutionXOperator;
54290
54479
 
54291
54480
  this.EnableKeyboard=false; //是否支持键盘隐藏显示
54481
+ this.EnableDBClick=false; //是否允许双击显示|隐藏十字光标
54292
54482
  this.OnChangeStatusCallback; //状态切换以后回调
54293
54483
 
54294
54484
 
@@ -55517,6 +55707,27 @@ function ChartCorssCursor()
55517
55707
  }
55518
55708
  }
55519
55709
 
55710
+ this.OnDBClick=function(data)
55711
+ {
55712
+ if (!this.EnableDBClick) return;
55713
+ if (!IFrameSplitOperator.IsNonEmptyArray(this.Frame.SubFrame)) return;
55714
+
55715
+ //在主图框架内
55716
+ var frame=this.Frame.SubFrame[0].Frame;
55717
+ if (!frame) return;
55718
+
55719
+ var border=frame.GetBorder();
55720
+ var rtClient={ Left:border.Left, Top:border.Top, Bottom:border.Bottom, Right:border.Right };
55721
+ var x=data.X, y=data.Y;
55722
+ if (x>=rtClient.Left && x<=rtClient.Right && y>=rtClient.Top && y<=rtClient.Bottom)
55723
+ {
55724
+ this.IsShowCorss=!this.IsShowCorss
55725
+ data.Draw=true;
55726
+
55727
+ if (this.OnChangeStatusCallback) this.OnChangeStatusCallback({ Type:1, IsShowCorss:this.IsShowCorss }, this);
55728
+ }
55729
+ }
55730
+
55520
55731
 
55521
55732
  this.DrawCorssPoint=function(x,y)
55522
55733
  {
@@ -76338,6 +76549,8 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
76338
76549
  { KeyID:87, SecondKeyID:3, CMD:JSCHART_MENU_ID.CMD_FULLSCREEN_SUMMARY_ID, Args:null, Description:"Alt+W 全屏区间统计" },
76339
76550
  ]
76340
76551
 
76552
+ this.KLineDragConfig={ EnableShfit:false }; //是否启动Shift+鼠标拖动K线
76553
+
76341
76554
  this.GetKLineCalulate=function()
76342
76555
  {
76343
76556
  var kLineDrawType=this.GetKLineDrawType();
@@ -77410,6 +77623,10 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
77410
77623
  this.MoveCorssCursorDown(this.ShiftUpDownStepPixel);
77411
77624
  return true;
77412
77625
  }
77626
+ else if (keyID==13) //回车显示分时图
77627
+ {
77628
+ this.OnEnterKeyDown();
77629
+ }
77413
77630
  else
77414
77631
  {
77415
77632
  return false;
@@ -77549,6 +77766,30 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
77549
77766
  this.ShowTooltipByKeyDown();
77550
77767
  }
77551
77768
 
77769
+ this.OnEnterKeyDown=function()
77770
+ {
77771
+ if (!this.PopMinuteChart) return false;
77772
+ if (!ChartData.IsDayPeriod(this.Period,true)) return false; //只支持日K
77773
+ if (!this.ChartCorssCursor || !this.ChartCorssCursor.IsShowCorss || this.ChartCorssCursor.ClientPos<0) return false;
77774
+ var index=this.ChartCorssCursor.CursorIndex;
77775
+ index=parseInt(index.toFixed(0));
77776
+ var kData=this.GetKData();
77777
+ if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return false;
77778
+ var dataIndex=kData.DataOffset+index;
77779
+ if (dataIndex<0 || dataIndex>=kData.Data.length) return false;
77780
+
77781
+ var kItem = kData.Data[dataIndex];
77782
+ if (!kItem) return false;
77783
+
77784
+ var frame=this.Frame.SubFrame[0].Frame;
77785
+ var x=frame.GetXFromIndex(index);
77786
+ var y=frame.GetYFromData(kItem.Close);
77787
+
77788
+ var data={ Chart:this, Tooltip:{ ChartPaint:this.ChartPaint[0], Data:kItem } };
77789
+
77790
+ this.ShowMinuteChartDialog(data, x, y);
77791
+ }
77792
+
77552
77793
  //获取K线图实例
77553
77794
  this.GetKLineChart=function()
77554
77795
  {
@@ -82306,12 +82547,14 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
82306
82547
  var bCorssDrawKLine=false;
82307
82548
  var bCorssDrawVaildTime=false;
82308
82549
  var bCorssDrawPoint=false;
82550
+ var bCorssBCClick=false;
82309
82551
  if (this.ChartCorssCursor)
82310
82552
  {
82311
82553
  bShowCorss=this.ChartCorssCursor.IsShowCorss;
82312
82554
  bCorssDrawKLine=this.ChartCorssCursor.IsOnlyDrawKLine && this.ChartCorssCursor.IsShowClose;
82313
82555
  bCorssDrawVaildTime=this.ChartCorssCursor.IsFixXLastTime;
82314
82556
  bCorssDrawPoint=this.ChartCorssCursor.CorssPointConfig.Enable;
82557
+ bCorssBCClick=this.ChartCorssCursor.EnableDBClick;
82315
82558
  }
82316
82559
 
82317
82560
  var bPopMinuteChart=false;
@@ -82497,6 +82740,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
82497
82740
  { Name:"显示在K线上", Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_ON_KLINE_ID, Args:[!bCorssDrawKLine]}, Checked:bCorssDrawKLine },
82498
82741
  { Name:"画在有效X轴上",Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_ON_VAILD_TIME_ID, Args:[!bCorssDrawVaildTime]}, Checked:bCorssDrawVaildTime },
82499
82742
  { Name:"画圆点",Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_POINT_ID, Args:[!bCorssDrawPoint]}, Checked:bCorssDrawPoint },
82743
+ { Name:"双击显示/隐藏", Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_DBCLICK_ID, Args:[!bCorssBCClick]}, Checked:bCorssBCClick },
82500
82744
  ]
82501
82745
  },
82502
82746
  {
@@ -82970,6 +83214,14 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
82970
83214
 
82971
83215
  this.OnDoubleClick=function(x,y,e)
82972
83216
  {
83217
+ var bDraw=false;
83218
+ if (this.ChartCorssCursor)
83219
+ {
83220
+ var data={ e:e, X:x, Y:y, Draw:false };
83221
+ this.ChartCorssCursor.OnDBClick(data);
83222
+ bDraw=data.Draw
83223
+ }
83224
+
82973
83225
  if (this.EnableYDrag && (this.EnableYDrag.Left || this.EnableYDrag.Right) && this.Frame && this.Frame.PtInFrameY)
82974
83226
  {
82975
83227
  var pixelTatio = GetDevicePixelRatio();
@@ -83006,6 +83258,8 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
83006
83258
  }
83007
83259
  }
83008
83260
 
83261
+ if (bDraw) this.Draw();
83262
+
83009
83263
  var tooltip=new TooltipData();
83010
83264
  if (!this.PtInChartPaintTooltip(x,y,tooltip))
83011
83265
  {
@@ -84330,6 +84584,22 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
84330
84584
 
84331
84585
  return result;
84332
84586
  }
84587
+
84588
+ //修正十字光标位置有效的K线
84589
+ this.FixCursorIndexValid=function()
84590
+ {
84591
+ var kData=this.GetKData();
84592
+ if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return false;
84593
+
84594
+ var dataIndex=this.CursorIndex+kData.DataOffset;
84595
+ if (dataIndex>=kData.Data.length)
84596
+ {
84597
+ this.CursorIndex=kData.Data.length-kData.DataOffset-1;
84598
+ return true;
84599
+ }
84600
+
84601
+ return false;
84602
+ }
84333
84603
  }
84334
84604
 
84335
84605
  //API 返回数据 转化为array[]
@@ -86567,12 +86837,14 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
86567
86837
  var bCorssDrawCloseLine=false; //十字光标只能画在走势图价格线上
86568
86838
  var bCorssDrawVaildTime=false;
86569
86839
  var bCorssDrawPoint=false;
86840
+ var bCorssBCClick=false;
86570
86841
  if (this.ChartCorssCursor)
86571
86842
  {
86572
86843
  bShowCorss=this.ChartCorssCursor.IsShowCorss;
86573
86844
  bCorssDrawCloseLine=this.ChartCorssCursor.IsOnlyDrawMinute;
86574
86845
  bCorssDrawVaildTime=this.ChartCorssCursor.IsFixXLastTime;
86575
86846
  bCorssDrawPoint=this.ChartCorssCursor.CorssPointConfig.Enable;
86847
+ bCorssBCClick=this.ChartCorssCursor.EnableDBClick;
86576
86848
  }
86577
86849
 
86578
86850
  var bRButtonSelectRect=false,bLButtonSelectRect=false;
@@ -86669,6 +86941,7 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
86669
86941
  { Name:"画在价格线上", Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_ON_CLOSE_LINE_ID, Args:[!bCorssDrawCloseLine]}, Checked:bCorssDrawCloseLine },
86670
86942
  { Name:"画在有效X轴上",Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_ON_VAILD_TIME_ID, Args:[!bCorssDrawVaildTime]}, Checked:bCorssDrawVaildTime },
86671
86943
  { Name:"画圆点",Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_POINT_ID, Args:[!bCorssDrawPoint]}, Checked:bCorssDrawPoint },
86944
+ { Name:"双击显示/隐藏", Data:{ ID:JSCHART_MENU_ID.CMD_CORSS_DBCLICK_ID, Args:[!bCorssBCClick]}, Checked:bCorssBCClick },
86672
86945
  ]
86673
86946
  },
86674
86947
 
@@ -86809,6 +87082,14 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
86809
87082
  {
86810
87083
  JSConsole.Chart.Log("[MinuteChartContainer::OnDoubleClick]", e);
86811
87084
 
87085
+ var bDraw=false;
87086
+ if (this.ChartCorssCursor)
87087
+ {
87088
+ var data={ e:e, X:x, Y:y, Draw:false };
87089
+ this.ChartCorssCursor.OnDBClick(data);
87090
+ bDraw=data.Draw
87091
+ }
87092
+
86812
87093
  if (this.EnableYDrag && (this.EnableYDrag.Left || this.EnableYDrag.Right) && this.Frame && this.Frame.PtInFrameY)
86813
87094
  {
86814
87095
  var pixelTatio = GetDevicePixelRatio();
@@ -86846,10 +87127,12 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
86846
87127
  if (this.ZoomIndexWindow(frameId, {X:x, Y:y}))
86847
87128
  {
86848
87129
  this.Frame.SetSizeChage(true);
86849
- this.Draw();
87130
+ bDraw=true;
86850
87131
  }
86851
87132
  }
86852
87133
  }
87134
+
87135
+ if (bDraw) this.Draw();
86853
87136
  }
86854
87137
 
86855
87138
  this.GetDataItem=function(pointInfo)