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
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
|
{
|
|
@@ -40888,98 +40921,219 @@ function ChartMultiPoint()
|
|
|
40888
40921
|
delete this.newMethod;
|
|
40889
40922
|
|
|
40890
40923
|
this.ClassName="ChartMultiPoint";
|
|
40891
|
-
this.PointGroup=[]; // [ {Point:[ {
|
|
40924
|
+
this.PointGroup=[]; // [ {Point:[ {Date, Time, Value }, ], Color: }, ]
|
|
40892
40925
|
|
|
40893
40926
|
|
|
40894
40927
|
this.IsHScreen=false;
|
|
40895
40928
|
this.LineWidth=1;
|
|
40896
40929
|
this.PointRadius=5;
|
|
40897
40930
|
|
|
40931
|
+
this.MapCache=null; //key=date/date-time value={ Data:[] }
|
|
40932
|
+
this.GetKValue=ChartData.GetKValue;
|
|
40933
|
+
|
|
40934
|
+
this.BuildKey=function(item)
|
|
40935
|
+
{
|
|
40936
|
+
if (IFrameSplitOperator.IsNumber(item.Time)) return `${item.Date}-${item.Time}`;
|
|
40937
|
+
else return item.Date;
|
|
40938
|
+
}
|
|
40939
|
+
|
|
40940
|
+
this.GetItem=function(kItem)
|
|
40941
|
+
{
|
|
40942
|
+
if (!this.MapCache || this.MapCache.size<=0) return null;
|
|
40943
|
+
|
|
40944
|
+
var key=this.BuildKey(kItem);
|
|
40945
|
+
if (!this.MapCache.has(key)) return null;
|
|
40946
|
+
|
|
40947
|
+
return this.MapCache.get(key);
|
|
40948
|
+
}
|
|
40949
|
+
|
|
40950
|
+
this.BuildCacheData=function()
|
|
40951
|
+
{
|
|
40952
|
+
var mapData=new Map();
|
|
40953
|
+
this.MapCache=mapData;
|
|
40954
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(this.PointGroup)) return;
|
|
40955
|
+
|
|
40956
|
+
for(var i=0; i<this.PointGroup.length; ++i)
|
|
40957
|
+
{
|
|
40958
|
+
var groupItem=this.PointGroup[i];
|
|
40959
|
+
if (!groupItem || !IFrameSplitOperator.IsNonEmptyArray(groupItem.Point)) continue;
|
|
40960
|
+
|
|
40961
|
+
var clrConfig= { Color:groupItem.Color, BGColor:groupItem.BGColor, LineWidth:this.LineWidth, Radius:this.PointRadius, Name:groupItem.Name };
|
|
40962
|
+
if (IFrameSplitOperator.IsNumber(groupItem.PointRadius)) clrConfig.Radius=groupItem.PointRadius;
|
|
40963
|
+
|
|
40964
|
+
for(var j=0; j<groupItem.Point.length; ++j)
|
|
40965
|
+
{
|
|
40966
|
+
var point=groupItem.Point[j];
|
|
40967
|
+
var key=this.BuildKey(point);
|
|
40968
|
+
|
|
40969
|
+
var item={ Data:point, ColorConfig:clrConfig }
|
|
40970
|
+
if (mapData.has(key))
|
|
40971
|
+
{
|
|
40972
|
+
var mapItem=mapData.get(key);
|
|
40973
|
+
mapItem.Data.push(item);
|
|
40974
|
+
}
|
|
40975
|
+
else
|
|
40976
|
+
{
|
|
40977
|
+
mapData.set(key,{ Data:[item] });
|
|
40978
|
+
}
|
|
40979
|
+
}
|
|
40980
|
+
}
|
|
40981
|
+
}
|
|
40982
|
+
|
|
40898
40983
|
this.Draw=function()
|
|
40899
40984
|
{
|
|
40900
|
-
if (!this.IsShow || this.ChartFrame.IsMinSize) return;
|
|
40901
|
-
if (
|
|
40985
|
+
if (!this.IsShow || this.ChartFrame.IsMinSize || !this.IsVisible) return;
|
|
40986
|
+
if (this.IsShowIndexTitleOnly()) return;
|
|
40987
|
+
if (this.IsHideScriptIndex()) return;
|
|
40988
|
+
|
|
40989
|
+
if (!this.Data || !IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return; //k线数据
|
|
40902
40990
|
if (!IFrameSplitOperator.IsNonEmptyArray(this.PointGroup)) return;
|
|
40991
|
+
if (!this.MapCache || this.MapCache.size<=0) return;
|
|
40903
40992
|
|
|
40904
40993
|
this.IsHScreen=(this.ChartFrame.IsHScreen===true);
|
|
40905
40994
|
var xPointCount=this.ChartFrame.XPointCount;
|
|
40906
|
-
var
|
|
40907
|
-
var
|
|
40995
|
+
var dataWidth=this.ChartFrame.DataWidth;
|
|
40996
|
+
var distanceWidth=this.ChartFrame.DistanceWidth;
|
|
40997
|
+
var isMinute=this.IsMinuteFrame();
|
|
40998
|
+
|
|
40999
|
+
var border=this.GetBorder();
|
|
41000
|
+
if (this.IsHScreen)
|
|
41001
|
+
{
|
|
41002
|
+
var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
|
|
41003
|
+
var chartright=border.BottomEx;
|
|
41004
|
+
var chartLeft=border.TopEx;
|
|
41005
|
+
}
|
|
41006
|
+
else
|
|
41007
|
+
{
|
|
41008
|
+
var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
|
|
41009
|
+
var chartright=border.RightEx;
|
|
41010
|
+
var chartLeft=border.LeftEx;
|
|
41011
|
+
}
|
|
41012
|
+
|
|
41013
|
+
//计算所有的点位置
|
|
41014
|
+
var mapPoint=new Map();
|
|
41015
|
+
for(var i=this.Data.DataOffset,j=0;i<this.Data.Data.length && j<xPointCount;++i,++j,xOffset+=(dataWidth+distanceWidth))
|
|
41016
|
+
{
|
|
41017
|
+
var kItem=this.Data.Data[i];
|
|
41018
|
+
var key=this.BuildKey(kItem);
|
|
41019
|
+
if (!this.MapCache.has(key)) continue;
|
|
41020
|
+
var mapItem=this.MapCache.get(key);
|
|
41021
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(mapItem.Data)) continue;
|
|
41022
|
+
|
|
41023
|
+
if (isMinute)
|
|
41024
|
+
{
|
|
41025
|
+
var x=this.ChartFrame.GetXFromIndex(j);
|
|
41026
|
+
}
|
|
41027
|
+
else
|
|
41028
|
+
{
|
|
41029
|
+
var left=xOffset;
|
|
41030
|
+
var right=xOffset+dataWidth;
|
|
41031
|
+
if (right>chartright) break;
|
|
41032
|
+
var x=left+(right-left)/2;
|
|
41033
|
+
}
|
|
41034
|
+
|
|
41035
|
+
this.CalculateItem(mapItem, kItem, x, mapPoint);
|
|
41036
|
+
}
|
|
41037
|
+
|
|
41038
|
+
if (mapPoint.size<=0) return;
|
|
40908
41039
|
|
|
40909
41040
|
this.Canvas.save();
|
|
40910
41041
|
this.ClipClient(this.IsHScreen);
|
|
40911
|
-
|
|
40912
|
-
|
|
41042
|
+
|
|
41043
|
+
this.DrawAllPoint(mapPoint);
|
|
41044
|
+
|
|
41045
|
+
this.Canvas.restore();
|
|
41046
|
+
}
|
|
41047
|
+
|
|
41048
|
+
this.CalculateItem=function(groupItem, kItem, x, mapPoint)
|
|
41049
|
+
{
|
|
41050
|
+
for(var i=0; i<groupItem.Data.length; ++i)
|
|
40913
41051
|
{
|
|
40914
|
-
var item=
|
|
40915
|
-
var
|
|
40916
|
-
|
|
40917
|
-
|
|
40918
|
-
|
|
40919
|
-
|
|
40920
|
-
|
|
41052
|
+
var item=groupItem.Data[i];
|
|
41053
|
+
var value=item.Data.Value;
|
|
41054
|
+
if (IFrameSplitOperator.IsString(item.Data.Value)) value=this.GetKValue(kItem,item.Data.Value);
|
|
41055
|
+
if (!IFrameSplitOperator.IsNumber(value)) continue;
|
|
41056
|
+
|
|
41057
|
+
var y=this.ChartFrame.GetYFromData(value,false);
|
|
41058
|
+
|
|
41059
|
+
var strConfig=JSON.stringify(item.ColorConfig);
|
|
41060
|
+
if (!mapPoint.has(strConfig)) mapPoint.set(strConfig, { AryPoint:[]});
|
|
41061
|
+
var mapItem=mapPoint.get(strConfig);
|
|
41062
|
+
|
|
41063
|
+
mapItem.AryPoint.push({ X:x, Y:y, Data:item });
|
|
41064
|
+
}
|
|
41065
|
+
}
|
|
41066
|
+
|
|
41067
|
+
this.DrawAllPoint=function(mapPoint)
|
|
41068
|
+
{
|
|
41069
|
+
var pixelRatio=GetDevicePixelRatio();
|
|
41070
|
+
|
|
41071
|
+
for(var mapItem of mapPoint)
|
|
41072
|
+
{
|
|
41073
|
+
var aryPoint=mapItem[1].AryPoint;
|
|
41074
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(aryPoint)) continue;
|
|
41075
|
+
var config=null;
|
|
40921
41076
|
var path=new Path2D();
|
|
40922
41077
|
var count=0;
|
|
40923
|
-
|
|
40924
|
-
for(var j=0; j<item.Point.length; ++j)
|
|
41078
|
+
for(var i=0;i<aryPoint.length;++i)
|
|
40925
41079
|
{
|
|
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);
|
|
41080
|
+
var item=aryPoint[i];
|
|
41081
|
+
if (!config) config=item.Data.ColorConfig;
|
|
40934
41082
|
|
|
40935
|
-
|
|
40936
|
-
|
|
40937
|
-
|
|
40938
|
-
|
|
40939
|
-
|
|
41083
|
+
var pointPath = new Path2D();
|
|
41084
|
+
if (this.IsHScreen)
|
|
41085
|
+
pointPath.arc(item.Y,item.X,config.Radius*pixelRatio,0,360,false);
|
|
41086
|
+
else
|
|
41087
|
+
pointPath.arc(item.X,item.Y,config.Radius**pixelRatio,0,360,false);
|
|
40940
41088
|
|
|
40941
|
-
|
|
40942
|
-
|
|
40943
|
-
}
|
|
41089
|
+
path.addPath(pointPath);
|
|
41090
|
+
++count;
|
|
40944
41091
|
}
|
|
40945
41092
|
|
|
40946
|
-
if (count>0 &&
|
|
41093
|
+
if (count>0 && config)
|
|
40947
41094
|
{
|
|
40948
|
-
|
|
40949
|
-
|
|
40950
|
-
|
|
41095
|
+
if (config.BGColor)
|
|
41096
|
+
{
|
|
41097
|
+
this.Canvas.fillStyle=config.BGColor; //背景填充颜色
|
|
41098
|
+
this.Canvas.fill(path);
|
|
41099
|
+
}
|
|
40951
41100
|
|
|
40952
|
-
if (
|
|
40953
|
-
|
|
41101
|
+
if (config.Color)
|
|
41102
|
+
{
|
|
41103
|
+
this.Canvas.lineWidth=config.LineWidth*pixelRatio;
|
|
41104
|
+
this.Canvas.strokeStyle=config.Color;
|
|
41105
|
+
this.Canvas.stroke(path);
|
|
41106
|
+
}
|
|
40954
41107
|
}
|
|
40955
|
-
|
|
40956
41108
|
}
|
|
40957
|
-
|
|
40958
|
-
this.Canvas.restore();
|
|
40959
41109
|
}
|
|
40960
41110
|
|
|
40961
41111
|
this.GetMaxMin=function()
|
|
40962
41112
|
{
|
|
40963
41113
|
var range={ Min:null, Max:null };
|
|
41114
|
+
if(!this.Data || !IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return range;
|
|
41115
|
+
if (!this.MapCache || this.MapCache.size<=0) return;
|
|
40964
41116
|
var xPointCount=this.ChartFrame.XPointCount;
|
|
40965
|
-
var start=this.Data.DataOffset;
|
|
40966
|
-
var end=start+xPointCount;
|
|
40967
41117
|
|
|
40968
|
-
for(var i=0;
|
|
41118
|
+
for(var i=this.Data.DataOffset,j=0, k=0;i<this.Data.Data.length && j<xPointCount;++i,++j)
|
|
40969
41119
|
{
|
|
40970
|
-
var
|
|
40971
|
-
|
|
41120
|
+
var kItem=this.Data.Data[i];
|
|
41121
|
+
var key=this.BuildKey(kItem);
|
|
41122
|
+
if (!this.MapCache.has(key)) continue;
|
|
41123
|
+
var mapItem=this.MapCache.get(key);
|
|
41124
|
+
if (!IFrameSplitOperator.IsNonEmptyArray(mapItem.Data)) continue;
|
|
40972
41125
|
|
|
40973
|
-
for(
|
|
41126
|
+
for(k=0;k<mapItem.Data.length;++k)
|
|
40974
41127
|
{
|
|
40975
|
-
var
|
|
40976
|
-
|
|
40977
|
-
|
|
40978
|
-
|
|
40979
|
-
|
|
40980
|
-
|
|
40981
|
-
|
|
40982
|
-
|
|
41128
|
+
var item=mapItem.Data[k];
|
|
41129
|
+
var value=item.Data.Value;
|
|
41130
|
+
if (IFrameSplitOperator.IsString(item.Data.Value)) value=this.GetKValue(kItem,item.Data.Value);
|
|
41131
|
+
if (!IFrameSplitOperator.IsNumber(value)) continue;
|
|
41132
|
+
|
|
41133
|
+
if (range.Max==null) range.Max=value;
|
|
41134
|
+
else if (range.Max<value) range.Max=value;
|
|
41135
|
+
if (range.Min==null) range.Min=value;
|
|
41136
|
+
else if (range.Min>value) range.Min=value;
|
|
40983
41137
|
}
|
|
40984
41138
|
}
|
|
40985
41139
|
|
|
@@ -41246,6 +41400,8 @@ function ChartMultiSVGIconV2()
|
|
|
41246
41400
|
this.IconRect=[]; //0=序号,1=区域
|
|
41247
41401
|
|
|
41248
41402
|
this.MapCache=null; //key=date/date-time value={ Data:[] }
|
|
41403
|
+
this.GetKValue=ChartData.GetKValue;
|
|
41404
|
+
|
|
41249
41405
|
|
|
41250
41406
|
this.BuildKey=function(item)
|
|
41251
41407
|
{
|
|
@@ -41360,28 +41516,7 @@ function ChartMultiSVGIconV2()
|
|
|
41360
41516
|
|
|
41361
41517
|
this.Canvas.restore();
|
|
41362
41518
|
}
|
|
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
|
-
|
|
41519
|
+
|
|
41385
41520
|
this.DrawItem=function(groupItem, kItem, x, drawInfo)
|
|
41386
41521
|
{
|
|
41387
41522
|
if (!IFrameSplitOperator.IsNonEmptyArray(groupItem.Data)) return;
|
|
@@ -57337,24 +57472,29 @@ function DynamicChartTitlePainting()
|
|
|
57337
57472
|
|
|
57338
57473
|
this.ForamtMultiPointTitle=function(dataIndex, dataInfo)
|
|
57339
57474
|
{
|
|
57340
|
-
if (!
|
|
57475
|
+
if (!dataInfo.GetItemCallback) return null;
|
|
57476
|
+
if (!dataInfo.Data || !IFrameSplitOperator.IsNonEmptyArray(dataInfo.Data.Data)) return null;
|
|
57477
|
+
var kItem=dataInfo.Data.Data[dataIndex];
|
|
57478
|
+
if (!kItem) return null;
|
|
57479
|
+
|
|
57480
|
+
var group=dataInfo.GetItemCallback(kItem);
|
|
57481
|
+
if (!group || !IFrameSplitOperator.IsNonEmptyArray(group.Data)) return null;
|
|
57341
57482
|
|
|
57342
57483
|
var aryText=[];
|
|
57343
|
-
for(var i=0;i<
|
|
57484
|
+
for(var i=0;i<group.Data.length;++i)
|
|
57344
57485
|
{
|
|
57345
|
-
var
|
|
57346
|
-
|
|
57347
|
-
|
|
57348
|
-
|
|
57349
|
-
|
|
57350
|
-
|
|
57351
|
-
|
|
57352
|
-
|
|
57353
|
-
|
|
57354
|
-
|
|
57355
|
-
|
|
57356
|
-
|
|
57357
|
-
}
|
|
57486
|
+
var item=group.Data[i];
|
|
57487
|
+
var config=item.ColorConfig;
|
|
57488
|
+
|
|
57489
|
+
var color=null;
|
|
57490
|
+
if (config.BGColor) color=config.BGColor;
|
|
57491
|
+
else if (config.Color) color=config.Color;
|
|
57492
|
+
|
|
57493
|
+
if (config.Name) aryText.push({ Text:`${config.Name}:`, Color:color });
|
|
57494
|
+
|
|
57495
|
+
var value=item.Data.Value;
|
|
57496
|
+
if (IFrameSplitOperator.IsString(item.Data.Value)) value=ChartData.GetKValue(kItem, item.Data.Value);
|
|
57497
|
+
aryText.push({ Text:this.FormatValue(value, dataInfo), Color:color});
|
|
57358
57498
|
}
|
|
57359
57499
|
|
|
57360
57500
|
if (!IFrameSplitOperator.IsNonEmptyArray(aryText)) return null;
|
|
@@ -58125,6 +58265,11 @@ function DynamicChartTitlePainting()
|
|
|
58125
58265
|
aryText=this.FromatStackedBarTitle(value, item);
|
|
58126
58266
|
if (!aryText) continue;
|
|
58127
58267
|
}
|
|
58268
|
+
else if (item.DataType=="ChartMultiPoint")
|
|
58269
|
+
{
|
|
58270
|
+
aryText=this.ForamtMultiPointTitle(dataIndex, item);
|
|
58271
|
+
if (!aryText) continue;
|
|
58272
|
+
}
|
|
58128
58273
|
else
|
|
58129
58274
|
{
|
|
58130
58275
|
valueText=this.FormatValue(value,item);
|
|
@@ -80105,18 +80250,18 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
80105
80250
|
{
|
|
80106
80251
|
var pixelTatio = GetDevicePixelRatio(); //x,y 需要乘以放大倍速
|
|
80107
80252
|
var frameId=this.Frame.PtInFrame(x*pixelTatio,y*pixelTatio);
|
|
80108
|
-
this.PopupRightMenuV2({X:e.offsetX, Y:e.offsetY, FrameID:frameId}, e);
|
|
80253
|
+
this.PopupRightMenuV2({X:e.offsetX, Y:e.offsetY, FrameID:frameId, CursorIndex:this.CursorIndex, Point:{ X:x*pixelTatio, Y:y*pixelTatio}}, e);
|
|
80109
80254
|
|
|
80110
80255
|
var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CONTEXT_MENU);
|
|
80111
80256
|
if (event)
|
|
80112
80257
|
{
|
|
80113
|
-
var data={ X:x, Y:y, Event:e, FrameID:frameId };
|
|
80258
|
+
var data={ X:x, Y:y, Event:e, FrameID:frameId, Point:{ X:x*pixelTatio, Y:y*pixelTatio}, CursorIndex:this.CursorIndex, };
|
|
80114
80259
|
event.Callback(event,data,this);
|
|
80115
80260
|
}
|
|
80116
80261
|
}
|
|
80117
80262
|
|
|
80118
80263
|
//右键菜单数据
|
|
80119
|
-
this.GetRightMenuData=function(frameID)
|
|
80264
|
+
this.GetRightMenuData=function(frameID, option)
|
|
80120
80265
|
{
|
|
80121
80266
|
var windowCount=this.Frame.SubFrame.length; //窗口个数
|
|
80122
80267
|
var klineChart=this.ChartPaint[0];
|
|
@@ -80159,6 +80304,17 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
80159
80304
|
var bPopMinuteChart=false;
|
|
80160
80305
|
if (this.PopMinuteChart) bPopMinuteChart=true;
|
|
80161
80306
|
|
|
80307
|
+
var kItem=null;
|
|
80308
|
+
if (frameID>=0 && option && IFrameSplitOperator.IsNumber(option.CursorIndex))
|
|
80309
|
+
{
|
|
80310
|
+
var kData=this.GetKData();
|
|
80311
|
+
if (kData && IFrameSplitOperator.IsNonEmptyArray(kData.Data))
|
|
80312
|
+
{
|
|
80313
|
+
var dataIndex=kData.DataOffset+option.CursorIndex;
|
|
80314
|
+
if (dataIndex>=0 && dataIndex<kData.Data.length) kItem=kData.Data[dataIndex];
|
|
80315
|
+
}
|
|
80316
|
+
}
|
|
80317
|
+
|
|
80162
80318
|
var aryMenu=
|
|
80163
80319
|
[
|
|
80164
80320
|
{
|
|
@@ -80441,6 +80597,17 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
80441
80597
|
}
|
|
80442
80598
|
}
|
|
80443
80599
|
}
|
|
80600
|
+
else if (item.Name=="其他设置")
|
|
80601
|
+
{
|
|
80602
|
+
if (kItem)
|
|
80603
|
+
{
|
|
80604
|
+
var bLocked=this.IsLockCorssCursor();
|
|
80605
|
+
if (bLocked)
|
|
80606
|
+
item.SubMenu.push({ Name:"锁十字光标", Data:{ ID: JSCHART_MENU_ID.CMD_UNLOCK_CROSSCURSOR }, Checked:bLocked });
|
|
80607
|
+
else
|
|
80608
|
+
item.SubMenu.push({ Name:"锁十字光标", Data:{ ID: JSCHART_MENU_ID.CMD_LOCK_CROSSCURSOR, Args:[{ KItem:{Date:kItem.Date, Time:kItem.Time}, Draw:true }] }, Checked:bLocked });
|
|
80609
|
+
}
|
|
80610
|
+
}
|
|
80444
80611
|
}
|
|
80445
80612
|
|
|
80446
80613
|
return aryMenu;
|
|
@@ -82044,19 +82211,36 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
82044
82211
|
if (option && option.Draw) this.Draw();
|
|
82045
82212
|
}
|
|
82046
82213
|
|
|
82214
|
+
//option={ KItem:{ Date:, Time:}}
|
|
82047
82215
|
this.LockCorssCursor=function(option)
|
|
82048
82216
|
{
|
|
82049
|
-
if (
|
|
82050
|
-
|
|
82051
|
-
|
|
82217
|
+
if (option && option.KItem) //指定日期时间
|
|
82218
|
+
{
|
|
82219
|
+
var kData=this.GetKData();
|
|
82220
|
+
if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return false;
|
|
82052
82221
|
|
|
82053
|
-
|
|
82054
|
-
|
|
82055
|
-
|
|
82222
|
+
var kItem={ Date:option.KItem.Date, Time:option.KItem.Time, Index:-1};
|
|
82223
|
+
kData.FindDataIndexByDateTime([kItem]);
|
|
82224
|
+
if (kItem.Index<0) return false;
|
|
82056
82225
|
|
|
82057
|
-
|
|
82058
|
-
|
|
82059
|
-
|
|
82226
|
+
var xItem=this.GlobalOption.LockCorssCursor.X;
|
|
82227
|
+
xItem.KLine={ DataIndex:kItem.Index, Date:kItem.Date, Time:kItem.Time };
|
|
82228
|
+
xItem.Enable=true;
|
|
82229
|
+
}
|
|
82230
|
+
else
|
|
82231
|
+
{
|
|
82232
|
+
if (this.CursorIndex<0) return false;
|
|
82233
|
+
var kData=this.GetKData();
|
|
82234
|
+
if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return false;
|
|
82235
|
+
|
|
82236
|
+
var dataIndex=kData.DataOffset+parseInt(this.CursorIndex.toFixed(0));
|
|
82237
|
+
var kItem=kData.Data[dataIndex];
|
|
82238
|
+
if (!kItem) return false;
|
|
82239
|
+
|
|
82240
|
+
var xItem=this.GlobalOption.LockCorssCursor.X;
|
|
82241
|
+
xItem.KLine={ DataIndex:dataIndex, Date:kItem.Date, Time:kItem.Time };
|
|
82242
|
+
xItem.Enable=true;
|
|
82243
|
+
}
|
|
82060
82244
|
|
|
82061
82245
|
if (option && option.Draw) this.Draw();
|
|
82062
82246
|
return true;
|
|
@@ -82079,7 +82263,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
|
|
|
82079
82263
|
if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return position;
|
|
82080
82264
|
|
|
82081
82265
|
position.CursorIndex=xItem.KLine.DataIndex-kData.DataOffset;
|
|
82082
|
-
position.LastPoint.X=this.Frame.GetXFromIndex(position.CursorIndex);
|
|
82266
|
+
position.LastPoint.X=this.Frame.GetXFromIndex(position.CursorIndex, false);
|
|
82083
82267
|
|
|
82084
82268
|
var border=this.Frame.ChartBorder.GetBorder();
|
|
82085
82269
|
if (position.LastPoint.Y<border.Top || position.LastPoint.Y>border.Bottom) //超出图形框子, 调整为收盘价
|
|
@@ -84152,18 +84336,18 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
|
|
|
84152
84336
|
{
|
|
84153
84337
|
var pixelTatio = GetDevicePixelRatio(); //x,y 需要乘以放大倍速
|
|
84154
84338
|
var frameId=this.Frame.PtInFrame(x*pixelTatio,y*pixelTatio);
|
|
84155
|
-
this.PopupRightMenuV2({X:e.offsetX, Y:e.offsetY, FrameID:frameId}, e);
|
|
84339
|
+
this.PopupRightMenuV2({X:e.offsetX, Y:e.offsetY, FrameID:frameId, CursorIndex:this.CursorIndex, Point:{ X:x*pixelTatio, Y:y*pixelTatio} }, e);
|
|
84156
84340
|
|
|
84157
84341
|
var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CONTEXT_MENU);
|
|
84158
84342
|
if (event)
|
|
84159
84343
|
{
|
|
84160
|
-
var data={ X:x, Y:y, Event:e, FrameID:frameId };
|
|
84344
|
+
var data={ X:x, Y:y, Event:e, FrameID:frameId, CursorIndex:this.CursorIndex, Point:{ X:x*pixelTatio, Y:y*pixelTatio} };
|
|
84161
84345
|
event.Callback(event,data,this);
|
|
84162
84346
|
}
|
|
84163
84347
|
}
|
|
84164
84348
|
|
|
84165
84349
|
//右键菜单数据
|
|
84166
|
-
this.GetRightMenuData=function(frameID)
|
|
84350
|
+
this.GetRightMenuData=function(frameID, option)
|
|
84167
84351
|
{
|
|
84168
84352
|
var windowCount=this.Frame.SubFrame.length; //窗口个数
|
|
84169
84353
|
|
|
@@ -84290,11 +84474,11 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
|
|
|
84290
84474
|
}
|
|
84291
84475
|
|
|
84292
84476
|
|
|
84293
|
-
|
|
84477
|
+
|
|
84294
84478
|
for(var i=0;i<aryMenu.length;++i)
|
|
84295
84479
|
{
|
|
84296
84480
|
var item=aryMenu[i];
|
|
84297
|
-
if (item.Name=="叠加品种")
|
|
84481
|
+
if (item.Name=="叠加品种") //删除菜单
|
|
84298
84482
|
{
|
|
84299
84483
|
for(var j=0;j<item.SubMenu.length;++j)
|
|
84300
84484
|
{
|
|
@@ -84306,6 +84490,10 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
|
|
|
84306
84490
|
}
|
|
84307
84491
|
}
|
|
84308
84492
|
}
|
|
84493
|
+
else if (item.Name=="其他设置")
|
|
84494
|
+
{
|
|
84495
|
+
|
|
84496
|
+
}
|
|
84309
84497
|
}
|
|
84310
84498
|
|
|
84311
84499
|
return aryMenu;
|
|
@@ -1890,13 +1890,14 @@ HQData.APIIndex_MULTI_POINT=function(data, callback)
|
|
|
1890
1890
|
BGColor:"rgb(255,215,0)",
|
|
1891
1891
|
PointRadius:10,
|
|
1892
1892
|
LineWidth:2,
|
|
1893
|
+
Name:"最低价",
|
|
1893
1894
|
Point:[ ]
|
|
1894
1895
|
};
|
|
1895
1896
|
|
|
1896
1897
|
for(var i=kData.Data.length-1, j=0; i>=0 && j<6; i-=5, ++j)
|
|
1897
1898
|
{
|
|
1898
1899
|
var item=kData.Data[i];
|
|
1899
|
-
point.Point.push({Date:item.Date, Time:item.Time, Value:
|
|
1900
|
+
point.Point.push({Date:item.Date, Time:item.Time, Value:"LOW"});
|
|
1900
1901
|
}
|
|
1901
1902
|
|
|
1902
1903
|
pointData.Draw.DrawData.push(point);
|
|
@@ -1908,6 +1909,7 @@ HQData.APIIndex_MULTI_POINT=function(data, callback)
|
|
|
1908
1909
|
BGColor:"rgb(30,144,255)",
|
|
1909
1910
|
PointRadius:5,
|
|
1910
1911
|
LineWidth:1,
|
|
1912
|
+
Name:"中间价",
|
|
1911
1913
|
Point:[ ]
|
|
1912
1914
|
};
|
|
1913
1915
|
|