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
|
@@ -6815,6 +6815,9 @@ var JSCHART_MENU_ID=
|
|
|
6815
6815
|
CMD_MODIFY_INDEX_PARAM:45, //指标删除修改 [windowIndex, ]
|
|
6816
6816
|
CMD_MODIFY_OVERLAY_INDEX_PARAM:46, //叠加指标修改 [windowIndex, ID ]
|
|
6817
6817
|
|
|
6818
|
+
CMD_LOCK_CROSSCURSOR:47, //锁十字光标
|
|
6819
|
+
CMD_UNLOCK_CROSSCURSOR:48, //解锁十字光标
|
|
6820
|
+
|
|
6818
6821
|
|
|
6819
6822
|
CMD_REPORT_CHANGE_BLOCK_ID:100, //报价列表 切换板块ID
|
|
6820
6823
|
CMD_REPORT_COLUMN_SORT_ID:101, //报价列表 表头排序 Arg[列序号, 排序方向]
|
|
@@ -14156,6 +14159,12 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
|
|
|
14156
14159
|
var sendData={ e:null, WindowIndex:param, Type:2, Identify:aryArgs[1] };
|
|
14157
14160
|
this.ShowModifyIndexParamDialog(sendData);
|
|
14158
14161
|
break;
|
|
14162
|
+
case JSCHART_MENU_ID.CMD_LOCK_CROSSCURSOR:
|
|
14163
|
+
if (srcParam) this.LockCorssCursor(srcParam);
|
|
14164
|
+
break;
|
|
14165
|
+
case JSCHART_MENU_ID.CMD_UNLOCK_CROSSCURSOR:
|
|
14166
|
+
if (this.IsLockCorssCursor()) this.UnlockCorssCursor({ Draw:true })
|
|
14167
|
+
break;
|
|
14159
14168
|
}
|
|
14160
14169
|
}
|
|
14161
14170
|
|
|
@@ -14242,13 +14251,13 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
|
|
|
14242
14251
|
if (!this.JSPopMenu) return;
|
|
14243
14252
|
var x=data.X, y=data.Y;
|
|
14244
14253
|
var frameID=data.FrameID;
|
|
14245
|
-
var menuData={ Menu:this.GetRightMenuData(frameID), Position:JSPopMenu.POSITION_ID.RIGHT_MENU_ID };
|
|
14254
|
+
var menuData={ Menu:this.GetRightMenuData(frameID, data), Position:JSPopMenu.POSITION_ID.RIGHT_MENU_ID };
|
|
14246
14255
|
menuData.ClickCallback=(data)=>{ this.OnClickRightMenu(data); }
|
|
14247
14256
|
|
|
14248
14257
|
var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CREATE_RIGHT_MENU);
|
|
14249
14258
|
if (event && event.Callback)
|
|
14250
14259
|
{
|
|
14251
|
-
var sendData={ MenuData:menuData, FrameID:frameID };
|
|
14260
|
+
var sendData={ MenuData:menuData, FrameID:frameID, Data:data };
|
|
14252
14261
|
event.Callback(event, sendData, this);
|
|
14253
14262
|
}
|
|
14254
14263
|
|
|
@@ -24665,9 +24674,9 @@ function HQTradeFrame()
|
|
|
24665
24674
|
return null;
|
|
24666
24675
|
}
|
|
24667
24676
|
|
|
24668
|
-
this.GetXFromIndex=function(index)
|
|
24677
|
+
this.GetXFromIndex=function(index,isLimit)
|
|
24669
24678
|
{
|
|
24670
|
-
return this.SubFrame[0].Frame.GetXFromIndex(index);
|
|
24679
|
+
return this.SubFrame[0].Frame.GetXFromIndex(index,isLimit);
|
|
24671
24680
|
}
|
|
24672
24681
|
|
|
24673
24682
|
this.GetYFromData=function(value)
|
|
@@ -27667,15 +27676,15 @@ function ChartData()
|
|
|
27667
27676
|
this.FindDataIndexByDateTime=function(aryDateTime) //aryDateTime=[ { Date:, Time:, Index:-1 }, ......]
|
|
27668
27677
|
{
|
|
27669
27678
|
var findCount=0;
|
|
27670
|
-
for(var i
|
|
27679
|
+
for(var i=0;i<aryDateTime.length;++i)
|
|
27671
27680
|
{
|
|
27672
27681
|
aryDateTime[i].Index=-1;
|
|
27673
27682
|
}
|
|
27674
27683
|
|
|
27675
|
-
for(var i
|
|
27684
|
+
for(var i=0;i<this.Data.length;++i)
|
|
27676
27685
|
{
|
|
27677
27686
|
var item=this.Data[i];
|
|
27678
|
-
for(var j
|
|
27687
|
+
for(var j=0;j<aryDateTime.length;++j)
|
|
27679
27688
|
{
|
|
27680
27689
|
var findItem=aryDateTime[j];
|
|
27681
27690
|
if (findItem.Index>=0) continue;
|
|
@@ -27684,7 +27693,7 @@ function ChartData()
|
|
|
27684
27693
|
{
|
|
27685
27694
|
if (findItem.Date==item.Date && findItem.Time==item.Time)
|
|
27686
27695
|
{
|
|
27687
|
-
findItem.Index=
|
|
27696
|
+
findItem.Index=i;
|
|
27688
27697
|
++findCount;
|
|
27689
27698
|
break;
|
|
27690
27699
|
}
|
|
@@ -27693,7 +27702,7 @@ function ChartData()
|
|
|
27693
27702
|
{
|
|
27694
27703
|
if (findItem.Date==item.Date)
|
|
27695
27704
|
{
|
|
27696
|
-
findItem.Index=
|
|
27705
|
+
findItem.Index=i;
|
|
27697
27706
|
++findCount;
|
|
27698
27707
|
break;
|
|
27699
27708
|
}
|
|
@@ -28317,6 +28326,30 @@ ChartData.GetPeriodName=function(period)
|
|
|
28317
28326
|
}
|
|
28318
28327
|
|
|
28319
28328
|
|
|
28329
|
+
ChartData.GetKValue=function(kItem, valueName)
|
|
28330
|
+
{
|
|
28331
|
+
if (!kItem) return null;
|
|
28332
|
+
|
|
28333
|
+
switch(valueName)
|
|
28334
|
+
{
|
|
28335
|
+
case "HIGH":
|
|
28336
|
+
case "H":
|
|
28337
|
+
return kItem.High;
|
|
28338
|
+
case "L":
|
|
28339
|
+
case "LOW":
|
|
28340
|
+
return kItem.Low;
|
|
28341
|
+
case "C":
|
|
28342
|
+
case "CLOSE":
|
|
28343
|
+
return kItem.Close;
|
|
28344
|
+
case "O":
|
|
28345
|
+
case "OPEN":
|
|
28346
|
+
return KItem.Open;
|
|
28347
|
+
default:
|
|
28348
|
+
return null;
|
|
28349
|
+
}
|
|
28350
|
+
}
|
|
28351
|
+
|
|
28352
|
+
|
|
28320
28353
|
|
|
28321
28354
|
function TooltipData() //提示信息
|
|
28322
28355
|
{
|
|
@@ -35243,15 +35276,7 @@ function ChartOverlayKLine()
|
|
|
35243
35276
|
|
|
35244
35277
|
if (!this.MainData || !this.Data) return range;
|
|
35245
35278
|
|
|
35246
|
-
var firstOpen=
|
|
35247
|
-
for(var i=this.Data.DataOffset,j=0;i<this.MainData.Data.length && j<xPointCount;++i,++j)
|
|
35248
|
-
{
|
|
35249
|
-
var data=this.MainData.Data[i];
|
|
35250
|
-
if (data.Open==null || data.High==null || data.Low==null || data.Close==null) continue;
|
|
35251
|
-
firstOpen=data.Close;
|
|
35252
|
-
break;
|
|
35253
|
-
}
|
|
35254
|
-
|
|
35279
|
+
var firstOpen=this.GetFirstOpen();
|
|
35255
35280
|
if (firstOpen==null) return range;
|
|
35256
35281
|
|
|
35257
35282
|
var firstOverlayOpen=null;
|
|
@@ -44849,7 +44874,7 @@ function ChartMultiLine()
|
|
|
44849
44874
|
}
|
|
44850
44875
|
}
|
|
44851
44876
|
|
|
44852
|
-
//
|
|
44877
|
+
// 多个点集合 支持横屏
|
|
44853
44878
|
function ChartMultiPoint()
|
|
44854
44879
|
{
|
|
44855
44880
|
this.newMethod=IChartPainting; //派生
|
|
@@ -44857,98 +44882,219 @@ function ChartMultiPoint()
|
|
|
44857
44882
|
delete this.newMethod;
|
|
44858
44883
|
|
|
44859
44884
|
this.ClassName="ChartMultiPoint";
|
|
44860
|
-
this.PointGroup=[]; // [ {Point:[ {
|
|
44885
|
+
this.PointGroup=[]; // [ {Point:[ {Date, Time, Value }, ], Color: }, ]
|
|
44861
44886
|
|
|
44862
44887
|
|
|
44863
44888
|
this.IsHScreen=false;
|
|
44864
44889
|
this.LineWidth=1;
|
|
44865
44890
|
this.PointRadius=5;
|
|
44866
44891
|
|
|
44892
|
+
this.MapCache=null; //key=date/date-time value={ Data:[] }
|
|
44893
|
+
this.GetKValue=ChartData.GetKValue;
|
|
44894
|
+
|
|
44895
|
+
this.BuildKey=function(item)
|
|
44896
|
+
{
|
|
44897
|
+
if (IFrameSplitOperator.IsNumber(item.Time)) return `${item.Date}-${item.Time}`;
|
|
44898
|
+
else return item.Date;
|
|
44899
|
+
}
|
|
44900
|
+
|
|
44901
|
+
this.GetItem=function(kItem)
|
|
44902
|
+
{
|
|
44903
|
+
if (!this.MapCache || this.MapCache.size<=0) return null;
|
|
44904
|
+
|
|
44905
|
+
var key=this.BuildKey(kItem);
|
|
44906
|
+
if (!this.MapCache.has(key)) return null;
|
|
44907
|
+
|
|
44908
|
+
return this.MapCache.get(key);
|
|
44909
|
+
}
|
|
44910
|
+
|
|
44911
|
+
this.BuildCacheData=function()
|
|
44912
|
+
{
|
|
44913
|
+
var mapData=new Map();
|
|
44914
|
+
this.MapCache=mapData;
|
|
44915
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(this.PointGroup)) return;
|
|
44916
|
+
|
|
44917
|
+
for(var i=0; i<this.PointGroup.length; ++i)
|
|
44918
|
+
{
|
|
44919
|
+
var groupItem=this.PointGroup[i];
|
|
44920
|
+
if (!groupItem || !IFrameSplitOperator.IsNonEmptyArray(groupItem.Point)) continue;
|
|
44921
|
+
|
|
44922
|
+
var clrConfig= { Color:groupItem.Color, BGColor:groupItem.BGColor, LineWidth:this.LineWidth, Radius:this.PointRadius, Name:groupItem.Name };
|
|
44923
|
+
if (IFrameSplitOperator.IsNumber(groupItem.PointRadius)) clrConfig.Radius=groupItem.PointRadius;
|
|
44924
|
+
|
|
44925
|
+
for(var j=0; j<groupItem.Point.length; ++j)
|
|
44926
|
+
{
|
|
44927
|
+
var point=groupItem.Point[j];
|
|
44928
|
+
var key=this.BuildKey(point);
|
|
44929
|
+
|
|
44930
|
+
var item={ Data:point, ColorConfig:clrConfig }
|
|
44931
|
+
if (mapData.has(key))
|
|
44932
|
+
{
|
|
44933
|
+
var mapItem=mapData.get(key);
|
|
44934
|
+
mapItem.Data.push(item);
|
|
44935
|
+
}
|
|
44936
|
+
else
|
|
44937
|
+
{
|
|
44938
|
+
mapData.set(key,{ Data:[item] });
|
|
44939
|
+
}
|
|
44940
|
+
}
|
|
44941
|
+
}
|
|
44942
|
+
}
|
|
44943
|
+
|
|
44867
44944
|
this.Draw=function()
|
|
44868
44945
|
{
|
|
44869
|
-
if (!this.IsShow || this.ChartFrame.IsMinSize) return;
|
|
44870
|
-
if (
|
|
44946
|
+
if (!this.IsShow || this.ChartFrame.IsMinSize || !this.IsVisible) return;
|
|
44947
|
+
if (this.IsShowIndexTitleOnly()) return;
|
|
44948
|
+
if (this.IsHideScriptIndex()) return;
|
|
44949
|
+
|
|
44950
|
+
if (!this.Data || !IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return; //k线数据
|
|
44871
44951
|
if (!IFrameSplitOperator.IsNonEmptyArray(this.PointGroup)) return;
|
|
44952
|
+
if (!this.MapCache || this.MapCache.size<=0) return;
|
|
44872
44953
|
|
|
44873
44954
|
this.IsHScreen=(this.ChartFrame.IsHScreen===true);
|
|
44874
44955
|
var xPointCount=this.ChartFrame.XPointCount;
|
|
44875
|
-
var
|
|
44876
|
-
var
|
|
44956
|
+
var dataWidth=this.ChartFrame.DataWidth;
|
|
44957
|
+
var distanceWidth=this.ChartFrame.DistanceWidth;
|
|
44958
|
+
var isMinute=this.IsMinuteFrame();
|
|
44959
|
+
|
|
44960
|
+
var border=this.GetBorder();
|
|
44961
|
+
if (this.IsHScreen)
|
|
44962
|
+
{
|
|
44963
|
+
var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
|
|
44964
|
+
var chartright=border.BottomEx;
|
|
44965
|
+
var chartLeft=border.TopEx;
|
|
44966
|
+
}
|
|
44967
|
+
else
|
|
44968
|
+
{
|
|
44969
|
+
var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
|
|
44970
|
+
var chartright=border.RightEx;
|
|
44971
|
+
var chartLeft=border.LeftEx;
|
|
44972
|
+
}
|
|
44973
|
+
|
|
44974
|
+
//计算所有的点位置
|
|
44975
|
+
var mapPoint=new Map();
|
|
44976
|
+
for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length && j<xPointCount;++i,++j,xOffset+=(dataWidth+distanceWidth))
|
|
44977
|
+
{
|
|
44978
|
+
var kItem=this.Data.Data[i];
|
|
44979
|
+
var key=this.BuildKey(kItem);
|
|
44980
|
+
if (!this.MapCache.has(key)) continue;
|
|
44981
|
+
var mapItem=this.MapCache.get(key);
|
|
44982
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(mapItem.Data)) continue;
|
|
44983
|
+
|
|
44984
|
+
if (isMinute)
|
|
44985
|
+
{
|
|
44986
|
+
var x=this.ChartFrame.GetXFromIndex(j);
|
|
44987
|
+
}
|
|
44988
|
+
else
|
|
44989
|
+
{
|
|
44990
|
+
var left=xOffset;
|
|
44991
|
+
var right=xOffset+dataWidth;
|
|
44992
|
+
if (right>chartright) break;
|
|
44993
|
+
var x=left+(right-left)/2;
|
|
44994
|
+
}
|
|
44995
|
+
|
|
44996
|
+
this.CalculateItem(mapItem, kItem, x, mapPoint);
|
|
44997
|
+
}
|
|
44998
|
+
|
|
44999
|
+
if (mapPoint.size<=0) return;
|
|
44877
45000
|
|
|
44878
45001
|
this.Canvas.save();
|
|
44879
45002
|
this.ClipClient(this.IsHScreen);
|
|
44880
|
-
|
|
44881
|
-
|
|
45003
|
+
|
|
45004
|
+
this.DrawAllPoint(mapPoint);
|
|
45005
|
+
|
|
45006
|
+
this.Canvas.restore();
|
|
45007
|
+
}
|
|
45008
|
+
|
|
45009
|
+
this.CalculateItem=function(groupItem, kItem, x, mapPoint)
|
|
45010
|
+
{
|
|
45011
|
+
for(var i=0; i<groupItem.Data.length; ++i)
|
|
44882
45012
|
{
|
|
44883
|
-
var item=
|
|
44884
|
-
var
|
|
44885
|
-
|
|
44886
|
-
|
|
44887
|
-
|
|
44888
|
-
|
|
44889
|
-
|
|
45013
|
+
var item=groupItem.Data[i];
|
|
45014
|
+
var value=item.Data.Value;
|
|
45015
|
+
if (IFrameSplitOperator.IsString(item.Data.Value)) value=this.GetKValue(kItem,item.Data.Value);
|
|
45016
|
+
if (!IFrameSplitOperator.IsNumber(value)) continue;
|
|
45017
|
+
|
|
45018
|
+
var y=this.ChartFrame.GetYFromData(value,false);
|
|
45019
|
+
|
|
45020
|
+
var strConfig=JSON.stringify(item.ColorConfig);
|
|
45021
|
+
if (!mapPoint.has(strConfig)) mapPoint.set(strConfig, { AryPoint:[]});
|
|
45022
|
+
var mapItem=mapPoint.get(strConfig);
|
|
45023
|
+
|
|
45024
|
+
mapItem.AryPoint.push({ X:x, Y:y, Data:item });
|
|
45025
|
+
}
|
|
45026
|
+
}
|
|
45027
|
+
|
|
45028
|
+
this.DrawAllPoint=function(mapPoint)
|
|
45029
|
+
{
|
|
45030
|
+
var pixelRatio=GetDevicePixelRatio();
|
|
45031
|
+
|
|
45032
|
+
for(var mapItem of mapPoint)
|
|
45033
|
+
{
|
|
45034
|
+
var aryPoint=mapItem[1].AryPoint;
|
|
45035
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(aryPoint)) continue;
|
|
45036
|
+
var config=null;
|
|
44890
45037
|
var path=new Path2D();
|
|
44891
45038
|
var count=0;
|
|
44892
|
-
|
|
44893
|
-
for(var j=0; j<item.Point.length; ++j)
|
|
45039
|
+
for(var i=0;i<aryPoint.length;++i)
|
|
44894
45040
|
{
|
|
44895
|
-
var
|
|
44896
|
-
if (!
|
|
44897
|
-
|
|
44898
|
-
var index=point.Index-offset;
|
|
44899
|
-
if (index>=0 && index<xPointCount)
|
|
44900
|
-
{
|
|
44901
|
-
var x=this.ChartFrame.GetXFromIndex(index);
|
|
44902
|
-
var y=this.ChartFrame.GetYFromData(point.Value, false);
|
|
45041
|
+
var item=aryPoint[i];
|
|
45042
|
+
if (!config) config=item.Data.ColorConfig;
|
|
44903
45043
|
|
|
44904
|
-
|
|
44905
|
-
|
|
44906
|
-
|
|
44907
|
-
|
|
44908
|
-
|
|
45044
|
+
var pointPath = new Path2D();
|
|
45045
|
+
if (this.IsHScreen)
|
|
45046
|
+
pointPath.arc(item.Y,item.X,config.Radius*pixelRatio,0,360,false);
|
|
45047
|
+
else
|
|
45048
|
+
pointPath.arc(item.X,item.Y,config.Radius*pixelRatio,0,360,false);
|
|
44909
45049
|
|
|
44910
|
-
|
|
44911
|
-
|
|
44912
|
-
}
|
|
45050
|
+
path.addPath(pointPath);
|
|
45051
|
+
++count;
|
|
44913
45052
|
}
|
|
44914
45053
|
|
|
44915
|
-
if (count>0 &&
|
|
45054
|
+
if (count>0 && config)
|
|
44916
45055
|
{
|
|
44917
|
-
|
|
44918
|
-
|
|
44919
|
-
|
|
45056
|
+
if (config.BGColor)
|
|
45057
|
+
{
|
|
45058
|
+
this.Canvas.fillStyle=config.BGColor; //背景填充颜色
|
|
45059
|
+
this.Canvas.fill(path);
|
|
45060
|
+
}
|
|
44920
45061
|
|
|
44921
|
-
if (
|
|
44922
|
-
|
|
45062
|
+
if (config.Color)
|
|
45063
|
+
{
|
|
45064
|
+
this.Canvas.lineWidth=config.LineWidth*pixelRatio;
|
|
45065
|
+
this.Canvas.strokeStyle=config.Color;
|
|
45066
|
+
this.Canvas.stroke(path);
|
|
45067
|
+
}
|
|
44923
45068
|
}
|
|
44924
|
-
|
|
44925
45069
|
}
|
|
44926
|
-
|
|
44927
|
-
this.Canvas.restore();
|
|
44928
45070
|
}
|
|
44929
45071
|
|
|
44930
45072
|
this.GetMaxMin=function()
|
|
44931
45073
|
{
|
|
44932
45074
|
var range={ Min:null, Max:null };
|
|
45075
|
+
if(!this.Data || !IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return range;
|
|
45076
|
+
if (!this.MapCache || this.MapCache.size<=0) return;
|
|
44933
45077
|
var xPointCount=this.ChartFrame.XPointCount;
|
|
44934
|
-
var start=this.Data.DataOffset;
|
|
44935
|
-
var end=start+xPointCount;
|
|
44936
45078
|
|
|
44937
|
-
for(var i=0;
|
|
45079
|
+
for(var i=this.Data.DataOffset,j=0, k=0;i<this.Data.Data.length && j<xPointCount;++i,++j)
|
|
44938
45080
|
{
|
|
44939
|
-
var
|
|
44940
|
-
|
|
45081
|
+
var kItem=this.Data.Data[i];
|
|
45082
|
+
var key=this.BuildKey(kItem);
|
|
45083
|
+
if (!this.MapCache.has(key)) continue;
|
|
45084
|
+
var mapItem=this.MapCache.get(key);
|
|
45085
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(mapItem.Data)) continue;
|
|
44941
45086
|
|
|
44942
|
-
for(
|
|
45087
|
+
for(k=0;k<mapItem.Data.length;++k)
|
|
44943
45088
|
{
|
|
44944
|
-
var
|
|
44945
|
-
|
|
44946
|
-
|
|
44947
|
-
|
|
44948
|
-
|
|
44949
|
-
|
|
44950
|
-
|
|
44951
|
-
|
|
45089
|
+
var item=mapItem.Data[k];
|
|
45090
|
+
var value=item.Data.Value;
|
|
45091
|
+
if (IFrameSplitOperator.IsString(item.Data.Value)) value=this.GetKValue(kItem,item.Data.Value);
|
|
45092
|
+
if (!IFrameSplitOperator.IsNumber(value)) continue;
|
|
45093
|
+
|
|
45094
|
+
if (range.Max==null) range.Max=value;
|
|
45095
|
+
else if (range.Max<value) range.Max=value;
|
|
45096
|
+
if (range.Min==null) range.Min=value;
|
|
45097
|
+
else if (range.Min>value) range.Min=value;
|
|
44952
45098
|
}
|
|
44953
45099
|
}
|
|
44954
45100
|
|
|
@@ -45215,6 +45361,8 @@ function ChartMultiSVGIconV2()
|
|
|
45215
45361
|
this.IconRect=[]; //0=序号,1=区域
|
|
45216
45362
|
|
|
45217
45363
|
this.MapCache=null; //key=date/date-time value={ Data:[] }
|
|
45364
|
+
this.GetKValue=ChartData.GetKValue;
|
|
45365
|
+
|
|
45218
45366
|
|
|
45219
45367
|
this.BuildKey=function(item)
|
|
45220
45368
|
{
|
|
@@ -45329,28 +45477,7 @@ function ChartMultiSVGIconV2()
|
|
|
45329
45477
|
|
|
45330
45478
|
this.Canvas.restore();
|
|
45331
45479
|
}
|
|
45332
|
-
|
|
45333
|
-
this.GetKValue=function(kItem, valueName)
|
|
45334
|
-
{
|
|
45335
|
-
switch(valueName)
|
|
45336
|
-
{
|
|
45337
|
-
case "HIGH":
|
|
45338
|
-
case "H":
|
|
45339
|
-
return kItem.High;
|
|
45340
|
-
case "L":
|
|
45341
|
-
case "LOW":
|
|
45342
|
-
return kItem.Low;
|
|
45343
|
-
case "C":
|
|
45344
|
-
case "CLOSE":
|
|
45345
|
-
return kItem.Close;
|
|
45346
|
-
case "O":
|
|
45347
|
-
case "OPEN":
|
|
45348
|
-
return KItem.Open;
|
|
45349
|
-
default:
|
|
45350
|
-
return null;
|
|
45351
|
-
}
|
|
45352
|
-
}
|
|
45353
|
-
|
|
45480
|
+
|
|
45354
45481
|
this.DrawItem=function(groupItem, kItem, x, drawInfo)
|
|
45355
45482
|
{
|
|
45356
45483
|
if (!IFrameSplitOperator.IsNonEmptyArray(groupItem.Data)) return;
|
|
@@ -61306,24 +61433,29 @@ function DynamicChartTitlePainting()
|
|
|
61306
61433
|
|
|
61307
61434
|
this.ForamtMultiPointTitle=function(dataIndex, dataInfo)
|
|
61308
61435
|
{
|
|
61309
|
-
if (!
|
|
61436
|
+
if (!dataInfo.GetItemCallback) return null;
|
|
61437
|
+
if (!dataInfo.Data || !IFrameSplitOperator.IsNonEmptyArray(dataInfo.Data.Data)) return null;
|
|
61438
|
+
var kItem=dataInfo.Data.Data[dataIndex];
|
|
61439
|
+
if (!kItem) return null;
|
|
61440
|
+
|
|
61441
|
+
var group=dataInfo.GetItemCallback(kItem);
|
|
61442
|
+
if (!group || !IFrameSplitOperator.IsNonEmptyArray(group.Data)) return null;
|
|
61310
61443
|
|
|
61311
61444
|
var aryText=[];
|
|
61312
|
-
for(var i=0;i<
|
|
61445
|
+
for(var i=0;i<group.Data.length;++i)
|
|
61313
61446
|
{
|
|
61314
|
-
var
|
|
61315
|
-
|
|
61316
|
-
|
|
61317
|
-
|
|
61318
|
-
|
|
61319
|
-
|
|
61320
|
-
|
|
61321
|
-
|
|
61322
|
-
|
|
61323
|
-
|
|
61324
|
-
|
|
61325
|
-
|
|
61326
|
-
}
|
|
61447
|
+
var item=group.Data[i];
|
|
61448
|
+
var config=item.ColorConfig;
|
|
61449
|
+
|
|
61450
|
+
var color=null;
|
|
61451
|
+
if (config.BGColor) color=config.BGColor;
|
|
61452
|
+
else if (config.Color) color=config.Color;
|
|
61453
|
+
|
|
61454
|
+
if (config.Name) aryText.push({ Text:`${config.Name}:`, Color:color });
|
|
61455
|
+
|
|
61456
|
+
var value=item.Data.Value;
|
|
61457
|
+
if (IFrameSplitOperator.IsString(item.Data.Value)) value=ChartData.GetKValue(kItem, item.Data.Value);
|
|
61458
|
+
aryText.push({ Text:this.FormatValue(value, dataInfo), Color:color});
|
|
61327
61459
|
}
|
|
61328
61460
|
|
|
61329
61461
|
if (!IFrameSplitOperator.IsNonEmptyArray(aryText)) return null;
|
|
@@ -62094,6 +62226,11 @@ function DynamicChartTitlePainting()
|
|
|
62094
62226
|
aryText=this.FromatStackedBarTitle(value, item);
|
|
62095
62227
|
if (!aryText) continue;
|
|
62096
62228
|
}
|
|
62229
|
+
else if (item.DataType=="ChartMultiPoint")
|
|
62230
|
+
{
|
|
62231
|
+
aryText=this.ForamtMultiPointTitle(dataIndex, item);
|
|
62232
|
+
if (!aryText) continue;
|
|
62233
|
+
}
|
|
62097
62234
|
else
|
|
62098
62235
|
{
|
|
62099
62236
|
valueText=this.FormatValue(value,item);
|
|
@@ -84074,18 +84211,18 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
84074
84211
|
{
|
|
84075
84212
|
var pixelTatio = GetDevicePixelRatio(); //x,y 需要乘以放大倍速
|
|
84076
84213
|
var frameId=this.Frame.PtInFrame(x*pixelTatio,y*pixelTatio);
|
|
84077
|
-
this.PopupRightMenuV2({X:e.offsetX, Y:e.offsetY, FrameID:frameId}, e);
|
|
84214
|
+
this.PopupRightMenuV2({X:e.offsetX, Y:e.offsetY, FrameID:frameId, CursorIndex:this.CursorIndex, Point:{ X:x*pixelTatio, Y:y*pixelTatio}}, e);
|
|
84078
84215
|
|
|
84079
84216
|
var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CONTEXT_MENU);
|
|
84080
84217
|
if (event)
|
|
84081
84218
|
{
|
|
84082
|
-
var data={ X:x, Y:y, Event:e, FrameID:frameId };
|
|
84219
|
+
var data={ X:x, Y:y, Event:e, FrameID:frameId, Point:{ X:x*pixelTatio, Y:y*pixelTatio}, CursorIndex:this.CursorIndex, };
|
|
84083
84220
|
event.Callback(event,data,this);
|
|
84084
84221
|
}
|
|
84085
84222
|
}
|
|
84086
84223
|
|
|
84087
84224
|
//右键菜单数据
|
|
84088
|
-
this.GetRightMenuData=function(frameID)
|
|
84225
|
+
this.GetRightMenuData=function(frameID, option)
|
|
84089
84226
|
{
|
|
84090
84227
|
var windowCount=this.Frame.SubFrame.length; //窗口个数
|
|
84091
84228
|
var klineChart=this.ChartPaint[0];
|
|
@@ -84128,6 +84265,17 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
84128
84265
|
var bPopMinuteChart=false;
|
|
84129
84266
|
if (this.PopMinuteChart) bPopMinuteChart=true;
|
|
84130
84267
|
|
|
84268
|
+
var kItem=null;
|
|
84269
|
+
if (frameID>=0 && option && IFrameSplitOperator.IsNumber(option.CursorIndex))
|
|
84270
|
+
{
|
|
84271
|
+
var kData=this.GetKData();
|
|
84272
|
+
if (kData && IFrameSplitOperator.IsNonEmptyArray(kData.Data))
|
|
84273
|
+
{
|
|
84274
|
+
var dataIndex=kData.DataOffset+option.CursorIndex;
|
|
84275
|
+
if (dataIndex>=0 && dataIndex<kData.Data.length) kItem=kData.Data[dataIndex];
|
|
84276
|
+
}
|
|
84277
|
+
}
|
|
84278
|
+
|
|
84131
84279
|
var aryMenu=
|
|
84132
84280
|
[
|
|
84133
84281
|
{
|
|
@@ -84410,6 +84558,17 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
84410
84558
|
}
|
|
84411
84559
|
}
|
|
84412
84560
|
}
|
|
84561
|
+
else if (item.Name=="其他设置")
|
|
84562
|
+
{
|
|
84563
|
+
if (kItem)
|
|
84564
|
+
{
|
|
84565
|
+
var bLocked=this.IsLockCorssCursor();
|
|
84566
|
+
if (bLocked)
|
|
84567
|
+
item.SubMenu.push({ Name:"锁十字光标", Data:{ ID: JSCHART_MENU_ID.CMD_UNLOCK_CROSSCURSOR }, Checked:bLocked });
|
|
84568
|
+
else
|
|
84569
|
+
item.SubMenu.push({ Name:"锁十字光标", Data:{ ID: JSCHART_MENU_ID.CMD_LOCK_CROSSCURSOR, Args:[{ KItem:{Date:kItem.Date, Time:kItem.Time}, Draw:true }] }, Checked:bLocked });
|
|
84570
|
+
}
|
|
84571
|
+
}
|
|
84413
84572
|
}
|
|
84414
84573
|
|
|
84415
84574
|
return aryMenu;
|
|
@@ -86013,19 +86172,36 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
86013
86172
|
if (option && option.Draw) this.Draw();
|
|
86014
86173
|
}
|
|
86015
86174
|
|
|
86175
|
+
//option={ KItem:{ Date:, Time:}}
|
|
86016
86176
|
this.LockCorssCursor=function(option)
|
|
86017
86177
|
{
|
|
86018
|
-
if (
|
|
86019
|
-
|
|
86020
|
-
|
|
86178
|
+
if (option && option.KItem) //指定日期时间
|
|
86179
|
+
{
|
|
86180
|
+
var kData=this.GetKData();
|
|
86181
|
+
if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return false;
|
|
86021
86182
|
|
|
86022
|
-
|
|
86023
|
-
|
|
86024
|
-
|
|
86183
|
+
var kItem={ Date:option.KItem.Date, Time:option.KItem.Time, Index:-1};
|
|
86184
|
+
kData.FindDataIndexByDateTime([kItem]);
|
|
86185
|
+
if (kItem.Index<0) return false;
|
|
86025
86186
|
|
|
86026
|
-
|
|
86027
|
-
|
|
86028
|
-
|
|
86187
|
+
var xItem=this.GlobalOption.LockCorssCursor.X;
|
|
86188
|
+
xItem.KLine={ DataIndex:kItem.Index, Date:kItem.Date, Time:kItem.Time };
|
|
86189
|
+
xItem.Enable=true;
|
|
86190
|
+
}
|
|
86191
|
+
else
|
|
86192
|
+
{
|
|
86193
|
+
if (this.CursorIndex<0) return false;
|
|
86194
|
+
var kData=this.GetKData();
|
|
86195
|
+
if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return false;
|
|
86196
|
+
|
|
86197
|
+
var dataIndex=kData.DataOffset+parseInt(this.CursorIndex.toFixed(0));
|
|
86198
|
+
var kItem=kData.Data[dataIndex];
|
|
86199
|
+
if (!kItem) return false;
|
|
86200
|
+
|
|
86201
|
+
var xItem=this.GlobalOption.LockCorssCursor.X;
|
|
86202
|
+
xItem.KLine={ DataIndex:dataIndex, Date:kItem.Date, Time:kItem.Time };
|
|
86203
|
+
xItem.Enable=true;
|
|
86204
|
+
}
|
|
86029
86205
|
|
|
86030
86206
|
if (option && option.Draw) this.Draw();
|
|
86031
86207
|
return true;
|
|
@@ -86048,7 +86224,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
86048
86224
|
if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return position;
|
|
86049
86225
|
|
|
86050
86226
|
position.CursorIndex=xItem.KLine.DataIndex-kData.DataOffset;
|
|
86051
|
-
position.LastPoint.X=this.Frame.GetXFromIndex(position.CursorIndex);
|
|
86227
|
+
position.LastPoint.X=this.Frame.GetXFromIndex(position.CursorIndex, false);
|
|
86052
86228
|
|
|
86053
86229
|
var border=this.Frame.ChartBorder.GetBorder();
|
|
86054
86230
|
if (position.LastPoint.Y<border.Top || position.LastPoint.Y>border.Bottom) //超出图形框子, 调整为收盘价
|
|
@@ -88121,18 +88297,18 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
|
|
|
88121
88297
|
{
|
|
88122
88298
|
var pixelTatio = GetDevicePixelRatio(); //x,y 需要乘以放大倍速
|
|
88123
88299
|
var frameId=this.Frame.PtInFrame(x*pixelTatio,y*pixelTatio);
|
|
88124
|
-
this.PopupRightMenuV2({X:e.offsetX, Y:e.offsetY, FrameID:frameId}, e);
|
|
88300
|
+
this.PopupRightMenuV2({X:e.offsetX, Y:e.offsetY, FrameID:frameId, CursorIndex:this.CursorIndex, Point:{ X:x*pixelTatio, Y:y*pixelTatio} }, e);
|
|
88125
88301
|
|
|
88126
88302
|
var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CONTEXT_MENU);
|
|
88127
88303
|
if (event)
|
|
88128
88304
|
{
|
|
88129
|
-
var data={ X:x, Y:y, Event:e, FrameID:frameId };
|
|
88305
|
+
var data={ X:x, Y:y, Event:e, FrameID:frameId, CursorIndex:this.CursorIndex, Point:{ X:x*pixelTatio, Y:y*pixelTatio} };
|
|
88130
88306
|
event.Callback(event,data,this);
|
|
88131
88307
|
}
|
|
88132
88308
|
}
|
|
88133
88309
|
|
|
88134
88310
|
//右键菜单数据
|
|
88135
|
-
this.GetRightMenuData=function(frameID)
|
|
88311
|
+
this.GetRightMenuData=function(frameID, option)
|
|
88136
88312
|
{
|
|
88137
88313
|
var windowCount=this.Frame.SubFrame.length; //窗口个数
|
|
88138
88314
|
|
|
@@ -88259,11 +88435,11 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
|
|
|
88259
88435
|
}
|
|
88260
88436
|
|
|
88261
88437
|
|
|
88262
|
-
|
|
88438
|
+
|
|
88263
88439
|
for(var i=0;i<aryMenu.length;++i)
|
|
88264
88440
|
{
|
|
88265
88441
|
var item=aryMenu[i];
|
|
88266
|
-
if (item.Name=="叠加品种")
|
|
88442
|
+
if (item.Name=="叠加品种") //删除菜单
|
|
88267
88443
|
{
|
|
88268
88444
|
for(var j=0;j<item.SubMenu.length;++j)
|
|
88269
88445
|
{
|
|
@@ -88275,6 +88451,10 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
|
|
|
88275
88451
|
}
|
|
88276
88452
|
}
|
|
88277
88453
|
}
|
|
88454
|
+
else if (item.Name=="其他设置")
|
|
88455
|
+
{
|
|
88456
|
+
|
|
88457
|
+
}
|
|
88278
88458
|
}
|
|
88279
88459
|
|
|
88280
88460
|
return aryMenu;
|
|
@@ -123079,16 +123259,18 @@ function ScriptIndex(name,script,args,option)
|
|
|
123079
123259
|
chart.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;
|
|
123080
123260
|
chart.ChartFrame=hqChart.Frame.SubFrame[windowIndex].Frame;
|
|
123081
123261
|
|
|
123082
|
-
chart.Data=hqChart.ChartPaint[0].Data
|
|
123262
|
+
chart.Data=hqChart.ChartPaint[0].Data; //绑定K线
|
|
123083
123263
|
chart.PointGroup=varItem.Draw.DrawData;
|
|
123084
123264
|
if (varItem.Draw.Name) chart.Name=varItem.Draw.Name;
|
|
123265
|
+
chart.BuildCacheData();
|
|
123266
|
+
|
|
123085
123267
|
this.SetChartIndexName(chart);
|
|
123086
123268
|
hqChart.ChartPaint.push(chart);
|
|
123087
123269
|
|
|
123088
|
-
|
|
123270
|
+
var titleIndex=windowIndex+1;
|
|
123089
123271
|
var titleData=new DynamicTitleData(chart.Data,chart.Name, null);
|
|
123090
123272
|
titleData.DataType="ChartMultiPoint";
|
|
123091
|
-
titleData.
|
|
123273
|
+
titleData.GetItemCallback=(kItem)=>{ return chart.GetItem(kItem); }
|
|
123092
123274
|
hqChart.TitlePaint[titleIndex].Data[i]=titleData;
|
|
123093
123275
|
}
|
|
123094
123276
|
|
|
@@ -124803,7 +124985,7 @@ function OverlayScriptIndex(name,script,args,option)
|
|
|
124803
124985
|
frame.ChartPaint.push(chart);
|
|
124804
124986
|
}
|
|
124805
124987
|
|
|
124806
|
-
this.CreateMultiPoint=function(hqChart,windowIndex,varItem,
|
|
124988
|
+
this.CreateMultiPoint=function(hqChart,windowIndex,varItem,id)
|
|
124807
124989
|
{
|
|
124808
124990
|
var overlayIndex=this.OverlayIndex;
|
|
124809
124991
|
var frame=overlayIndex.Frame;
|
|
@@ -124816,6 +124998,17 @@ function OverlayScriptIndex(name,script,args,option)
|
|
|
124816
124998
|
|
|
124817
124999
|
chart.Data=hqChart.ChartPaint[0].Data;//绑定K线
|
|
124818
125000
|
chart.PointGroup=varItem.Draw.DrawData;
|
|
125001
|
+
chart.BuildCacheData();
|
|
125002
|
+
|
|
125003
|
+
var titleIndex=windowIndex+1;
|
|
125004
|
+
var titlePaint=hqChart.TitlePaint[titleIndex];
|
|
125005
|
+
var titleData=new DynamicTitleData(chart.Data,varItem.Name,null);
|
|
125006
|
+
titleData.DataType="ChartMultiPoint";
|
|
125007
|
+
titleData.GetItemCallback=(kItem)=>{ return chart.GetItem(kItem); }
|
|
125008
|
+
titlePaint.OverlayIndex.get(overlayIndex.Identify).Data[id]=titleData;
|
|
125009
|
+
|
|
125010
|
+
this.SetChartIndexName(chart);
|
|
125011
|
+
|
|
124819
125012
|
frame.ChartPaint.push(chart);
|
|
124820
125013
|
}
|
|
124821
125014
|
|
|
@@ -126012,14 +126205,7 @@ function APIScriptIndex(name,script,args,option, isOverlay)
|
|
|
126012
126205
|
drawItem.Text=draw.Text;
|
|
126013
126206
|
drawItem.Name=draw.Name;
|
|
126014
126207
|
drawItem.DrawType=draw.DrawType;
|
|
126015
|
-
drawItem.DrawData=
|
|
126016
|
-
if (IFrameSplitOperator.IsNonEmptyArray(drawItem.DrawData))
|
|
126017
|
-
{
|
|
126018
|
-
for(var k=0; k<drawItem.DrawData.length; ++k)
|
|
126019
|
-
{
|
|
126020
|
-
this.GetKLineData(drawItem.DrawData[k].Point, hqChart);
|
|
126021
|
-
}
|
|
126022
|
-
}
|
|
126208
|
+
drawItem.DrawData=draw.DrawData;
|
|
126023
126209
|
|
|
126024
126210
|
outVarItem.Draw=drawItem;
|
|
126025
126211
|
result.push(outVarItem);
|
|
@@ -126566,14 +126752,7 @@ function APIScriptIndex(name,script,args,option, isOverlay)
|
|
|
126566
126752
|
drawItem.Text=draw.Text;
|
|
126567
126753
|
drawItem.Name=draw.Name;
|
|
126568
126754
|
drawItem.DrawType=draw.DrawType;
|
|
126569
|
-
drawItem.DrawData=
|
|
126570
|
-
if (IFrameSplitOperator.IsNonEmptyArray(drawItem.DrawData))
|
|
126571
|
-
{
|
|
126572
|
-
for(var k=0; k<drawItem.DrawData.length; ++k)
|
|
126573
|
-
{
|
|
126574
|
-
this.GetKLineData(drawItem.DrawData[k].Point, hqChart);
|
|
126575
|
-
}
|
|
126576
|
-
}
|
|
126755
|
+
drawItem.DrawData=draw.DrawData;
|
|
126577
126756
|
|
|
126578
126757
|
outVarItem.Draw=drawItem;
|
|
126579
126758
|
result.push(outVarItem);
|
|
@@ -152033,7 +152212,7 @@ function HQChartScriptWorker()
|
|
|
152033
152212
|
|
|
152034
152213
|
|
|
152035
152214
|
|
|
152036
|
-
var HQCHART_VERSION="1.1.
|
|
152215
|
+
var HQCHART_VERSION="1.1.14339";
|
|
152037
152216
|
|
|
152038
152217
|
function PrintHQChartVersion()
|
|
152039
152218
|
{
|