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
|
@@ -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
|
{
|
|
@@ -44813,98 +44846,219 @@ function ChartMultiPoint()
|
|
|
44813
44846
|
delete this.newMethod;
|
|
44814
44847
|
|
|
44815
44848
|
this.ClassName="ChartMultiPoint";
|
|
44816
|
-
this.PointGroup=[]; // [ {Point:[ {
|
|
44849
|
+
this.PointGroup=[]; // [ {Point:[ {Date, Time, Value }, ], Color: }, ]
|
|
44817
44850
|
|
|
44818
44851
|
|
|
44819
44852
|
this.IsHScreen=false;
|
|
44820
44853
|
this.LineWidth=1;
|
|
44821
44854
|
this.PointRadius=5;
|
|
44822
44855
|
|
|
44856
|
+
this.MapCache=null; //key=date/date-time value={ Data:[] }
|
|
44857
|
+
this.GetKValue=ChartData.GetKValue;
|
|
44858
|
+
|
|
44859
|
+
this.BuildKey=function(item)
|
|
44860
|
+
{
|
|
44861
|
+
if (IFrameSplitOperator.IsNumber(item.Time)) return `${item.Date}-${item.Time}`;
|
|
44862
|
+
else return item.Date;
|
|
44863
|
+
}
|
|
44864
|
+
|
|
44865
|
+
this.GetItem=function(kItem)
|
|
44866
|
+
{
|
|
44867
|
+
if (!this.MapCache || this.MapCache.size<=0) return null;
|
|
44868
|
+
|
|
44869
|
+
var key=this.BuildKey(kItem);
|
|
44870
|
+
if (!this.MapCache.has(key)) return null;
|
|
44871
|
+
|
|
44872
|
+
return this.MapCache.get(key);
|
|
44873
|
+
}
|
|
44874
|
+
|
|
44875
|
+
this.BuildCacheData=function()
|
|
44876
|
+
{
|
|
44877
|
+
var mapData=new Map();
|
|
44878
|
+
this.MapCache=mapData;
|
|
44879
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(this.PointGroup)) return;
|
|
44880
|
+
|
|
44881
|
+
for(var i=0; i<this.PointGroup.length; ++i)
|
|
44882
|
+
{
|
|
44883
|
+
var groupItem=this.PointGroup[i];
|
|
44884
|
+
if (!groupItem || !IFrameSplitOperator.IsNonEmptyArray(groupItem.Point)) continue;
|
|
44885
|
+
|
|
44886
|
+
var clrConfig= { Color:groupItem.Color, BGColor:groupItem.BGColor, LineWidth:this.LineWidth, Radius:this.PointRadius, Name:groupItem.Name };
|
|
44887
|
+
if (IFrameSplitOperator.IsNumber(groupItem.PointRadius)) clrConfig.Radius=groupItem.PointRadius;
|
|
44888
|
+
|
|
44889
|
+
for(var j=0; j<groupItem.Point.length; ++j)
|
|
44890
|
+
{
|
|
44891
|
+
var point=groupItem.Point[j];
|
|
44892
|
+
var key=this.BuildKey(point);
|
|
44893
|
+
|
|
44894
|
+
var item={ Data:point, ColorConfig:clrConfig }
|
|
44895
|
+
if (mapData.has(key))
|
|
44896
|
+
{
|
|
44897
|
+
var mapItem=mapData.get(key);
|
|
44898
|
+
mapItem.Data.push(item);
|
|
44899
|
+
}
|
|
44900
|
+
else
|
|
44901
|
+
{
|
|
44902
|
+
mapData.set(key,{ Data:[item] });
|
|
44903
|
+
}
|
|
44904
|
+
}
|
|
44905
|
+
}
|
|
44906
|
+
}
|
|
44907
|
+
|
|
44823
44908
|
this.Draw=function()
|
|
44824
44909
|
{
|
|
44825
|
-
if (!this.IsShow || this.ChartFrame.IsMinSize) return;
|
|
44826
|
-
if (
|
|
44910
|
+
if (!this.IsShow || this.ChartFrame.IsMinSize || !this.IsVisible) return;
|
|
44911
|
+
if (this.IsShowIndexTitleOnly()) return;
|
|
44912
|
+
if (this.IsHideScriptIndex()) return;
|
|
44913
|
+
|
|
44914
|
+
if (!this.Data || !IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return; //k线数据
|
|
44827
44915
|
if (!IFrameSplitOperator.IsNonEmptyArray(this.PointGroup)) return;
|
|
44916
|
+
if (!this.MapCache || this.MapCache.size<=0) return;
|
|
44828
44917
|
|
|
44829
44918
|
this.IsHScreen=(this.ChartFrame.IsHScreen===true);
|
|
44830
44919
|
var xPointCount=this.ChartFrame.XPointCount;
|
|
44831
|
-
var
|
|
44832
|
-
var
|
|
44920
|
+
var dataWidth=this.ChartFrame.DataWidth;
|
|
44921
|
+
var distanceWidth=this.ChartFrame.DistanceWidth;
|
|
44922
|
+
var isMinute=this.IsMinuteFrame();
|
|
44923
|
+
|
|
44924
|
+
var border=this.GetBorder();
|
|
44925
|
+
if (this.IsHScreen)
|
|
44926
|
+
{
|
|
44927
|
+
var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
|
|
44928
|
+
var chartright=border.BottomEx;
|
|
44929
|
+
var chartLeft=border.TopEx;
|
|
44930
|
+
}
|
|
44931
|
+
else
|
|
44932
|
+
{
|
|
44933
|
+
var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
|
|
44934
|
+
var chartright=border.RightEx;
|
|
44935
|
+
var chartLeft=border.LeftEx;
|
|
44936
|
+
}
|
|
44937
|
+
|
|
44938
|
+
//计算所有的点位置
|
|
44939
|
+
var mapPoint=new Map();
|
|
44940
|
+
for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length && j<xPointCount;++i,++j,xOffset+=(dataWidth+distanceWidth))
|
|
44941
|
+
{
|
|
44942
|
+
var kItem=this.Data.Data[i];
|
|
44943
|
+
var key=this.BuildKey(kItem);
|
|
44944
|
+
if (!this.MapCache.has(key)) continue;
|
|
44945
|
+
var mapItem=this.MapCache.get(key);
|
|
44946
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(mapItem.Data)) continue;
|
|
44947
|
+
|
|
44948
|
+
if (isMinute)
|
|
44949
|
+
{
|
|
44950
|
+
var x=this.ChartFrame.GetXFromIndex(j);
|
|
44951
|
+
}
|
|
44952
|
+
else
|
|
44953
|
+
{
|
|
44954
|
+
var left=xOffset;
|
|
44955
|
+
var right=xOffset+dataWidth;
|
|
44956
|
+
if (right>chartright) break;
|
|
44957
|
+
var x=left+(right-left)/2;
|
|
44958
|
+
}
|
|
44959
|
+
|
|
44960
|
+
this.CalculateItem(mapItem, kItem, x, mapPoint);
|
|
44961
|
+
}
|
|
44962
|
+
|
|
44963
|
+
if (mapPoint.size<=0) return;
|
|
44833
44964
|
|
|
44834
44965
|
this.Canvas.save();
|
|
44835
44966
|
this.ClipClient(this.IsHScreen);
|
|
44836
|
-
|
|
44837
|
-
|
|
44967
|
+
|
|
44968
|
+
this.DrawAllPoint(mapPoint);
|
|
44969
|
+
|
|
44970
|
+
this.Canvas.restore();
|
|
44971
|
+
}
|
|
44972
|
+
|
|
44973
|
+
this.CalculateItem=function(groupItem, kItem, x, mapPoint)
|
|
44974
|
+
{
|
|
44975
|
+
for(var i=0; i<groupItem.Data.length; ++i)
|
|
44976
|
+
{
|
|
44977
|
+
var item=groupItem.Data[i];
|
|
44978
|
+
var value=item.Data.Value;
|
|
44979
|
+
if (IFrameSplitOperator.IsString(item.Data.Value)) value=this.GetKValue(kItem,item.Data.Value);
|
|
44980
|
+
if (!IFrameSplitOperator.IsNumber(value)) continue;
|
|
44981
|
+
|
|
44982
|
+
var y=this.ChartFrame.GetYFromData(value,false);
|
|
44983
|
+
|
|
44984
|
+
var strConfig=JSON.stringify(item.ColorConfig);
|
|
44985
|
+
if (!mapPoint.has(strConfig)) mapPoint.set(strConfig, { AryPoint:[]});
|
|
44986
|
+
var mapItem=mapPoint.get(strConfig);
|
|
44987
|
+
|
|
44988
|
+
mapItem.AryPoint.push({ X:x, Y:y, Data:item });
|
|
44989
|
+
}
|
|
44990
|
+
}
|
|
44991
|
+
|
|
44992
|
+
this.DrawAllPoint=function(mapPoint)
|
|
44993
|
+
{
|
|
44994
|
+
var pixelRatio=GetDevicePixelRatio();
|
|
44995
|
+
|
|
44996
|
+
for(var mapItem of mapPoint)
|
|
44838
44997
|
{
|
|
44839
|
-
var
|
|
44840
|
-
|
|
44841
|
-
var
|
|
44842
|
-
var lineWidth=this.LineWidth;
|
|
44843
|
-
var radius=this.PointRadius;
|
|
44844
|
-
if (IFrameSplitOperator.IsNumber(item.LineWidth)) lineWidth=item.LineWidth;
|
|
44845
|
-
if (IFrameSplitOperator.IsNumber(item.PointRadius)) radius=item.PointRadius;
|
|
44998
|
+
var aryPoint=mapItem[1].AryPoint;
|
|
44999
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(aryPoint)) continue;
|
|
45000
|
+
var config=null;
|
|
44846
45001
|
var path=new Path2D();
|
|
44847
45002
|
var count=0;
|
|
44848
|
-
|
|
44849
|
-
for(var j=0; j<item.Point.length; ++j)
|
|
45003
|
+
for(var i=0;i<aryPoint.length;++i)
|
|
44850
45004
|
{
|
|
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);
|
|
45005
|
+
var item=aryPoint[i];
|
|
45006
|
+
if (!config) config=item.Data.ColorConfig;
|
|
44859
45007
|
|
|
44860
|
-
|
|
44861
|
-
|
|
44862
|
-
|
|
44863
|
-
|
|
44864
|
-
|
|
45008
|
+
var pointPath = new Path2D();
|
|
45009
|
+
if (this.IsHScreen)
|
|
45010
|
+
pointPath.arc(item.Y,item.X,config.Radius*pixelRatio,0,360,false);
|
|
45011
|
+
else
|
|
45012
|
+
pointPath.arc(item.X,item.Y,config.Radius**pixelRatio,0,360,false);
|
|
44865
45013
|
|
|
44866
|
-
|
|
44867
|
-
|
|
44868
|
-
}
|
|
45014
|
+
path.addPath(pointPath);
|
|
45015
|
+
++count;
|
|
44869
45016
|
}
|
|
44870
45017
|
|
|
44871
|
-
if (count>0 &&
|
|
45018
|
+
if (count>0 && config)
|
|
44872
45019
|
{
|
|
44873
|
-
|
|
44874
|
-
|
|
44875
|
-
|
|
45020
|
+
if (config.BGColor)
|
|
45021
|
+
{
|
|
45022
|
+
this.Canvas.fillStyle=config.BGColor; //背景填充颜色
|
|
45023
|
+
this.Canvas.fill(path);
|
|
45024
|
+
}
|
|
44876
45025
|
|
|
44877
|
-
if (
|
|
44878
|
-
|
|
45026
|
+
if (config.Color)
|
|
45027
|
+
{
|
|
45028
|
+
this.Canvas.lineWidth=config.LineWidth*pixelRatio;
|
|
45029
|
+
this.Canvas.strokeStyle=config.Color;
|
|
45030
|
+
this.Canvas.stroke(path);
|
|
45031
|
+
}
|
|
44879
45032
|
}
|
|
44880
|
-
|
|
44881
45033
|
}
|
|
44882
|
-
|
|
44883
|
-
this.Canvas.restore();
|
|
44884
45034
|
}
|
|
44885
45035
|
|
|
44886
45036
|
this.GetMaxMin=function()
|
|
44887
45037
|
{
|
|
44888
45038
|
var range={ Min:null, Max:null };
|
|
45039
|
+
if(!this.Data || !IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return range;
|
|
45040
|
+
if (!this.MapCache || this.MapCache.size<=0) return;
|
|
44889
45041
|
var xPointCount=this.ChartFrame.XPointCount;
|
|
44890
|
-
var start=this.Data.DataOffset;
|
|
44891
|
-
var end=start+xPointCount;
|
|
44892
45042
|
|
|
44893
|
-
for(var i=0;
|
|
45043
|
+
for(var i=this.Data.DataOffset,j=0, k=0;i<this.Data.Data.length && j<xPointCount;++i,++j)
|
|
44894
45044
|
{
|
|
44895
|
-
var
|
|
44896
|
-
|
|
45045
|
+
var kItem=this.Data.Data[i];
|
|
45046
|
+
var key=this.BuildKey(kItem);
|
|
45047
|
+
if (!this.MapCache.has(key)) continue;
|
|
45048
|
+
var mapItem=this.MapCache.get(key);
|
|
45049
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(mapItem.Data)) continue;
|
|
44897
45050
|
|
|
44898
|
-
for(
|
|
45051
|
+
for(k=0;k<mapItem.Data.length;++k)
|
|
44899
45052
|
{
|
|
44900
|
-
var
|
|
44901
|
-
|
|
44902
|
-
|
|
44903
|
-
|
|
44904
|
-
|
|
44905
|
-
|
|
44906
|
-
|
|
44907
|
-
|
|
45053
|
+
var item=mapItem.Data[k];
|
|
45054
|
+
var value=item.Data.Value;
|
|
45055
|
+
if (IFrameSplitOperator.IsString(item.Data.Value)) value=this.GetKValue(kItem,item.Data.Value);
|
|
45056
|
+
if (!IFrameSplitOperator.IsNumber(value)) continue;
|
|
45057
|
+
|
|
45058
|
+
if (range.Max==null) range.Max=value;
|
|
45059
|
+
else if (range.Max<value) range.Max=value;
|
|
45060
|
+
if (range.Min==null) range.Min=value;
|
|
45061
|
+
else if (range.Min>value) range.Min=value;
|
|
44908
45062
|
}
|
|
44909
45063
|
}
|
|
44910
45064
|
|
|
@@ -45171,6 +45325,8 @@ function ChartMultiSVGIconV2()
|
|
|
45171
45325
|
this.IconRect=[]; //0=序号,1=区域
|
|
45172
45326
|
|
|
45173
45327
|
this.MapCache=null; //key=date/date-time value={ Data:[] }
|
|
45328
|
+
this.GetKValue=ChartData.GetKValue;
|
|
45329
|
+
|
|
45174
45330
|
|
|
45175
45331
|
this.BuildKey=function(item)
|
|
45176
45332
|
{
|
|
@@ -45285,28 +45441,7 @@ function ChartMultiSVGIconV2()
|
|
|
45285
45441
|
|
|
45286
45442
|
this.Canvas.restore();
|
|
45287
45443
|
}
|
|
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
|
-
|
|
45444
|
+
|
|
45310
45445
|
this.DrawItem=function(groupItem, kItem, x, drawInfo)
|
|
45311
45446
|
{
|
|
45312
45447
|
if (!IFrameSplitOperator.IsNonEmptyArray(groupItem.Data)) return;
|
|
@@ -61262,24 +61397,29 @@ function DynamicChartTitlePainting()
|
|
|
61262
61397
|
|
|
61263
61398
|
this.ForamtMultiPointTitle=function(dataIndex, dataInfo)
|
|
61264
61399
|
{
|
|
61265
|
-
if (!
|
|
61400
|
+
if (!dataInfo.GetItemCallback) return null;
|
|
61401
|
+
if (!dataInfo.Data || !IFrameSplitOperator.IsNonEmptyArray(dataInfo.Data.Data)) return null;
|
|
61402
|
+
var kItem=dataInfo.Data.Data[dataIndex];
|
|
61403
|
+
if (!kItem) return null;
|
|
61404
|
+
|
|
61405
|
+
var group=dataInfo.GetItemCallback(kItem);
|
|
61406
|
+
if (!group || !IFrameSplitOperator.IsNonEmptyArray(group.Data)) return null;
|
|
61266
61407
|
|
|
61267
61408
|
var aryText=[];
|
|
61268
|
-
for(var i=0;i<
|
|
61409
|
+
for(var i=0;i<group.Data.length;++i)
|
|
61269
61410
|
{
|
|
61270
|
-
var
|
|
61271
|
-
|
|
61272
|
-
|
|
61273
|
-
|
|
61274
|
-
|
|
61275
|
-
|
|
61276
|
-
|
|
61277
|
-
|
|
61278
|
-
|
|
61279
|
-
|
|
61280
|
-
|
|
61281
|
-
|
|
61282
|
-
}
|
|
61411
|
+
var item=group.Data[i];
|
|
61412
|
+
var config=item.ColorConfig;
|
|
61413
|
+
|
|
61414
|
+
var color=null;
|
|
61415
|
+
if (config.BGColor) color=config.BGColor;
|
|
61416
|
+
else if (config.Color) color=config.Color;
|
|
61417
|
+
|
|
61418
|
+
if (config.Name) aryText.push({ Text:`${config.Name}:`, Color:color });
|
|
61419
|
+
|
|
61420
|
+
var value=item.Data.Value;
|
|
61421
|
+
if (IFrameSplitOperator.IsString(item.Data.Value)) value=ChartData.GetKValue(kItem, item.Data.Value);
|
|
61422
|
+
aryText.push({ Text:this.FormatValue(value, dataInfo), Color:color});
|
|
61283
61423
|
}
|
|
61284
61424
|
|
|
61285
61425
|
if (!IFrameSplitOperator.IsNonEmptyArray(aryText)) return null;
|
|
@@ -62050,6 +62190,11 @@ function DynamicChartTitlePainting()
|
|
|
62050
62190
|
aryText=this.FromatStackedBarTitle(value, item);
|
|
62051
62191
|
if (!aryText) continue;
|
|
62052
62192
|
}
|
|
62193
|
+
else if (item.DataType=="ChartMultiPoint")
|
|
62194
|
+
{
|
|
62195
|
+
aryText=this.ForamtMultiPointTitle(dataIndex, item);
|
|
62196
|
+
if (!aryText) continue;
|
|
62197
|
+
}
|
|
62053
62198
|
else
|
|
62054
62199
|
{
|
|
62055
62200
|
valueText=this.FormatValue(value,item);
|
|
@@ -84030,18 +84175,18 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
84030
84175
|
{
|
|
84031
84176
|
var pixelTatio = GetDevicePixelRatio(); //x,y 需要乘以放大倍速
|
|
84032
84177
|
var frameId=this.Frame.PtInFrame(x*pixelTatio,y*pixelTatio);
|
|
84033
|
-
this.PopupRightMenuV2({X:e.offsetX, Y:e.offsetY, FrameID:frameId}, e);
|
|
84178
|
+
this.PopupRightMenuV2({X:e.offsetX, Y:e.offsetY, FrameID:frameId, CursorIndex:this.CursorIndex, Point:{ X:x*pixelTatio, Y:y*pixelTatio}}, e);
|
|
84034
84179
|
|
|
84035
84180
|
var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CONTEXT_MENU);
|
|
84036
84181
|
if (event)
|
|
84037
84182
|
{
|
|
84038
|
-
var data={ X:x, Y:y, Event:e, FrameID:frameId };
|
|
84183
|
+
var data={ X:x, Y:y, Event:e, FrameID:frameId, Point:{ X:x*pixelTatio, Y:y*pixelTatio}, CursorIndex:this.CursorIndex, };
|
|
84039
84184
|
event.Callback(event,data,this);
|
|
84040
84185
|
}
|
|
84041
84186
|
}
|
|
84042
84187
|
|
|
84043
84188
|
//右键菜单数据
|
|
84044
|
-
this.GetRightMenuData=function(frameID)
|
|
84189
|
+
this.GetRightMenuData=function(frameID, option)
|
|
84045
84190
|
{
|
|
84046
84191
|
var windowCount=this.Frame.SubFrame.length; //窗口个数
|
|
84047
84192
|
var klineChart=this.ChartPaint[0];
|
|
@@ -84084,6 +84229,17 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
84084
84229
|
var bPopMinuteChart=false;
|
|
84085
84230
|
if (this.PopMinuteChart) bPopMinuteChart=true;
|
|
84086
84231
|
|
|
84232
|
+
var kItem=null;
|
|
84233
|
+
if (frameID>=0 && option && IFrameSplitOperator.IsNumber(option.CursorIndex))
|
|
84234
|
+
{
|
|
84235
|
+
var kData=this.GetKData();
|
|
84236
|
+
if (kData && IFrameSplitOperator.IsNonEmptyArray(kData.Data))
|
|
84237
|
+
{
|
|
84238
|
+
var dataIndex=kData.DataOffset+option.CursorIndex;
|
|
84239
|
+
if (dataIndex>=0 && dataIndex<kData.Data.length) kItem=kData.Data[dataIndex];
|
|
84240
|
+
}
|
|
84241
|
+
}
|
|
84242
|
+
|
|
84087
84243
|
var aryMenu=
|
|
84088
84244
|
[
|
|
84089
84245
|
{
|
|
@@ -84366,6 +84522,17 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
84366
84522
|
}
|
|
84367
84523
|
}
|
|
84368
84524
|
}
|
|
84525
|
+
else if (item.Name=="其他设置")
|
|
84526
|
+
{
|
|
84527
|
+
if (kItem)
|
|
84528
|
+
{
|
|
84529
|
+
var bLocked=this.IsLockCorssCursor();
|
|
84530
|
+
if (bLocked)
|
|
84531
|
+
item.SubMenu.push({ Name:"锁十字光标", Data:{ ID: JSCHART_MENU_ID.CMD_UNLOCK_CROSSCURSOR }, Checked:bLocked });
|
|
84532
|
+
else
|
|
84533
|
+
item.SubMenu.push({ Name:"锁十字光标", Data:{ ID: JSCHART_MENU_ID.CMD_LOCK_CROSSCURSOR, Args:[{ KItem:{Date:kItem.Date, Time:kItem.Time}, Draw:true }] }, Checked:bLocked });
|
|
84534
|
+
}
|
|
84535
|
+
}
|
|
84369
84536
|
}
|
|
84370
84537
|
|
|
84371
84538
|
return aryMenu;
|
|
@@ -85969,19 +86136,36 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
85969
86136
|
if (option && option.Draw) this.Draw();
|
|
85970
86137
|
}
|
|
85971
86138
|
|
|
86139
|
+
//option={ KItem:{ Date:, Time:}}
|
|
85972
86140
|
this.LockCorssCursor=function(option)
|
|
85973
86141
|
{
|
|
85974
|
-
if (
|
|
85975
|
-
|
|
85976
|
-
|
|
86142
|
+
if (option && option.KItem) //指定日期时间
|
|
86143
|
+
{
|
|
86144
|
+
var kData=this.GetKData();
|
|
86145
|
+
if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return false;
|
|
85977
86146
|
|
|
85978
|
-
|
|
85979
|
-
|
|
85980
|
-
|
|
86147
|
+
var kItem={ Date:option.KItem.Date, Time:option.KItem.Time, Index:-1};
|
|
86148
|
+
kData.FindDataIndexByDateTime([kItem]);
|
|
86149
|
+
if (kItem.Index<0) return false;
|
|
85981
86150
|
|
|
85982
|
-
|
|
85983
|
-
|
|
85984
|
-
|
|
86151
|
+
var xItem=this.GlobalOption.LockCorssCursor.X;
|
|
86152
|
+
xItem.KLine={ DataIndex:kItem.Index, Date:kItem.Date, Time:kItem.Time };
|
|
86153
|
+
xItem.Enable=true;
|
|
86154
|
+
}
|
|
86155
|
+
else
|
|
86156
|
+
{
|
|
86157
|
+
if (this.CursorIndex<0) return false;
|
|
86158
|
+
var kData=this.GetKData();
|
|
86159
|
+
if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return false;
|
|
86160
|
+
|
|
86161
|
+
var dataIndex=kData.DataOffset+parseInt(this.CursorIndex.toFixed(0));
|
|
86162
|
+
var kItem=kData.Data[dataIndex];
|
|
86163
|
+
if (!kItem) return false;
|
|
86164
|
+
|
|
86165
|
+
var xItem=this.GlobalOption.LockCorssCursor.X;
|
|
86166
|
+
xItem.KLine={ DataIndex:dataIndex, Date:kItem.Date, Time:kItem.Time };
|
|
86167
|
+
xItem.Enable=true;
|
|
86168
|
+
}
|
|
85985
86169
|
|
|
85986
86170
|
if (option && option.Draw) this.Draw();
|
|
85987
86171
|
return true;
|
|
@@ -86004,7 +86188,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
86004
86188
|
if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return position;
|
|
86005
86189
|
|
|
86006
86190
|
position.CursorIndex=xItem.KLine.DataIndex-kData.DataOffset;
|
|
86007
|
-
position.LastPoint.X=this.Frame.GetXFromIndex(position.CursorIndex);
|
|
86191
|
+
position.LastPoint.X=this.Frame.GetXFromIndex(position.CursorIndex, false);
|
|
86008
86192
|
|
|
86009
86193
|
var border=this.Frame.ChartBorder.GetBorder();
|
|
86010
86194
|
if (position.LastPoint.Y<border.Top || position.LastPoint.Y>border.Bottom) //超出图形框子, 调整为收盘价
|
|
@@ -88077,18 +88261,18 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
|
|
|
88077
88261
|
{
|
|
88078
88262
|
var pixelTatio = GetDevicePixelRatio(); //x,y 需要乘以放大倍速
|
|
88079
88263
|
var frameId=this.Frame.PtInFrame(x*pixelTatio,y*pixelTatio);
|
|
88080
|
-
this.PopupRightMenuV2({X:e.offsetX, Y:e.offsetY, FrameID:frameId}, e);
|
|
88264
|
+
this.PopupRightMenuV2({X:e.offsetX, Y:e.offsetY, FrameID:frameId, CursorIndex:this.CursorIndex, Point:{ X:x*pixelTatio, Y:y*pixelTatio} }, e);
|
|
88081
88265
|
|
|
88082
88266
|
var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CONTEXT_MENU);
|
|
88083
88267
|
if (event)
|
|
88084
88268
|
{
|
|
88085
|
-
var data={ X:x, Y:y, Event:e, FrameID:frameId };
|
|
88269
|
+
var data={ X:x, Y:y, Event:e, FrameID:frameId, CursorIndex:this.CursorIndex, Point:{ X:x*pixelTatio, Y:y*pixelTatio} };
|
|
88086
88270
|
event.Callback(event,data,this);
|
|
88087
88271
|
}
|
|
88088
88272
|
}
|
|
88089
88273
|
|
|
88090
88274
|
//右键菜单数据
|
|
88091
|
-
this.GetRightMenuData=function(frameID)
|
|
88275
|
+
this.GetRightMenuData=function(frameID, option)
|
|
88092
88276
|
{
|
|
88093
88277
|
var windowCount=this.Frame.SubFrame.length; //窗口个数
|
|
88094
88278
|
|
|
@@ -88215,11 +88399,11 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
|
|
|
88215
88399
|
}
|
|
88216
88400
|
|
|
88217
88401
|
|
|
88218
|
-
|
|
88402
|
+
|
|
88219
88403
|
for(var i=0;i<aryMenu.length;++i)
|
|
88220
88404
|
{
|
|
88221
88405
|
var item=aryMenu[i];
|
|
88222
|
-
if (item.Name=="叠加品种")
|
|
88406
|
+
if (item.Name=="叠加品种") //删除菜单
|
|
88223
88407
|
{
|
|
88224
88408
|
for(var j=0;j<item.SubMenu.length;++j)
|
|
88225
88409
|
{
|
|
@@ -88231,6 +88415,10 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
|
|
|
88231
88415
|
}
|
|
88232
88416
|
}
|
|
88233
88417
|
}
|
|
88418
|
+
else if (item.Name=="其他设置")
|
|
88419
|
+
{
|
|
88420
|
+
|
|
88421
|
+
}
|
|
88234
88422
|
}
|
|
88235
88423
|
|
|
88236
88424
|
return aryMenu;
|
|
@@ -123035,16 +123223,18 @@ function ScriptIndex(name,script,args,option)
|
|
|
123035
123223
|
chart.ChartBorder=hqChart.Frame.SubFrame[windowIndex].Frame.ChartBorder;
|
|
123036
123224
|
chart.ChartFrame=hqChart.Frame.SubFrame[windowIndex].Frame;
|
|
123037
123225
|
|
|
123038
|
-
chart.Data=hqChart.ChartPaint[0].Data
|
|
123226
|
+
chart.Data=hqChart.ChartPaint[0].Data; //绑定K线
|
|
123039
123227
|
chart.PointGroup=varItem.Draw.DrawData;
|
|
123040
123228
|
if (varItem.Draw.Name) chart.Name=varItem.Draw.Name;
|
|
123229
|
+
chart.BuildCacheData();
|
|
123230
|
+
|
|
123041
123231
|
this.SetChartIndexName(chart);
|
|
123042
123232
|
hqChart.ChartPaint.push(chart);
|
|
123043
123233
|
|
|
123044
|
-
|
|
123234
|
+
var titleIndex=windowIndex+1;
|
|
123045
123235
|
var titleData=new DynamicTitleData(chart.Data,chart.Name, null);
|
|
123046
123236
|
titleData.DataType="ChartMultiPoint";
|
|
123047
|
-
titleData.
|
|
123237
|
+
titleData.GetItemCallback=(kItem)=>{ return chart.GetItem(kItem); }
|
|
123048
123238
|
hqChart.TitlePaint[titleIndex].Data[i]=titleData;
|
|
123049
123239
|
}
|
|
123050
123240
|
|
|
@@ -124759,7 +124949,7 @@ function OverlayScriptIndex(name,script,args,option)
|
|
|
124759
124949
|
frame.ChartPaint.push(chart);
|
|
124760
124950
|
}
|
|
124761
124951
|
|
|
124762
|
-
this.CreateMultiPoint=function(hqChart,windowIndex,varItem,
|
|
124952
|
+
this.CreateMultiPoint=function(hqChart,windowIndex,varItem,id)
|
|
124763
124953
|
{
|
|
124764
124954
|
var overlayIndex=this.OverlayIndex;
|
|
124765
124955
|
var frame=overlayIndex.Frame;
|
|
@@ -124772,6 +124962,17 @@ function OverlayScriptIndex(name,script,args,option)
|
|
|
124772
124962
|
|
|
124773
124963
|
chart.Data=hqChart.ChartPaint[0].Data;//绑定K线
|
|
124774
124964
|
chart.PointGroup=varItem.Draw.DrawData;
|
|
124965
|
+
chart.BuildCacheData();
|
|
124966
|
+
|
|
124967
|
+
var titleIndex=windowIndex+1;
|
|
124968
|
+
var titlePaint=hqChart.TitlePaint[titleIndex];
|
|
124969
|
+
var titleData=new DynamicTitleData(chart.Data,varItem.Name,null);
|
|
124970
|
+
titleData.DataType="ChartMultiPoint";
|
|
124971
|
+
titleData.GetItemCallback=(kItem)=>{ return chart.GetItem(kItem); }
|
|
124972
|
+
titlePaint.OverlayIndex.get(overlayIndex.Identify).Data[id]=titleData;
|
|
124973
|
+
|
|
124974
|
+
this.SetChartIndexName(chart);
|
|
124975
|
+
|
|
124775
124976
|
frame.ChartPaint.push(chart);
|
|
124776
124977
|
}
|
|
124777
124978
|
|
|
@@ -125968,14 +126169,7 @@ function APIScriptIndex(name,script,args,option, isOverlay)
|
|
|
125968
126169
|
drawItem.Text=draw.Text;
|
|
125969
126170
|
drawItem.Name=draw.Name;
|
|
125970
126171
|
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
|
-
}
|
|
126172
|
+
drawItem.DrawData=draw.DrawData;
|
|
125979
126173
|
|
|
125980
126174
|
outVarItem.Draw=drawItem;
|
|
125981
126175
|
result.push(outVarItem);
|
|
@@ -126522,14 +126716,7 @@ function APIScriptIndex(name,script,args,option, isOverlay)
|
|
|
126522
126716
|
drawItem.Text=draw.Text;
|
|
126523
126717
|
drawItem.Name=draw.Name;
|
|
126524
126718
|
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
|
-
}
|
|
126719
|
+
drawItem.DrawData=draw.DrawData;
|
|
126533
126720
|
|
|
126534
126721
|
outVarItem.Draw=drawItem;
|
|
126535
126722
|
result.push(outVarItem);
|
|
@@ -142385,7 +142572,7 @@ function ScrollBarBGChart()
|
|
|
142385
142572
|
|
|
142386
142573
|
|
|
142387
142574
|
|
|
142388
|
-
var HQCHART_VERSION="1.1.
|
|
142575
|
+
var HQCHART_VERSION="1.1.14335";
|
|
142389
142576
|
|
|
142390
142577
|
function PrintHQChartVersion()
|
|
142391
142578
|
{
|