hqchart 1.1.14330 → 1.1.14340
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.
- package/lib/umychart.vue.js +55 -49
- package/package.json +1 -1
- package/src/jscommon/umychart.NetworkFilterTest.js +3 -1
- package/src/jscommon/umychart.complier.js +19 -20
- package/src/jscommon/umychart.js +309 -129
- package/src/jscommon/umychart.testdata.js +3 -1
- package/src/jscommon/umychart.uniapp.h5/umychart.uniapp.h5.js +329 -150
- package/src/jscommon/umychart.version.js +1 -1
- package/src/jscommon/umychart.vue/umychart.NetworkFilterTest.vue.js +3 -1
- package/src/jscommon/umychart.vue/umychart.vue.js +329 -150
|
@@ -6771,6 +6771,9 @@ var JSCHART_MENU_ID=
|
|
|
6771
6771
|
CMD_MODIFY_INDEX_PARAM:45, //指标删除修改 [windowIndex, ]
|
|
6772
6772
|
CMD_MODIFY_OVERLAY_INDEX_PARAM:46, //叠加指标修改 [windowIndex, ID ]
|
|
6773
6773
|
|
|
6774
|
+
CMD_LOCK_CROSSCURSOR:47, //锁十字光标
|
|
6775
|
+
CMD_UNLOCK_CROSSCURSOR:48, //解锁十字光标
|
|
6776
|
+
|
|
6774
6777
|
|
|
6775
6778
|
CMD_REPORT_CHANGE_BLOCK_ID:100, //报价列表 切换板块ID
|
|
6776
6779
|
CMD_REPORT_COLUMN_SORT_ID:101, //报价列表 表头排序 Arg[列序号, 排序方向]
|
|
@@ -14112,6 +14115,12 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
|
|
|
14112
14115
|
var sendData={ e:null, WindowIndex:param, Type:2, Identify:aryArgs[1] };
|
|
14113
14116
|
this.ShowModifyIndexParamDialog(sendData);
|
|
14114
14117
|
break;
|
|
14118
|
+
case JSCHART_MENU_ID.CMD_LOCK_CROSSCURSOR:
|
|
14119
|
+
if (srcParam) this.LockCorssCursor(srcParam);
|
|
14120
|
+
break;
|
|
14121
|
+
case JSCHART_MENU_ID.CMD_UNLOCK_CROSSCURSOR:
|
|
14122
|
+
if (this.IsLockCorssCursor()) this.UnlockCorssCursor({ Draw:true })
|
|
14123
|
+
break;
|
|
14115
14124
|
}
|
|
14116
14125
|
}
|
|
14117
14126
|
|
|
@@ -14198,13 +14207,13 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
|
|
|
14198
14207
|
if (!this.JSPopMenu) return;
|
|
14199
14208
|
var x=data.X, y=data.Y;
|
|
14200
14209
|
var frameID=data.FrameID;
|
|
14201
|
-
var menuData={ Menu:this.GetRightMenuData(frameID), Position:JSPopMenu.POSITION_ID.RIGHT_MENU_ID };
|
|
14210
|
+
var menuData={ Menu:this.GetRightMenuData(frameID, data), Position:JSPopMenu.POSITION_ID.RIGHT_MENU_ID };
|
|
14202
14211
|
menuData.ClickCallback=(data)=>{ this.OnClickRightMenu(data); }
|
|
14203
14212
|
|
|
14204
14213
|
var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CREATE_RIGHT_MENU);
|
|
14205
14214
|
if (event && event.Callback)
|
|
14206
14215
|
{
|
|
14207
|
-
var sendData={ MenuData:menuData, FrameID:frameID };
|
|
14216
|
+
var sendData={ MenuData:menuData, FrameID:frameID, Data:data };
|
|
14208
14217
|
event.Callback(event, sendData, this);
|
|
14209
14218
|
}
|
|
14210
14219
|
|
|
@@ -24621,9 +24630,9 @@ function HQTradeFrame()
|
|
|
24621
24630
|
return null;
|
|
24622
24631
|
}
|
|
24623
24632
|
|
|
24624
|
-
this.GetXFromIndex=function(index)
|
|
24633
|
+
this.GetXFromIndex=function(index,isLimit)
|
|
24625
24634
|
{
|
|
24626
|
-
return this.SubFrame[0].Frame.GetXFromIndex(index);
|
|
24635
|
+
return this.SubFrame[0].Frame.GetXFromIndex(index,isLimit);
|
|
24627
24636
|
}
|
|
24628
24637
|
|
|
24629
24638
|
this.GetYFromData=function(value)
|
|
@@ -27623,15 +27632,15 @@ function ChartData()
|
|
|
27623
27632
|
this.FindDataIndexByDateTime=function(aryDateTime) //aryDateTime=[ { Date:, Time:, Index:-1 }, ......]
|
|
27624
27633
|
{
|
|
27625
27634
|
var findCount=0;
|
|
27626
|
-
for(var i
|
|
27635
|
+
for(var i=0;i<aryDateTime.length;++i)
|
|
27627
27636
|
{
|
|
27628
27637
|
aryDateTime[i].Index=-1;
|
|
27629
27638
|
}
|
|
27630
27639
|
|
|
27631
|
-
for(var i
|
|
27640
|
+
for(var i=0;i<this.Data.length;++i)
|
|
27632
27641
|
{
|
|
27633
27642
|
var item=this.Data[i];
|
|
27634
|
-
for(var j
|
|
27643
|
+
for(var j=0;j<aryDateTime.length;++j)
|
|
27635
27644
|
{
|
|
27636
27645
|
var findItem=aryDateTime[j];
|
|
27637
27646
|
if (findItem.Index>=0) continue;
|
|
@@ -27640,7 +27649,7 @@ function ChartData()
|
|
|
27640
27649
|
{
|
|
27641
27650
|
if (findItem.Date==item.Date && findItem.Time==item.Time)
|
|
27642
27651
|
{
|
|
27643
|
-
findItem.Index=
|
|
27652
|
+
findItem.Index=i;
|
|
27644
27653
|
++findCount;
|
|
27645
27654
|
break;
|
|
27646
27655
|
}
|
|
@@ -27649,7 +27658,7 @@ function ChartData()
|
|
|
27649
27658
|
{
|
|
27650
27659
|
if (findItem.Date==item.Date)
|
|
27651
27660
|
{
|
|
27652
|
-
findItem.Index=
|
|
27661
|
+
findItem.Index=i;
|
|
27653
27662
|
++findCount;
|
|
27654
27663
|
break;
|
|
27655
27664
|
}
|
|
@@ -28273,6 +28282,30 @@ ChartData.GetPeriodName=function(period)
|
|
|
28273
28282
|
}
|
|
28274
28283
|
|
|
28275
28284
|
|
|
28285
|
+
ChartData.GetKValue=function(kItem, valueName)
|
|
28286
|
+
{
|
|
28287
|
+
if (!kItem) return null;
|
|
28288
|
+
|
|
28289
|
+
switch(valueName)
|
|
28290
|
+
{
|
|
28291
|
+
case "HIGH":
|
|
28292
|
+
case "H":
|
|
28293
|
+
return kItem.High;
|
|
28294
|
+
case "L":
|
|
28295
|
+
case "LOW":
|
|
28296
|
+
return kItem.Low;
|
|
28297
|
+
case "C":
|
|
28298
|
+
case "CLOSE":
|
|
28299
|
+
return kItem.Close;
|
|
28300
|
+
case "O":
|
|
28301
|
+
case "OPEN":
|
|
28302
|
+
return KItem.Open;
|
|
28303
|
+
default:
|
|
28304
|
+
return null;
|
|
28305
|
+
}
|
|
28306
|
+
}
|
|
28307
|
+
|
|
28308
|
+
|
|
28276
28309
|
|
|
28277
28310
|
function TooltipData() //提示信息
|
|
28278
28311
|
{
|
|
@@ -35199,15 +35232,7 @@ function ChartOverlayKLine()
|
|
|
35199
35232
|
|
|
35200
35233
|
if (!this.MainData || !this.Data) return range;
|
|
35201
35234
|
|
|
35202
|
-
var firstOpen=
|
|
35203
|
-
for(var i=this.Data.DataOffset,j=0;i<this.MainData.Data.length && j<xPointCount;++i,++j)
|
|
35204
|
-
{
|
|
35205
|
-
var data=this.MainData.Data[i];
|
|
35206
|
-
if (data.Open==null || data.High==null || data.Low==null || data.Close==null) continue;
|
|
35207
|
-
firstOpen=data.Close;
|
|
35208
|
-
break;
|
|
35209
|
-
}
|
|
35210
|
-
|
|
35235
|
+
var firstOpen=this.GetFirstOpen();
|
|
35211
35236
|
if (firstOpen==null) return range;
|
|
35212
35237
|
|
|
35213
35238
|
var firstOverlayOpen=null;
|
|
@@ -44805,7 +44830,7 @@ function ChartMultiLine()
|
|
|
44805
44830
|
}
|
|
44806
44831
|
}
|
|
44807
44832
|
|
|
44808
|
-
//
|
|
44833
|
+
// 多个点集合 支持横屏
|
|
44809
44834
|
function ChartMultiPoint()
|
|
44810
44835
|
{
|
|
44811
44836
|
this.newMethod=IChartPainting; //派生
|
|
@@ -44813,98 +44838,219 @@ function ChartMultiPoint()
|
|
|
44813
44838
|
delete this.newMethod;
|
|
44814
44839
|
|
|
44815
44840
|
this.ClassName="ChartMultiPoint";
|
|
44816
|
-
this.PointGroup=[]; // [ {Point:[ {
|
|
44841
|
+
this.PointGroup=[]; // [ {Point:[ {Date, Time, Value }, ], Color: }, ]
|
|
44817
44842
|
|
|
44818
44843
|
|
|
44819
44844
|
this.IsHScreen=false;
|
|
44820
44845
|
this.LineWidth=1;
|
|
44821
44846
|
this.PointRadius=5;
|
|
44822
44847
|
|
|
44848
|
+
this.MapCache=null; //key=date/date-time value={ Data:[] }
|
|
44849
|
+
this.GetKValue=ChartData.GetKValue;
|
|
44850
|
+
|
|
44851
|
+
this.BuildKey=function(item)
|
|
44852
|
+
{
|
|
44853
|
+
if (IFrameSplitOperator.IsNumber(item.Time)) return `${item.Date}-${item.Time}`;
|
|
44854
|
+
else return item.Date;
|
|
44855
|
+
}
|
|
44856
|
+
|
|
44857
|
+
this.GetItem=function(kItem)
|
|
44858
|
+
{
|
|
44859
|
+
if (!this.MapCache || this.MapCache.size<=0) return null;
|
|
44860
|
+
|
|
44861
|
+
var key=this.BuildKey(kItem);
|
|
44862
|
+
if (!this.MapCache.has(key)) return null;
|
|
44863
|
+
|
|
44864
|
+
return this.MapCache.get(key);
|
|
44865
|
+
}
|
|
44866
|
+
|
|
44867
|
+
this.BuildCacheData=function()
|
|
44868
|
+
{
|
|
44869
|
+
var mapData=new Map();
|
|
44870
|
+
this.MapCache=mapData;
|
|
44871
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(this.PointGroup)) return;
|
|
44872
|
+
|
|
44873
|
+
for(var i=0; i<this.PointGroup.length; ++i)
|
|
44874
|
+
{
|
|
44875
|
+
var groupItem=this.PointGroup[i];
|
|
44876
|
+
if (!groupItem || !IFrameSplitOperator.IsNonEmptyArray(groupItem.Point)) continue;
|
|
44877
|
+
|
|
44878
|
+
var clrConfig= { Color:groupItem.Color, BGColor:groupItem.BGColor, LineWidth:this.LineWidth, Radius:this.PointRadius, Name:groupItem.Name };
|
|
44879
|
+
if (IFrameSplitOperator.IsNumber(groupItem.PointRadius)) clrConfig.Radius=groupItem.PointRadius;
|
|
44880
|
+
|
|
44881
|
+
for(var j=0; j<groupItem.Point.length; ++j)
|
|
44882
|
+
{
|
|
44883
|
+
var point=groupItem.Point[j];
|
|
44884
|
+
var key=this.BuildKey(point);
|
|
44885
|
+
|
|
44886
|
+
var item={ Data:point, ColorConfig:clrConfig }
|
|
44887
|
+
if (mapData.has(key))
|
|
44888
|
+
{
|
|
44889
|
+
var mapItem=mapData.get(key);
|
|
44890
|
+
mapItem.Data.push(item);
|
|
44891
|
+
}
|
|
44892
|
+
else
|
|
44893
|
+
{
|
|
44894
|
+
mapData.set(key,{ Data:[item] });
|
|
44895
|
+
}
|
|
44896
|
+
}
|
|
44897
|
+
}
|
|
44898
|
+
}
|
|
44899
|
+
|
|
44823
44900
|
this.Draw=function()
|
|
44824
44901
|
{
|
|
44825
|
-
if (!this.IsShow || this.ChartFrame.IsMinSize) return;
|
|
44826
|
-
if (
|
|
44902
|
+
if (!this.IsShow || this.ChartFrame.IsMinSize || !this.IsVisible) return;
|
|
44903
|
+
if (this.IsShowIndexTitleOnly()) return;
|
|
44904
|
+
if (this.IsHideScriptIndex()) return;
|
|
44905
|
+
|
|
44906
|
+
if (!this.Data || !IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return; //k线数据
|
|
44827
44907
|
if (!IFrameSplitOperator.IsNonEmptyArray(this.PointGroup)) return;
|
|
44908
|
+
if (!this.MapCache || this.MapCache.size<=0) return;
|
|
44828
44909
|
|
|
44829
44910
|
this.IsHScreen=(this.ChartFrame.IsHScreen===true);
|
|
44830
44911
|
var xPointCount=this.ChartFrame.XPointCount;
|
|
44831
|
-
var
|
|
44832
|
-
var
|
|
44912
|
+
var dataWidth=this.ChartFrame.DataWidth;
|
|
44913
|
+
var distanceWidth=this.ChartFrame.DistanceWidth;
|
|
44914
|
+
var isMinute=this.IsMinuteFrame();
|
|
44915
|
+
|
|
44916
|
+
var border=this.GetBorder();
|
|
44917
|
+
if (this.IsHScreen)
|
|
44918
|
+
{
|
|
44919
|
+
var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
|
|
44920
|
+
var chartright=border.BottomEx;
|
|
44921
|
+
var chartLeft=border.TopEx;
|
|
44922
|
+
}
|
|
44923
|
+
else
|
|
44924
|
+
{
|
|
44925
|
+
var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
|
|
44926
|
+
var chartright=border.RightEx;
|
|
44927
|
+
var chartLeft=border.LeftEx;
|
|
44928
|
+
}
|
|
44929
|
+
|
|
44930
|
+
//计算所有的点位置
|
|
44931
|
+
var mapPoint=new Map();
|
|
44932
|
+
for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length && j<xPointCount;++i,++j,xOffset+=(dataWidth+distanceWidth))
|
|
44933
|
+
{
|
|
44934
|
+
var kItem=this.Data.Data[i];
|
|
44935
|
+
var key=this.BuildKey(kItem);
|
|
44936
|
+
if (!this.MapCache.has(key)) continue;
|
|
44937
|
+
var mapItem=this.MapCache.get(key);
|
|
44938
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(mapItem.Data)) continue;
|
|
44939
|
+
|
|
44940
|
+
if (isMinute)
|
|
44941
|
+
{
|
|
44942
|
+
var x=this.ChartFrame.GetXFromIndex(j);
|
|
44943
|
+
}
|
|
44944
|
+
else
|
|
44945
|
+
{
|
|
44946
|
+
var left=xOffset;
|
|
44947
|
+
var right=xOffset+dataWidth;
|
|
44948
|
+
if (right>chartright) break;
|
|
44949
|
+
var x=left+(right-left)/2;
|
|
44950
|
+
}
|
|
44951
|
+
|
|
44952
|
+
this.CalculateItem(mapItem, kItem, x, mapPoint);
|
|
44953
|
+
}
|
|
44954
|
+
|
|
44955
|
+
if (mapPoint.size<=0) return;
|
|
44833
44956
|
|
|
44834
44957
|
this.Canvas.save();
|
|
44835
44958
|
this.ClipClient(this.IsHScreen);
|
|
44836
|
-
|
|
44837
|
-
|
|
44959
|
+
|
|
44960
|
+
this.DrawAllPoint(mapPoint);
|
|
44961
|
+
|
|
44962
|
+
this.Canvas.restore();
|
|
44963
|
+
}
|
|
44964
|
+
|
|
44965
|
+
this.CalculateItem=function(groupItem, kItem, x, mapPoint)
|
|
44966
|
+
{
|
|
44967
|
+
for(var i=0; i<groupItem.Data.length; ++i)
|
|
44838
44968
|
{
|
|
44839
|
-
var item=
|
|
44840
|
-
var
|
|
44841
|
-
|
|
44842
|
-
|
|
44843
|
-
|
|
44844
|
-
|
|
44845
|
-
|
|
44969
|
+
var item=groupItem.Data[i];
|
|
44970
|
+
var value=item.Data.Value;
|
|
44971
|
+
if (IFrameSplitOperator.IsString(item.Data.Value)) value=this.GetKValue(kItem,item.Data.Value);
|
|
44972
|
+
if (!IFrameSplitOperator.IsNumber(value)) continue;
|
|
44973
|
+
|
|
44974
|
+
var y=this.ChartFrame.GetYFromData(value,false);
|
|
44975
|
+
|
|
44976
|
+
var strConfig=JSON.stringify(item.ColorConfig);
|
|
44977
|
+
if (!mapPoint.has(strConfig)) mapPoint.set(strConfig, { AryPoint:[]});
|
|
44978
|
+
var mapItem=mapPoint.get(strConfig);
|
|
44979
|
+
|
|
44980
|
+
mapItem.AryPoint.push({ X:x, Y:y, Data:item });
|
|
44981
|
+
}
|
|
44982
|
+
}
|
|
44983
|
+
|
|
44984
|
+
this.DrawAllPoint=function(mapPoint)
|
|
44985
|
+
{
|
|
44986
|
+
var pixelRatio=GetDevicePixelRatio();
|
|
44987
|
+
|
|
44988
|
+
for(var mapItem of mapPoint)
|
|
44989
|
+
{
|
|
44990
|
+
var aryPoint=mapItem[1].AryPoint;
|
|
44991
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(aryPoint)) continue;
|
|
44992
|
+
var config=null;
|
|
44846
44993
|
var path=new Path2D();
|
|
44847
44994
|
var count=0;
|
|
44848
|
-
|
|
44849
|
-
for(var j=0; j<item.Point.length; ++j)
|
|
44995
|
+
for(var i=0;i<aryPoint.length;++i)
|
|
44850
44996
|
{
|
|
44851
|
-
var
|
|
44852
|
-
if (!
|
|
44853
|
-
|
|
44854
|
-
var index=point.Index-offset;
|
|
44855
|
-
if (index>=0 && index<xPointCount)
|
|
44856
|
-
{
|
|
44857
|
-
var x=this.ChartFrame.GetXFromIndex(index);
|
|
44858
|
-
var y=this.ChartFrame.GetYFromData(point.Value, false);
|
|
44997
|
+
var item=aryPoint[i];
|
|
44998
|
+
if (!config) config=item.Data.ColorConfig;
|
|
44859
44999
|
|
|
44860
|
-
|
|
44861
|
-
|
|
44862
|
-
|
|
44863
|
-
|
|
44864
|
-
|
|
45000
|
+
var pointPath = new Path2D();
|
|
45001
|
+
if (this.IsHScreen)
|
|
45002
|
+
pointPath.arc(item.Y,item.X,config.Radius*pixelRatio,0,360,false);
|
|
45003
|
+
else
|
|
45004
|
+
pointPath.arc(item.X,item.Y,config.Radius*pixelRatio,0,360,false);
|
|
44865
45005
|
|
|
44866
|
-
|
|
44867
|
-
|
|
44868
|
-
}
|
|
45006
|
+
path.addPath(pointPath);
|
|
45007
|
+
++count;
|
|
44869
45008
|
}
|
|
44870
45009
|
|
|
44871
|
-
if (count>0 &&
|
|
45010
|
+
if (count>0 && config)
|
|
44872
45011
|
{
|
|
44873
|
-
|
|
44874
|
-
|
|
44875
|
-
|
|
45012
|
+
if (config.BGColor)
|
|
45013
|
+
{
|
|
45014
|
+
this.Canvas.fillStyle=config.BGColor; //背景填充颜色
|
|
45015
|
+
this.Canvas.fill(path);
|
|
45016
|
+
}
|
|
44876
45017
|
|
|
44877
|
-
if (
|
|
44878
|
-
|
|
45018
|
+
if (config.Color)
|
|
45019
|
+
{
|
|
45020
|
+
this.Canvas.lineWidth=config.LineWidth*pixelRatio;
|
|
45021
|
+
this.Canvas.strokeStyle=config.Color;
|
|
45022
|
+
this.Canvas.stroke(path);
|
|
45023
|
+
}
|
|
44879
45024
|
}
|
|
44880
|
-
|
|
44881
45025
|
}
|
|
44882
|
-
|
|
44883
|
-
this.Canvas.restore();
|
|
44884
45026
|
}
|
|
44885
45027
|
|
|
44886
45028
|
this.GetMaxMin=function()
|
|
44887
45029
|
{
|
|
44888
45030
|
var range={ Min:null, Max:null };
|
|
45031
|
+
if(!this.Data || !IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return range;
|
|
45032
|
+
if (!this.MapCache || this.MapCache.size<=0) return;
|
|
44889
45033
|
var xPointCount=this.ChartFrame.XPointCount;
|
|
44890
|
-
var start=this.Data.DataOffset;
|
|
44891
|
-
var end=start+xPointCount;
|
|
44892
45034
|
|
|
44893
|
-
for(var i=0;
|
|
45035
|
+
for(var i=this.Data.DataOffset,j=0, k=0;i<this.Data.Data.length && j<xPointCount;++i,++j)
|
|
44894
45036
|
{
|
|
44895
|
-
var
|
|
44896
|
-
|
|
45037
|
+
var kItem=this.Data.Data[i];
|
|
45038
|
+
var key=this.BuildKey(kItem);
|
|
45039
|
+
if (!this.MapCache.has(key)) continue;
|
|
45040
|
+
var mapItem=this.MapCache.get(key);
|
|
45041
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(mapItem.Data)) continue;
|
|
44897
45042
|
|
|
44898
|
-
for(
|
|
45043
|
+
for(k=0;k<mapItem.Data.length;++k)
|
|
44899
45044
|
{
|
|
44900
|
-
var
|
|
44901
|
-
|
|
44902
|
-
|
|
44903
|
-
|
|
44904
|
-
|
|
44905
|
-
|
|
44906
|
-
|
|
44907
|
-
|
|
45045
|
+
var item=mapItem.Data[k];
|
|
45046
|
+
var value=item.Data.Value;
|
|
45047
|
+
if (IFrameSplitOperator.IsString(item.Data.Value)) value=this.GetKValue(kItem,item.Data.Value);
|
|
45048
|
+
if (!IFrameSplitOperator.IsNumber(value)) continue;
|
|
45049
|
+
|
|
45050
|
+
if (range.Max==null) range.Max=value;
|
|
45051
|
+
else if (range.Max<value) range.Max=value;
|
|
45052
|
+
if (range.Min==null) range.Min=value;
|
|
45053
|
+
else if (range.Min>value) range.Min=value;
|
|
44908
45054
|
}
|
|
44909
45055
|
}
|
|
44910
45056
|
|
|
@@ -45171,6 +45317,8 @@ function ChartMultiSVGIconV2()
|
|
|
45171
45317
|
this.IconRect=[]; //0=序号,1=区域
|
|
45172
45318
|
|
|
45173
45319
|
this.MapCache=null; //key=date/date-time value={ Data:[] }
|
|
45320
|
+
this.GetKValue=ChartData.GetKValue;
|
|
45321
|
+
|
|
45174
45322
|
|
|
45175
45323
|
this.BuildKey=function(item)
|
|
45176
45324
|
{
|
|
@@ -45285,28 +45433,7 @@ function ChartMultiSVGIconV2()
|
|
|
45285
45433
|
|
|
45286
45434
|
this.Canvas.restore();
|
|
45287
45435
|
}
|
|
45288
|
-
|
|
45289
|
-
this.GetKValue=function(kItem, valueName)
|
|
45290
|
-
{
|
|
45291
|
-
switch(valueName)
|
|
45292
|
-
{
|
|
45293
|
-
case "HIGH":
|
|
45294
|
-
case "H":
|
|
45295
|
-
return kItem.High;
|
|
45296
|
-
case "L":
|
|
45297
|
-
case "LOW":
|
|
45298
|
-
return kItem.Low;
|
|
45299
|
-
case "C":
|
|
45300
|
-
case "CLOSE":
|
|
45301
|
-
return kItem.Close;
|
|
45302
|
-
case "O":
|
|
45303
|
-
case "OPEN":
|
|
45304
|
-
return KItem.Open;
|
|
45305
|
-
default:
|
|
45306
|
-
return null;
|
|
45307
|
-
}
|
|
45308
|
-
}
|
|
45309
|
-
|
|
45436
|
+
|
|
45310
45437
|
this.DrawItem=function(groupItem, kItem, x, drawInfo)
|
|
45311
45438
|
{
|
|
45312
45439
|
if (!IFrameSplitOperator.IsNonEmptyArray(groupItem.Data)) return;
|
|
@@ -61262,24 +61389,29 @@ function DynamicChartTitlePainting()
|
|
|
61262
61389
|
|
|
61263
61390
|
this.ForamtMultiPointTitle=function(dataIndex, dataInfo)
|
|
61264
61391
|
{
|
|
61265
|
-
if (!
|
|
61392
|
+
if (!dataInfo.GetItemCallback) return null;
|
|
61393
|
+
if (!dataInfo.Data || !IFrameSplitOperator.IsNonEmptyArray(dataInfo.Data.Data)) return null;
|
|
61394
|
+
var kItem=dataInfo.Data.Data[dataIndex];
|
|
61395
|
+
if (!kItem) return null;
|
|
61396
|
+
|
|
61397
|
+
var group=dataInfo.GetItemCallback(kItem);
|
|
61398
|
+
if (!group || !IFrameSplitOperator.IsNonEmptyArray(group.Data)) return null;
|
|
61266
61399
|
|
|
61267
61400
|
var aryText=[];
|
|
61268
|
-
for(var i=0;i<
|
|
61401
|
+
for(var i=0;i<group.Data.length;++i)
|
|
61269
61402
|
{
|
|
61270
|
-
var
|
|
61271
|
-
|
|
61272
|
-
|
|
61273
|
-
|
|
61274
|
-
|
|
61275
|
-
|
|
61276
|
-
|
|
61277
|
-
|
|
61278
|
-
|
|
61279
|
-
|
|
61280
|
-
|
|
61281
|
-
|
|
61282
|
-
}
|
|
61403
|
+
var item=group.Data[i];
|
|
61404
|
+
var config=item.ColorConfig;
|
|
61405
|
+
|
|
61406
|
+
var color=null;
|
|
61407
|
+
if (config.BGColor) color=config.BGColor;
|
|
61408
|
+
else if (config.Color) color=config.Color;
|
|
61409
|
+
|
|
61410
|
+
if (config.Name) aryText.push({ Text:`${config.Name}:`, Color:color });
|
|
61411
|
+
|
|
61412
|
+
var value=item.Data.Value;
|
|
61413
|
+
if (IFrameSplitOperator.IsString(item.Data.Value)) value=ChartData.GetKValue(kItem, item.Data.Value);
|
|
61414
|
+
aryText.push({ Text:this.FormatValue(value, dataInfo), Color:color});
|
|
61283
61415
|
}
|
|
61284
61416
|
|
|
61285
61417
|
if (!IFrameSplitOperator.IsNonEmptyArray(aryText)) return null;
|
|
@@ -62050,6 +62182,11 @@ function DynamicChartTitlePainting()
|
|
|
62050
62182
|
aryText=this.FromatStackedBarTitle(value, item);
|
|
62051
62183
|
if (!aryText) continue;
|
|
62052
62184
|
}
|
|
62185
|
+
else if (item.DataType=="ChartMultiPoint")
|
|
62186
|
+
{
|
|
62187
|
+
aryText=this.ForamtMultiPointTitle(dataIndex, item);
|
|
62188
|
+
if (!aryText) continue;
|
|
62189
|
+
}
|
|
62053
62190
|
else
|
|
62054
62191
|
{
|
|
62055
62192
|
valueText=this.FormatValue(value,item);
|
|
@@ -84030,18 +84167,18 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
84030
84167
|
{
|
|
84031
84168
|
var pixelTatio = GetDevicePixelRatio(); //x,y 需要乘以放大倍速
|
|
84032
84169
|
var frameId=this.Frame.PtInFrame(x*pixelTatio,y*pixelTatio);
|
|
84033
|
-
this.PopupRightMenuV2({X:e.offsetX, Y:e.offsetY, FrameID:frameId}, e);
|
|
84170
|
+
this.PopupRightMenuV2({X:e.offsetX, Y:e.offsetY, FrameID:frameId, CursorIndex:this.CursorIndex, Point:{ X:x*pixelTatio, Y:y*pixelTatio}}, e);
|
|
84034
84171
|
|
|
84035
84172
|
var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CONTEXT_MENU);
|
|
84036
84173
|
if (event)
|
|
84037
84174
|
{
|
|
84038
|
-
var data={ X:x, Y:y, Event:e, FrameID:frameId };
|
|
84175
|
+
var data={ X:x, Y:y, Event:e, FrameID:frameId, Point:{ X:x*pixelTatio, Y:y*pixelTatio}, CursorIndex:this.CursorIndex, };
|
|
84039
84176
|
event.Callback(event,data,this);
|
|
84040
84177
|
}
|
|
84041
84178
|
}
|
|
84042
84179
|
|
|
84043
84180
|
//右键菜单数据
|
|
84044
|
-
this.GetRightMenuData=function(frameID)
|
|
84181
|
+
this.GetRightMenuData=function(frameID, option)
|
|
84045
84182
|
{
|
|
84046
84183
|
var windowCount=this.Frame.SubFrame.length; //窗口个数
|
|
84047
84184
|
var klineChart=this.ChartPaint[0];
|
|
@@ -84084,6 +84221,17 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
84084
84221
|
var bPopMinuteChart=false;
|
|
84085
84222
|
if (this.PopMinuteChart) bPopMinuteChart=true;
|
|
84086
84223
|
|
|
84224
|
+
var kItem=null;
|
|
84225
|
+
if (frameID>=0 && option && IFrameSplitOperator.IsNumber(option.CursorIndex))
|
|
84226
|
+
{
|
|
84227
|
+
var kData=this.GetKData();
|
|
84228
|
+
if (kData && IFrameSplitOperator.IsNonEmptyArray(kData.Data))
|
|
84229
|
+
{
|
|
84230
|
+
var dataIndex=kData.DataOffset+option.CursorIndex;
|
|
84231
|
+
if (dataIndex>=0 && dataIndex<kData.Data.length) kItem=kData.Data[dataIndex];
|
|
84232
|
+
}
|
|
84233
|
+
}
|
|
84234
|
+
|
|
84087
84235
|
var aryMenu=
|
|
84088
84236
|
[
|
|
84089
84237
|
{
|
|
@@ -84366,6 +84514,17 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
84366
84514
|
}
|
|
84367
84515
|
}
|
|
84368
84516
|
}
|
|
84517
|
+
else if (item.Name=="其他设置")
|
|
84518
|
+
{
|
|
84519
|
+
if (kItem)
|
|
84520
|
+
{
|
|
84521
|
+
var bLocked=this.IsLockCorssCursor();
|
|
84522
|
+
if (bLocked)
|
|
84523
|
+
item.SubMenu.push({ Name:"锁十字光标", Data:{ ID: JSCHART_MENU_ID.CMD_UNLOCK_CROSSCURSOR }, Checked:bLocked });
|
|
84524
|
+
else
|
|
84525
|
+
item.SubMenu.push({ Name:"锁十字光标", Data:{ ID: JSCHART_MENU_ID.CMD_LOCK_CROSSCURSOR, Args:[{ KItem:{Date:kItem.Date, Time:kItem.Time}, Draw:true }] }, Checked:bLocked });
|
|
84526
|
+
}
|
|
84527
|
+
}
|
|
84369
84528
|
}
|
|
84370
84529
|
|
|
84371
84530
|
return aryMenu;
|
|
@@ -85969,19 +86128,36 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
85969
86128
|
if (option && option.Draw) this.Draw();
|
|
85970
86129
|
}
|
|
85971
86130
|
|
|
86131
|
+
//option={ KItem:{ Date:, Time:}}
|
|
85972
86132
|
this.LockCorssCursor=function(option)
|
|
85973
86133
|
{
|
|
85974
|
-
if (
|
|
85975
|
-
|
|
85976
|
-
|
|
86134
|
+
if (option && option.KItem) //指定日期时间
|
|
86135
|
+
{
|
|
86136
|
+
var kData=this.GetKData();
|
|
86137
|
+
if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return false;
|
|
85977
86138
|
|
|
85978
|
-
|
|
85979
|
-
|
|
85980
|
-
|
|
86139
|
+
var kItem={ Date:option.KItem.Date, Time:option.KItem.Time, Index:-1};
|
|
86140
|
+
kData.FindDataIndexByDateTime([kItem]);
|
|
86141
|
+
if (kItem.Index<0) return false;
|
|
85981
86142
|
|
|
85982
|
-
|
|
85983
|
-
|
|
85984
|
-
|
|
86143
|
+
var xItem=this.GlobalOption.LockCorssCursor.X;
|
|
86144
|
+
xItem.KLine={ DataIndex:kItem.Index, Date:kItem.Date, Time:kItem.Time };
|
|
86145
|
+
xItem.Enable=true;
|
|
86146
|
+
}
|
|
86147
|
+
else
|
|
86148
|
+
{
|
|
86149
|
+
if (this.CursorIndex<0) return false;
|
|
86150
|
+
var kData=this.GetKData();
|
|
86151
|
+
if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return false;
|
|
86152
|
+
|
|
86153
|
+
var dataIndex=kData.DataOffset+parseInt(this.CursorIndex.toFixed(0));
|
|
86154
|
+
var kItem=kData.Data[dataIndex];
|
|
86155
|
+
if (!kItem) return false;
|
|
86156
|
+
|
|
86157
|
+
var xItem=this.GlobalOption.LockCorssCursor.X;
|
|
86158
|
+
xItem.KLine={ DataIndex:dataIndex, Date:kItem.Date, Time:kItem.Time };
|
|
86159
|
+
xItem.Enable=true;
|
|
86160
|
+
}
|
|
85985
86161
|
|
|
85986
86162
|
if (option && option.Draw) this.Draw();
|
|
85987
86163
|
return true;
|
|
@@ -86004,7 +86180,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
86004
86180
|
if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return position;
|
|
86005
86181
|
|
|
86006
86182
|
position.CursorIndex=xItem.KLine.DataIndex-kData.DataOffset;
|
|
86007
|
-
position.LastPoint.X=this.Frame.GetXFromIndex(position.CursorIndex);
|
|
86183
|
+
position.LastPoint.X=this.Frame.GetXFromIndex(position.CursorIndex, false);
|
|
86008
86184
|
|
|
86009
86185
|
var border=this.Frame.ChartBorder.GetBorder();
|
|
86010
86186
|
if (position.LastPoint.Y<border.Top || position.LastPoint.Y>border.Bottom) //超出图形框子, 调整为收盘价
|
|
@@ -88077,18 +88253,18 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
|
|
|
88077
88253
|
{
|
|
88078
88254
|
var pixelTatio = GetDevicePixelRatio(); //x,y 需要乘以放大倍速
|
|
88079
88255
|
var frameId=this.Frame.PtInFrame(x*pixelTatio,y*pixelTatio);
|
|
88080
|
-
this.PopupRightMenuV2({X:e.offsetX, Y:e.offsetY, FrameID:frameId}, e);
|
|
88256
|
+
this.PopupRightMenuV2({X:e.offsetX, Y:e.offsetY, FrameID:frameId, CursorIndex:this.CursorIndex, Point:{ X:x*pixelTatio, Y:y*pixelTatio} }, e);
|
|
88081
88257
|
|
|
88082
88258
|
var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CONTEXT_MENU);
|
|
88083
88259
|
if (event)
|
|
88084
88260
|
{
|
|
88085
|
-
var data={ X:x, Y:y, Event:e, FrameID:frameId };
|
|
88261
|
+
var data={ X:x, Y:y, Event:e, FrameID:frameId, CursorIndex:this.CursorIndex, Point:{ X:x*pixelTatio, Y:y*pixelTatio} };
|
|
88086
88262
|
event.Callback(event,data,this);
|
|
88087
88263
|
}
|
|
88088
88264
|
}
|
|
88089
88265
|
|
|
88090
88266
|
//右键菜单数据
|
|
88091
|
-
this.GetRightMenuData=function(frameID)
|
|
88267
|
+
this.GetRightMenuData=function(frameID, option)
|
|
88092
88268
|
{
|
|
88093
88269
|
var windowCount=this.Frame.SubFrame.length; //窗口个数
|
|
88094
88270
|
|
|
@@ -88215,11 +88391,11 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
|
|
|
88215
88391
|
}
|
|
88216
88392
|
|
|
88217
88393
|
|
|
88218
|
-
|
|
88394
|
+
|
|
88219
88395
|
for(var i=0;i<aryMenu.length;++i)
|
|
88220
88396
|
{
|
|
88221
88397
|
var item=aryMenu[i];
|
|
88222
|
-
if (item.Name=="叠加品种")
|
|
88398
|
+
if (item.Name=="叠加品种") //删除菜单
|
|
88223
88399
|
{
|
|
88224
88400
|
for(var j=0;j<item.SubMenu.length;++j)
|
|
88225
88401
|
{
|
|
@@ -88231,6 +88407,10 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
|
|
|
88231
88407
|
}
|
|
88232
88408
|
}
|
|
88233
88409
|
}
|
|
88410
|
+
else if (item.Name=="其他设置")
|
|
88411
|
+
{
|
|
88412
|
+
|
|
88413
|
+
}
|
|
88234
88414
|
}
|
|
88235
88415
|
|
|
88236
88416
|
return aryMenu;
|
|
@@ -123035,16 +123215,18 @@ function ScriptIndex(name,script,args,option)
|
|
|
123035
123215
|
chart.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;
|
|
123036
123216
|
chart.ChartFrame=hqChart.Frame.SubFrame[windowIndex].Frame;
|
|
123037
123217
|
|
|
123038
|
-
chart.Data=hqChart.ChartPaint[0].Data
|
|
123218
|
+
chart.Data=hqChart.ChartPaint[0].Data; //绑定K线
|
|
123039
123219
|
chart.PointGroup=varItem.Draw.DrawData;
|
|
123040
123220
|
if (varItem.Draw.Name) chart.Name=varItem.Draw.Name;
|
|
123221
|
+
chart.BuildCacheData();
|
|
123222
|
+
|
|
123041
123223
|
this.SetChartIndexName(chart);
|
|
123042
123224
|
hqChart.ChartPaint.push(chart);
|
|
123043
123225
|
|
|
123044
|
-
|
|
123226
|
+
var titleIndex=windowIndex+1;
|
|
123045
123227
|
var titleData=new DynamicTitleData(chart.Data,chart.Name, null);
|
|
123046
123228
|
titleData.DataType="ChartMultiPoint";
|
|
123047
|
-
titleData.
|
|
123229
|
+
titleData.GetItemCallback=(kItem)=>{ return chart.GetItem(kItem); }
|
|
123048
123230
|
hqChart.TitlePaint[titleIndex].Data[i]=titleData;
|
|
123049
123231
|
}
|
|
123050
123232
|
|
|
@@ -124759,7 +124941,7 @@ function OverlayScriptIndex(name,script,args,option)
|
|
|
124759
124941
|
frame.ChartPaint.push(chart);
|
|
124760
124942
|
}
|
|
124761
124943
|
|
|
124762
|
-
this.CreateMultiPoint=function(hqChart,windowIndex,varItem,
|
|
124944
|
+
this.CreateMultiPoint=function(hqChart,windowIndex,varItem,id)
|
|
124763
124945
|
{
|
|
124764
124946
|
var overlayIndex=this.OverlayIndex;
|
|
124765
124947
|
var frame=overlayIndex.Frame;
|
|
@@ -124772,6 +124954,17 @@ function OverlayScriptIndex(name,script,args,option)
|
|
|
124772
124954
|
|
|
124773
124955
|
chart.Data=hqChart.ChartPaint[0].Data;//绑定K线
|
|
124774
124956
|
chart.PointGroup=varItem.Draw.DrawData;
|
|
124957
|
+
chart.BuildCacheData();
|
|
124958
|
+
|
|
124959
|
+
var titleIndex=windowIndex+1;
|
|
124960
|
+
var titlePaint=hqChart.TitlePaint[titleIndex];
|
|
124961
|
+
var titleData=new DynamicTitleData(chart.Data,varItem.Name,null);
|
|
124962
|
+
titleData.DataType="ChartMultiPoint";
|
|
124963
|
+
titleData.GetItemCallback=(kItem)=>{ return chart.GetItem(kItem); }
|
|
124964
|
+
titlePaint.OverlayIndex.get(overlayIndex.Identify).Data[id]=titleData;
|
|
124965
|
+
|
|
124966
|
+
this.SetChartIndexName(chart);
|
|
124967
|
+
|
|
124775
124968
|
frame.ChartPaint.push(chart);
|
|
124776
124969
|
}
|
|
124777
124970
|
|
|
@@ -125968,14 +126161,7 @@ function APIScriptIndex(name,script,args,option, isOverlay)
|
|
|
125968
126161
|
drawItem.Text=draw.Text;
|
|
125969
126162
|
drawItem.Name=draw.Name;
|
|
125970
126163
|
drawItem.DrawType=draw.DrawType;
|
|
125971
|
-
drawItem.DrawData=
|
|
125972
|
-
if (IFrameSplitOperator.IsNonEmptyArray(drawItem.DrawData))
|
|
125973
|
-
{
|
|
125974
|
-
for(var k=0; k<drawItem.DrawData.length; ++k)
|
|
125975
|
-
{
|
|
125976
|
-
this.GetKLineData(drawItem.DrawData[k].Point, hqChart);
|
|
125977
|
-
}
|
|
125978
|
-
}
|
|
126164
|
+
drawItem.DrawData=draw.DrawData;
|
|
125979
126165
|
|
|
125980
126166
|
outVarItem.Draw=drawItem;
|
|
125981
126167
|
result.push(outVarItem);
|
|
@@ -126522,14 +126708,7 @@ function APIScriptIndex(name,script,args,option, isOverlay)
|
|
|
126522
126708
|
drawItem.Text=draw.Text;
|
|
126523
126709
|
drawItem.Name=draw.Name;
|
|
126524
126710
|
drawItem.DrawType=draw.DrawType;
|
|
126525
|
-
drawItem.DrawData=
|
|
126526
|
-
if (IFrameSplitOperator.IsNonEmptyArray(drawItem.DrawData))
|
|
126527
|
-
{
|
|
126528
|
-
for(var k=0; k<drawItem.DrawData.length; ++k)
|
|
126529
|
-
{
|
|
126530
|
-
this.GetKLineData(drawItem.DrawData[k].Point, hqChart);
|
|
126531
|
-
}
|
|
126532
|
-
}
|
|
126711
|
+
drawItem.DrawData=draw.DrawData;
|
|
126533
126712
|
|
|
126534
126713
|
outVarItem.Draw=drawItem;
|
|
126535
126714
|
result.push(outVarItem);
|
|
@@ -142385,7 +142564,7 @@ function ScrollBarBGChart()
|
|
|
142385
142564
|
|
|
142386
142565
|
|
|
142387
142566
|
|
|
142388
|
-
var HQCHART_VERSION="1.1.
|
|
142567
|
+
var HQCHART_VERSION="1.1.14339";
|
|
142389
142568
|
|
|
142390
142569
|
function PrintHQChartVersion()
|
|
142391
142570
|
{
|