hqchart 1.1.14425 → 1.1.14439

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.
@@ -3950,7 +3950,6 @@ if (!JSConsole)
3950
3950
  function JSChart(divElement, bOffscreen, bCacheCanvas)
3951
3951
  {
3952
3952
  this.DivElement=divElement;
3953
- this.DivToolElement=null; //工具条
3954
3953
  this.JSChartContainer; //画图控件
3955
3954
  this.ResizeListener;
3956
3955
 
@@ -4046,6 +4045,7 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
4046
4045
  //画布大小通过div获取 如果有style里的大小 使用style里的
4047
4046
  var height=this.DivElement.offsetHeight;
4048
4047
  var width=this.DivElement.offsetWidth;
4048
+ var pixelTatio = GetDevicePixelRatio(); //获取设备的分辨率s
4049
4049
  if (this.DivElement.style.height && this.DivElement.style.width)
4050
4050
  {
4051
4051
  if (this.DivElement.style.height.includes("px"))
@@ -4053,21 +4053,12 @@ function JSChart(divElement, bOffscreen, bCacheCanvas)
4053
4053
  if (this.DivElement.style.width.includes("px"))
4054
4054
  width=parseInt(this.DivElement.style.width.replace("px",""));
4055
4055
  }
4056
-
4057
- if (this.ToolElement)
4058
- {
4059
- //TODO调整工具条大小
4060
- height-=this.ToolElement.style.height.replace("px",""); //减去工具条的高度
4061
- }
4062
4056
 
4063
- this.CanvasElement.height=height;
4064
- this.CanvasElement.width=width;
4065
- this.CanvasElement.style.width=this.CanvasElement.width+'px';
4066
- this.CanvasElement.style.height=this.CanvasElement.height+'px';
4057
+ this.CanvasElement.style.width=`${width}px`;
4058
+ this.CanvasElement.style.height=`${height}px`;
4067
4059
 
4068
- var pixelTatio = GetDevicePixelRatio(); //获取设备的分辨率
4069
- this.CanvasElement.height*=pixelTatio;
4070
- this.CanvasElement.width*=pixelTatio;
4060
+ this.CanvasElement.height=parseInt(pixelTatio*height); //根据分辨率缩放
4061
+ this.CanvasElement.width=parseInt(pixelTatio*width);
4071
4062
 
4072
4063
  if (this.OffscreenCanvasElement)
4073
4064
  {
@@ -9870,6 +9861,7 @@ function JSChartContainer(uielement, OffscreenElement, cacheElement)
9870
9861
  for(var i=0;i<this.ExtendChartPaint.length;++i)
9871
9862
  {
9872
9863
  var item=this.ExtendChartPaint[i];
9864
+
9873
9865
  if (item.IsCallbackDraw)
9874
9866
  {
9875
9867
  if (["KLineYAxisBGPaint","DepthMapPaint","BackgroundPaint","MinuteBackgroundPaint", "SessionBreaksPaint"].includes(item.ClassName))
@@ -48371,6 +48363,25 @@ function IExtendChartPainting()
48371
48363
  {
48372
48364
  return GetFontHeight(this.Canvas, font, "擎");
48373
48365
  }
48366
+
48367
+ this.SetFillStyle=function(color, x0, y0, x1, y1)
48368
+ {
48369
+ if (Array.isArray(color))
48370
+ {
48371
+ let gradient = this.Canvas.createLinearGradient(x0, y0, x1, y1);
48372
+ var offset=1/(color.length-1);
48373
+ for(var i=0; i<color.length; ++i)
48374
+ {
48375
+ var value=i*offset;
48376
+ gradient.addColorStop(value, color[i]);
48377
+ }
48378
+ this.Canvas.fillStyle=gradient;
48379
+ }
48380
+ else
48381
+ {
48382
+ this.Canvas.fillStyle=color;
48383
+ }
48384
+ }
48374
48385
  }
48375
48386
 
48376
48387
  //K线Tooltip, 显示在左边或右边
@@ -52540,7 +52551,7 @@ function KLineYAxisBGPaint()
52540
52551
  }
52541
52552
 
52542
52553
 
52543
- //背景图 支持横屏
52554
+ //背景图 支持横屏 新版本
52544
52555
  function BackgroundPaint()
52545
52556
  {
52546
52557
  this.newMethod=IExtendChartPainting; //派生
@@ -52552,327 +52563,210 @@ function BackgroundPaint()
52552
52563
  this.IsDynamic=false;
52553
52564
  this.IsCallbackDraw=true; //在回调函数里绘制, 不在Draw()中绘制
52554
52565
 
52566
+ this.IsDrawAllFrame=false; //全部的指标框都画
52567
+ this.SetDrawFrameID=new Set([0]); //指定几个指标框画
52568
+
52555
52569
  this.FrameID=0;
52556
- this.Data; //背景数据 { Start:, End:, Color:[] }
52570
+ this.Data; //背景数据[ { Start:{ Date:, Time: }, End:{ Date:, Time }, Color:['rgb(44,55,255)','rgb(200,55,255)'] }]
52571
+ this.IsShow=true;
52572
+ this.SubFrame=null;
52573
+
52557
52574
  this.ID=Guid(); //唯一的ID
52558
-
52559
- /*
52560
- this.Data=
52561
- [
52562
- { Start:{ Date:20181201 }, End:{ Date:20181230 }, Color:'rgb(44,55,44)' } ,
52563
- { Start:{ Date:20190308 }, End:{ Date:20190404 }, Color:['rgb(44,55,255)','rgb(200,55,255)'] }
52564
- ]
52565
- */
52566
-
52567
- this.ChartSubFrame;
52568
- this.ChartBorder;
52569
- this.KData;
52570
- this.Period;
52571
- this.XPointCount=0;
52575
+ this.HQChart;
52572
52576
 
52573
52577
  this.SetOption=function(option) //设置
52574
52578
  {
52575
- if (option.FrameID>0) this.FrameID=option.FrameID;
52579
+ if (!option) return;
52580
+
52581
+ if (IFrameSplitOperator.IsNumber(option.FrameID)) this.FrameID=option.FrameID;
52576
52582
  if (IFrameSplitOperator.IsObjectExist(option.ID)) this.ID=option.ID;
52583
+ if (IFrameSplitOperator.IsBool(option.IsDrawAllFrame)) this.IsDrawAllFrame=option.IsDrawAllFrame;
52584
+ if (IFrameSplitOperator.IsNonEmptyArray(option.AryFrameID)) this.SetDrawFrameID=new Set(option.AryFrameID);
52577
52585
  }
52578
52586
 
52579
52587
  this.Draw=function()
52580
52588
  {
52581
- if (!this.Data || !this.HQChart) return;
52582
- if (!this.ChartFrame || !this.ChartFrame.SubFrame || this.ChartFrame.SubFrame.length<=this.FrameID) return;
52583
- var klineChart=this.HQChart.ChartPaint[0];
52584
- if (!klineChart || !klineChart.Data) return;
52585
-
52586
- this.ChartSubFrame=this.ChartFrame.SubFrame[this.FrameID].Frame;
52587
- this.ChartBorder=this.ChartSubFrame.ChartBorder;
52588
- this.KData=klineChart.Data;
52589
- this.Period=this.HQChart.Period;
52590
- if (!this.KData || this.KData.Data.length<=0) return;
52591
-
52592
- var isHScreen=(this.ChartSubFrame.IsHScreen===true);
52593
- this.XPointCount=this.ChartSubFrame.XPointCount;
52594
- var xPointCount=this.ChartSubFrame.XPointCount;
52595
-
52596
- var firstKItem=this.KData.Data[this.KData.DataOffset];
52597
- var endIndex=this.KData.DataOffset+xPointCount-1;
52598
- if (endIndex>=this.KData.Data.length) endIndex=this.KData.Data.length-1;
52599
- var endKItem=this.KData.Data[endIndex];
52600
- var showData=this.GetShowData(firstKItem,endKItem);
52601
- if (!showData || showData.length<=0) return;
52602
-
52603
- var kLineMap=this.BuildKLineMap();
52604
- var bottom=this.ChartBorder.GetBottomEx();
52605
- var top=this.ChartBorder.GetTopEx();
52606
- var height=this.ChartBorder.GetHeightEx();
52607
- if (isHScreen)
52589
+ this.SubFrame=null;
52590
+
52591
+ if (this.FrameID<0) return;
52592
+ if (!this.HQChart) return;
52593
+ if (!this.ChartFrame || !IFrameSplitOperator.IsNonEmptyArray(this.ChartFrame.SubFrame)) return;
52594
+ if (!this.IsShow) return;
52595
+ if (!IFrameSplitOperator.IsNonEmptyArray(this.Data)) return;
52596
+ if (!this.ChartFrame.SubFrame[this.FrameID]) return;
52597
+ this.SubFrame=this.ChartFrame.SubFrame[this.FrameID].Frame;
52598
+ if (!this.SubFrame) return;
52599
+
52600
+ var kData=this.HQChart.GetKData();
52601
+ if (!kData || !IFrameSplitOperator.IsNonEmptyArray(kData.Data)) return;
52602
+
52603
+ var bHScreen=(this.SubFrame.IsHScreen===true);
52604
+ this.IsHScreen=bHScreen;
52605
+ var isMinute=this.SubFrame.IsMinuteFrame();
52606
+ var dataWidth=this.SubFrame.DataWidth;
52607
+ var distanceWidth=this.SubFrame.DistanceWidth;
52608
+ var xPointCount=this.SubFrame.XPointCount;
52609
+
52610
+ var border=this.SubFrame.GetBorder();
52611
+ if (bHScreen)
52608
52612
  {
52609
- top=this.ChartBorder.GetRightEx();
52610
- bottom=this.ChartBorder.GetLeftEx();
52611
- height=this.ChartBorder.GetWidthEx();
52613
+ var chartright=border.BottomEx;
52614
+ var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
52615
+ }
52616
+ else
52617
+ {
52618
+ var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
52619
+ var chartright=border.RightEx;
52612
52620
  }
52613
52621
 
52614
- for(var i in showData)
52622
+ var mapBG=new Map(); //key= index, Value={ Start:{Left, Center, Right, Item:}, End:{ Left, Center, Right, Item:} }
52623
+ var startIndex=kData.DataOffset;
52624
+ for(var i=startIndex,j=0;i<kData.Data.length && j<xPointCount;++i,++j,xOffset+=(dataWidth+distanceWidth))
52615
52625
  {
52616
- var item=showData[i];
52617
- var rt=this.GetBGCoordinate(item,kLineMap);
52618
- if (!rt) continue;
52626
+ var kItem=kData.Data[i];
52627
+ var aryFind=this.FindMatchData(kItem);
52628
+ if (!aryFind) continue;
52619
52629
 
52620
- if (Array.isArray(item.Color))
52630
+ if (isMinute)
52621
52631
  {
52622
- var gradient;
52623
- if (isHScreen) gradient = this.Canvas.createLinearGradient(bottom,rt.Left, top, rt.Left);
52624
- else gradient = this.Canvas.createLinearGradient(rt.Left,top, rt.Left,bottom);
52625
- var offset=1/item.Color.length;
52626
- for(var i in item.Color)
52627
- {
52628
- gradient.addColorStop(i*offset, item.Color[i]);
52629
- }
52630
- this.Canvas.fillStyle=gradient;
52632
+ var x=this.ChartFrame.GetXFromIndex(j);
52633
+ var left=x;
52634
+ var right=x;
52631
52635
  }
52632
52636
  else
52633
52637
  {
52634
- this.Canvas.fillStyle=item.Color;
52638
+ var left=xOffset;
52639
+ var right=xOffset+dataWidth;
52640
+ var x=left+(right-left)/2;
52635
52641
  }
52636
52642
 
52637
- if (isHScreen) this.Canvas.fillRect(ToFixedRect(bottom),ToFixedRect(rt.Left),ToFixedRect(height),ToFixedRect(rt.Width));
52638
- else this.Canvas.fillRect(ToFixedRect(rt.Left),ToFixedRect(top),ToFixedRect(rt.Width),ToFixedRect(height));
52643
+ for(var k=0;k<aryFind.length;++k)
52644
+ {
52645
+ var findItem=aryFind[k];
52646
+ if (mapBG.has(findItem.Index))
52647
+ {
52648
+ var bgItem=mapBG.get(findItem.Index);
52649
+ bgItem.End.Left=left;
52650
+ bgItem.End.Right=right;
52651
+ bgItem.End.Item=findItem.Item;
52652
+ }
52653
+ else
52654
+ {
52655
+ mapBG.set(findItem.Index, { Item:findItem.Item, Start:{ Left:left, Right:right, Item:findItem.Item }, End:{ Left:left, Right:right, Item:findItem.Item }})
52656
+ }
52657
+ }
52658
+ }
52659
+
52660
+ if (mapBG.size>0)
52661
+ {
52662
+ this.Canvas.save();
52663
+ //this.ClipClient(bHScreen);
52664
+
52665
+ this.DrawBG(mapBG);
52666
+
52667
+ this.Canvas.restore();
52639
52668
  }
52640
52669
  }
52641
52670
 
52642
- this.GetShowData=function(first, end)
52671
+ this.FindMatchData=function(kItem)
52643
52672
  {
52644
- if (!IFrameSplitOperator.IsNonEmptyArray(this.Data)) return null;
52645
-
52646
- var aryData=[];
52673
+ var aryFind=[];
52647
52674
  for(var i=0;i<this.Data.length;++i)
52648
52675
  {
52649
52676
  var item=this.Data[i];
52650
- var showItem={ };
52651
- if (item.Start.Date>=first.Date && item.Start.Date<=end.Date) showItem.Start=item.Start;
52652
- if (item.End.Date>=first.Date && item.End.Date<=end.Date) showItem.End=item.End;
52653
-
52654
- if (item.Start.Date<first.Date && item.End.Date>end.Date)
52677
+ var start=item.Start;
52678
+ var end=item.End;
52679
+ var bMatch=false;
52680
+ if (IFrameSplitOperator.IsNumber(kItem.Date) && IFrameSplitOperator.IsNumber(kItem.Time))
52655
52681
  {
52656
- showItem.Start=first;
52657
- showItem.End=end;
52682
+ if (kItem.Date>start.Date && kItem.Date<end.Date)
52683
+ {
52684
+ bMatch=true;
52685
+ }
52686
+ else if (kItem.Date==start.Date && kItem.Date==end.Date)
52687
+ {
52688
+ if (kItem.Time>=start.Time && kItem.Time<=end.Time)bMatch=true;
52689
+ }
52690
+ else if (kItem.Date==start.Date)
52691
+ {
52692
+ if (kItem.Time>=start.Time) bMatch=true;
52693
+ }
52694
+ else if (kItem.Date==end.Date)
52695
+ {
52696
+ if ((kItem.Time<=end.Time)) bMatch=true;
52697
+ }
52658
52698
  }
52659
-
52660
-
52661
- if (showItem.Start || showItem.End)
52699
+ else if (IFrameSplitOperator.IsNumber(kItem.Date) && !IFrameSplitOperator.IsNumber(kItem.Time))
52662
52700
  {
52663
- showItem.Color=item.Color;
52664
- aryData.push(showItem);
52701
+ if (kItem.Date>=start.Date && kItem.Date<=end.Date) bMatch=true;
52665
52702
  }
52703
+
52704
+ if (bMatch) aryFind.push({ Index:i, Item:item });
52666
52705
  }
52667
52706
 
52668
- //JSConsole.Chart.Log('[BackgroundPaint::GetShowData] aryData ', aryData);
52669
- return aryData;
52707
+ if (aryFind.Length<=0) return null;
52708
+
52709
+ return aryFind;
52670
52710
  }
52671
52711
 
52672
- this.BuildKLineMap=function()
52712
+ this.DrawBG=function(mapBG)
52673
52713
  {
52674
- var isHScreen=(this.ChartSubFrame.IsHScreen===true);
52675
- var dataWidth=this.ChartSubFrame.DataWidth;
52676
- var distanceWidth=this.ChartSubFrame.DistanceWidth;
52677
- var xOffset=this.ChartBorder.GetLeft()+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
52678
- if (isHScreen) xOffset=this.ChartBorder.GetTop()+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
52679
- var chartright=this.ChartBorder.GetRight();
52680
- if (isHScreen) chartright=this.ChartBorder.GetBottom();
52681
-
52682
- var mapKLine={ Data:new Map() ,Start:null, End:null } ; //Key: date / date time, Value:索引
52683
- for(var i=this.KData.DataOffset,j=0; i<this.KData.Data.length && j<this.XPointCount; ++i,++j,xOffset+=(dataWidth+distanceWidth))
52714
+ for(var mapItem of mapBG)
52684
52715
  {
52685
- var kItem=this.KData.Data[i];
52686
- var left=xOffset;
52687
- var right=xOffset+dataWidth;
52688
- if (right>chartright) break;
52689
- var x=left+(right-left)/2;
52690
-
52691
- if (j==0) mapKLine.XLeft=left;
52692
- mapKLine.XRight=right;
52693
-
52694
- var value={ Index:i, ShowIndex:j , X:x, Right:right, Left:left, Date:kItem.Date };
52695
- if (ChartData.IsMinutePeriod(this.Period,true))
52696
- {
52697
- var key=`Date:${kItem.Date} Time:${kItem.Time}`;
52698
- value.Time=kItem.Time;
52699
- }
52700
- else
52716
+ var bgItem=mapItem[1];
52717
+ //this.DrawBGItem(this.SubFrame, bgItem);
52718
+
52719
+ for(var i=0;i<this.ChartFrame.SubFrame.length;++i)
52701
52720
  {
52702
- var key=`Date:${kItem.Date}`;
52721
+ var subFrame=this.ChartFrame.SubFrame[i].Frame;
52722
+ if (this.IsDrawAllFrame || this.SetDrawFrameID.has(i))
52723
+ {
52724
+ this.DrawBGItem(subFrame, bgItem);
52725
+ }
52703
52726
  }
52704
-
52705
- mapKLine.Data.set(key,value);
52706
-
52707
- //保存下起始和结束位置
52708
- if (j==0) mapKLine.Start=value;
52709
- mapKLine.End=value;
52710
52727
  }
52711
-
52712
- return mapKLine;
52713
52728
  }
52714
52729
 
52715
- this.GetBGCoordinate=function(item,kLineMap)
52730
+ this.DrawBGItem=function(frame, bgItem)
52716
52731
  {
52717
- var xLeft=null, xRight=null;
52718
- var isMinutePeriod=ChartData.IsMinutePeriod(this.Period,true);
52719
- var bSingleDate=false;
52720
- //JSConsole.Chart.Log('[BackgroundPaint::GetBGCoordinate] item ', item);
52721
- if (isMinutePeriod)
52722
- {
52723
- if (item.Start && item.End && item.Start.Date==item.End.Date && item.Start.Time==item.End.Time) bSingleDate=true;
52724
- }
52725
- else
52726
- {
52727
- if (item.Start && item.End && item.Start.Date==item.End.Date) bSingleDate=true;
52728
- }
52729
-
52730
- if (bSingleDate)
52731
- {
52732
- if (isMinutePeriod)
52733
- var key=`Date:${item.Start.Date} Time:${item.Start.Time}`;
52734
- else
52735
- var key=`Date:${item.Start.Date}`;
52736
-
52737
- if (!kLineMap.Data.has(key)) return null;
52738
- var findItem=kLineMap.Data.get(key);
52739
- xLeft=findItem.Left;
52740
- xRight=findItem.Right;
52741
- return { Left:xLeft, Right:xRight, Width:xRight-xLeft };
52742
- }
52743
-
52744
- if (item.Start)
52732
+ var border=frame.GetBorder();
52733
+ if (this.IsHScreen)
52745
52734
  {
52746
- if (isMinutePeriod)
52747
- var key=`Date:${item.Start.Date} Time:${item.Start.Time}`;
52748
- else
52749
- var key=`Date:${item.Start.Date}`;
52750
-
52751
- if (kLineMap.Data.has(key))
52752
- {
52753
- var findItem=kLineMap.Data.get(key);
52754
- xLeft=findItem.Left;
52755
- }
52756
- else
52757
- {
52758
- if (isMinutePeriod)
52759
- {
52760
- if (item.Start.Date<kLineMap.Start.Date || (item.Start.Date==kLineMap.Start.Date && item.Start.Time<=kLineMap.Start.Time) )
52761
- {
52762
- xLeft=kLineMap.Start.Left;
52763
- }
52764
- else
52765
- {
52766
- for(var kItem of kLineMap.Data)
52767
- {
52768
- var value=kItem[1];
52769
- if (value.Date>item.Start.Date || (value.Date==item.Start.Date && value.Time>item.Start.Time))
52770
- {
52771
- xLeft=value.Left;
52772
- break;
52773
- }
52774
- }
52775
- }
52776
- }
52777
- else
52778
- {
52779
- if (item.Start.Date<=kLineMap.Start.Date)
52780
- {
52781
- xLeft=kLineMap.Start.Left;
52782
- }
52783
- else
52784
- {
52785
- for(var kItem of kLineMap.Data)
52786
- {
52787
- var value=kItem[1];
52788
- if (value.Date>item.Start.Date)
52789
- {
52790
- xLeft=value.Left;
52791
- break;
52792
- }
52793
- }
52794
- }
52795
- }
52796
- }
52735
+ var top=border.RightEx;
52736
+ var bottom=border.LeftEx;
52737
+ var left=border.Top;
52797
52738
  }
52798
52739
  else
52799
52740
  {
52800
- xLeft=kLineMap.XLeft;
52741
+ var top=border.TopEx;
52742
+ var bottom=border.BottomEx;
52743
+ var left=border.Left;
52801
52744
  }
52802
52745
 
52803
- if (item.End)
52746
+ if (this.IsHScreen)
52804
52747
  {
52805
- if (isMinutePeriod)
52806
- var key=`Date:${item.End.Date} Time:${item.End.Time}`;
52807
- else
52808
- var key=`Date:${item.End.Date}`;
52809
-
52810
- if (kLineMap.Data.has(key))
52811
- {
52812
- var findItem=kLineMap.Data.get(key);
52813
- xRight=findItem.Right;
52814
- }
52815
- else
52816
- {
52817
- if (isMinutePeriod)
52818
- {
52819
- if (item.End.Date<kLineMap.Start.Date || (item.End.Date==kLineMap.Start.Date && item.End.Time<kLineMap.Start.Time)) return null;
52820
-
52821
- if (item.End.Date<kLineMap.End.Date || (item.End.Date==kLineMap.End.Date && item.End.Time>=kLineMap.End.Time) )
52822
- {
52823
- xRight=kLineMap.End.Right;
52824
- }
52825
- else
52826
- {
52827
- var previousX=null;
52828
- for(var kItem of kLineMap.Data)
52829
- {
52830
- var value=kItem[1];
52831
- if (value.Date>item.End.Date || (value.Date==item.End.Date && value.Time>item.End.Time) )
52832
- {
52833
- xRight=previousX;
52834
- break;
52835
- }
52836
- previousX=value.Right;
52837
- }
52838
- }
52839
- }
52840
- else
52841
- {
52842
- if (item.End.Date<kLineMap.Start.Date) return null;
52843
-
52844
- if (item.End.Date<=kLineMap.End.Date)
52845
- {
52846
- xRight=kLineMap.End.Right;
52847
- }
52848
- else
52849
- {
52850
- var previousX=null;
52851
- for(var kItem of kLineMap.Data)
52852
- {
52853
- var value=kItem[1];
52854
- if (value.Date>item.End.Date)
52855
- {
52856
- xRight=previousX;
52857
- break;
52858
- }
52859
- previousX=value.Right;
52860
- }
52861
- }
52862
- }
52863
- }
52748
+ this.SetFillStyle(bgItem.Item.Color,top,left,bottom,left);
52749
+ var start=bgItem.Start;
52750
+ var end=bgItem.End;
52751
+ var rtBG={ Left:bottom, Right:top, Top:start.Left, Bottom:end.Right };
52752
+ rtBG.Width=rtBG.Right-rtBG.Left;
52753
+ rtBG.Height=rtBG.Bottom-rtBG.Top;
52754
+ this.Canvas.fillRect(ToFixedRect(rtBG.Left),ToFixedRect(rtBG.Top),ToFixedRect(rtBG.Width),ToFixedRect(rtBG.Height));
52864
52755
  }
52865
52756
  else
52866
52757
  {
52867
- xRight=kLineMap.XRight;
52758
+ this.SetFillStyle(bgItem.Item.Color, left,top, left,bottom);
52759
+ var start=bgItem.Start;
52760
+ var end=bgItem.End;
52761
+ var rtBG={ Left:start.Left, Right:end.Right, Top:top, Bottom:bottom };
52762
+ rtBG.Width=rtBG.Right-rtBG.Left;
52763
+ rtBG.Height=rtBG.Bottom-rtBG.Top;
52764
+ this.Canvas.fillRect(ToFixedRect(rtBG.Left),ToFixedRect(rtBG.Top),ToFixedRect(rtBG.Width),ToFixedRect(rtBG.Height));
52868
52765
  }
52869
-
52870
- if (xLeft==null || xRight==null) return null;
52871
-
52872
- return { Left:xLeft, Right:xRight, Width:xRight-xLeft };
52873
52766
  }
52874
52767
  }
52875
52768
 
52769
+
52876
52770
  function MinuteBackgroundPaint()
52877
52771
  {
52878
52772
  this.newMethod=IExtendChartPainting; //派生
@@ -62472,7 +62366,7 @@ function DynamicChartTitlePainting()
62472
62366
  var left=positionInfo.Left;
62473
62367
  var right=positionInfo.Right;
62474
62368
  var bottom=positionInfo.Bottom;
62475
-
62369
+ var pixelRatio=GetDevicePixelRatio();
62476
62370
  for(var i=0; i<this.Data.length; ++i)
62477
62371
  {
62478
62372
  var item=this.Data[i];
@@ -62491,7 +62385,9 @@ function DynamicChartTitlePainting()
62491
62385
  if (titleItem.Name) text=titleItem.Name+":"+titleItem.Text;
62492
62386
  else text=titleItem.Text;
62493
62387
 
62494
- var space=this.ParamSpace*GetDevicePixelRatio();
62388
+ if (IFrameSplitOperator.IsNumber(titleItem.LeftSpace)) left+=titleItem.LeftSpace*pixelRatio;
62389
+
62390
+ var space=this.ParamSpace*pixelRatio;
62495
62391
  var indexTextWidth=this.Canvas.measureText(text).width; //标题+数值长度
62496
62392
  var textWidth=indexTextWidth;
62497
62393
 
@@ -62567,7 +62463,7 @@ function DynamicChartTitlePainting()
62567
62463
  if (dyTitle) text=dyTitle+":"+valueText;
62568
62464
  else text=item.Name+":"+valueText;
62569
62465
  }
62570
- var space=this.ParamSpace*GetDevicePixelRatio();
62466
+ var space=this.ParamSpace*pixelRatio;
62571
62467
  var textWidth=this.Canvas.measureText(text).width+space;
62572
62468
  if ((left+textWidth)>right) break;
62573
62469
 
@@ -80143,12 +80039,14 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
80143
80039
  var item=option.PopMinuteChart;
80144
80040
  this.PopMinuteChart=new JSPopMinuteChart();
80145
80041
  this.PopMinuteChart.Inital(this, item);
80042
+ this.PopMinuteChart.Create();
80146
80043
  return true;
80147
80044
  }
80148
80045
  else if (option.KLine && option.KLine.KLineDoubleClick===true) //旧的格式 不要使用了
80149
80046
  {
80150
80047
  this.PopMinuteChart=new JSPopMinuteChart();
80151
80048
  this.PopMinuteChart.Inital(this);
80049
+ this.PopMinuteChart.Create();
80152
80050
  return true;
80153
80051
  }
80154
80052
 
@@ -83730,6 +83628,7 @@ function KLineChartContainer(uielement,OffscreenElement, cacheElement)
83730
83628
  chart.SetOption(option);
83731
83629
  this.ExtendChartPaint.push(chart);
83732
83630
  return chart;
83631
+ case "BackgroundPaint":
83733
83632
  case '背景图':
83734
83633
  chart=new BackgroundPaint();
83735
83634
  chart.Canvas=this.Canvas;
@@ -92330,6 +92229,16 @@ function MinuteChartContainer(uielement,offscreenElement,cacheElement)
92330
92229
  chart.SetOption(option);
92331
92230
  this.ExtendChartPaint.push(chart);
92332
92231
  return chart;
92232
+ case "BackgroundPaint":
92233
+ case "背景图":
92234
+ chart=new BackgroundPaint();
92235
+ chart.Canvas=this.Canvas;
92236
+ chart.ChartBorder=this.Frame.ChartBorder;
92237
+ chart.ChartFrame=this.Frame;
92238
+ chart.HQChart=this;
92239
+ chart.SetOption(option);
92240
+ this.ExtendChartPaint.push(chart);
92241
+ return chart;
92333
92242
  default:
92334
92243
  chart=g_ExtendChartPaintFactory.Create(name);
92335
92244
  if (!chart) return null;
@@ -132580,19 +132489,21 @@ function JSReportChartContainer(uielement)
132580
132489
  }
132581
132490
  break;
132582
132491
  case 38: //up
132583
- var result=this.MoveSelectedRow(-1);
132492
+ var result=this.MoveSelectedRow(-1, {EnablePageCycle: this.PageUpDownCycle});
132584
132493
  if (result)
132585
132494
  {
132586
132495
  if (result.Redraw) this.Draw();
132587
132496
  if (result.Update) this.DelayUpdateStockData();
132497
+ this.MoveSelectedRowEvent(result.OldIndex, result.NewIndex);
132588
132498
  }
132589
132499
  break;
132590
132500
  case 40: //down
132591
- var result=this.MoveSelectedRow(1)
132501
+ var result=this.MoveSelectedRow(1, {EnablePageCycle: this.PageUpDownCycle})
132592
132502
  if (result)
132593
132503
  {
132594
132504
  if (result.Redraw) this.Draw();
132595
132505
  if (result.Update) this.DelayUpdateStockData();
132506
+ this.MoveSelectedRowEvent(result.OldIndex, result.NewIndex);
132596
132507
  }
132597
132508
  break;
132598
132509
  case 37: //left
@@ -133753,13 +133664,19 @@ function JSReportChartContainer(uielement)
133753
133664
  return false;
133754
133665
  }
