hqchart 1.1.13590 → 1.1.13600

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hqchart",
3
- "version": "1.1.13590",
3
+ "version": "1.1.13600",
4
4
  "description": "HQChart - H5, 微信小程序 沪深/港股/数字货币/期货/美股 K线图(kline),走势图,缩放,拖拽,十字光标,画图工具,截图,筹码图. 分析家语法,通达信语法,(麦语法),第3方数据对接",
5
5
  "main": "lib/main.js",
6
6
  "scripts": {
@@ -2602,6 +2602,7 @@ var JSCHART_EVENT_ID=
2602
2602
  ON_CLICK_REPORT_CHECKBOX:141, //报价列表checkbox
2603
2603
  ON_CLICK_REPORT_BUTTON:142, //报价列表按钮
2604
2604
  ON_CLICK_REPORT_LINK:143, //报价列表 链接
2605
+ ON_CREATE_REPORT_HEADER_MENU:144, //报价列表 表头菜单
2605
2606
 
2606
2607
 
2607
2608
  ON_CHANGE_INDEX:150, //切换指标
@@ -2778,8 +2779,10 @@ var JSCHART_MENU_ID=
2778
2779
 
2779
2780
 
2780
2781
  CMD_REPORT_CHANGE_BLOCK_ID:60, //报价列表 切换板块ID
2781
-
2782
-
2782
+ CMD_REPORT_COLUMN_SORT_ID:61, //报价列表 表头排序 Arg[列序号, 排序方向]
2783
+ CMD_REPORT_COLUMN_DEL_ID:62, //报价列表 删除列
2784
+ CMD_REPORT_COLUMN_MOVE_ID:63, //报价列表 列移动
2785
+ CMD_REPORT_COLUMN_FILTER_ID:64, //报价列表 筛选
2783
2786
  }
2784
2787
 
2785
2788
 
@@ -56956,6 +56959,16 @@ function ChartArrowMarker()
56956
56959
  this.OnlyMoveXIndex=true;
56957
56960
  this.IsSupportMagnet=true;
56958
56961
 
56962
+ this.Super_SetOption=this.SetOption; //父类函数
56963
+
56964
+ this.SetOption=function(option)
56965
+ {
56966
+ this.Super_SetOption(option);
56967
+
56968
+ if (option.AreaColor) this.AreaColor=option.AreaColor;
56969
+ else this.AreaColor=IChartDrawPicture.ColorToRGBA(this.LineColor, 0.6);
56970
+ }
56971
+
56959
56972
  this.CalculatePoint=function(angle, ptStart, ptEnd, lineWidth)
