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
package/src/jscommon/umychart.js
CHANGED
|
@@ -2846,6 +2846,9 @@ var JSCHART_MENU_ID=
|
|
|
2846
2846
|
CMD_MODIFY_INDEX_PARAM:45, //指标删除修改 [windowIndex, ]
|
|
2847
2847
|
CMD_MODIFY_OVERLAY_INDEX_PARAM:46, //叠加指标修改 [windowIndex, ID ]
|
|
2848
2848
|
|
|
2849
|
+
CMD_LOCK_CROSSCURSOR:47, //锁十字光标
|
|
2850
|
+
CMD_UNLOCK_CROSSCURSOR:48, //解锁十字光标
|
|
2851
|
+
|
|
2849
2852
|
|
|
2850
2853
|
CMD_REPORT_CHANGE_BLOCK_ID:100, //报价列表 切换板块ID
|
|
2851
2854
|
CMD_REPORT_COLUMN_SORT_ID:101, //报价列表 表头排序 Arg[列序号, 排序方向]
|
|
@@ -10187,6 +10190,12 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
|
|
|
10187
10190
|
var sendData={ e:null, WindowIndex:param, Type:2, Identify:aryArgs[1] };
|
|
10188
10191
|
this.ShowModifyIndexParamDialog(sendData);
|
|
10189
10192
|
break;
|
|
10193
|
+
case JSCHART_MENU_ID.CMD_LOCK_CROSSCURSOR:
|
|
10194
|
+
if (srcParam) this.LockCorssCursor(srcParam);
|
|
10195
|
+
break;
|
|
10196
|
+
case JSCHART_MENU_ID.CMD_UNLOCK_CROSSCURSOR:
|
|
10197
|
+
if (this.IsLockCorssCursor()) this.UnlockCorssCursor({ Draw:true })
|
|
10198
|
+
break;
|
|
10190
10199
|
}
|
|
10191
10200
|
}
|
|
10192
10201
|
|
|
@@ -10273,13 +10282,13 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
|
|
|
10273
10282
|
if (!this.JSPopMenu) return;
|
|
10274
10283
|
var x=data.X, y=data.Y;
|
|
10275
10284
|
var frameID=data.FrameID;
|
|
10276
|
-
var menuData={ Menu:this.GetRightMenuData(frameID), Position:JSPopMenu.POSITION_ID.RIGHT_MENU_ID };
|
|
10285
|
+
var menuData={ Menu:this.GetRightMenuData(frameID, data), Position:JSPopMenu.POSITION_ID.RIGHT_MENU_ID };
|
|
10277
10286
|
menuData.ClickCallback=(data)=>{ this.OnClickRightMenu(data); }
|
|
10278
10287
|
|
|
10279
10288
|
var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CREATE_RIGHT_MENU);
|
|
10280
10289
|
if (event && event.Callback)
|
|
10281
10290
|
{
|
|
10282
|
-
var sendData={ MenuData:menuData, FrameID:frameID };
|
|
10291
|
+
var sendData={ MenuData:menuData, FrameID:frameID, Data:data };
|
|
10283
10292
|
event.Callback(event, sendData, this);
|
|
10284
10293
|
}
|
|
10285
10294
|
|
|
@@ -20696,9 +20705,9 @@ function HQTradeFrame()
|
|
|
20696
20705
|
return null;
|
|
20697
20706
|
}
|
|
20698
20707
|
|
|
20699
|
-
this.GetXFromIndex=function(index)
|
|
20708
|
+
this.GetXFromIndex=function(index,isLimit)
|
|
20700
20709
|
{
|
|
20701
|
-
return this.SubFrame[0].Frame.GetXFromIndex(index);
|
|
20710
|
+
return this.SubFrame[0].Frame.GetXFromIndex(index,isLimit);
|
|
20702
20711
|
}
|
|
20703
20712
|
|
|
20704
20713
|
this.GetYFromData=function(value)
|
|
@@ -23698,15 +23707,15 @@ function ChartData()
|
|
|
23698
23707
|
this.FindDataIndexByDateTime=function(aryDateTime) //aryDateTime=[ { Date:, Time:, Index:-1 }, ......]
|
|
23699
23708
|
{
|
|
23700
23709
|
var findCount=0;
|
|
23701
|
-
for(var i
|
|
23710
|
+
for(var i=0;i<aryDateTime.length;++i)
|
|
23702
23711
|
{
|
|
23703
23712
|
aryDateTime[i].Index=-1;
|
|
23704
23713
|
}
|
|
23705
23714
|
|
|
23706
|
-
for(var i
|
|
23715
|
+
for(var i=0;i<this.Data.length;++i)
|
|
23707
23716
|
{
|
|
23708
23717
|
var item=this.Data[i];
|
|
23709
|
-
for(var j
|
|
23718
|
+
for(var j=0;j<aryDateTime.length;++j)
|
|
23710
23719
|
{
|
|
23711
23720
|
var findItem=aryDateTime[j];
|
|
23712
23721
|
if (findItem.Index>=0) continue;
|
|
@@ -23715,7 +23724,7 @@ function ChartData()
|
|
|
23715
23724
|
{
|
|
23716
23725
|
if (findItem.Date==item.Date && findItem.Time==item.Time)
|
|
23717
23726
|
{
|
|
23718
|
-
findItem.Index=
|
|
23727
|
+
findItem.Index=i;
|
|
23719
23728
|
++findCount;
|
|
23720
23729
|
break;
|
|
23721
23730
|
}
|
|
@@ -23724,7 +23733,7 @@ function ChartData()
|
|
|
23724
23733
|
{
|
|
23725
23734
|
if (findItem.Date==item.Date)
|
|
23726
23735
|
{
|
|
23727
|
-
findItem.Index=
|
|
23736
|
+
findItem.Index=i;
|
|
23728
23737
|
++findCount;
|
|
23729
23738
|
break;
|
|
23730
23739
|
}
|
|
@@ -24348,6 +24357,30 @@ ChartData.GetPeriodName=function(period)
|
|
|
24348
24357
|
}
|
|
24349
24358
|
|
|
24350
24359
|
|
|
24360
|
+
ChartData.GetKValue=function(kItem, valueName)
|
|
24361
|
+
{
|
|
24362
|
+
if (!kItem) return null;
|
|
24363
|
+
|
|
24364
|
+
switch(valueName)
|
|
24365
|
+
{
|
|
24366
|
+
case "HIGH":
|
|
24367
|
+
case "H":
|
|
24368
|
+
return kItem.High;
|
|
24369
|
+
case "L":
|
|
24370
|
+
case "LOW":
|
|
24371
|
+
return kItem.Low;
|
|
24372
|
+
case "C":
|
|
24373
|
+
case "CLOSE":
|
|
24374
|
+
return kItem.Close;
|
|
24375
|
+
case "O":
|
|
24376
|
+
case "OPEN":
|
|
24377
|
+
return KItem.Open;
|
|
24378
|
+
default:
|
|
24379
|
+
return null;
|
|
24380
|
+
}
|
|
24381
|
+
}
|
|
24382
|
+
|
|
24383
|
+
|
|
24351
24384
|
|
|
24352
24385
|
function TooltipData() //提示信息
|
|
24353
24386
|
{
|
|
@@ -31274,15 +31307,7 @@ function ChartOverlayKLine()
|
|
|
31274
31307
|
|
|
31275
31308
|
if (!this.MainData || !this.Data) return range;
|
|
31276
31309
|
|
|
31277
|
-
var firstOpen=
|
|
31278
|
-
for(var i=this.Data.DataOffset,j=0;i<this.MainData.Data.length && j<xPointCount;++i,++j)
|
|
31279
|
-
{
|
|
31280
|
-
var data=this.MainData.Data[i];
|
|
31281
|
-
if (data.Open==null || data.High==null || data.Low==null || data.Close==null) continue;
|
|
31282
|
-
firstOpen=data.Close;
|
|
31283
|
-
break;
|
|
31284
|
-
}
|
|
31285
|
-
|
|
31310
|
+
var firstOpen=this.GetFirstOpen();
|
|
31286
31311
|
if (firstOpen==null) return range;
|
|
31287
31312
|
|
|
31288
31313
|
var firstOverlayOpen=null;
|
|
@@ -40880,7 +40905,7 @@ function ChartMultiLine()
|
|
|
40880
40905
|
}
|
|
40881
40906
|
}
|
|
40882
40907
|
|
|
40883
|
-
//
|
|
40908
|
+
// 多个点集合 支持横屏
|
|
40884
40909
|
function ChartMultiPoint()
|
|
40885
40910
|
{
|
|
40886
40911
|
this.newMethod=IChartPainting; //派生
|
|
@@ -40888,98 +40913,219 @@ function ChartMultiPoint()
|
|
|
40888
40913
|
delete this.newMethod;
|
|
40889
40914
|
|
|
40890
40915
|
this.ClassName="ChartMultiPoint";
|
|
40891
|
-
this.PointGroup=[]; // [ {Point:[ {
|
|
40916
|
+
this.PointGroup=[]; // [ {Point:[ {Date, Time, Value }, ], Color: }, ]
|
|
40892
40917
|
|
|
40893
40918
|
|
|
40894
40919
|
this.IsHScreen=false;
|
|
40895
40920
|
this.LineWidth=1;
|
|
40896
40921
|
this.PointRadius=5;
|
|
40897
40922
|
|
|
40923
|
+
this.MapCache=null; //key=date/date-time value={ Data:[] }
|
|
40924
|
+
this.GetKValue=ChartData.GetKValue;
|
|
40925
|
+
|
|
40926
|
+
this.BuildKey=function(item)
|
|
40927
|
+
{
|
|
40928
|
+
if (IFrameSplitOperator.IsNumber(item.Time)) return `${item.Date}-${item.Time}`;
|
|
40929
|
+
else return item.Date;
|
|
40930
|
+
}
|
|
40931
|
+
|
|
40932
|
+
this.GetItem=function(kItem)
|
|
40933
|
+
{
|
|
40934
|
+
if (!this.MapCache || this.MapCache.size<=0) return null;
|
|
40935
|
+
|
|
40936
|
+
var key=this.BuildKey(kItem);
|
|
40937
|
+
if (!this.MapCache.has(key)) return null;
|
|
40938
|
+
|
|
40939
|
+
return this.MapCache.get(key);
|
|
40940
|
+
}
|
|
40941
|
+
|
|
40942
|
+
this.BuildCacheData=function()
|
|
40943
|
+
{
|
|
40944
|
+
var mapData=new Map();
|
|
40945
|
+
this.MapCache=mapData;
|
|
40946
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(this.PointGroup)) return;
|
|
40947
|
+
|
|
40948
|
+
for(var i=0; i<this.PointGroup.length; ++i)
|
|
40949
|
+
{
|
|
40950
|
+
var groupItem=this.PointGroup[i];
|
|
40951
|
+
if (!groupItem || !IFrameSplitOperator.IsNonEmptyArray(groupItem.Point)) continue;
|
|
40952
|
+
|
|
40953
|
+
var clrConfig= { Color:groupItem.Color, BGColor:groupItem.BGColor, LineWidth:this.LineWidth, Radius:this.PointRadius, Name:groupItem.Name };
|
|
40954
|
+
if (IFrameSplitOperator.IsNumber(groupItem.PointRadius)) clrConfig.Radius=groupItem.PointRadius;
|
|
40955
|
+
|
|
40956
|
+
for(var j=0; j<groupItem.Point.length; ++j)
|
|
40957
|
+
{
|
|
40958
|
+
var point=groupItem.Point[j];
|
|
40959
|
+
var key=this.BuildKey(point);
|
|
40960
|
+
|
|
40961
|
+
var item={ Data:point, ColorConfig:clrConfig }
|
|
40962
|
+
if (mapData.has(key))
|
|
40963
|
+
{
|
|
40964
|
+
var mapItem=mapData.get(key);
|
|
40965
|
+
mapItem.Data.push(item);
|
|
40966
|
+
}
|
|
40967
|
+
else
|
|
40968
|
+
{
|
|
40969
|
+
mapData.set(key,{ Data:[item] });
|
|
40970
|
+
}
|
|
40971
|
+
}
|
|
40972
|
+
}
|
|
40973
|
+
}
|
|
40974
|
+
|
|
40898
40975
|
this.Draw=function()
|
|
40899
40976
|
{
|
|
40900
|
-
if (!this.IsShow || this.ChartFrame.IsMinSize) return;
|
|
40901
|
-
if (
|
|
40977
|
+
if (!this.IsShow || this.ChartFrame.IsMinSize || !this.IsVisible) return;
|
|
40978
|
+
if (this.IsShowIndexTitleOnly()) return;
|
|
40979
|
+
if (this.IsHideScriptIndex()) return;
|
|
40980
|
+
|
|
40981
|
+
if (!this.Data || !IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return; //k线数据
|
|
40902
40982
|
if (!IFrameSplitOperator.IsNonEmptyArray(this.PointGroup)) return;
|
|
40983
|
+
if (!this.MapCache || this.MapCache.size<=0) return;
|
|
40903
40984
|
|
|
40904
40985
|
this.IsHScreen=(this.ChartFrame.IsHScreen===true);
|
|
40905
40986
|
var xPointCount=this.ChartFrame.XPointCount;
|
|
40906
|
-
var
|
|
40907
|
-
var
|
|
40987
|
+
var dataWidth=this.ChartFrame.DataWidth;
|
|
40988
|
+
var distanceWidth=this.ChartFrame.DistanceWidth;
|
|
40989
|
+
var isMinute=this.IsMinuteFrame();
|
|
40990
|
+
|
|
40991
|
+
var border=this.GetBorder();
|
|
40992
|
+
if (this.IsHScreen)
|
|
40993
|
+
{
|
|
40994
|
+
var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
|
|
40995
|
+
var chartright=border.BottomEx;
|
|
40996
|
+
var chartLeft=border.TopEx;
|
|
40997
|
+
}
|
|
40998
|
+
else
|
|
40999
|
+
{
|
|
41000
|
+
var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
|
|
41001
|
+
var chartright=border.RightEx;
|
|
41002
|
+
var chartLeft=border.LeftEx;
|
|
41003
|
+
}
|
|
41004
|
+
|
|
41005
|
+
//计算所有的点位置
|
|
41006
|
+
var mapPoint=new Map();
|
|
41007
|
+
for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length && j<xPointCount;++i,++j,xOffset+=(dataWidth+distanceWidth))
|
|
41008
|
+
{
|
|
41009
|
+
var kItem=this.Data.Data[i];
|
|
41010
|
+
var key=this.BuildKey(kItem);
|
|
41011
|
+
if (!this.MapCache.has(key)) continue;
|
|
41012
|
+
var mapItem=this.MapCache.get(key);
|
|
41013
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(mapItem.Data)) continue;
|
|
41014
|
+
|
|
41015
|
+
if (isMinute)
|
|
41016
|
+
{
|
|
41017
|
+
var x=this.ChartFrame.GetXFromIndex(j);
|
|
41018
|
+
}
|
|
41019
|
+
else
|
|
41020
|
+
{
|
|
41021
|
+
var left=xOffset;
|
|
41022
|
+
var right=xOffset+dataWidth;
|
|
41023
|
+
if (right>chartright) break;
|
|
41024
|
+
var x=left+(right-left)/2;
|
|
41025
|
+
}
|
|
41026
|
+
|
|
41027
|
+
this.CalculateItem(mapItem, kItem, x, mapPoint);
|
|
41028
|
+
}
|
|
41029
|
+
|
|
41030
|
+
if (mapPoint.size<=0) return;
|
|
40908
41031
|
|
|
40909
41032
|
this.Canvas.save();
|
|
40910
41033
|
this.ClipClient(this.IsHScreen);
|
|
40911
|
-
|
|
40912
|
-
|
|
41034
|
+
|
|
41035
|
+
this.DrawAllPoint(mapPoint);
|
|
41036
|
+
|
|
41037
|
+
this.Canvas.restore();
|
|
41038
|
+
}
|
|
41039
|
+
|
|
41040
|
+
this.CalculateItem=function(groupItem, kItem, x, mapPoint)
|
|
41041
|
+
{
|
|
41042
|
+
for(var i=0; i<groupItem.Data.length; ++i)
|
|
40913
41043
|
{
|
|
40914
|
-
var item=
|
|
40915
|
-
var
|
|
40916
|
-
|
|
40917
|
-
|
|
40918
|
-
|
|
40919
|
-
|
|
40920
|
-
|
|
41044
|
+
var item=groupItem.Data[i];
|
|
41045
|
+
var value=item.Data.Value;
|
|
41046
|
+
if (IFrameSplitOperator.IsString(item.Data.Value)) value=this.GetKValue(kItem,item.Data.Value);
|
|
41047
|
+
if (!IFrameSplitOperator.IsNumber(value)) continue;
|
|
41048
|
+
|
|
41049
|
+
var y=this.ChartFrame.GetYFromData(value,false);
|
|
41050
|
+
|
|
41051
|
+
var strConfig=JSON.stringify(item.ColorConfig);
|
|
41052
|
+
if (!mapPoint.has(strConfig)) mapPoint.set(strConfig, { AryPoint:[]});
|
|
41053
|
+
var mapItem=mapPoint.get(strConfig);
|
|
41054
|
+
|
|
41055
|
+
mapItem.AryPoint.push({ X:x, Y:y, Data:item });
|
|
41056
|
+
}
|
|
41057
|
+
}
|
|
41058
|
+
|
|
41059
|
+
this.DrawAllPoint=function(mapPoint)
|
|
41060
|
+
{
|
|
41061
|
+
var pixelRatio=GetDevicePixelRatio();
|
|
41062
|
+
|
|
41063
|
+
for(var mapItem of mapPoint)
|
|
41064
|
+
{
|
|
41065
|
+
var aryPoint=mapItem[1].AryPoint;
|
|
41066
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(aryPoint)) continue;
|
|
41067
|
+
var config=null;
|
|
40921
41068
|
var path=new Path2D();
|
|
40922
41069
|
var count=0;
|
|
40923
|
-
|
|
40924
|
-
for(var j=0; j<item.Point.length; ++j)
|
|
41070
|
+
for(var i=0;i<aryPoint.length;++i)
|
|
40925
41071
|
{
|
|
40926
|
-
var
|
|
40927
|
-
if (!
|
|
40928
|
-
|
|
40929
|
-
var index=point.Index-offset;
|
|
40930
|
-
if (index>=0 && index<xPointCount)
|
|
40931
|
-
{
|
|
40932
|
-
var x=this.ChartFrame.GetXFromIndex(index);
|
|
40933
|
-
var y=this.ChartFrame.GetYFromData(point.Value, false);
|
|
41072
|
+
var item=aryPoint[i];
|
|
41073
|
+
if (!config) config=item.Data.ColorConfig;
|
|
40934
41074
|
|
|
40935
|
-
|
|
40936
|
-
|
|
40937
|
-
|
|
40938
|
-
|
|
40939
|
-
|
|
41075
|
+
var pointPath = new Path2D();
|
|
41076
|
+
if (this.IsHScreen)
|
|
41077
|
+
pointPath.arc(item.Y,item.X,config.Radius*pixelRatio,0,360,false);
|
|
41078
|
+
else
|
|
41079
|
+
pointPath.arc(item.X,item.Y,config.Radius*pixelRatio,0,360,false);
|
|
40940
41080
|
|
|
40941
|
-
|
|
40942
|
-
|
|
40943
|
-
}
|
|
41081
|
+
path.addPath(pointPath);
|
|
41082
|
+
++count;
|
|
40944
41083
|
}
|
|
40945
41084
|
|
|
40946
|
-
if (count>0 &&
|
|
41085
|
+
if (count>0 && config)
|
|
40947
41086
|
{
|
|
40948
|
-
|
|
40949
|
-
|
|
40950
|
-
|
|
41087
|
+
if (config.BGColor)
|
|
41088
|
+
{
|
|
41089
|
+
this.Canvas.fillStyle=config.BGColor; //背景填充颜色
|
|
41090
|
+
this.Canvas.fill(path);
|
|
41091
|
+
}
|
|
40951
41092
|
|
|
40952
|
-
if (
|
|
40953
|
-
|
|
41093
|
+
if (config.Color)
|
|
41094
|
+
{
|
|
41095
|
+
this.Canvas.lineWidth=config.LineWidth*pixelRatio;
|
|
41096
|
+
this.Canvas.strokeStyle=config.Color;
|
|
41097
|
+
this.Canvas.stroke(path);
|
|
41098
|
+
}
|
|
40954
41099
|
}
|
|
40955
|
-
|
|
40956
41100
|
}
|
|
40957
|
-
|
|
40958
|
-
this.Canvas.restore();
|
|
40959
41101
|
}
|
|
40960
41102
|
|
|
40961
41103
|
this.GetMaxMin=function()
|
|
40962
41104
|
{
|
|
40963
41105
|
var range={ Min:null, Max:null };
|
|
41106
|
+
if(!this.Data || !IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return range;
|
|
41107
|
+
if (!this.MapCache || this.MapCache.size<=0) return;
|
|
40964
41108
|
var xPointCount=this.ChartFrame.XPointCount;
|
|
40965
|
-
var start=this.Data.DataOffset;
|
|
40966
|
-
var end=start+xPointCount;
|
|
40967
41109
|
|
|
40968
|
-
for(var i=0;
|
|
41110
|
+
for(var i=this.Data.DataOffset,j=0, k=0;i<this.Data.Data.length && j<xPointCount;++i,++j)
|
|
40969
41111
|
{
|
|
40970
|
-
var
|
|
40971
|
-
|
|
41112
|
+
var kItem=this.Data.Data[i];
|
|
41113
|
+
var key=this.BuildKey(kItem);
|
|
41114
|
+
if (!this.MapCache.has(key)) continue;
|
|
41115
|
+
var mapItem=this.MapCache.get(key);
|
|
41116
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(mapItem.Data)) continue;
|
|
40972
41117
|
|
|
40973
|
-
for(
|
|
41118
|
+
for(k=0;k<mapItem.Data.length;++k)
|
|
40974
41119
|
{
|
|
40975
|
-
var
|
|
40976
|
-
|
|
40977
|
-
|
|
40978
|
-
|
|
40979
|
-
|
|
40980
|
-
|
|
40981
|
-
|
|
40982
|
-
|
|
41120
|
+
var item=mapItem.Data[k];
|
|
41121
|
+
var value=item.Data.Value;
|
|
41122
|
+
if (IFrameSplitOperator.IsString(item.Data.Value)) value=this.GetKValue(kItem,item.Data.Value);
|
|
41123
|
+
if (!IFrameSplitOperator.IsNumber(value)) continue;
|
|
41124
|
+
|
|
41125
|
+
if (range.Max==null) range.Max=value;
|
|
41126
|
+
else if (range.Max<value) range.Max=value;
|
|
41127
|
+
if (range.Min==null) range.Min=value;
|
|
41128
|
+
else if (range.Min>value) range.Min=value;
|
|
40983
41129
|
}
|
|
40984
41130
|
}
|
|
40985
41131
|
|
|
@@ -41246,6 +41392,8 @@ function ChartMultiSVGIconV2()
|
|
|
41246
41392
|
this.IconRect=[]; //0=序号,1=区域
|
|
41247
41393
|
|
|
41248
41394
|
this.MapCache=null; //key=date/date-time value={ Data:[] }
|
|
41395
|
+
this.GetKValue=ChartData.GetKValue;
|
|
41396
|
+
|
|
41249
41397
|
|
|
41250
41398
|
this.BuildKey=function(item)
|
|
41251
41399
|
{
|
|
@@ -41360,28 +41508,7 @@ function ChartMultiSVGIconV2()
|
|
|
41360
41508
|
|
|
41361
41509
|
this.Canvas.restore();
|
|
41362
41510
|
}
|
|
41363
|
-
|
|
41364
|
-
this.GetKValue=function(kItem, valueName)
|
|
41365
|
-
{
|
|
41366
|
-
switch(valueName)
|
|
41367
|
-
{
|
|
41368
|
-
case "HIGH":
|
|
41369
|
-
case "H":
|
|
41370
|
-
return kItem.High;
|
|
41371
|
-
case "L":
|
|
41372
|
-
case "LOW":
|
|
41373
|
-
return kItem.Low;
|
|
41374
|
-
case "C":
|
|
41375
|
-
case "CLOSE":
|
|
41376
|
-
return kItem.Close;
|
|
41377
|
-
case "O":
|
|
41378
|
-
case "OPEN":
|
|
41379
|
-
return KItem.Open;
|
|
41380
|
-
default:
|
|
41381
|
-
return null;
|
|
41382
|
-
}
|
|
41383
|
-
}
|
|
41384
|
-
|
|
41511
|
+
|
|
41385
41512
|
this.DrawItem=function(groupItem, kItem, x, drawInfo)
|
|
41386
41513
|
{
|
|
41387
41514
|
if (!IFrameSplitOperator.IsNonEmptyArray(groupItem.Data)) return;
|
|
@@ -57337,24 +57464,29 @@ function DynamicChartTitlePainting()
|
|
|
57337
57464
|
|
|
57338
57465
|
this.ForamtMultiPointTitle=function(dataIndex, dataInfo)
|
|
57339
57466
|
{
|
|
57340
|
-
if (!
|
|
57467
|
+
if (!dataInfo.GetItemCallback) return null;
|
|
57468
|
+
if (!dataInfo.Data || !IFrameSplitOperator.IsNonEmptyArray(dataInfo.Data.Data)) return null;
|
|
57469
|
+
var kItem=dataInfo.Data.Data[dataIndex];
|
|
57470
|
+
if (!kItem) return null;
|
|
57471
|
+
|
|
57472
|
+
var group=dataInfo.GetItemCallback(kItem);
|
|
57473
|
+
if (!group || !IFrameSplitOperator.IsNonEmptyArray(group.Data)) return null;
|
|
57341
57474
|
|
|
57342
57475
|
var aryText=[];
|
|
57343
|
-
for(var i=0;i<
|
|
57476
|
+
for(var i=0;i<group.Data.length;++i)
|
|
57344
57477
|
{
|
|
57345
|
-
var
|
|
57346
|
-
|
|
57347
|
-
|
|
57348
|
-
|
|
57349
|
-
|
|
57350
|
-
|
|
57351
|
-
|
|
57352
|
-
|
|
57353
|
-
|
|
57354
|
-
|
|
57355
|
-
|
|
57356
|
-
|
|
57357
|
-
}
|
|
57478
|
+
var item=group.Data[i];
|
|
57479
|
+
var config=item.ColorConfig;
|
|
57480
|
+
|
|
57481
|
+
var color=null;
|
|
57482
|
+
if (config.BGColor) color=config.BGColor;
|
|
57483
|
+
else if (config.Color) color=config.Color;
|
|
57484
|
+
|
|
57485
|
+
if (config.Name) aryText.push({ Text:`${config.Name}:`, Color:color });
|
|
57486
|
+
|
|
57487
|
+
var value=item.Data.Value;
|
|
57488
|
+
if (IFrameSplitOperator.IsString(item.Data.Value)) value=ChartData.GetKValue(kItem, item.Data.Value);
|
|
57489
|
+
aryText.push({ Text:this.FormatValue(value, dataInfo), Color:color});
|
|
57358
57490
|
}
|
|
57359
57491
|
|
|
57360
57492
|
if (!IFrameSplitOperator.IsNonEmptyArray(aryText)) return null;
|
|
@@ -58125,6 +58257,11 @@ function DynamicChartTitlePainting()
|
|
|
58125
58257
|
aryText=this.FromatStackedBarTitle(value, item);
|
|
58126
58258
|
if (!aryText) continue;
|
|
58127
58259
|
}
|
|
58260
|
+
else if (item.DataType=="ChartMultiPoint")
|
|
58261
|
+
{
|
|
58262
|
+
aryText=this.ForamtMultiPointTitle(dataIndex, item);
|
|
58263
|
+
if (!aryText) continue;
|
|
58264
|
+
}
|
|
58128
58265
|
else
|
|
58129
58266
|
{
|
|
58130
58267
|
valueText=this.FormatValue(value,item);
|
|
@@ -80105,18 +80242,18 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
80105
80242
|
{
|
|
80106
80243
|
var pixelTatio = GetDevicePixelRatio(); //x,y 需要乘以放大倍速
|
|
80107
80244
|
var frameId=this.Frame.PtInFrame(x*pixelTatio,y*pixelTatio);
|
|
80108
|
-
this.PopupRightMenuV2({X:e.offsetX, Y:e.offsetY, FrameID:frameId}, e);
|
|
80245
|
+
this.PopupRightMenuV2({X:e.offsetX, Y:e.offsetY, FrameID:frameId, CursorIndex:this.CursorIndex, Point:{ X:x*pixelTatio, Y:y*pixelTatio}}, e);
|
|
80109
80246
|
|
|
80110
80247
|
var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CONTEXT_MENU);
|
|
80111
80248
|
if (event)
|
|
80112
80249
|
{
|
|
80113
|
-
var data={ X:x, Y:y, Event:e, FrameID:frameId };
|
|
80250
|
+
var data={ X:x, Y:y, Event:e, FrameID:frameId, Point:{ X:x*pixelTatio, Y:y*pixelTatio}, CursorIndex:this.CursorIndex, };
|
|
80114
80251
|
event.Callback(event,data,this);
|
|
80115
80252
|
}
|
|
80116
80253
|
}
|
|
80117
80254
|
|
|
80118
80255
|
//右键菜单数据
|
|
80119
|
-
this.GetRightMenuData=function(frameID)
|
|
80256
|
+
this.GetRightMenuData=function(frameID, option)
|
|
80120
80257
|
{
|
|
80121
80258
|
var windowCount=this.Frame.SubFrame.length; //窗口个数
|
|
80122
80259
|
var klineChart=this.ChartPaint[0];
|
|
@@ -80159,6 +80296,17 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
80159
80296
|
var bPopMinuteChart=false;
|
|
80160
80297
|
if (this.PopMinuteChart) bPopMinuteChart=true;
|
|
80161
80298
|
|
|
80299
|
+
var kItem=null;
|
|
80300
|
+
if (frameID>=0 && option && IFrameSplitOperator.IsNumber(option.CursorIndex))
|
|
80301
|
+
{
|
|
80302
|
+
var kData=this.GetKData();
|
|
80303
|
+
if (kData && IFrameSplitOperator.IsNonEmptyArray(kData.Data))
|
|
80304
|
+
{
|
|
80305
|
+
var dataIndex=kData.DataOffset+option.CursorIndex;
|
|
80306
|
+
if (dataIndex>=0 && dataIndex<kData.Data.length) kItem=kData.Data[dataIndex];
|
|
80307
|
+
}
|
|
80308
|
+
}
|
|
80309
|
+
|
|
80162
80310
|
var aryMenu=
|
|
80163
80311
|
[
|
|
80164
80312
|
{
|
|
@@ -80441,6 +80589,17 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
80441
80589
|
}
|
|
80442
80590
|
}
|
|
80443
80591
|
}
|
|
80592
|
+
else if (item.Name=="其他设置")
|
|
80593
|
+
{
|
|
80594
|
+
if (kItem)
|
|
80595
|
+
{
|
|
80596
|
+
var bLocked=this.IsLockCorssCursor();
|
|
80597
|
+
if (bLocked)
|
|
80598
|
+
item.SubMenu.push({ Name:"锁十字光标", Data:{ ID: JSCHART_MENU_ID.CMD_UNLOCK_CROSSCURSOR }, Checked:bLocked });
|
|
80599
|
+
else
|
|
80600
|
+
item.SubMenu.push({ Name:"锁十字光标", Data:{ ID: JSCHART_MENU_ID.CMD_LOCK_CROSSCURSOR, Args:[{ KItem:{Date:kItem.Date, Time:kItem.Time}, Draw:true }] }, Checked:bLocked });
|
|
80601
|
+
}
|
|
80602
|
+
}
|
|
80444
80603
|
}
|
|
80445
80604
|
|
|
80446
80605
|
return aryMenu;
|
|
@@ -82044,19 +82203,36 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
82044
82203
|
if (option && option.Draw) this.Draw();
|
|
82045
82204
|
}
|
|
82046
82205
|
|
|
82206
|
+
//option={ KItem:{ Date:, Time:}}
|
|
82047
82207
|
this.LockCorssCursor=function(option)
|
|
82048
82208
|
{
|
|
82049
|
-
if (
|
|
82050
|
-
|
|
82051
|
-
|
|
82209
|
+
if (option && option.KItem) //指定日期时间
|
|
82210
|
+
{
|
|
82211
|
+
var kData=this.GetKData();
|
|
82212
|
+
if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return false;
|
|
82052
82213
|
|
|
82053
|
-
|
|
82054
|
-
|
|
82055
|
-
|
|
82214
|
+
var kItem={ Date:option.KItem.Date, Time:option.KItem.Time, Index:-1};
|
|
82215
|
+
kData.FindDataIndexByDateTime([kItem]);
|
|
82216
|
+
if (kItem.Index<0) return false;
|
|
82056
82217
|
|
|
82057
|
-
|
|
82058
|
-
|
|
82059
|
-
|
|
82218
|
+
var xItem=this.GlobalOption.LockCorssCursor.X;
|
|
82219
|
+
xItem.KLine={ DataIndex:kItem.Index, Date:kItem.Date, Time:kItem.Time };
|
|
82220
|
+
xItem.Enable=true;
|
|
82221
|
+
}
|
|
82222
|
+
else
|
|
82223
|
+
{
|
|
82224
|
+
if (this.CursorIndex<0) return false;
|
|
82225
|
+
var kData=this.GetKData();
|
|
82226
|
+
if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return false;
|
|
82227
|
+
|
|
82228
|
+
var dataIndex=kData.DataOffset+parseInt(this.CursorIndex.toFixed(0));
|
|
82229
|
+
var kItem=kData.Data[dataIndex];
|
|
82230
|
+
if (!kItem) return false;
|
|
82231
|
+
|
|
82232
|
+
var xItem=this.GlobalOption.LockCorssCursor.X;
|
|
82233
|
+
xItem.KLine={ DataIndex:dataIndex, Date:kItem.Date, Time:kItem.Time };
|
|
82234
|
+
xItem.Enable=true;
|
|
82235
|
+
}
|
|
82060
82236
|
|
|
82061
82237
|
if (option && option.Draw) this.Draw();
|
|
82062
82238
|
return true;
|
|
@@ -82079,7 +82255,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
82079
82255
|
if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return position;
|
|
82080
82256
|
|
|
82081
82257
|
position.CursorIndex=xItem.KLine.DataIndex-kData.DataOffset;
|
|
82082
|
-
position.LastPoint.X=this.Frame.GetXFromIndex(position.CursorIndex);
|
|
82258
|
+
position.LastPoint.X=this.Frame.GetXFromIndex(position.CursorIndex, false);
|
|
82083
82259
|
|
|
82084
82260
|
var border=this.Frame.ChartBorder.GetBorder();
|
|
82085
82261
|
if (position.LastPoint.Y<border.Top || position.LastPoint.Y>border.Bottom) //超出图形框子, 调整为收盘价
|
|
@@ -84152,18 +84328,18 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
|
|
|
84152
84328
|
{
|
|
84153
84329
|
var pixelTatio = GetDevicePixelRatio(); //x,y 需要乘以放大倍速
|
|
84154
84330
|
var frameId=this.Frame.PtInFrame(x*pixelTatio,y*pixelTatio);
|
|
84155
|
-
this.PopupRightMenuV2({X:e.offsetX, Y:e.offsetY, FrameID:frameId}, e);
|
|
84331
|
+
this.PopupRightMenuV2({X:e.offsetX, Y:e.offsetY, FrameID:frameId, CursorIndex:this.CursorIndex, Point:{ X:x*pixelTatio, Y:y*pixelTatio} }, e);
|
|
84156
84332
|
|
|
84157
84333
|
var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CONTEXT_MENU);
|
|
84158
84334
|
if (event)
|
|
84159
84335
|
{
|
|
84160
|
-
var data={ X:x, Y:y, Event:e, FrameID:frameId };
|
|
84336
|
+
var data={ X:x, Y:y, Event:e, FrameID:frameId, CursorIndex:this.CursorIndex, Point:{ X:x*pixelTatio, Y:y*pixelTatio} };
|
|
84161
84337
|
event.Callback(event,data,this);
|
|
84162
84338
|
}
|
|
84163
84339
|
}
|
|
84164
84340
|
|
|
84165
84341
|
//右键菜单数据
|
|
84166
|
-
this.GetRightMenuData=function(frameID)
|
|
84342
|
+
this.GetRightMenuData=function(frameID, option)
|
|
84167
84343
|
{
|
|
84168
84344
|
var windowCount=this.Frame.SubFrame.length; //窗口个数
|
|
84169
84345
|
|
|
@@ -84290,11 +84466,11 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
|
|
|
84290
84466
|
}
|
|
84291
84467
|
|
|
84292
84468
|
|
|
84293
|
-
|
|
84469
|
+
|
|
84294
84470
|
for(var i=0;i<aryMenu.length;++i)
|
|
84295
84471
|
{
|
|
84296
84472
|
var item=aryMenu[i];
|
|
84297
|
-
if (item.Name=="叠加品种")
|
|
84473
|
+
if (item.Name=="叠加品种") //删除菜单
|
|
84298
84474
|
{
|
|
84299
84475
|
for(var j=0;j<item.SubMenu.length;++j)
|
|
84300
84476
|
{
|
|
@@ -84306,6 +84482,10 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
|
|
|
84306
84482
|
}
|
|
84307
84483
|
}
|
|
84308
84484
|
}
|
|
84485
|
+
else if (item.Name=="其他设置")
|
|
84486
|
+
{
|
|
84487
|
+
|
|
84488
|
+
}
|
|
84309
84489
|
}
|
|
84310
84490
|
|
|
84311
84491
|
return aryMenu;
|