133755
133666
 
133756
- this.MoveSelectedRow=function(step)
133667
+ // option={ EnablePageCycle: true/false(是否循环翻页) }
133668
+ this.MoveSelectedRow=function(step, option)
133757
133669
  {
133758
133670
  var chart=this.ChartPaint[0];
133759
133671
  if (!chart) return null;
133760
133672
  if (!IFrameSplitOperator.IsNonEmptyArray(this.Data.Data)) return null;
133673
+ var bPageCycle=false;
133674
+ if (option)
133675
+ {
133676
+ if (IFrameSplitOperator.IsBool(option.EnablePageCycle)) bPageCycle=option.EnablePageCycle;
133677
+ }
133761
133678
 
133762
- var result={ Redraw:false, Update:false }; //Redraw=重绘, Update=更新数据
133679
+ var result={ Redraw:false, Update:false, OldIndex:-1, NewIndex:-1 }; //Redraw=重绘, Update=更新数据
133763
133680
 
133764
133681
  if (chart.MultiSelectModel==1)
133765
133682
  {
@@ -133861,6 +133778,7 @@ function JSReportChartContainer(uielement)
133861
133778
  var pageStatus=chart.GetCurrentPageStatus();
133862
133779
  var pageSize=pageStatus.End-pageStatus.Start+1;
133863
133780
  var selected=pageStatus.SelectedRow;
133781
+ result.OldIndex=this.Data.YOffset+selected;
133864
133782
  if (step>0)
133865
133783
  {
133866
133784
  selected+=step;
@@ -133868,6 +133786,7 @@ function JSReportChartContainer(uielement)
133868
133786
  chart.SelectedRow=selected;
133869
133787
  chart.SelectedFixedRow=-1;
133870
133788
  result.Redraw=true;
133789
+ result.NewIndex=this.Data.YOffset+selected;
133871
133790
  return result;
133872
133791
  }
133873
133792
  else if (step<0)
@@ -133881,6 +133800,7 @@ function JSReportChartContainer(uielement)
133881
133800
 
133882
133801
  chart.SelectedRow=selected;
133883
133802
  chart.SelectedFixedRow=-1;
133803
+ result.NewIndex=this.Data.YOffset+selected;
133884
133804
  result.Redraw=true;
133885
133805
  return result;
133886
133806
  }
@@ -133890,18 +133810,23 @@ function JSReportChartContainer(uielement)
133890
133810
  var pageStatus=chart.GetCurrentPageStatus();
133891
133811
  var pageSize=pageStatus.PageSize;
133892
133812
  var selected=pageStatus.SelectedRow;
133813
+ result.OldIndex=pageStatus.SelectedRow;
133893
133814
  if (step>0)
133894
133815
  {
133895
133816
  if (selected<0 || selected<pageStatus.Start || selected>pageStatus.End)
133896
133817
  {
133897
133818
  chart.SelectedRow=pageStatus.Start;
133898
133819
  result.Redraw=true;
133820
+ result.NewIndex=pageStatus.Start;
133899
133821
  return result;
133900
133822
  }
133901
133823
 
133902
133824
  var offset=this.Data.YOffset;
133903
133825
  for(var i=0;i<step;++i)
133904
133826
  {
133827
+ if (selected+1>=this.Data.Data.length && !bPageCycle)
133828
+ break;
133829
+
133905
133830
  ++selected;
133906
133831
  if (selected>pageStatus.End) ++offset;
133907
133832
 
@@ -133917,7 +133842,7 @@ function JSReportChartContainer(uielement)
133917
133842
 
133918
133843
  chart.SelectedRow=selected;
133919
133844
  this.Data.YOffset=offset;
133920
-
133845
+ result.NewIndex=selected;
133921
133846
  return result;
133922
133847
  }
133923
133848
  else if (step<0)
@@ -133926,6 +133851,7 @@ function JSReportChartContainer(uielement)
133926
133851
  {
133927
133852
  chart.SelectedRow=pageStatus.End;
133928
133853
  result.Redraw=true;
133854
+ result.NewIndex=pageStatus.End;
133929
133855
  return result;
133930
133856
  }
133931
133857
 
@@ -133933,6 +133859,9 @@ function JSReportChartContainer(uielement)
133933
133859
  var offset=this.Data.YOffset;
133934
133860
  for(var i=0;i<step;++i)
133935
133861
  {
133862
+ if (selected<=0 && !bPageCycle) //不能循环翻页
133863
+ break;
133864
+
133936
133865
  --selected;
133937
133866
  if (selected<pageStatus.Start) --offset;
133938
133867
 
@@ -133949,6 +133878,7 @@ function JSReportChartContainer(uielement)
133949
133878
 
133950
133879
  chart.SelectedRow=selected;
133951
133880
  this.Data.YOffset=offset;
133881
+ result.NewIndex=selected;
133952
133882
 
133953
133883
  return result;
133954
133884
  }
@@ -133957,6 +133887,36 @@ function JSReportChartContainer(uielement)
133957
133887
  return null;
133958
133888
  }
133959
133889
 
133890
+ this.MoveSelectedRowEvent=function(oldIndex, newIndex)
133891
+ {
133892
+ var chart=this.ChartPaint[0];
133893
+ if (!chart) return null;
133894
+
133895
+ if (oldIndex==newIndex) return;
133896
+
133897
+ var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_MOVE_SELECTED_REPORT_ROW);
133898
+ if (!event || !event.Callback) return;
133899
+
133900
+ if (!IFrameSplitOperator.IsNonEmptyArray(chart.Data.Data)) return;
133901
+ var arySymbol=chart.Data.Data;
133902
+
133903
+ var oldData=null, newData=null;
133904
+ if (oldIndex>=0 && oldIndex<arySymbol.length)
133905
+ {
133906
+ var symbol=arySymbol[oldIndex];
133907
+ oldData={ Symbol:symbol, Index:oldIndex };
133908
+ }
133909
+
133910
+ if (newIndex>=0 && newIndex<arySymbol.length)
133911
+ {
133912
+ var symbol=arySymbol[newIndex];
133913
+ newData={ Symbol:symbol, Index:newIndex };
133914
+ }
133915
+
133916
+ var endData={ Old:oldData, Now:newData };
133917
+ event.Callback(event, endData, this);
133918
+ }
133919
+
133960
133920
  //左右移动
133961
133921
  this.MoveXOffset=function(step)
133962
133922
  {
@@ -143437,7 +143397,7 @@ function ScrollBarBGChart()
143437
143397
 
143438
143398
 
143439
143399
 
143440
- var HQCHART_VERSION="1.1.14424";
143400
+ var HQCHART_VERSION="1.1.14438";
143441
143401
 
143442
143402
  function PrintHQChartVersion()
143443
143403
  {