56960
56973
  {
56961
56974
  var theta=angle; //三角斜边一直线夹角
@@ -56999,9 +57012,12 @@ function ChartArrowMarker()
56999
57012
  this.Canvas.lineTo(outArrow.Bottom.X,outArrow.Bottom.Y);
57000
57013
  this.Canvas.lineTo(insideArrow.Bottom.X,insideArrow.Bottom.Y);
57001
57014
  this.Canvas.lineTo(ptStart.X,ptStart.Y);
57002
- this.Canvas.closePath();
57003
57015
 
57004
- this.Canvas.fillStyle=this.LineColor;
57016
+ this.Canvas.strokeStyle=this.LineColor;
57017
+ this.Canvas.stroke();
57018
+
57019
+ this.Canvas.closePath();
57020
+ this.Canvas.fillStyle=this.AreaColor;
57005
57021
  this.Canvas.fill();
57006
57022
 
57007
57023
  /*
@@ -65792,6 +65808,9 @@ function ChartPriceRange()
65792
65808
 
65793
65809
  this.DrawArrow({X:ToFixedPoint(xCenter), Y:ptStart.Y}, {X:ToFixedPoint(xCenter), Y:ptEnd.Y});
65794
65810
 
65811
+ var bottom=this.Frame.ChartBorder.GetBottomEx();
65812
+ var top=this.Frame.ChartBorder.GetTopEx();
65813
+
65795
65814
  //文字输出
65796
65815
  var startValue=this.Frame.GetYData(ptStart.Y,false);
65797
65816
  var endValue=this.Frame.GetYData(ptEnd.Y,false);
@@ -65807,6 +65826,23 @@ function ChartPriceRange()
65807
65826
  else rtTextBG.Top=ptEnd.Y+4;
65808
65827
  rtTextBG.Bottom=rtTextBG.Top+rtTextBG.Height;
65809
65828
 
65829
+ if (diffValue>0)
65830
+ {
65831
+ if (rtTextBG.Top<=top)
65832
+ {
65833
+ rtTextBG.Top=top;
65834
+ rtTextBG.Bottom=rtTextBG.Top+rtTextBG.Height;
65835
+ }
65836
+ }
65837
+ else
65838
+ {
65839
+ if (rtTextBG.Bottom>=bottom)
65840
+ {
65841
+ rtTextBG.Bottom=bottom;
65842
+ rtTextBG.Top=rtTextBG.Bottom-rtTextBG.Height;
65843
+ }
65844
+ }
65845
+
65810
65846
  if (this.Label.EnableBGColor)
65811
65847
  {
65812
65848
  var path=new Path2D();
@@ -65913,6 +65949,7 @@ function ChartDateRange()
65913
65949
 
65914
65950
 
65915
65951
  //文字输出
65952
+ var bottom=this.Frame.ChartBorder.GetBottomEx();
65916
65953
  var startIndex=this.Frame.GetXData(ptStart.X,false);
65917
65954
  var endIndex=this.Frame.GetXData(ptEnd.X,false);
65918
65955
  var barCount=endIndex-startIndex+1;
@@ -65924,6 +65961,12 @@ function ChartDateRange()
65924
65961
  var rtTextBG={ Left:xCenter-textWidth/2, Top:ptEnd.Y+4, Width:textWidth, Height:textHeight+2 };
65925
65962
  rtTextBG.Bottom=rtTextBG.Top+rtTextBG.Height;
65926
65963
 
65964
+ if (rtTextBG.Bottom>=bottom)
65965
+ {
65966
+ rtTextBG.Bottom=bottom;
65967
+ rtTextBG.Top=rtTextBG.Bottom-rtTextBG.Height;
65968
+ }
65969
+
65927
65970
  if (this.Label.EnableBGColor)
65928
65971
  {
65929
65972
  var path=new Path2D();
@@ -3018,10 +3018,73 @@ function JSReportChartContainer(uielement)
3018
3018
  }
3019
3019
  }
3020
3020
 
3021
+ //列排序
3022
+ this.SortColumn=function(index, sortType)
3023
+ {
3024
+ if (index<0) return false;
3025
+ var reportChart=this.GetReportChart();
3026
+ if (!reportChart) return false;
3027
+
3028
+ var column=reportChart.Column[index];
3029
+
3030
+ if (!column) return false;
3031
+ if (column.Sort!=1 && column.Sort!=2) return false;
3032
+
3033
+ var sortInfo={ Field:index, Sort:sortType };
3034
+ if (sortInfo.Sort==0) //不排序还原
3035
+ {
3036
+ this.Data.Data=[];
3037
+ if (IFrameSplitOperator.IsNonEmptyArray(this.SourceData.Data))
3038
+ this.Data.Data=this.SourceData.Data.slice();
3039
+ }
3040
+ else if (sortInfo.Sort==1 || sortInfo.Sort==2)
3041
+ {
3042
+ if (column.Sort==1) //本地排序
3043
+ {
3044
+ var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_REPORT_LOCAL_SORT);
3045
+ if (event && event.Callback)
3046
+ {
3047
+ var sendData={ Column:column, SortInfo:sortInfo, SymbolList:this.Data.Data, Result:null };
3048
+ event.Callback (event, sendData, this);
3049
+ if (Array.isArray(sendData.Result)) this.Data.Data=sendData.Result;
3050
+ }
3051
+ else
3052
+ {
3053
+ this.Data.Data.sort((left, right)=> { return this.LocalSort(left, right, column, sortInfo.Sort); });
3054
+ }
3055
+ }
3056
+ else if (column.Sort==2) //远程排序
3057
+ {
3058
+ if (!IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return;
3059
+
3060
+ this.SortInfo.Field=sortInfo.Field;
3061
+ this.SortInfo.Sort=sortInfo.Sort;
3062
+ this.Data.YOffset=0;
3063
+ this.ResetReportSelectStatus();
3064
+ this.RequestStockSortData(column, sortInfo.Field, sortInfo.Sort); //远程排序
3065
+ return true;
3066
+ }
3067
+ }
3068
+
3069
+ this.Data.YOffset=0;
3070
+ this.ResetReportSelectStatus();
3071
+ this.SortInfo.Field=sortInfo.Field;
3072
+ this.SortInfo.Sort=sortInfo.Sort;
3073
+ this.Draw();
3074
+ this.DelayUpdateStockData();
3075
+ return true;
3076
+ }
3077
+
3021
3078
  //点表头
3022
3079
  this.OnClickHeader=function(clickData, e)
3023
3080
  {
3024
3081
  var header=clickData.Header;
3082
+ if (header.Column && header.Column.EnablePopupHeaderMenu)
3083
+ {
3084
+ this.PopupHeaderMenu(clickData, e);
3085
+ return;
3086
+ }
3087
+
3025
3088
  if (header.Column && (header.Column.Sort==1 || header.Column.Sort==2))
3026
3089
  {
3027
3090
  var index=header.Index;
@@ -3100,6 +3163,52 @@ function JSReportChartContainer(uielement)
3100
3163
  }
3101
3164
  }
3102
3165
 
3166
+ this.PopupHeaderMenu=function(clickData, e)
3167
+ {
3168
+ if (!this.JSPopMenu) return;
3169
+ if (!this.GetEventCallback) return;
3170
+
3171
+ var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_CREATE_REPORT_HEADER_MENU);
3172
+ if (!event || !event.Callback) return;
3173
+
3174
+ var header=clickData.Header;
3175
+ var column=header.Column;
3176
+ var menuData={ Menu:null, Position:JSPopMenu.POSITION_ID.DROPDOWN_MENU_ID };
3177
+ menuData.ClickCallback=(data)=>{ this.OnClickHeaderMenu(column, data); }
3178
+
3179
+ var sendData={ MenuData:menuData, Column:column, Index:header.Index, PreventDefault:false, e:e };
3180
+ event.Callback(event, sendData, this);
3181
+ if (sendData.PreventDefault==true) return;
3182
+
3183
+ if (!menuData.Menu) return;
3184
+
3185
+ this.PopupMenuByDrapdown(menuData, header.Rect);
3186
+ }
3187
+
3188
+ //下拉菜单
3189
+ this.PopupMenuByDrapdown=function(menuData, rtButton)
3190
+ {
3191
+ if (!this.JSPopMenu) return;
3192
+
3193
+ var pixelRatio=GetDevicePixelRatio();
3194
+ var rtCell={ Left:rtButton.Left/pixelRatio, Right:rtButton.Right/pixelRatio, Bottom:rtButton.Bottom/pixelRatio, Top:rtButton.Top/pixelRatio };
3195
+ rtCell.Width=rtCell.Right-rtCell.Left;
3196
+ rtCell.Height=rtCell.Bottom-rtCell.Top;
3197
+
3198
+ var rtClient=this.UIElement.getBoundingClientRect();
3199
+ var rtScroll=GetScrollPosition();
3200
+
3201
+ var offsetLeft=rtClient.left+rtScroll.Left;
3202
+ var offsetTop=rtClient.top+rtScroll.Top;
3203
+ rtCell.Left+=offsetLeft;
3204
+ rtCell.Right+=offsetLeft;
3205
+ rtCell.Top+=offsetTop;
3206
+ rtCell.Bottom+=offsetTop;
3207
+
3208
+ this.JSPopMenu.CreatePopMenu(menuData);
3209
+ this.JSPopMenu.PopupMenuByDrapdown(rtCell);
3210
+ }
3211
+
3103
3212
  this.GetTabPopMenu=function(tabItem)
3104
3213
  {
3105
3214
  var aryMenu=[ ];
@@ -3215,6 +3324,24 @@ function JSReportChartContainer(uielement)
3215
3324
  this.Draw();
3216
3325
  }
3217
3326
 
3327
+ this.OnClickHeaderMenu=function(menuData, data)
3328
+ {
3329
+ JSConsole.Chart.Log('[JSReportChartContainer::OnClickHeaderMenu] ',menuData, data);
3330
+
3331
+ var cmdID=data.Data.ID;
3332
+ var aryArgs=data.Data.Args;
3333
+
3334
+ var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_MENU_COMMAND); //回调通知外部
3335
+ if (event && event.Callback)
3336
+ {
3337
+ var data={ PreventDefault:false, CommandID:cmdID, Args:aryArgs, SrcData:data, MenuData:menuData };
3338
+ event.Callback(event,data,this);
3339
+ if (data.PreventDefault) return;
3340
+ }
3341
+
3342
+ this.ExecuteMenuCommand(cmdID,aryArgs);
3343
+ }
3344
+
3218
3345
  this.ExecuteMenuCommand=function(cmdID, aryArgs)
3219
3346
  {
3220
3347
  JSConsole.Chart.Log('[JSReportChartContainer::ExecuteMenuCommand] cmdID=, aryArgs=', cmdID,aryArgs);
@@ -3231,6 +3358,22 @@ function JSReportChartContainer(uielement)
3231
3358
  case JSCHART_MENU_ID.CMD_REPORT_CHANGE_BLOCK_ID:
3232
3359
  if (srcParam) this.ChangeSymbol(srcParam);
3233
3360
  break;
3361
+ case JSCHART_MENU_ID.CMD_REPORT_COLUMN_SORT_ID:
3362
+ if (IFrameSplitOperator.IsNumber(param) && IFrameSplitOperator.IsNumber(aryArgs[1]))
3363
+ this.SortColumn(param, aryArgs[1]);
3364
+ break;
3365
+ case JSCHART_MENU_ID.CMD_REPORT_COLUMN_MOVE_ID:
3366
+ if (IFrameSplitOperator.IsNumber(param) && IFrameSplitOperator.IsNumber(aryArgs[1]))
3367
+ {
3368
+ var leftIndex=param;
3369
+ var rightIndex=param+aryArgs[1];
3370
+ this.SwapColumn(leftIndex, rightIndex, {Redraw:true});
3371
+ }
3372
+ break;
3373
+ case JSCHART_MENU_ID.CMD_REPORT_COLUMN_DEL_ID:
3374
+ if (IFrameSplitOperator.IsNumber(param))
3375
+ this.DeleteColumn(param, {Redraw:true});
3376
+ break;
3234
3377
  }
3235
3378
  }
3236
3379
 
@@ -3248,6 +3391,20 @@ function JSReportChartContainer(uielement)
3248
3391
  }
3249
3392
  }
3250
3393
 
3394
+ this.DeleteColumn=function(index, option)
3395
+ {
3396
+ var reportChart=this.GetReportChart();
3397
+ if (!reportChart) return;
3398
+
3399
+ if (!reportChart.DeleteColumn(index)) return;
3400
+
3401
+ if (option && option.Redraw)
3402
+ {
3403
+ this.SetSizeChange(true);
3404
+ this.Draw();
3405
+ }
3406
+ }
3407
+
3251
3408
  //本地排序
3252
3409
  this.LocalSort=function(left, right, column, sortType)
3253
3410
  {
@@ -4102,6 +4259,9 @@ function ChartReport()
4102
4259
  else colItem.IsDrawCallback=false;
4103
4260
  if (item.Icon) colItem.Icon=item.Icon;
4104
4261
 
4262
+ //点击表头弹出菜单
4263
+ if (IFrameSplitOperator.IsBool(item.EnablePopupHeaderMenu)) colItem.EnablePopupHeaderMenu=item.EnablePopupHeaderMenu;
4264
+
4105
4265
  if (item.Sort==1 || item.Sort==2) //1本地排序 2=远程排序
4106
4266
  {
4107
4267
  colItem.SortType=[1,2]; //默认 降序 ,升序
@@ -4209,6 +4369,15 @@ function ChartReport()
4209
4369
  return true;
4210
4370
  }
4211
4371
 
4372
+ this.DeleteColumn=function(index)
4373
+ {
4374
+ if (!IFrameSplitOperator.IsNonEmptyArray(this.Column)) return false;
4375
+ if (index<0 || index>=this.Column.length) return false;
4376
+
4377
+ this.Column.splice(index,1);
4378
+ return true;
4379
+ }
4380
+
4212
4381
  this.GetXScrollPos=function()
4213
4382
  {
4214
4383
  return this.Data.XOffset;
@@ -6863,7 +7032,14 @@ function ChartReport()
6863
7032
 
6864
7033
  if (buttonData.Type===0) //checkbox
6865
7034
  {
6866
- var sendData={ Column:buttonData.Column, Index:buttonData.Index, Stock:buttonData.Stock, Data:buttonData.Data, PreventDefault: false };
7035
+ var sendData=
7036
+ {
7037
+ Column:buttonData.Column, Index:buttonData.Index, Stock:buttonData.Stock, ColumnIndex:buttonData.ColumnIndex,
7038
+ Data:buttonData.Data, Value:true,
7039
+ PreventDefault: false
7040
+ };
7041
+ if (IFrameSplitOperator.IsBool(buttonData.Data.Checked)) sendData.Value=!buttonData.Data.Checked;
7042
+
6867
7043
  this.SendClickEvent(JSCHART_EVENT_ID.ON_CLICK_REPORT_CHECKBOX, sendData)
6868
7044
 
6869
7045
  if (!sendData.PreventDefault)
@@ -6879,7 +7055,7 @@ function ChartReport()
6879
7055
  }
6880
7056
  else if (buttonData.Type===1) //button
6881
7057
  {
6882
- var sendData={ Column:buttonData.Column, Index:buttonData.Index, Stock:buttonData.Stock, Data:buttonData.Data };
7058
+ var sendData={ Column:buttonData.Column, Index:buttonData.Index, Stock:buttonData.Stock, ColumnIndex:buttonData.ColumnIndex, Data:buttonData.Data };
6883
7059
  this.SendClickEvent(JSCHART_EVENT_ID.ON_CLICK_REPORT_BUTTON, sendData)
6884
7060
 
6885
7061
  status.Redraw=true;
@@ -6887,7 +7063,7 @@ function ChartReport()
6887
7063
  }
6888
7064
  else if (buttonData.Type===2) //link
6889
7065
  {
6890
- var sendData={ Column:buttonData.Column, Index:buttonData.Index, Stock:buttonData.Stock, Data:buttonData.Data };
7066
+ var sendData={ Column:buttonData.Column, Index:buttonData.Index, Stock:buttonData.Stock, ColumnIndex:buttonData.ColumnIndex, Data:buttonData.Data };
6891
7067
  this.SendClickEvent(JSCHART_EVENT_ID.ON_CLICK_REPORT_LINK, sendData)
6892
7068
 
6893
7069
  status.Redraw=true;