hqchart 1.1.14330 → 1.1.14336
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 +53 -46
- 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 +307 -119
- package/src/jscommon/umychart.testdata.js +3 -1
- package/src/jscommon/umychart.uniapp.h5/umychart.uniapp.h5.js +327 -140
- 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 +327 -140
|
@@ -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
|
{
|
|
@@ -44857,98 +44890,219 @@ function ChartMultiPoint()
|
|
|
44857
44890
|
delete this.newMethod;
|
|
44858
44891
|
|
|
44859
44892
|
this.ClassName="ChartMultiPoint";
|
|
44860
|
-
this.PointGroup=[]; // [ {Point:[ {
|
|
44893
|
+
this.PointGroup=[]; // [ {Point:[ {Date, Time, Value }, ], Color: }, ]
|
|
44861
44894
|
|
|
44862
44895
|
|
|
44863
44896
|
this.IsHScreen=false;
|
|
44864
44897
|
this.LineWidth=1;
|
|
44865
44898
|
this.PointRadius=5;
|
|
44866
44899
|
|
|
44900
|
+
this.MapCache=null; //key=date/date-time value={ Data:[] }
|
|
44901
|
+
this.GetKValue=ChartData.GetKValue;
|
|
44902
|
+
|
|
44903
|
+
this.BuildKey=function(item)
|
|
44904
|
+
{
|
|
44905
|
+
if (IFrameSplitOperator.IsNumber(item.Time)) return `${item.Date}-${item.Time}`;
|
|
44906
|
+
else return item.Date;
|
|
44907
|
+
}
|
|
44908
|
+
|
|
44909
|
+
this.GetItem=function(kItem)
|
|
44910
|
+
{
|
|
44911
|
+
if (!this.MapCache || this.MapCache.size<=0) return null;
|
|
44912
|
+
|
|
44913
|
+
var key=this.BuildKey(kItem);
|
|
44914
|
+
if (!this.MapCache.has(key)) return null;
|
|
44915
|
+
|
|
44916
|
+
return this.MapCache.get(key);
|
|
44917
|
+
}
|
|
44918
|
+
|
|
44919
|
+
this.BuildCacheData=function()
|
|
44920
|
+
{
|
|
44921
|
+
var mapData=new Map();
|
|
44922
|
+
this.MapCache=mapData;
|
|
44923
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(this.PointGroup)) return;
|
|
44924
|
+
|
|
44925
|
+
for(var i=0; i<this.PointGroup.length; ++i)
|
|
44926
|
+
{
|
|
44927
|
+
var groupItem=this.PointGroup[i];
|
|
44928
|
+
if (!groupItem || !IFrameSplitOperator.IsNonEmptyArray(groupItem.Point)) continue;
|
|
44929
|
+
|
|
44930
|
+
var clrConfig= { Color:groupItem.Color, BGColor:groupItem.BGColor, LineWidth:this.LineWidth, Radius:this.PointRadius, Name:groupItem.Name };
|
|
44931
|
+
if (IFrameSplitOperator.IsNumber(groupItem.PointRadius)) clrConfig.Radius=groupItem.PointRadius;
|
|
44932
|
+
|
|
44933
|
+
for(var j=0; j<groupItem.Point.length; ++j)
|
|
44934
|
+
{
|
|
44935
|
+
var point=groupItem.Point[j];
|
|
44936
|
+
var key=this.BuildKey(point);
|
|
44937
|
+
|
|
44938
|
+
var item={ Data:point, ColorConfig:clrConfig }
|
|
44939
|
+
if (mapData.has(key))
|
|
44940
|
+
{
|
|
44941
|
+
var mapItem=mapData.get(key);
|
|
44942
|
+
mapItem.Data.push(item);
|
|
44943
|
+
}
|
|
44944
|
+
else
|
|
44945
|
+
{
|
|
44946
|
+
mapData.set(key,{ Data:[item] });
|
|
44947
|
+
}
|
|
44948
|
+
}
|
|
44949
|
+
}
|
|
44950
|
+
}
|
|
44951
|
+
|
|
44867
44952
|
this.Draw=function()
|
|
44868
44953
|
{
|
|
44869
|
-
if (!this.IsShow || this.ChartFrame.IsMinSize) return;
|
|
44870
|
-
if (
|
|
44954
|
+
if (!this.IsShow || this.ChartFrame.IsMinSize || !this.IsVisible) return;
|
|
44955
|
+
if (this.IsShowIndexTitleOnly()) return;
|
|
44956
|
+
if (this.IsHideScriptIndex()) return;
|
|
44957
|
+
|
|
44958
|
+
if (!this.Data || !IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return; //k线数据
|
|
44871
44959
|
if (!IFrameSplitOperator.IsNonEmptyArray(this.PointGroup)) return;
|
|
44960
|
+
if (!this.MapCache || this.MapCache.size<=0) return;
|
|
44872
44961
|
|
|
44873
44962
|
this.IsHScreen=(this.ChartFrame.IsHScreen===true);
|
|
44874
44963
|
var xPointCount=this.ChartFrame.XPointCount;
|
|
44875
|
-
var
|
|
44876
|
-
var
|
|
44964
|
+
var dataWidth=this.ChartFrame.DataWidth;
|
|
44965
|
+
var distanceWidth=this.ChartFrame.DistanceWidth;
|
|
44966
|
+
var isMinute=this.IsMinuteFrame();
|
|
44967
|
+
|
|
44968
|
+
var border=this.GetBorder();
|
|
44969
|
+
if (this.IsHScreen)
|
|
44970
|
+
{
|
|
44971
|
+
var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
|
|
44972
|
+
var chartright=border.BottomEx;
|
|
44973
|
+
var chartLeft=border.TopEx;
|
|
44974
|
+
}
|
|
44975
|
+
else
|
|
44976
|
+
{
|
|
44977
|
+
var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
|
|
44978
|
+
var chartright=border.RightEx;
|
|
44979
|
+
var chartLeft=border.LeftEx;
|
|
44980
|
+
}
|
|
44981
|
+
|
|
44982
|
+
//计算所有的点位置
|
|
44983
|
+
var mapPoint=new Map();
|
|
44984
|
+
for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length && j<xPointCount;++i,++j,xOffset+=(dataWidth+distanceWidth))
|
|
44985
|
+
{
|
|
44986
|
+
var kItem=this.Data.Data[i];
|
|
44987
|
+
var key=this.BuildKey(kItem);
|
|
44988
|
+
if (!this.MapCache.has(key)) continue;
|
|
44989
|
+
var mapItem=this.MapCache.get(key);
|
|
44990
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(mapItem.Data)) continue;
|
|
44991
|
+
|
|
44992
|
+
if (isMinute)
|
|
44993
|
+
{
|
|
44994
|
+
var x=this.ChartFrame.GetXFromIndex(j);
|
|
44995
|
+
}
|
|
44996
|
+
else
|
|
44997
|
+
{
|
|
44998
|
+
var left=xOffset;
|
|
44999
|
+
var right=xOffset+dataWidth;
|
|
45000
|
+
if (right>chartright) break;
|
|
45001
|
+
var x=left+(right-left)/2;
|
|
45002
|
+
}
|
|
45003
|
+
|
|
45004
|
+
this.CalculateItem(mapItem, kItem, x, mapPoint);
|
|
45005
|
+
}
|
|
45006
|
+
|
|
45007
|
+
if (mapPoint.size<=0) return;
|
|
44877
45008
|
|
|
44878
45009
|
this.Canvas.save();
|
|
44879
45010
|
this.ClipClient(this.IsHScreen);
|
|
44880
|
-
|
|
44881
|
-
|
|
45011
|
+
|
|
45012
|
+
this.DrawAllPoint(mapPoint);
|
|
45013
|
+
|
|
45014
|
+
this.Canvas.restore();
|
|
45015
|
+
}
|
|
45016
|
+
|
|
45017
|
+
this.CalculateItem=function(groupItem, kItem, x, mapPoint)
|
|
45018
|
+
{
|
|
45019
|
+
for(var i=0; i<groupItem.Data.length; ++i)
|
|
45020
|
+
{
|
|
45021
|
+
var item=groupItem.Data[i];
|
|
45022
|
+
var value=item.Data.Value;
|
|
45023
|
+
if (IFrameSplitOperator.IsString(item.Data.Value)) value=this.GetKValue(kItem,item.Data.Value);
|
|
45024
|
+
if (!IFrameSplitOperator.IsNumber(value)) continue;
|
|
45025
|
+
|
|
45026
|
+
var y=this.ChartFrame.GetYFromData(value,false);
|
|
45027
|
+
|
|
45028
|
+
var strConfig=JSON.stringify(item.ColorConfig);
|
|
45029
|
+
if (!mapPoint.has(strConfig)) mapPoint.set(strConfig, { AryPoint:[]});
|
|
45030
|
+
var mapItem=mapPoint.get(strConfig);
|
|
45031
|
+
|
|
45032
|
+
mapItem.AryPoint.push({ X:x, Y:y, Data:item });
|
|
45033
|
+
}
|
|
45034
|
+
}
|
|
45035
|
+
|
|
45036
|
+
this.DrawAllPoint=function(mapPoint)
|
|
45037
|
+
{
|
|
45038
|
+
var pixelRatio=GetDevicePixelRatio();
|
|
45039
|
+
|
|
45040
|
+
for(var mapItem of mapPoint)
|
|
44882
45041
|
{
|
|
44883
|
-
var
|
|
44884
|
-
|
|
44885
|
-
var
|
|
44886
|
-
var lineWidth=this.LineWidth;
|
|
44887
|
-
var radius=this.PointRadius;
|
|
44888
|
-
if (IFrameSplitOperator.IsNumber(item.LineWidth)) lineWidth=item.LineWidth;
|
|
44889
|
-
if (IFrameSplitOperator.IsNumber(item.PointRadius)) radius=item.PointRadius;
|
|
45042
|
+
var aryPoint=mapItem[1].AryPoint;
|
|
45043
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(aryPoint)) continue;
|
|
45044
|
+
var config=null;
|
|
44890
45045
|
var path=new Path2D();
|
|
44891
45046
|
var count=0;
|
|
44892
|
-
|
|
44893
|
-
for(var j=0; j<item.Point.length; ++j)
|
|
45047
|
+
for(var i=0;i<aryPoint.length;++i)
|
|
44894
45048
|
{
|
|
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);
|
|
45049
|
+
var item=aryPoint[i];
|
|
45050
|
+
if (!config) config=item.Data.ColorConfig;
|
|
44903
45051
|
|
|
44904
|
-
|
|
44905
|
-
|
|
44906
|
-
|
|
44907
|
-
|
|
44908
|
-
|
|
45052
|
+
var pointPath = new Path2D();
|
|
45053
|
+
if (this.IsHScreen)
|
|
45054
|
+
pointPath.arc(item.Y,item.X,config.Radius*pixelRatio,0,360,false);
|
|
45055
|
+
else
|
|
45056
|
+
pointPath.arc(item.X,item.Y,config.Radius**pixelRatio,0,360,false);
|
|
44909
45057
|
|
|
44910
|
-
|
|
44911
|
-
|
|
44912
|
-
}
|
|
45058
|
+
path.addPath(pointPath);
|
|
45059
|
+
++count;
|
|
44913
45060
|
}
|
|
44914
45061
|
|
|
44915
|
-
if (count>0 &&
|
|
45062
|
+
if (count>0 && config)
|
|
44916
45063
|
{
|
|
44917
|
-
|
|
44918
|
-
|
|
44919
|
-
|
|
45064
|
+
if (config.BGColor)
|
|
45065
|
+
{
|
|
45066
|
+
this.Canvas.fillStyle=config.BGColor; //背景填充颜色
|
|
45067
|
+
this.Canvas.fill(path);
|
|
45068
|
+
}
|
|
44920
45069
|
|
|
44921
|
-
if (
|
|
44922
|
-
|
|
45070
|
+
if (config.Color)
|
|
45071
|
+
{
|
|
45072
|
+
this.Canvas.lineWidth=config.LineWidth*pixelRatio;
|
|
45073
|
+
this.Canvas.strokeStyle=config.Color;
|
|
45074
|
+
this.Canvas.stroke(path);
|
|
45075
|
+
}
|
|
44923
45076
|
}
|
|
44924
|
-
|
|
44925
45077
|
}
|
|
44926
|
-
|
|
44927
|
-
this.Canvas.restore();
|
|
44928
45078
|
}
|
|
44929
45079
|
|
|
44930
45080
|
this.GetMaxMin=function()
|
|
44931
45081
|
{
|
|
44932
45082
|
var range={ Min:null, Max:null };
|
|
45083
|
+
if(!this.Data || !IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return range;
|
|
45084
|
+
if (!this.MapCache || this.MapCache.size<=0) return;
|
|
44933
45085
|
var xPointCount=this.ChartFrame.XPointCount;
|
|
44934
|
-
var start=this.Data.DataOffset;
|
|
44935
|
-
var end=start+xPointCount;
|
|
44936
45086
|
|
|
44937
|
-
for(var i=0;
|
|
45087
|
+
for(var i=this.Data.DataOffset,j=0, k=0;i<this.Data.Data.length && j<xPointCount;++i,++j)
|
|
44938
45088
|
{
|
|
44939
|
-
var
|
|
44940
|
-
|
|
45089
|
+
var kItem=this.Data.Data[i];
|
|
45090
|
+
var key=this.BuildKey(kItem);
|
|
45091
|
+
if (!this.MapCache.has(key)) continue;
|
|
45092
|
+
var mapItem=this.MapCache.get(key);
|
|
45093
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(mapItem.Data)) continue;
|
|
44941
45094
|
|
|
44942
|
-
for(
|
|
45095
|
+
for(k=0;k<mapItem.Data.length;++k)
|
|
44943
45096
|
{
|
|
44944
|
-
var
|
|
44945
|
-
|
|
44946
|
-
|
|
44947
|
-
|
|
44948
|
-
|
|
44949
|
-
|
|
44950
|
-
|
|
44951
|
-
|
|
45097
|
+
var item=mapItem.Data[k];
|
|
45098
|
+
var value=item.Data.Value;
|
|
45099
|
+
if (IFrameSplitOperator.IsString(item.Data.Value)) value=this.GetKValue(kItem,item.Data.Value);
|
|
45100
|
+
if (!IFrameSplitOperator.IsNumber(value)) continue;
|
|
45101
|
+
|
|
45102
|
+
if (range.Max==null) range.Max=value;
|
|
45103
|
+
else if (range.Max<value) range.Max=value;
|
|
45104
|
+
if (range.Min==null) range.Min=value;
|
|
45105
|
+
else if (range.Min>value) range.Min=value;
|
|
44952
45106
|
}
|
|
44953
45107
|
}
|
|
44954
45108
|
|
|
@@ -45215,6 +45369,8 @@ function ChartMultiSVGIconV2()
|
|
|
45215
45369
|
this.IconRect=[]; //0=序号,1=区域
|
|
45216
45370
|
|
|
45217
45371
|
this.MapCache=null; //key=date/date-time value={ Data:[] }
|
|
45372
|
+
this.GetKValue=ChartData.GetKValue;
|
|
45373
|
+
|
|
45218
45374
|
|
|
45219
45375
|
this.BuildKey=function(item)
|
|
45220
45376
|
{
|
|
@@ -45329,28 +45485,7 @@ function ChartMultiSVGIconV2()
|
|
|
45329
45485
|
|
|
45330
45486
|
this.Canvas.restore();
|
|
45331
45487
|
}
|
|
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
|
-
|
|
45488
|
+
|
|
45354
45489
|
this.DrawItem=function(groupItem, kItem, x, drawInfo)
|
|
45355
45490
|
{
|
|
45356
45491
|
if (!IFrameSplitOperator.IsNonEmptyArray(groupItem.Data)) return;
|
|
@@ -61306,24 +61441,29 @@ function DynamicChartTitlePainting()
|
|
|
61306
61441
|
|
|
61307
61442
|
this.ForamtMultiPointTitle=function(dataIndex, dataInfo)
|
|
61308
61443
|
{
|
|
61309
|
-
if (!
|
|
61444
|
+
if (!dataInfo.GetItemCallback) return null;
|
|
61445
|
+
if (!dataInfo.Data || !IFrameSplitOperator.IsNonEmptyArray(dataInfo.Data.Data)) return null;
|
|
61446
|
+
var kItem=dataInfo.Data.Data[dataIndex];
|
|
61447
|
+
if (!kItem) return null;
|
|
61448
|
+
|
|
61449
|
+
var group=dataInfo.GetItemCallback(kItem);
|
|
61450
|
+
if (!group || !IFrameSplitOperator.IsNonEmptyArray(group.Data)) return null;
|
|
61310
61451
|
|
|
61311
61452
|
var aryText=[];
|
|
61312
|
-
for(var i=0;i<
|
|
61453
|
+
for(var i=0;i<group.Data.length;++i)
|
|
61313
61454
|
{
|
|
61314
|
-
var
|
|
61315
|
-
|
|
61316
|
-
|
|
61317
|
-
|
|
61318
|
-
|
|
61319
|
-
|
|
61320
|
-
|
|
61321
|
-
|
|
61322
|
-
|
|
61323
|
-
|
|
61324
|
-
|
|
61325
|
-
|
|
61326
|
-
}
|
|
61455
|
+
var item=group.Data[i];
|
|
61456
|
+
var config=item.ColorConfig;
|
|
61457
|
+
|
|
61458
|
+
var color=null;
|
|
61459
|
+
if (config.BGColor) color=config.BGColor;
|
|
61460
|
+
else if (config.Color) color=config.Color;
|
|
61461
|
+
|
|
61462
|
+
if (config.Name) aryText.push({ Text:`${config.Name}:`, Color:color });
|
|
61463
|
+
|
|
61464
|
+
var value=item.Data.Value;
|
|
61465
|
+
if (IFrameSplitOperator.IsString(item.Data.Value)) value=ChartData.GetKValue(kItem, item.Data.Value);
|
|
61466
|
+
aryText.push({ Text:this.FormatValue(value, dataInfo), Color:color});
|
|
61327
61467
|
}
|
|
61328
61468
|
|
|
61329
61469
|
if (!IFrameSplitOperator.IsNonEmptyArray(aryText)) return null;
|
|
@@ -62094,6 +62234,11 @@ function DynamicChartTitlePainting()
|
|
|
62094
62234
|
aryText=this.FromatStackedBarTitle(value, item);
|
|
62095
62235
|
if (!aryText) continue;
|
|
62096
62236
|
}
|
|
62237
|
+
else if (item.DataType=="ChartMultiPoint")
|
|
62238
|
+
{
|
|
62239
|
+
aryText=this.ForamtMultiPointTitle(dataIndex, item);
|
|
62240
|
+
if (!aryText) continue;
|
|
62241
|
+
}
|
|
62097
62242
|
else
|
|
62098
62243
|
{
|
|
62099
62244
|
valueText=this.FormatValue(value,item);
|
|
@@ -84074,18 +84219,18 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
84074
84219
|
{
|
|
84075
84220
|
var pixelTatio = GetDevicePixelRatio(); //x,y 需要乘以放大倍速
|
|
84076
84221
|
var frameId=this.Frame.PtInFrame(x*pixelTatio,y*pixelTatio);
|
|
84077
|
-
this.PopupRightMenuV2({X:e.offsetX, Y:e.offsetY, FrameID:frameId}, e);
|
|
84222
|
+
this.PopupRightMenuV2({X:e.offsetX, Y:e.offsetY, FrameID:frameId, CursorIndex:this.CursorIndex, Point:{ X:x*pixelTatio, Y:y*pixelTatio}}, e);
|
|
84078
84223
|
|
|
84079
84224
|
var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CONTEXT_MENU);
|
|
84080
84225
|
if (event)
|
|
84081
84226
|
{
|
|
84082
|
-
var data={ X:x, Y:y, Event:e, FrameID:frameId };
|
|
84227
|
+
var data={ X:x, Y:y, Event:e, FrameID:frameId, Point:{ X:x*pixelTatio, Y:y*pixelTatio}, CursorIndex:this.CursorIndex, };
|
|
84083
84228
|
event.Callback(event,data,this);
|
|
84084
84229
|
}
|
|
84085
84230
|
}
|
|
84086
84231
|
|
|
84087
84232
|
//右键菜单数据
|
|
84088
|
-
this.GetRightMenuData=function(frameID)
|
|
84233
|
+
this.GetRightMenuData=function(frameID, option)
|
|
84089
84234
|
{
|
|
84090
84235
|
var windowCount=this.Frame.SubFrame.length; //窗口个数
|
|
84091
84236
|
var klineChart=this.ChartPaint[0];
|
|
@@ -84128,6 +84273,17 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
84128
84273
|
var bPopMinuteChart=false;
|
|
84129
84274
|
if (this.PopMinuteChart) bPopMinuteChart=true;
|
|
84130
84275
|
|
|
84276
|
+
var kItem=null;
|
|
84277
|
+
if (frameID>=0 && option && IFrameSplitOperator.IsNumber(option.CursorIndex))
|
|
84278
|
+
{
|
|
84279
|
+
var kData=this.GetKData();
|
|
84280
|
+
if (kData && IFrameSplitOperator.IsNonEmptyArray(kData.Data))
|
|
84281
|
+
{
|
|
84282
|
+
var dataIndex=kData.DataOffset+option.CursorIndex;
|
|
84283
|
+
if (dataIndex>=0 && dataIndex<kData.Data.length) kItem=kData.Data[dataIndex];
|
|
84284
|
+
}
|
|
84285
|
+
}
|
|
84286
|
+
|
|
84131
84287
|
var aryMenu=
|
|
84132
84288
|
[
|
|
84133
84289
|
{
|
|
@@ -84410,6 +84566,17 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
84410
84566
|
}
|
|
84411
84567
|
}
|
|
84412
84568
|
}
|
|
84569
|
+
else if (item.Name=="其他设置")
|
|
84570
|
+
{
|
|
84571
|
+
if (kItem)
|
|
84572
|
+
{
|
|
84573
|
+
var bLocked=this.IsLockCorssCursor();
|
|
84574
|
+
if (bLocked)
|
|
84575
|
+
item.SubMenu.push({ Name:"锁十字光标", Data:{ ID: JSCHART_MENU_ID.CMD_UNLOCK_CROSSCURSOR }, Checked:bLocked });
|
|
84576
|
+
else
|
|
84577
|
+
item.SubMenu.push({ Name:"锁十字光标", Data:{ ID: JSCHART_MENU_ID.CMD_LOCK_CROSSCURSOR, Args:[{ KItem:{Date:kItem.Date, Time:kItem.Time}, Draw:true }] }, Checked:bLocked });
|
|
84578
|
+
}
|
|
84579
|
+
}
|
|
84413
84580
|
}
|
|
84414
84581
|
|
|
84415
84582
|
return aryMenu;
|
|
@@ -86013,19 +86180,36 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
86013
86180
|
if (option && option.Draw) this.Draw();
|
|
86014
86181
|
}
|
|
86015
86182
|
|
|
86183
|
+
//option={ KItem:{ Date:, Time:}}
|
|
86016
86184
|
this.LockCorssCursor=function(option)
|
|
86017
86185
|
{
|
|
86018
|
-
if (
|
|
86019
|
-
|
|
86020
|
-
|
|
86186
|
+
if (option && option.KItem) //指定日期时间
|
|
86187
|
+
{
|
|
86188
|
+
var kData=this.GetKData();
|
|
86189
|
+
if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return false;
|
|
86021
86190
|
|
|
86022
|
-
|
|
86023
|
-
|
|
86024
|
-
|
|
86191
|
+
var kItem={ Date:option.KItem.Date, Time:option.KItem.Time, Index:-1};
|
|
86192
|
+
kData.FindDataIndexByDateTime([kItem]);
|
|
86193
|
+
if (kItem.Index<0) return false;
|
|
86025
86194
|
|
|
86026
|
-
|
|
86027
|
-
|
|
86028
|
-
|
|
86195
|
+
var xItem=this.GlobalOption.LockCorssCursor.X;
|
|
86196
|
+
xItem.KLine={ DataIndex:kItem.Index, Date:kItem.Date, Time:kItem.Time };
|
|
86197
|
+
xItem.Enable=true;
|
|
86198
|
+
}
|
|
86199
|
+
else
|
|
86200
|
+
{
|
|
86201
|
+
if (this.CursorIndex<0) return false;
|
|
86202
|
+
var kData=this.GetKData();
|
|
86203
|
+
if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return false;
|
|
86204
|
+
|
|
86205
|
+
var dataIndex=kData.DataOffset+parseInt(this.CursorIndex.toFixed(0));
|
|
86206
|
+
var kItem=kData.Data[dataIndex];
|
|
86207
|
+
if (!kItem) return false;
|
|
86208
|
+
|
|
86209
|
+
var xItem=this.GlobalOption.LockCorssCursor.X;
|
|
86210
|
+
xItem.KLine={ DataIndex:dataIndex, Date:kItem.Date, Time:kItem.Time };
|
|
86211
|
+
xItem.Enable=true;
|
|
86212
|
+
}
|
|
86029
86213
|
|
|
86030
86214
|
if (option && option.Draw) this.Draw();
|
|
86031
86215
|
return true;
|
|
@@ -86048,7 +86232,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
86048
86232
|
if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return position;
|
|
86049
86233
|
|
|
86050
86234
|
position.CursorIndex=xItem.KLine.DataIndex-kData.DataOffset;
|
|
86051
|
-
position.LastPoint.X=this.Frame.GetXFromIndex(position.CursorIndex);
|
|
86235
|
+
position.LastPoint.X=this.Frame.GetXFromIndex(position.CursorIndex, false);
|
|
86052
86236
|
|
|
86053
86237
|
var border=this.Frame.ChartBorder.GetBorder();
|
|
86054
86238
|
if (position.LastPoint.Y<border.Top || position.LastPoint.Y>border.Bottom) //超出图形框子, 调整为收盘价
|
|
@@ -88121,18 +88305,18 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
|
|
|
88121
88305
|
{
|
|
88122
88306
|
var pixelTatio = GetDevicePixelRatio(); //x,y 需要乘以放大倍速
|
|
88123
88307
|
var frameId=this.Frame.PtInFrame(x*pixelTatio,y*pixelTatio);
|
|
88124
|
-
this.PopupRightMenuV2({X:e.offsetX, Y:e.offsetY, FrameID:frameId}, e);
|
|
88308
|
+
this.PopupRightMenuV2({X:e.offsetX, Y:e.offsetY, FrameID:frameId, CursorIndex:this.CursorIndex, Point:{ X:x*pixelTatio, Y:y*pixelTatio} }, e);
|
|
88125
88309
|
|
|
88126
88310
|
var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CONTEXT_MENU);
|
|
88127
88311
|
if (event)
|
|
88128
88312
|
{
|
|
88129
|
-
var data={ X:x, Y:y, Event:e, FrameID:frameId };
|
|
88313
|
+
var data={ X:x, Y:y, Event:e, FrameID:frameId, CursorIndex:this.CursorIndex, Point:{ X:x*pixelTatio, Y:y*pixelTatio} };
|
|
88130
88314
|
event.Callback(event,data,this);
|
|
88131
88315
|
}
|
|
88132
88316
|
}
|
|
88133
88317
|
|
|
88134
88318
|
//右键菜单数据
|
|
88135
|
-
this.GetRightMenuData=function(frameID)
|
|
88319
|
+
this.GetRightMenuData=function(frameID, option)
|
|
88136
88320
|
{
|
|
88137
88321
|
var windowCount=this.Frame.SubFrame.length; //窗口个数
|
|
88138
88322
|
|
|
@@ -88259,11 +88443,11 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
|
|
|
88259
88443
|
}
|
|
88260
88444
|
|
|
88261
88445
|
|
|
88262
|
-
|
|
88446
|
+
|
|
88263
88447
|
for(var i=0;i<aryMenu.length;++i)
|
|
88264
88448
|
{
|
|
88265
88449
|
var item=aryMenu[i];
|
|
88266
|
-
if (item.Name=="叠加品种")
|
|
88450
|
+
if (item.Name=="叠加品种") //删除菜单
|
|
88267
88451
|
{
|
|
88268
88452
|
for(var j=0;j<item.SubMenu.length;++j)
|
|
88269
88453
|
{
|
|
@@ -88275,6 +88459,10 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
|
|
|
88275
88459
|
}
|
|
88276
88460
|
}
|
|
88277
88461
|
}
|
|
88462
|
+
else if (item.Name=="其他设置")
|
|
88463
|
+
{
|
|
88464
|
+
|
|
88465
|
+
}
|
|
88278
88466
|
}
|
|
88279
88467
|
|
|
88280
88468
|
return aryMenu;
|
|
@@ -123079,16 +123267,18 @@ function ScriptIndex(name,script,args,option)
|
|
|
123079
123267
|
chart.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;
|
|
123080
123268
|
chart.ChartFrame=hqChart.Frame.SubFrame[windowIndex].Frame;
|
|
123081
123269
|
|
|
123082
|
-
chart.Data=hqChart.ChartPaint[0].Data
|
|
123270
|
+
chart.Data=hqChart.ChartPaint[0].Data; //绑定K线
|
|
123083
123271
|
chart.PointGroup=varItem.Draw.DrawData;
|
|
123084
123272
|
if (varItem.Draw.Name) chart.Name=varItem.Draw.Name;
|
|
123273
|
+
chart.BuildCacheData();
|
|
123274
|
+
|
|
123085
123275
|
this.SetChartIndexName(chart);
|
|
123086
123276
|
hqChart.ChartPaint.push(chart);
|
|
123087
123277
|
|
|
123088
|
-
|
|
123278
|
+
var titleIndex=windowIndex+1;
|
|
123089
123279
|
var titleData=new DynamicTitleData(chart.Data,chart.Name, null);
|
|
123090
123280
|
titleData.DataType="ChartMultiPoint";
|
|
123091
|
-
titleData.
|
|
123281
|
+
titleData.GetItemCallback=(kItem)=>{ return chart.GetItem(kItem); }
|
|
123092
123282
|
hqChart.TitlePaint[titleIndex].Data[i]=titleData;
|
|
123093
123283
|
}
|
|
123094
123284
|
|
|
@@ -124803,7 +124993,7 @@ function OverlayScriptIndex(name,script,args,option)
|
|
|
124803
124993
|
frame.ChartPaint.push(chart);
|
|
124804
124994
|
}
|
|
124805
124995
|
|
|
124806
|
-
this.CreateMultiPoint=function(hqChart,windowIndex,varItem,
|
|
124996
|
+
this.CreateMultiPoint=function(hqChart,windowIndex,varItem,id)
|
|
124807
124997
|
{
|
|
124808
124998
|
var overlayIndex=this.OverlayIndex;
|
|
124809
124999
|
var frame=overlayIndex.Frame;
|
|
@@ -124816,6 +125006,17 @@ function OverlayScriptIndex(name,script,args,option)
|
|
|
124816
125006
|
|
|
124817
125007
|
chart.Data=hqChart.ChartPaint[0].Data;//绑定K线
|
|
124818
125008
|
chart.PointGroup=varItem.Draw.DrawData;
|
|
125009
|
+
chart.BuildCacheData();
|
|
125010
|
+
|
|
125011
|
+
var titleIndex=windowIndex+1;
|
|
125012
|
+
var titlePaint=hqChart.TitlePaint[titleIndex];
|
|
125013
|
+
var titleData=new DynamicTitleData(chart.Data,varItem.Name,null);
|
|
125014
|
+
titleData.DataType="ChartMultiPoint";
|
|
125015
|
+
titleData.GetItemCallback=(kItem)=>{ return chart.GetItem(kItem); }
|
|
125016
|
+
titlePaint.OverlayIndex.get(overlayIndex.Identify).Data[id]=titleData;
|
|
125017
|
+
|
|
125018
|
+
this.SetChartIndexName(chart);
|
|
125019
|
+
|
|
124819
125020
|
frame.ChartPaint.push(chart);
|
|
124820
125021
|
}
|
|
124821
125022
|
|
|
@@ -126012,14 +126213,7 @@ function APIScriptIndex(name,script,args,option, isOverlay)
|
|
|
126012
126213
|
drawItem.Text=draw.Text;
|
|
126013
126214
|
drawItem.Name=draw.Name;
|
|
126014
126215
|
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
|
-
}
|
|
126216
|
+
drawItem.DrawData=draw.DrawData;
|
|
126023
126217
|
|
|
126024
126218
|
outVarItem.Draw=drawItem;
|
|
126025
126219
|
result.push(outVarItem);
|
|
@@ -126566,14 +126760,7 @@ function APIScriptIndex(name,script,args,option, isOverlay)
|
|
|
126566
126760
|
drawItem.Text=draw.Text;
|
|
126567
126761
|
drawItem.Name=draw.Name;
|
|
126568
126762
|
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
|
-
}
|
|
126763
|
+
drawItem.DrawData=draw.DrawData;
|
|
126577
126764
|
|
|
126578
126765
|
outVarItem.Draw=drawItem;
|
|
126579
126766
|
result.push(outVarItem);
|
|
@@ -152033,7 +152220,7 @@ function HQChartScriptWorker()
|
|
|
152033
152220
|
|
|
152034
152221
|
|
|
152035
152222
|
|
|
152036
|
-
var HQCHART_VERSION="1.1.
|
|
152223
|
+
var HQCHART_VERSION="1.1.14335";
|
|
152037
152224
|
|
|
152038
152225
|
function PrintHQChartVersion()
|
|
152039
152226
|
{
|