hqchart 1.1.13335 → 1.1.13346

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.
@@ -1135,12 +1135,15 @@ this.OffscreenCanvasElement;if(bOffscreen==true)this.OffscreenCanvasElement=docu
1135
1135
  this.CacheCanvasElement=null;if(bCacheCanvas)this.CacheCanvasElement=document.createElement("canvas");//改参数div
1136
1136
  this.ModifyIndexDialog=new ModifyIndexDialog(divElement);this.ChangeIndexDialog=new ChangeIndexDialog(divElement);this.MinuteDialog=new MinuteDialog(divElement);//额外的画布
1137
1137
  this.MapExtraCanvasElement=new _map2.default();//key=画布名字, value={ Element:, Canvas:}
1138
- this.CreateExtraCanvasElement=function(name,option){if(this.MapExtraCanvasElement.has(name))return this.MapExtraCanvasElement.get(name);var element=document.createElement("canvas");element.className='jschart-drawing-extra';element.id=Guid();if(name==JSChart.CorssCursorCanvasKey)element.setAttribute("tabindex",5);else element.setAttribute("tabindex",1);if(element.style){element.style.outline='none';element.style.position="absolute";element.style.left='0px';element.style.top='0px';element.style["pointer-events"]="none";}if(option){if(IFrameSplitOperator.IsNumber(option.TabIndex))element.setAttribute("tabindex",option.TabIndex);if(IFrameSplitOperator.IsNumber(option.ZIndex))element.style["z-index"]=option.ZIndex;}divElement.appendChild(element);var item={Element:element,Canvas:null};this.MapExtraCanvasElement.set(name,item);};this.GetExtraCanvas=function(name){if(!this.MapExtraCanvasElement.has(name))return null;var item=this.MapExtraCanvasElement.get(name);if(!item.Element)return null;if(!item.Canvas)item.Canvas=item.Element.getContext("2d");return item;};this.OnSize=function(option)//{ Type:1 新版本OnSize Redraw:是否重绘, XYSplit:是否重新计算分割线 }
1139
- {//画布大小通过div获取 如果有style里的大小 使用style里的
1138
+ this.CreateExtraCanvasElement=function(name,option){if(this.MapExtraCanvasElement.has(name))return this.MapExtraCanvasElement.get(name);var element=document.createElement("canvas");element.className='jschart-drawing-extra';element.id=Guid();if(name==JSChart.CorssCursorCanvasKey)element.setAttribute("tabindex",5);else element.setAttribute("tabindex",1);if(element.style){element.style.outline='none';element.style.position="absolute";element.style.left='0px';element.style.top='0px';element.style["pointer-events"]="none";}if(option){if(IFrameSplitOperator.IsNumber(option.TabIndex))element.setAttribute("tabindex",option.TabIndex);if(IFrameSplitOperator.IsNumber(option.ZIndex))element.style["z-index"]=option.ZIndex;}divElement.appendChild(element);var item={Element:element,Canvas:null};this.MapExtraCanvasElement.set(name,item);};this.GetExtraCanvas=function(name){if(!this.MapExtraCanvasElement.has(name))return null;var item=this.MapExtraCanvasElement.get(name);if(!item.Element)return null;if(!item.Canvas)item.Canvas=item.Element.getContext("2d");return item;};/*
1139
+ { Type: 1=K线柱子宽度不变 2=K线全部显示
1140
+ Redraw:是否重绘, XYSplit:是否重新计算分割线 }
1141
+ */this.OnSize=function(option){//画布大小通过div获取 如果有style里的大小 使用style里的
1140
1142
  if(this.DivElement.style.height&&this.DivElement.style.width){var height=parseInt(this.DivElement.style.height.replace("px",""));var width=parseInt(this.DivElement.style.width.replace("px",""));}else{var height=this.DivElement.offsetHeight;var width=this.DivElement.offsetWidth;}if(this.ToolElement){//TODO调整工具条大小
1141
1143
  height-=this.ToolElement.style.height.replace("px","");//减去工具条的高度
1142
1144
  }this.CanvasElement.height=height;this.CanvasElement.width=width;this.CanvasElement.style.width=this.CanvasElement.width+'px';this.CanvasElement.style.height=this.CanvasElement.height+'px';var pixelTatio=GetDevicePixelRatio();//获取设备的分辨率
1143
- this.CanvasElement.height*=pixelTatio;this.CanvasElement.width*=pixelTatio;if(this.OffscreenCanvasElement){this.OffscreenCanvasElement.height=this.CanvasElement.height;this.OffscreenCanvasElement.width=this.CanvasElement.width;}if(this.CacheCanvasElement){this.CacheCanvasElement.height=this.CanvasElement.height;this.CacheCanvasElement.width=this.CanvasElement.width;}var _iteratorNormalCompletion=true;var _didIteratorError=false;var _iteratorError=undefined;try{for(var _iterator=(0,_getIterator3.default)(this.MapExtraCanvasElement),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var mapItem=_step.value;var item=mapItem[1];var element=item.Element;if(!element)continue;element.height=this.CanvasElement.height;element.width=this.CanvasElement.width;element.style.width=this.CanvasElement.style.width;element.style.height=this.CanvasElement.style.height;}}catch(err){_didIteratorError=true;_iteratorError=err;}finally{try{if(!_iteratorNormalCompletion&&_iterator.return){_iterator.return();}}finally{if(_didIteratorError){throw _iteratorError;}}}JSConsole.Chart.Log('[JSChart::OnSize] devicePixelRatio='+window.devicePixelRatio+', height='+this.CanvasElement.height+', width='+this.CanvasElement.width);if(option&&option.Redraw==false)return;if(this.JSChartContainer){if(option&&option.XYSplit===true)this.JSChartContainer.ResetFrameXYSplit();if(this.JSChartContainer.OnSize&&option&&option.Type==1){this.JSChartContainer.OnSize();}else{if(this.JSChartContainer.Frame)this.JSChartContainer.Frame.SetSizeChage(true);this.JSChartContainer.Draw();}}};//手机屏需要调整 间距
1145
+ this.CanvasElement.height*=pixelTatio;this.CanvasElement.width*=pixelTatio;if(this.OffscreenCanvasElement){this.OffscreenCanvasElement.height=this.CanvasElement.height;this.OffscreenCanvasElement.width=this.CanvasElement.width;}if(this.CacheCanvasElement){this.CacheCanvasElement.height=this.CanvasElement.height;this.CacheCanvasElement.width=this.CanvasElement.width;}var _iteratorNormalCompletion=true;var _didIteratorError=false;var _iteratorError=undefined;try{for(var _iterator=(0,_getIterator3.default)(this.MapExtraCanvasElement),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var mapItem=_step.value;var item=mapItem[1];var element=item.Element;if(!element)continue;element.height=this.CanvasElement.height;element.width=this.CanvasElement.width;element.style.width=this.CanvasElement.style.width;element.style.height=this.CanvasElement.style.height;}}catch(err){_didIteratorError=true;_iteratorError=err;}finally{try{if(!_iteratorNormalCompletion&&_iterator.return){_iterator.return();}}finally{if(_didIteratorError){throw _iteratorError;}}}JSConsole.Chart.Log('[JSChart::OnSize] devicePixelRatio='+window.devicePixelRatio+', height='+this.CanvasElement.height+', width='+this.CanvasElement.width);if(option&&option.Redraw==false)return;if(this.JSChartContainer){if(option&&option.XYSplit===true)this.JSChartContainer.ResetFrameXYSplit();if(this.JSChartContainer.OnSize&&option&&option.Type==1)//K线宽度不变
1146
+ {this.JSChartContainer.OnSize();}else if(this.JSChartContainer.ShowAllKLine&&option&&option.Type==2){this.JSChartContainer.ShowAllKLine();}else{if(this.JSChartContainer.Frame)this.JSChartContainer.Frame.SetSizeChage(true);this.JSChartContainer.Draw();}}};//手机屏需要调整 间距
1144
1147
  this.AdjustChartBorder=function(chart){var pixelTatio=GetDevicePixelRatio();//获取设备的分辨率
1145
1148
  chart.Frame.ChartBorder.Left*=pixelTatio;chart.Frame.ChartBorder.Right*=pixelTatio;chart.Frame.ChartBorder.Top*=pixelTatio;chart.Frame.ChartBorder.Bottom*=pixelTatio;if(chart.Frame.AutoLeftBorder){var item=chart.Frame.AutoLeftBorder;if(IFrameSplitOperator.IsNumber(item.MinWidth))item.MinWidth*=pixelTatio;if(IFrameSplitOperator.IsNumber(item.Blank))item.Blank*=pixelTatio;}if(chart.Frame.AutoRightBorder){var item=chart.Frame.AutoRightBorder;if(IFrameSplitOperator.IsNumber(item.MinWidth))item.MinWidth*=pixelTatio;if(IFrameSplitOperator.IsNumber(item.Blank))item.Blank*=pixelTatio;}};this.AdjustTitleHeight=function(chart){var pixelTatio=GetDevicePixelRatio();//获取设备的分辨率
1146
1149
  for(var i=0;i<chart.Frame.SubFrame.length;++i){chart.Frame.SubFrame[i].Frame.ChartBorder.TitleHeight*=pixelTatio;}chart.ChartCorssCursor.TextHeight*=pixelTatio;//十字光标文本信息高度
@@ -1267,7 +1270,7 @@ this.DeleteOverlaySymbol=function(symbol){if(this.JSChartContainer&&typeof this.
1267
1270
  this.SetFirstShowDate=function(obj){if(this.JSChartContainer&&typeof this.JSChartContainer.SetFirstShowDate=='function')this.JSChartContainer.SetFirstShowDate(obj);};//K线切换类型 0=实心K线 1=收盘价线 2=美国线 3=空心K线 4=面积图 5=订单流
1268
1271
  this.ChangeKLineDrawType=function(drawType,isDraw,option){if(this.JSChartContainer&&typeof this.JSChartContainer.ChangeKLineDrawType=='function')this.JSChartContainer.ChangeKLineDrawType(drawType,isDraw,option);};//指标窗口个数
1269
1272
  this.ChangeIndexWindowCount=function(count,option){if(this.JSChartContainer&&typeof this.JSChartContainer.ChangeIndexWindowCount=='function'){this.JSChartContainer.ChangeIndexWindowCount(count,option);}};//取消叠加
1270
- this.ClearOverlaySymbol=function(){if(this.JSChartContainer&&typeof this.JSChartContainer.ClearOverlaySymbol=='function'){this.JSChartContainer.ClearOverlaySymbol();}};this.DeleteKLineInfo=function(infoName){if(this.JSChartContainer&&typeof this.JSChartContainer.DeleteKLineInfo=='function'){this.JSChartContainer.DeleteKLineInfo(infoName);}};this.ClearKLineInfo=function(){if(this.JSChartContainer&&typeof this.JSChartContainer.ClearKLineInfo=='function'){this.JSChartContainer.ClearKLineInfo();}};this.AddKLineInfo=function(infoName,bUpdate){if(this.JSChartContainer&&typeof this.JSChartContainer.AddKLineInfo=='function'){this.JSChartContainer.AddKLineInfo(infoName,bUpdate);}};this.ChangMainDataControl=function(dataControl){if(this.JSChartContainer&&typeof this.JSChartContainer.SetMainDataConotrl=='function')this.JSChartContainer.SetMainDataConotrl(dataControl);};this.AddOverlayIndex=function(obj)//{WindowIndex:窗口ID, IndexName:指标ID, Identify:叠加指标ID(可选), API}
1273
+ this.ClearOverlaySymbol=function(){if(this.JSChartContainer&&typeof this.JSChartContainer.ClearOverlaySymbol=='function'){this.JSChartContainer.ClearOverlaySymbol();}};this.DeleteKLineInfo=function(infoName){if(this.JSChartContainer&&typeof this.JSChartContainer.DeleteKLineInfo=='function'){this.JSChartContainer.DeleteKLineInfo(infoName);}};this.ClearKLineInfo=function(){if(this.JSChartContainer&&typeof this.JSChartContainer.ClearKLineInfo=='function'){this.JSChartContainer.ClearKLineInfo();}};this.AddKLineInfo=function(infoName,bUpdate){if(this.JSChartContainer&&typeof this.JSChartContainer.AddKLineInfo=='function'){this.JSChartContainer.AddKLineInfo(infoName,bUpdate);}};this.AddOverlayIndex=function(obj)//{WindowIndex:窗口ID, IndexName:指标ID, Identify:叠加指标ID(可选), API}
1271
1274
  {if(this.JSChartContainer&&typeof this.JSChartContainer.AddOverlayIndex=='function')this.JSChartContainer.AddOverlayIndex(obj);};this.MoveOverlayIndex=function(src,dest,option){if(this.JSChartContainer&&typeof this.JSChartContainer.MoveOverlayIndex=='function')this.JSChartContainer.MoveOverlayIndex(src,dest,option);};this.MoveOverlayIndexToNewWindow=function(src,option){if(this.JSChartContainer&&typeof this.JSChartContainer.MoveOverlayIndexToNewWindow=='function')this.JSChartContainer.MoveOverlayIndexToNewWindow(src,option);};this.DeleteOverlayWindowsIndex=function(identify){if(this.JSChartContainer&&typeof this.JSChartContainer.DeleteOverlayWindowsIndex=='function')this.JSChartContainer.DeleteOverlayWindowsIndex(identify);};this.StopAutoUpdate=function(){if(this.JSChartContainer&&typeof this.JSChartContainer.StopAutoUpdate=='function')this.JSChartContainer.StopAutoUpdate();};this.ChartDestroy=function(){if(this.JSChartContainer&&typeof this.JSChartContainer.ChartDestroy=='function'){this.JSChartContainer.ChartDestroy();}};this.ChartDestory=this.ChartDestroy;//版本写错了,继续使用
1272
1275
  //设置深度图数据 depthData=[ {ID:深度图ID, Data:数据},] option={ Draw: true/false }
1273
1276
  this.SetDepthMapData=function(depthData,option){if(this.JSChartContainer&&typeof this.JSChartContainer.SetDepthMapData=='function')this.JSChartContainer.SetDepthMapData(depthData,option);};//设置强制横屏
@@ -1903,7 +1906,8 @@ drawPicture.Move(xStep,yStep,drag);return true;};this.FinishChartDrawPicturePoin
1903
1906
  {if(drawPicture.FinishedCallback)drawPicture.FinishedCallback(drawPicture);this.CurrentChartDrawPicture=null;return true;}drawPicture.PointMagnetKLine();drawPicture.Status=10;//完成
1904
1907
  drawPicture.PointToValue();this.ChartDrawPicture.push(drawPicture);this.CurrentChartDrawPicture=null;//通知上层画好了
1905
1908
  var event=this.GetEventCallback(JSCHART_EVENT_ID.ON_FINISH_DRAWPICTURE);//完成画图工具事件
1906
- if(event&&event.Callback){var sendData={DrawPicture:drawPicture};event.Callback(event,sendData,this);}else if(drawPicture.FinishedCallback)drawPicture.FinishedCallback(drawPicture);if(drawPicture.OnFinish)drawPicture.OnFinish();if(this.ChartDrawStorage)this.ChartDrawStorage.SaveDrawData(drawPicture);return true;};//选中画图工具 出现单个图形设置菜单
1909
+ if(event&&event.Callback){var sendData={DrawPicture:drawPicture};event.Callback(event,sendData,this);}//单个回调
1910
+ if(drawPicture.FinishedCallback)drawPicture.FinishedCallback(drawPicture);if(drawPicture.OnFinish)drawPicture.OnFinish();if(this.ChartDrawStorage)this.ChartDrawStorage.SaveDrawData(drawPicture);return true;};//选中画图工具 出现单个图形设置菜单
1907
1911
  this.OnSelectChartPicture=function(chart){JSConsole.Chart.Log('[JSChartContainer::OnSelectChartPicture]',chart);if(!this.DialogModifyDraw)return;if(chart.ClassName=="ChartDrawPictureText"||chart.ClassName=='ChartDrawVolProfile'){this.CloseModifyDrawDialog();if(!this.ChartPictureMenu)this.ChartPictureMenu=g_DialogFactory.Create('ChartPictureSettingMenu',this.UIElement.parentNode);if(!this.ChartPictureMenu)return;var event={data:{ChartPicture:chart,HQChart:this}};this.ChartPictureMenu.DoModal(event);}else{this.ShowModifyDrawDialog(chart);}};this.FinishMoveChartDrawPicture=function(){var drawPicture=this.CurrentChartDrawPicture;if(!drawPicture)return false;if(drawPicture.PointCount!=drawPicture.Point.length)return false;drawPicture.PointMagnetKLine();drawPicture.Status=10;//完成
1908
1912
  drawPicture.PointToValue();if(this.ChartDrawStorage)this.ChartDrawStorage.SaveDrawData(drawPicture);this.CurrentChartDrawPicture=null;if(this.SelectChartDrawPicture&&this.SelectChartDrawPicture.DragInfo)//图形移动了回调调用移动完成函数
1909
1913
  {var dargInfo=this.SelectChartDrawPicture.DragInfo;if(dargInfo.Click&&dargInfo.Move){if(dargInfo.Click.X!=dargInfo.Move.X||dargInfo.Click.Y!=dargInfo.Move.Y){//通知上层画好了
@@ -2012,7 +2016,7 @@ if(event&&event.Callback){var data={PreventDefault:false,CommandID:cmdID,Args:ar
2012
2016
  this.CreateChartPaintExtend=function(chart,windowIndex){if(windowIndex<0)return false;var subFrame=this.Frame.SubFrame[windowIndex];if(!subFrame||!subFrame.Frame)return false;var frame=subFrame.Frame;chart.Canvas=this.Canvas;chart.ChartBorder=frame.ChartBorder;chart.ChartFrame=frame;this.ChartPaintEx.push(chart);return true;};//删除指标窗口扩展图形 option={ ChartID:图形ID, WindowIndex:窗口 }
2013
2017
  this.DeleteChartPaintExtend=function(option,bCallDestroy){if(!option)return;if(!IFrameSplitOperator.IsNonEmptyArray(this.ChartPaintEx))return;if(IFrameSplitOperator.IsNumber(option.WindowIndex)){var windowIndex=option.WindowIndex;if(!this.Frame.SubFrame[windowIndex])return;var subFrame=this.Frame.SubFrame[windowIndex].Frame;if(!subFrame)return;var paint=[];//踢出当前窗口的指标画法
2014
2018
  var deleteCount=0;for(var i=0;i<this.ChartPaintEx.length;++i){var item=this.ChartPaintEx[i];var bFind=item.ChartFrame.Guid==subFrame.Guid||item.ChartFrame==subFrame;if(!bFind){paint.push(item);}else{++deleteCount;if(bCallDestroy===true){if(item&&item.OnDestroy)item.OnDestroy();//图形销毁
2015
- }}}if(deleteCount>0)this.ChartPaintEx=paint;}};}function GetDevicePixelRatio(){if(typeof window=='undefined')return 1;return window.devicePixelRatio||1;}function GetFontHeight(context,font,word){if(!context)return null;if(font)context.font=font;var text='擎';if(IFrameSplitOperator.IsString(word))text=word;var fontInfo=context.measureText(text);var textHeight=fontInfo.fontBoundingBoxAscent+fontInfo.fontBoundingBoxDescent;if(!IFrameSplitOperator.IsNumber(textHeight))textHeight=fontInfo.width+2*GetDevicePixelRatio();return textHeight;}function IsPhoneWeb(){var userAgentInfo=navigator.userAgent;var Agents=new Array("Android","iPhone","SymbianOS","Windows Phone","iPad","iPod");for(var v=0;v<Agents.length;v++){if(userAgentInfo.indexOf(Agents[v])>0)return true;}return false;}function OnKeyDown(e)//键盘事件
2019
+ }}}if(deleteCount>0)this.ChartPaintEx=paint;}};this.ClearCurrnetDrawPicture=function(){this.CurrentChartDrawPicture=null;};}function GetDevicePixelRatio(){if(typeof window=='undefined')return 1;return window.devicePixelRatio||1;}function GetFontHeight(context,font,word){if(!context)return null;if(font)context.font=font;var text='擎';if(IFrameSplitOperator.IsString(word))text=word;var fontInfo=context.measureText(text);var textHeight=fontInfo.fontBoundingBoxAscent+fontInfo.fontBoundingBoxDescent;if(!IFrameSplitOperator.IsNumber(textHeight))textHeight=fontInfo.width+2*GetDevicePixelRatio();return textHeight;}function IsPhoneWeb(){var userAgentInfo=navigator.userAgent;var Agents=new Array("Android","iPhone","SymbianOS","Windows Phone","iPad","iPod");for(var v=0;v<Agents.length;v++){if(userAgentInfo.indexOf(Agents[v])>0)return true;}return false;}function OnKeyDown(e)//键盘事件
2016
2020
  {if(this.JSChartContainer&&this.JSChartContainer.OnKeyDown)this.JSChartContainer.OnKeyDown(e);}function OnWheel(e)//上下滚动事件
2017
2021
  {if(this.JSChartContainer&&this.JSChartContainer.OnWheel)this.JSChartContainer.OnWheel(e);}function ToFixed(number,precision){var b=1;if(isNaN(number))return number;if(number<0)b=-1;var multiplier=Math.pow(10,precision);var value=Math.round(Math.abs(number)*multiplier)/multiplier*b;if(/^(\d+(?:\.\d+)?)(e)([\-]?\d+)$/.test(value))var s=value.toFixed2(precision);else var s=value.toString();var rs=s.indexOf('.');if(rs<0&&precision>0){rs=s.length;s+='.';}while(s.length<=rs+precision){s+='0';}return s;}Number.prototype.toFixed2=Number.prototype.toFixed;//备份下老的
2018
2022
  Number.prototype.toFixed=function(precision){return ToFixed(this,precision);};function Guid(){function S4(){return((1+Math.random())*0x10000|0).toString(16).substring(1);}return"guid"+(S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4());}function GetScrollPosition(){var scrollPos={};var scrollTop=0;var scrollLeft=0;if(document.documentElement&&(document.documentElement.scrollTop||document.documentElement.scrollLeft)){scrollTop=document.documentElement.scrollTop;scrollLeft=document.documentElement.scrollLeft;}else if(document.body){scrollTop=document.body.scrollTop;scrollLeft=document.body.scrollLeft;}scrollPos.Top=scrollTop;scrollPos.Left=scrollLeft;return scrollPos;}//修正线段有毛刺
@@ -2025,7 +2029,7 @@ return fixValue;}function ToFixedRect(value){// With a bitwise or.
2025
2029
  // Finally, a left bitwise shift.
2026
2030
  //value*=GetDevicePixelRatio();
2027
2031
  var rounded;return rounded=0.5+value<<0;}//深拷贝
2028
- function CloneData(data){if(!data)return null;var strData=(0,_stringify2.default)(data);var item=JSON.parse(strData);return item;}function IsRecvOverlap(rect1,rect2){return Math.max(rect1.Left,rect2.Left)<Math.min(rect1.Right,rect2.Right)&&Math.max(rect1.Top,rect2.Top)<Math.min(rect1.Bottom,rect2.Bottom);}function Point(){this.X;this.Y;}function SelectRectData(){this.Data;//主数据
2032
+ function CloneData(data){if(!data)return null;var strData=(0,_stringify2.default)(data);var item=JSON.parse(strData);return item;}function IsRecvOverlap(rect1,rect2){return Math.max(rect1.Left,rect2.Left)<Math.min(rect1.Right,rect2.Right)&&Math.max(rect1.Top,rect2.Top)<Math.min(rect1.Bottom,rect2.Bottom);}function CopyMerginConfig(dest,src){if(!src||!dest)return;if(IFrameSplitOperator.IsNumber(src.Left))dest.Left=src.Left;if(IFrameSplitOperator.IsNumber(src.Top))dest.Top=src.Top;if(IFrameSplitOperator.IsNumber(src.Right))dest.Right=src.Right;if(IFrameSplitOperator.IsNumber(src.Bottom))dest.Bottom=src.Bottom;}function Point(){this.X;this.Y;}function SelectRectData(){this.Data;//主数据
2029
2033
  this.JSChartContainer;//行情控件
2030
2034
  this.Start;//数据起始位子
2031
2035
  this.End;//数据结束位置
@@ -5931,7 +5935,9 @@ return 180+angle;if(x2<x1&&y2<y1)//第二象限
5931
5935
  return 180-angle;return angle;};//复制
5932
5936
  //this.CopyData=function() { }
5933
5937
  //this.PtInButtons=function(x, y) { }
5934
- }IChartDrawPicture.ColorToRGBA=function(color,opacity){var reg=/^(rgb|RGB)/;if(reg.test(color)){var strHex="#";var colorArr=color.replace(/(?:\(|\)|rgb|RGB)*/g,"").split(",");// 把RGB的3个数值变成数组
5938
+ //计算标签页大小
5939
+ this.CalculateLabelSize=function(labelInfo){var config=labelInfo.Config;this.Canvas.font=config.Font;this.Canvas.textAlign="left";this.Canvas.textBaseline="top";var lineHeight=this.Canvas.measureText("擎").width+2;var maxWidth=0,lineCount=0,labelHeight=config.Mergin.Top+config.Mergin.Bottom;for(var i=0;i<labelInfo.AryText.length;++i){if(i>0)labelHeight+=config.LineSpace;var item=labelInfo.AryText[i];item.NameWidth=0;item.TextWidth=0;if(item.Name)item.NameWidth=this.Canvas.measureText(item.Name).width+2;if(item.Text)item.TextWidth=this.Canvas.measureText(item.Text).width+2;var itemWidth=item.NameWidth+item.TextWidth;if(maxWidth<itemWidth)maxWidth=itemWidth;++lineCount;labelHeight+=lineHeight;}var labelWidth=maxWidth+config.Mergin.Left+config.Mergin.Right;labelInfo.Width=labelWidth;labelInfo.Height=labelHeight;labelInfo.LineHeight=lineHeight;};this.DrawDefaultLabel=function(labelInfo,rtBG){var config=labelInfo.Config;if(config.BGColor){this.Canvas.fillStyle=config.BGColor;this.Canvas.fillRect(ToFixedRect(rtBG.Left),ToFixedRect(rtBG.Top),ToFixedRect(rtBG.Width),ToFixedRect(rtBG.Height));}var xText=rtBG.Left+config.Mergin.Left;var yText=rtBG.Top+config.Mergin.Top;for(var i=0;i<labelInfo.AryText.length;++i){var item=labelInfo.AryText[i];if(i>0)yText+=config.LineSpace;if(item.Name){this.Canvas.fillStyle=item.NameColor;this.Canvas.fillText(item.Name,xText,yText);}if(item.Text){var xOut=xText+item.NameWidth;if(config.TextAlign==1)//右对齐
5940
+ xOut=rtBG.Right-config.Mergin.Right-item.TextWidth;this.Canvas.fillStyle=item.TextColor;this.Canvas.fillText(item.Text,xOut,yText);}yText+=labelInfo.LineHeight;}};}IChartDrawPicture.ColorToRGBA=function(color,opacity){var reg=/^(rgb|RGB)/;if(reg.test(color)){var strHex="#";var colorArr=color.replace(/(?:\(|\)|rgb|RGB)*/g,"").split(",");// 把RGB的3个数值变成数组
5935
5941
  // 转成16进制
5936
5942
  for(var i=0;i<colorArr.length;i++){var hex=Number(colorArr[i]).toString(16);if(hex==="0")hex+=hex;strHex+=hex;}color=strHex;}return"rgba("+parseInt("0x"+color.slice(1,3))+","+parseInt("0x"+color.slice(3,5))+","+parseInt("0x"+color.slice(5,7))+","+opacity+")";};IChartDrawPicture.RGBToHex=function(rgb){// Choose correct separator
5937
5943
  var sep=rgb.indexOf(",")>-1?",":" ";// Turn "rgb(r,g,b)" into [r,g,b]
@@ -5941,7 +5947,7 @@ var sColorChange=[];for(var i=1;i<7;i+=2){sColorChange.push(parseInt("0x"+color.
5941
5947
  {Name:"涂鸦线段",ClassName:'ChartDrawGraffitiLine',Create:function Create(){return new ChartDrawGraffitiLine();}},{Name:"固定范围成交量分布图",ClassName:"ChartDrawVolProfile",Create:function Create(){return new ChartDrawVolProfile();}},{Name:"DisjointChannel",ClassName:"ChartDrawDisjontChannel",Create:function Create(){return new ChartDrawDisjontChannel();}},{Name:"FlatTop",ClassName:"ChartDrawFlatTop",Create:function Create(){return new ChartDrawFlatTop();}},{Name:"水平线2",ClassName:"ChartDrawHLine",Create:function Create(){return new ChartDrawHLine();}},{Name:"MonitorLine",ClassName:"ChartDrawMonitorLine",Create:function Create(){return new ChartDrawMonitorLine();}},//trading view样式
5942
5948
  {Name:"Note",ClassName:"ChartDrawNote",Create:function Create(){return new ChartDrawNote();}},{Name:"AnchoredText",ClassName:"ChartDrawAnchoredText",Create:function Create(){return new ChartDrawAnchoredText();}},{Name:"PriceLabel",ClassName:"ChartDrawPriceLabel",Create:function Create(){return new ChartDrawPriceLabel();}},{Name:"PriceNote",ClassName:"ChartDrawPriceNote",Create:function Create(){return new ChartDrawPriceNote();}},{Name:"FibWedge",ClassName:"ChartDrawFibWedge",Create:function Create(){return new ChartDrawFibWedge();}},{Name:"FibRetracement",ClassName:"ChartFibRetracement",Create:function Create(){return new ChartFibRetracement();}},//斐波那契回测
5943
5949
  {Name:"FibSpeedResistanceFan",ClassName:"ChartFibSpeedResistanceFan",Create:function Create(){return new ChartFibSpeedResistanceFan();}},//斐波那契扇形
5944
- {Name:"PriceRange",ClassName:"ChartPriceRange",Create:function Create(){return new ChartPriceRange();}},{Name:"DateRange",ClassName:"ChartDateRange",Create:function Create(){return new ChartDateRange();}}];IChartDrawPicture.MapIonFont=new _map2.default([["icon-arrow_up",{Text:'\uE683',Color:'#318757',Family:"iconfont"}],["icon-arrow_down",{Text:'\uE681',Color:'#db563e',Family:"iconfont"}],["icon-arrow_right",{Text:'\uE682',Color:'#318757',Family:"iconfont"}],["icon-arrow_left",{Text:'\uE680',Color:'#318757',Family:"iconfont"}]]);IChartDrawPicture.GetDrawPictureByName=function(value){for(var i in IChartDrawPicture.ArrayDrawPricture){var item=IChartDrawPicture.ArrayDrawPricture[i];if(item.Name==value)return item;}return null;};IChartDrawPicture.GetDrawPictureByClassName=function(value){for(var i in IChartDrawPicture.ArrayDrawPricture){var item=IChartDrawPicture.ArrayDrawPricture[i];if(item.ClassName==value)return item;}return null;};//注册一个新的画图工具 {Name:中文名字, ClassName:类名, Create:function()}
5950
+ {Name:"PriceRange",ClassName:"ChartPriceRange",Create:function Create(){return new ChartPriceRange();}},{Name:"DateRange",ClassName:"ChartDateRange",Create:function Create(){return new ChartDateRange();}},{Name:"InfoLine",ClassName:"ChartInfoLine",Create:function Create(){return new ChartInfoLine();}}];IChartDrawPicture.MapIonFont=new _map2.default([["icon-arrow_up",{Text:'\uE683',Color:'#318757',Family:"iconfont"}],["icon-arrow_down",{Text:'\uE681',Color:'#db563e',Family:"iconfont"}],["icon-arrow_right",{Text:'\uE682',Color:'#318757',Family:"iconfont"}],["icon-arrow_left",{Text:'\uE680',Color:'#318757',Family:"iconfont"}]]);IChartDrawPicture.GetDrawPictureByName=function(value){for(var i in IChartDrawPicture.ArrayDrawPricture){var item=IChartDrawPicture.ArrayDrawPricture[i];if(item.Name==value)return item;}return null;};IChartDrawPicture.GetDrawPictureByClassName=function(value){for(var i in IChartDrawPicture.ArrayDrawPricture){var item=IChartDrawPicture.ArrayDrawPricture[i];if(item.ClassName==value)return item;}return null;};//注册一个新的画图工具 {Name:中文名字, ClassName:类名, Create:function()}
5945
5951
  IChartDrawPicture.RegisterDrawPicture=function(obj){if(!obj.Name||!obj.ClassName||!obj.Create)return false;var item={Name:obj.Name,ClassName:obj.ClassName,Create:obj.Create};IChartDrawPicture.ArrayDrawPricture.push(item);JSConsole.Chart.Log('[IChartDrawPicture.RegisterDrawPicture] registered new draw picture class. item=',item);return true;};//注册一个新图标 {Name:, Text: , Color:, Family:}
5946
5952
  IChartDrawPicture.RegisterIonFont=function(obj){if(!obj.Name||!obj.Text||!obj.Family)return false;var isOverwirte=IChartDrawPicture.MapIonFont.has(obj.Name);IChartDrawPicture.MapIonFont.set(obj.Name,obj);JSConsole.Chart.Log('[IChartDrawPicture.RegisterIonFont] registered new icon font, obj=, isOverwirte=',obj,isOverwirte);return true;};IChartDrawPicture.CreateChartDrawPicture=function(obj)//创建画图工具
5947
5953
  {var item=IChartDrawPicture.GetDrawPictureByClassName(obj.ClassName);if(!item)return null;var chartDraw=item.Create();//TODO:后面都放到每一个SetOptin里面
@@ -6288,13 +6294,15 @@ function ChartDrawCrosshair(){this.newMethod=IChartDrawPicture;//派生
6288
6294
  this.newMethod();delete this.newMethod;this.ClassName='ChartDrawCrosshair';this.PointCount=1;this.IsPointIn=this.IsPointIn_XYValue_Line;this.IsHScreen=false;this.GetXYCoordinate=this.GetXYCoordinate_default;this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;if(!this.IsShow)return;if(!this.Frame||!this.Frame.Data)return;var data=this.Frame.Data;var drawPoint=this.CalculateDrawPoint({IsCheckX:false,IsCheckY:false});if(!drawPoint)return;if(drawPoint.length!=1)return;this.IsHScreen=this.Frame.IsHScreen;var pt=drawPoint[0];var chartBorder=this.Frame.ChartBorder;var border=this.Frame.GetBorder();if(this.IsHScreen){var xValue=Math.round(this.Frame.GetXData(pt.Y,false))+data.DataOffset;if(xValue<0)xValue=0;else if(xValue>=data.Data.length)xValue=data.Data.length-1;var yLine=this.Frame.GetXFromIndex(xValue-data.DataOffset,false);yLine=ToFixedPoint2(this.LineWidth,yLine);var xLine=ToFixedPoint2(this.LineWidth,pt.X);var left=border.LeftEx;var right=border.RightEx;var top=border.Top;var bottom=border.Bottom;var ptStart={X:left,Y:yLine};var ptEnd={X:right,Y:yLine};var ptStart2={X:xLine,Y:top};var ptEnd2={X:xLine,Y:bottom};}else{var xValue=Math.round(this.Frame.GetXData(pt.X,false))+data.DataOffset;if(xValue<0)xValue=0;else if(xValue>=data.Data.length)xValue=data.Data.length-1;var xLine=this.Frame.GetXFromIndex(xValue-data.DataOffset,false);xLine=ToFixedPoint2(this.LineWidth,xLine);var yLine=ToFixedPoint2(this.LineWidth,pt.Y);var top=border.TopEx;var bottom=border.BottomEx;var left=border.Left;var right=border.Right;var ptStart={X:xLine,Y:top};var ptEnd={X:xLine,Y:bottom};var ptStart2={X:left,Y:yLine};var ptEnd2={X:right,Y:yLine};}this.ClipFrame();this.SetLineWidth();this.Canvas.strokeStyle=this.LineColor;this.Canvas.beginPath();this.Canvas.moveTo(ptStart.X,ptStart.Y);this.Canvas.lineTo(ptEnd.X,ptEnd.Y);this.Canvas.moveTo(ptStart2.X,ptStart2.Y);this.Canvas.lineTo(ptEnd2.X,ptEnd2.Y);this.Canvas.stroke();this.RestoreLineWidth();var line={Start:ptStart,End:ptEnd};var line2={Start:ptStart2,End:ptEnd2};this.LinePoint.push(line);this.LinePoint.push(line2);if(this.Status==10)this.DrawPoint(drawPoint);//画点
6289
6295
  this.Canvas.restore();};}//画图工具-监测线
6290
6296
  function ChartDrawMonitorLine(){this.newMethod=IChartDrawPicture;//派生
6291
- this.newMethod();delete this.newMethod;this.ClassName='ChartDrawMonitorLine';this.PointCount=1;this.IsPointIn=this.IsPointIn_XYValue_Line;this.IsHScreen=false;this.GetXYCoordinate=this.GetXYCoordinate_default;this.FormatLabelTextCallback=null;this.LineColor='rgb(255,215,0)';this.LabelConfig={Font:12*GetDevicePixelRatio()+'px \u5FAE\u8F6F\u96C5\u9ED1',BGColor:"rgb(30,144,255)",YTextOffset:4,LineColor:"rgba(255,215,0,0.8)",LineDash:[3,5]};this.PointToValue_Backup=this.PointToValue;this.PointToValue=function(){if(!this.PointToValue_Backup())return false;if(this.Frame.IsKLineFrame(false)){if(this.Frame.Identify===0){var dataIndex=this.Value[0].XValue;var data=this.Frame.Data;var kItem=data.Data[dataIndex];this.Value[0].YValue=kItem.Close;//使用收盘价
6292
- }}return true;};this.SetOption=function(option){if(option.LineColor)this.LineColor=option.LineColor;if(option.Label){var item=option.Label;var dest=this.LabelConfig;if(item.Font)dest.Font=item.Font;if(item.BGColor)dest.BGColor=item.BGColor;if(item.LineColor)dest.LineColor=item.LineColor;if(item.LineDash)dest.LineDash=item.LineDash;if(IFrameSplitOperator.IsNumber(item.YTextOffset))dest.YTextOffset=item.YTextOffset;}if(option.FormatLabelTextCallback)this.FormatLabelTextCallback=option.FormatLabelTextCallback;};this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;if(!this.IsShow)return;if(!this.Frame||!this.Frame.Data)return;var data=this.Frame.Data;if(!IFrameSplitOperator.IsNonEmptyArray(data.Data))return;if(this.Point.length!=1)return;if(this.Value.length!=1)return;this.IsHScreen=this.Frame.IsHScreen;if(this.IsHScreen)return;if(this.Status==20)this.DrawMoveLine();else if(this.Status==10)this.DrawMonitorLine(data);};this.DrawMoveLine=function(){var border=this.Frame.ChartBorder.GetBorder();var pt=this.Point[0];var x=ToFixedPoint(pt.X);this.ClipFrame();this.Canvas.strokeStyle=this.LineColor;this.Canvas.beginPath();this.Canvas.moveTo(x,border.TopEx);this.Canvas.lineTo(x,border.BottomEx);this.Canvas.stroke();this.Canvas.restore();};this.DrawMonitorLine=function(data){var isMinute=this.Frame.IsMinuteFrame();var dataWidth=this.Frame.DataWidth;var distanceWidth=this.Frame.DistanceWidth;var xPointCount=this.Frame.XPointCount;if(this.IsHScreen){//var border=this.Frame.ChartBorder.GetHScreenBorder();
6297
+ this.newMethod();delete this.newMethod;this.ClassName='ChartDrawMonitorLine';this.PointCount=1;this.IsPointIn=this.IsPointIn_XYValue_Line;this.IsHScreen=false;this.GetXYCoordinate=this.GetXYCoordinate_default;this.FormatLabelTextCallback=null;this.LineColor='rgb(255,215,0)';this.LabelConfig={Font:12*GetDevicePixelRatio()+'px \u5FAE\u8F6F\u96C5\u9ED1',BGColor:"rgb(30,144,255)",LineColor:"rgba(255,215,0,0.8)",LineDash:[3,5],Mergin:{Left:5,Right:5,Top:5,Bottom:4},LineSpace:5,//行间距
6298
+ TextAlign:1//对齐方式 0=left 1=right
6299
+ };this.PointToValue_Backup=this.PointToValue;this.PointToValue=function(){if(!this.PointToValue_Backup())return false;if(this.Frame.IsKLineFrame(false)){if(this.Frame.Identify===0){var dataIndex=this.Value[0].XValue;var data=this.Frame.Data;var kItem=data.Data[dataIndex];this.Value[0].YValue=kItem.Close;//使用收盘价
6300
+ }}return true;};this.SetOption=function(option){if(option.LineColor)this.LineColor=option.LineColor;if(option.Label){var item=option.Label;var dest=this.LabelConfig;if(item.Font)dest.Font=item.Font;if(item.BGColor)dest.BGColor=item.BGColor;if(item.LineColor)dest.LineColor=item.LineColor;if(item.LineDash)dest.LineDash=item.LineDash;if(IFrameSplitOperator.IsNumber(item.LineSpace))dest.LineSpace=item.LineSpace;if(IFrameSplitOperator.IsNumber(item.TextAlign))dest.TextAlign=item.TextAlign;if(item.Mergin)CopyMerginConfig(dest.Mergin,item.Mergin);}if(option.FormatLabelTextCallback)this.FormatLabelTextCallback=option.FormatLabelTextCallback;};this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;if(!this.IsShow)return;if(!this.Frame||!this.Frame.Data)return;var data=this.Frame.Data;if(!IFrameSplitOperator.IsNonEmptyArray(data.Data))return;if(this.Point.length!=1)return;if(this.Value.length!=1)return;this.IsHScreen=this.Frame.IsHScreen;if(this.IsHScreen)return;if(this.Status==20)this.DrawMoveLine();else if(this.Status==10)this.DrawMonitorLine(data);};this.DrawMoveLine=function(){var border=this.Frame.ChartBorder.GetBorder();var pt=this.Point[0];var x=ToFixedPoint(pt.X);this.ClipFrame();this.Canvas.strokeStyle=this.LineColor;this.Canvas.beginPath();this.Canvas.moveTo(x,border.TopEx);this.Canvas.lineTo(x,border.BottomEx);this.Canvas.stroke();this.Canvas.restore();};this.DrawMonitorLine=function(data){var isMinute=this.Frame.IsMinuteFrame();var dataWidth=this.Frame.DataWidth;var distanceWidth=this.Frame.DistanceWidth;var xPointCount=this.Frame.XPointCount;if(this.IsHScreen){//var border=this.Frame.ChartBorder.GetHScreenBorder();
6293
6301
  //var chartright=border.BottomEx;
6294
6302
  //var xOffset=border.TopEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;
6295
6303
  }else{var border=this.Frame.ChartBorder.GetBorder();var xOffset=border.LeftEx+distanceWidth/2.0+g_JSChartResource.FrameLeftMargin;var chartright=border.RightEx;}var ptData=this.Value[0];this.ClipFrame();var labelInfo=null;for(var i=data.DataOffset,j=0;i<data.Data.length&&j<xPointCount;++i,++j,xOffset+=dataWidth+distanceWidth){var item=data.Data[i];if(isMinute){var x=this.Frame.GetXFromIndex(j);}else{var left=xOffset;var right=xOffset+dataWidth;if(right>chartright)break;var x=left+(right-left)/2;}if(i==ptData.XValue)//起始
6296
6304
  {this.Canvas.strokeStyle=this.LineColor;this.Canvas.beginPath();this.Canvas.moveTo(x,border.TopEx);this.Canvas.lineTo(x,border.BottomEx);this.Canvas.stroke();var line={Start:{X:x,Y:border.TopEx},End:{X:x,Y:border.BottomEx}};this.LinePoint.push(line);}else if(i==data.Data.length-1)//结束
6297
- {if(this.LabelConfig.LineDash)this.Canvas.setLineDash(this.LabelConfig.LineDash);this.Canvas.strokeStyle=this.LabelConfig.LineColor;this.Canvas.beginPath();this.Canvas.moveTo(x,border.TopEx);this.Canvas.lineTo(x,border.BottomEx);this.Canvas.stroke();if(this.LabelConfig.LineDash)this.Canvas.setLineDash([]);labelInfo={Left:right,Data:data,StartIndex:ptData.XValue,AryText:[]};}}this.Canvas.restore();if(labelInfo)this.DrawLabel(labelInfo);};this.DrawLabel=function(labelInfo){if(!this.FormatLabelTextCallback)return;this.FormatLabelTextCallback(labelInfo);if(!IFrameSplitOperator.IsNonEmptyArray(labelInfo.AryText))return;if(!IFrameSplitOperator.IsNumber(labelInfo.YValue))return;/*
6305
+ {if(this.LabelConfig.LineDash)this.Canvas.setLineDash(this.LabelConfig.LineDash);this.Canvas.strokeStyle=this.LabelConfig.LineColor;this.Canvas.beginPath();this.Canvas.moveTo(x,border.TopEx);this.Canvas.lineTo(x,border.BottomEx);this.Canvas.stroke();if(this.LabelConfig.LineDash)this.Canvas.setLineDash([]);labelInfo={Left:right,Data:data,StartIndex:ptData.XValue,AryText:[]};}}this.Canvas.restore();if(labelInfo)this.DrawLabel(labelInfo);};this.DrawLabel=function(labelInfo){if(!this.FormatLabelTextCallback)return;labelInfo.Config=this.LabelConfig;this.FormatLabelTextCallback(labelInfo);if(!IFrameSplitOperator.IsNonEmptyArray(labelInfo.AryText))return;if(!IFrameSplitOperator.IsNumber(labelInfo.YValue))return;/*
6298
6306
  labelInfo.YValue=7.15;
6299
6307
  labelInfo.AryText=
6300
6308
  [
@@ -6304,7 +6312,7 @@ this.newMethod();delete this.newMethod;this.ClassName='ChartDrawMonitorLine';thi
6304
6312
  { Name:"标题4:", Text:"320" , NameColor:"rgb(255,255,255)", TextColor:"rgb(30,10,30)"},
6305
6313
  { Name:"标题5:", Text:"77775.77", NameColor:"rgb(255,255,255)", TextColor:"rgb(30,10,30)" }
6306
6314
  ]
6307
- */var y=this.Frame.GetYFromData(labelInfo.YValue,false);this.Canvas.font=this.LabelConfig.Font;this.Canvas.textAlign="left";this.Canvas.textBaseline="top";var lineHeight=this.Canvas.measureText("擎").width+2;var maxWidth=0,lineCount=0;for(var i=0;i<labelInfo.AryText.length;++i){var item=labelInfo.AryText[i];item.NameWidth=0;item.TextWidth=0;if(item.Name)item.NameWidth=this.Canvas.measureText(item.Name).width+2;if(item.Text)item.TextWidth=this.Canvas.measureText(item.Text).width+2;var itemWidth=item.NameWidth+item.TextWidth;if(maxWidth<itemWidth)maxWidth=itemWidth;++lineCount;}var rtBG={Left:labelInfo.Left+1,Top:y,Width:maxWidth+4,Height:lineHeight*lineCount+4};rtBG.Right=rtBG.Left+rtBG.Width;rtBG.Bottom=rtBG.Top+rtBG.Height;if(this.LabelConfig.BGColor){this.Canvas.fillStyle=this.LabelConfig.BGColor;this.Canvas.fillRect(ToFixedRect(rtBG.Left),ToFixedRect(rtBG.Top),ToFixedRect(rtBG.Width),ToFixedRect(rtBG.Height));}var xText=rtBG.Left+2;var yText=rtBG.Top+this.LabelConfig.YTextOffset;for(var i=0;i<labelInfo.AryText.length;++i){var item=labelInfo.AryText[i];if(item.Name){this.Canvas.fillStyle=item.NameColor;this.Canvas.fillText(item.Name,xText,yText);}if(item.Text){this.Canvas.fillStyle=item.TextColor;this.Canvas.fillText(item.Text,xText+item.NameWidth,yText);}yText+=lineHeight;}};}//画图工具-波浪尺
6315
+ */this.CalculateLabelSize(labelInfo);var y=this.Frame.GetYFromData(labelInfo.YValue,false);var rtBG={Left:labelInfo.Left+1,Top:y,Width:labelInfo.Width,Height:labelInfo.Height};rtBG.Right=rtBG.Left+rtBG.Width;rtBG.Bottom=rtBG.Top+rtBG.Height;this.DrawDefaultLabel(labelInfo,rtBG);};}//画图工具-波浪尺
6308
6316
  function ChartDrawWaveRuler(){this.newMethod=IChartDrawPicture;//派生
6309
6317
  this.newMethod();delete this.newMethod;this.ClassName='ChartDrawWaveRuler';this.PointCount=3;this.Font=16*GetDevicePixelRatio()+"px 微软雅黑";this.IsPointIn=this.IsPointIn_XYValue_Line;this.LastPoint;this.LinePoint;this.ScaleRuler=g_JSChartResource.ChartDrawWaveRuler.ScaleRuler;this.RulerWidth=g_JSChartResource.ChartDrawWaveRuler.RulerWidth;;//刻度尺长度
6310
6318
  this.RulerLineWidth=g_JSChartResource.ChartDrawWaveRuler.RulerLineWidth;this.MaxScaleRuler=g_JSChartResource.ChartDrawWaveRuler.MaxScaleRuler;//尺子最大的高度比
@@ -6473,7 +6481,13 @@ var startValue=this.Frame.GetYData(ptStart.Y,false);var endValue=this.Frame.GetY
6473
6481
  this.newMethod();delete this.newMethod;this.ClassName='ChartDateRange';this.PointCount=2;this.Font=12*GetDevicePixelRatio()+"px 微软雅黑";this.TextColor=this.LineColor;this.IsPointIn=this.IsPointIn_XYValue_Line;this.GetXYCoordinate=this.GetXYCoordinate_default;this.PointToValue_Default=this.PointToValue;this.OnlyMoveXIndex=true;this.IsSupportMagnet=true;this.LineWidth=1;this.EnableBGColor=true;this.BGColor=IChartDrawPicture.ColorToRGBA(this.LineColor,0.15);this.ExtendLine={Top:false,Bottom:false};//延长线
6474
6482
  this.Label={TextColor:"rgb(0,0,0)",BGColor:"rgb(211,211,211)",EnableBGColor:true,LeftMargin:5,RightMargin:5};this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;if(!this.IsShow)return;var bCheckXY=true;var drawPoint=this.CalculateDrawPoint({IsCheckX:bCheckXY,IsCheckY:bCheckXY});if(!drawPoint)return;if(drawPoint.length!=2)return;this.ClipFrame();var ptStart=drawPoint[0];var ptEnd=drawPoint[1];this.SetLineWidth();this.DrawRange(ptStart,ptEnd);this.RestoreLineWidth();this.DrawPoint(drawPoint);//画点
6475
6483
  this.Canvas.restore();};this.DrawRange=function(ptStart,ptEnd){var yTop=Math.min(ptStart.Y,ptEnd.Y);var yBottom=Math.max(ptStart.Y,ptEnd.Y);var xLeft=Math.min(ptStart.X,ptEnd.X);var xRight=Math.max(ptStart.X,ptEnd.X);var height=yBottom-yTop;var width=xRight-xLeft;var yCenter=ptStart.Y+(ptEnd.Y-ptStart.Y)/2;var xCenter=ptStart.X+(ptEnd.X-ptStart.X)/2;if(this.ExtendLine.Top)yTop=this.Frame.ChartBorder.GetTopEx();if(this.ExtendLine.Bottom)yBottom=this.Frame.ChartBorder.GetBottomEx();if(this.EnableBGColor){var rtBG={Left:xLeft,Top:yTop,Right:xRight,Bottom:yBottom};rtBG.Width=rtBG.Right-rtBG.Left;rtBG.Height=rtBG.Bottom-rtBG.Top;this.Canvas.fillStyle=this.BGColor;this.Canvas.fillRect(rtBG.Left,rtBG.Top,rtBG.Width,rtBG.Height);}this.Canvas.strokeStyle=this.LineColor;this.Canvas.beginPath();this.Canvas.moveTo(ToFixedPoint(xLeft),yTop);this.Canvas.lineTo(ToFixedPoint(xLeft),yBottom);this.Canvas.moveTo(ToFixedPoint(xRight),yTop);this.Canvas.lineTo(ToFixedPoint(xRight),yBottom);this.Canvas.moveTo(ToFixedPoint(xLeft),ToFixedPoint(yCenter));this.Canvas.lineTo(ToFixedPoint(xRight),ToFixedPoint(yCenter));this.Canvas.stroke();this.LinePoint.push({Start:{X:xLeft,Y:yTop},End:{X:xLeft,Y:yBottom}});this.LinePoint.push({Start:{X:xRight,Y:yTop},End:{X:xRight,Y:yBottom}});this.LinePoint.push({Start:{X:xLeft,Y:yCenter},End:{X:xRight,Y:yCenter}});this.DrawArrow({X:ptStart.X,Y:ToFixedPoint(yCenter)},{X:ptEnd.X,Y:ToFixedPoint(yCenter)});//文字输出
6476
- var startIndex=this.Frame.GetXData(ptStart.X,false);var endIndex=this.Frame.GetXData(ptEnd.X,false);var barCount=endIndex-startIndex+1;var text=barCount+' bars';this.Canvas.font=this.Font;var textHeight=this.GetFontHeight();var textWidth=this.Canvas.measureText(text).width+4+(this.Label.LeftMargin+this.Label.RightMargin);var rtTextBG={Left:xCenter-textWidth/2,Top:ptEnd.Y+4,Width:textWidth,Height:textHeight+2};rtTextBG.Bottom=rtTextBG.Top+rtTextBG.Height;if(this.Label.EnableBGColor){var path=new Path2D();path.roundRect(ToFixedPoint(rtTextBG.Left),ToFixedPoint(rtTextBG.Top),ToFixedRect(rtTextBG.Width),ToFixedRect(rtTextBG.Height),[3]);this.Canvas.fillStyle=this.Label.BGColor;this.Canvas.fill(path);}this.Canvas.fillStyle=this.Label.TextColor;this.Canvas.textAlign="left";this.Canvas.textBaseline="bottom";this.Canvas.fillText(text,rtTextBG.Left+2+this.Label.LeftMargin,rtTextBG.Bottom-2);};}function ChartDrawStorage(){this.DrawData=new _map2.default();//画图工具数据 key=symbol-Period, value=Map() Key:Guid, Value:{Guid, Symbol, Period, ClassName, Value}
6484
+ var startIndex=this.Frame.GetXData(ptStart.X,false);var endIndex=this.Frame.GetXData(ptEnd.X,false);var barCount=endIndex-startIndex+1;var text=barCount+' bars';this.Canvas.font=this.Font;var textHeight=this.GetFontHeight();var textWidth=this.Canvas.measureText(text).width+4+(this.Label.LeftMargin+this.Label.RightMargin);var rtTextBG={Left:xCenter-textWidth/2,Top:ptEnd.Y+4,Width:textWidth,Height:textHeight+2};rtTextBG.Bottom=rtTextBG.Top+rtTextBG.Height;if(this.Label.EnableBGColor){var path=new Path2D();path.roundRect(ToFixedPoint(rtTextBG.Left),ToFixedPoint(rtTextBG.Top),ToFixedRect(rtTextBG.Width),ToFixedRect(rtTextBG.Height),[3]);this.Canvas.fillStyle=this.Label.BGColor;this.Canvas.fill(path);}this.Canvas.fillStyle=this.Label.TextColor;this.Canvas.textAlign="left";this.Canvas.textBaseline="bottom";this.Canvas.fillText(text,rtTextBG.Left+2+this.Label.LeftMargin,rtTextBG.Bottom-2);};}//线段信息统计
6485
+ function ChartInfoLine(){this.newMethod=IChartDrawPicture;//派生
6486
+ this.newMethod();delete this.newMethod;this.ClassName='ChartInfoLine';this.PointCount=2;this.Font=12*GetDevicePixelRatio()+"px 微软雅黑";this.IsPointIn=this.IsPointIn_XYValue_Line;this.GetXYCoordinate=this.GetXYCoordinate_default;this.IsShowYCoordinate=false;this.CopyData=this.CopyData_default;this.OnlyMoveXIndex=true;this.IsSupportMagnet=true;this.LabelConfig={Font:12*GetDevicePixelRatio()+'px \u5FAE\u8F6F\u96C5\u9ED1',BGColor:"rgba(135, 206 ,250,0.95)",Mergin:{Left:10,Right:10,Top:10,Bottom:8},LineSpace:5,//行间距
6487
+ TextAlign:1//对齐方式 0=left 1=right
6488
+ };this.FormatLabelTextCallback=null;this.SetOption=function(option){if(option.LineColor)this.LineColor=option.LineColor;if(option.Label){var item=option.Label;var dest=this.LabelConfig;if(item.Font)dest.Font=item.Font;if(item.BGColor)dest.BGColor=item.BGColor;if(IFrameSplitOperator.IsNumber(item.LineSpace))dest.LineSpace=item.LineSpace;if(IFrameSplitOperator.IsNumber(item.TextAlign))dest.TextAlign=item.TextAlign;if(item.Mergin)CopyMerginConfig(dest.Mergin,item.Mergin);}if(option.FormatLabelTextCallback)this.FormatLabelTextCallback=option.FormatLabelTextCallback;};this.Draw=function(){this.LinePoint=[];if(this.IsFrameMinSize())return;if(!this.IsShow)return;var drawPoint=this.CalculateDrawPoint({IsCheckX:true,IsCheckY:false});if(!drawPoint)return;if(drawPoint.length!=2)return;this.ClipFrame();var ptStart=drawPoint[0];var ptEnd=drawPoint[1];this.SetLineWidth();this.Canvas.strokeStyle=this.LineColor;this.Canvas.beginPath();this.Canvas.moveTo(ptStart.X,ptStart.Y);this.Canvas.lineTo(ptEnd.X,ptEnd.Y);this.Canvas.stroke();this.RestoreLineWidth();var line={Start:ptStart,End:ptEnd};this.LinePoint.push(line);this.DrawPoint(drawPoint);//画点
6489
+ var labelInfo={};labelInfo.Config=this.LabelConfig;labelInfo.PtStart=ptStart;labelInfo.PtEnd=ptEnd;this.Canvas.restore();this.DrawLabel(labelInfo);};this.DrawLabel=function(labelInfo){if(!this.FormatLabelTextCallback)return;labelInfo.AryPoint=this.Point;if(this.Status!=10){labelInfo.AryValue=this.PointToKLine(this.Point);}else{labelInfo.AryValue=this.Value;}labelInfo.Data=this.Frame.Data;//数据
6490
+ this.FormatLabelTextCallback(labelInfo);if(!IFrameSplitOperator.IsNonEmptyArray(labelInfo.AryText))return;this.CalculateLabelSize(labelInfo);var ptStart=labelInfo.PtStart;var ptEnd=labelInfo.PtEnd;if(ptStart.X>ptEnd.X){ptStart=labelInfo.PtEnd;ptEnd=labelInfo.PtStart;}var config=labelInfo.Config;var xCenter=labelInfo.PtStart.X+(labelInfo.PtEnd.X-labelInfo.PtStart.X)/2;var yCenter=labelInfo.PtStart.Y+(labelInfo.PtEnd.Y-labelInfo.PtStart.Y)/2;if(ptStart.Y<ptEnd.Y){var rtBG={Left:xCenter,Bottom:yCenter,Width:labelInfo.Width,Height:labelInfo.Height};rtBG.Right=rtBG.Left+rtBG.Width;rtBG.Top=rtBG.Bottom-rtBG.Height;}else{var rtBG={Left:xCenter,Top:yCenter,Width:labelInfo.Width,Height:labelInfo.Height};rtBG.Right=rtBG.Left+rtBG.Width;rtBG.Bottom=rtBG.Top+rtBG.Height;}this.DrawDefaultLabel(labelInfo,rtBG);};}function ChartDrawStorage(){this.DrawData=new _map2.default();//画图工具数据 key=symbol-Period, value=Map() Key:Guid, Value:{Guid, Symbol, Period, ClassName, Value}
6477
6491
  this.StorageKey;this.GetEventCallback;//事件回调
6478
6492
  this.Load=function(key)//从本地读取画图工具
6479
6493
  {if(!key)return;this.StorageKey=key;var cacheValue=localStorage[this.StorageKey];JSConsole.Chart.Log('[ChartDrawStorage::Load] Load to localStorage, key='+this.StorageKey+', cache='+cacheValue);if(!cacheValue)return;if(typeof cacheValue!="string")return;var saveData=JSON.parse(cacheValue);for(var i in saveData){var item=saveData[i];var drawMap=new _map2.default();for(var j in item.Value){var drawItem=item.Value[j];drawMap.set(drawItem.Key,drawItem.Value);}this.DrawData.set(item.Key,drawMap);}};this.Save=function()//把数据保存到本地
@@ -7024,7 +7038,10 @@ this.TitlePaint[0].Symbol=this.Symbol;this.TitlePaint[0].Name=this.Name;this.Tit
7024
7038
  this.Frame.Data=this.ChartPaint[0].Data;for(var i=0;i<this.OverlayChartPaint.length;++i)//K线叠加 主图股票数据绑定到叠加上
7025
7039
  {var item=this.OverlayChartPaint[i];item.MainData=this.ChartPaint[0].Data;}if(isShowAll){var dataOffset=0;this.CursorIndex=0;}else{var dataOffset=hisData.Data.length-showCount;if(dataOffset<0)dataOffset=0;this.ChartPaint[0].Data.DataOffset=dataOffset;this.CursorIndex=showCount;if(this.CursorIndex+dataOffset>=hisData.Data.length)this.CursorIndex=hisData.Data.length-1-dataOffset;if(this.CursorIndex<0)this.CursorIndex=0;//不一定对啊
7026
7040
  }this.ChartPaint[0].Period=this.Period;this.ChartCorssCursor.StringFormatY.Symbol=this.Symbol;if(this.CustomShow)//定制显示 1次有效
7027
- {this.SetCustomShow(this.CustomShow,hisData);this.CustomShow=null;}};this.UpdateMainData=function(hisData,lastDataCount){var frameHisdata=null;if(!this.Frame.Data)frameHisdata=this.Frame.Data;else if(this.Frame.SubFrame&&this.Frame.SubFrame[0])frameHisdata=this.Frame.SubFrame[0].Frame.Data;if(!frameHisdata)return;var xPointCount=this.Frame.SubFrame[0].Frame.XPointCount;//当前一屏能显示的数据个数
7041
+ {this.SetCustomShow(this.CustomShow,hisData);this.CustomShow=null;}};this.ShowAllKLine=function(){var chart=this.ChartPaint[0];if(!chart)return false;var kData=chart.Data;if(!kData||!IFrameSplitOperator.IsNonEmptyArray(kData.Data))return false;var xCount=kData.Data.length+this.RightSpaceCount;for(var i=0;i<this.Frame.SubFrame.length;++i){var item=this.Frame.SubFrame[i].Frame;item.XPointCount=xCount;}kData.DataOffset=0;this.CursorIndex=0;this.UpdataDataoffset();//更新数据偏移
7042
+ this.UpdateFrameMaxMin();//调整坐标最大 最小值
7043
+ this.Frame.SetSizeChage(true);this.UpdatePointByCursorIndex(2);//取消十字光标
7044
+ this.Draw();};this.UpdateMainData=function(hisData,lastDataCount){var frameHisdata=null;if(!this.Frame.Data)frameHisdata=this.Frame.Data;else if(this.Frame.SubFrame&&this.Frame.SubFrame[0])frameHisdata=this.Frame.SubFrame[0].Frame.Data;if(!frameHisdata)return;var xPointCount=this.Frame.SubFrame[0].Frame.XPointCount;//当前一屏能显示的数据个数
7028
7045
  var newDataCount=0;if(IFrameSplitOperator.IsNumber(lastDataCount)){if(lastDataCount>0&&hisData.Data.length>lastDataCount){newDataCount=hisData.Data.length-lastDataCount;JSConsole.Chart.Log('[KLineChartContainer::UpdateMainData] [count='+lastDataCount+'->'+hisData.Data.length+'], [newDataCount='+newDataCount+'], [Pagesize='+xPointCount+']');}else if(lastDataCount==0&&hisData.Data.length>xPointCount)//历史数据为空,当前收到数据大于一屏的数据,显示最新数据
7029
7046
  {newDataCount=hisData.Data.length-xPointCount;JSConsole.Chart.Log('[KLineChartContainer::UpdateMainData] history data is empty. [count='+lastDataCount+'->'+hisData.Data.length+'], [newDataCount='+newDataCount+'], [Pagesize='+xPointCount+']');}}this.ChartPaint[0].Data=hisData;this.ChartPaint[0].Symbol=this.Symbol;if(hisData.Data.length>xPointCount)//不满一屏的, 不需要调整索引
7030
7047
  this.ChartPaint[0].Data.DataOffset=frameHisdata.DataOffset+newDataCount;//加上数据增加的个数
@@ -7539,7 +7556,7 @@ this.CreateChartDrawPicture=function(name,option,callback){var drawPicture=null;
7539
7556
  {if(IChartDrawPicture.MapIonFont.has(name)){var iconItem=IChartDrawPicture.MapIonFont.get(name);drawPicture=new ChartDrawPictureIconFont();drawPicture.FontOption.Family=iconItem.Family;drawPicture.Text=iconItem.Text;if(iconItem.Color)drawPicture.LineColor=iconItem.Color;}}if(!drawPicture)return false;drawPicture.Canvas=this.Canvas;drawPicture.Status=0;drawPicture.Symbol=this.Symbol;drawPicture.Period=this.Period;drawPicture.Right=this.Right;drawPicture.Option=this.ChartDrawOption;if(callback)drawPicture.FinishedCallback=callback;//完成通知上层回调
7540
7557
  if(option)drawPicture.SetOption(option);var self=this;drawPicture.Update=function()//更新回调函数
7541
7558
  {self.DrawDynamicInfo();};drawPicture.GetActiveDrawPicture=function(){return self.GetActiveDrawPicture();};this.CurrentChartDrawPicture=drawPicture;//JSConsole.Chart.Log("[KLineChartContainer::CreateChartDrawPicture] ", name,this.CurrentChartDrawPicture);
7542
- return true;};this.ClearCurrnetDrawPicture=function(){this.CurrentChartDrawPicture=null;};this.AddChartDrawPicture=function(obj){if(!obj)return null;if(obj.FrameID<0||obj.FrameID>=this.Frame.SubFrame.length)return null;var self=this;var item=IChartDrawPicture.GetDrawPictureByClassName(obj.ClassName);if(!item)return null;var drawPicture=item.Create();drawPicture.Canvas=this.Canvas;drawPicture.Status=10;drawPicture.Frame=this.Frame.SubFrame[obj.FrameID].Frame;//绑定框架坐标
7559
+ return true;};this.AddChartDrawPicture=function(obj){if(!obj)return null;if(obj.FrameID<0||obj.FrameID>=this.Frame.SubFrame.length)return null;var self=this;var item=IChartDrawPicture.GetDrawPictureByClassName(obj.ClassName);if(!item)return null;var drawPicture=item.Create();drawPicture.Canvas=this.Canvas;drawPicture.Status=10;drawPicture.Frame=this.Frame.SubFrame[obj.FrameID].Frame;//绑定框架坐标
7543
7560
  drawPicture.Symbol=this.Symbol;drawPicture.Period=this.Period;drawPicture.Right=this.Right;drawPicture.Option=this.ChartDrawOption;if(obj.Value)drawPicture.Value=obj.Value;if(obj.Guid)drawPicture.Guid=obj.Guid;if(drawPicture.ImportStorageData)drawPicture.ImportStorageData(obj);drawPicture.SetOption(obj);if(obj.EnableUpdateXValue)drawPicture.UpdateXValue();drawPicture.ValueToPoint();drawPicture.GetActiveDrawPicture=function(){return self.GetActiveDrawPicture();};if(drawPicture.ClassName==='ChartDrawPictureText')drawPicture.IsInitialized=true;this.ChartDrawPicture.push(drawPicture);this.DrawDynamicInfo();return drawPicture;};this.PasteChartDrawPicture=function(data,frameID,option){if(!data||!data.ClassName)return null;if(frameID<0||frameID>=this.Frame.SubFrame.length)return null;var item=IChartDrawPicture.GetDrawPictureByClassName(data.ClassName);if(!item)return null;var drawPicture=item.Create();if(!drawPicture)return null;var self=this;drawPicture.Canvas=this.Canvas;drawPicture.Status=10;drawPicture.Frame=this.Frame.SubFrame[frameID].Frame;//绑定框架坐标
7544
7561
  drawPicture.Symbol=this.Symbol;drawPicture.Period=this.Period;drawPicture.Right=this.Right;drawPicture.Option=this.ChartDrawOption;drawPicture.GetActiveDrawPicture=function(){return self.GetActiveDrawPicture();};if(drawPicture.SetOption)drawPicture.SetOption(data);this.RandomDrawPictureValue(drawPicture,data);drawPicture.PointToValue();if(drawPicture.ClassName==='ChartDrawPictureText')drawPicture.IsInitialized=true;this.ChartDrawPicture.push(drawPicture);//存盘
7545
7562
  if(this.ChartDrawStorage)this.ChartDrawStorage.SaveDrawData(drawPicture);this.DrawDynamicInfo();return drawPicture;};//随机生成画图的点
@@ -13255,7 +13272,7 @@ JSPopMenu.SEPARATOR_LINE_NAME="MENU_SEPARATOR";//分割线
13255
13272
  */var JS_DRAWTOOL_MENU_ID={CMD_SELECTED_ID:1,CMD_CHANGE_LINE_COLOR_ID:2,CMD_DELETE_ALL_DRAW_CHART_ID:3,CMD_ERASE_DRAW_CHART_ID:4,CMD_ENABLE_MAGNET_ID:5,//画图工具磁体功能
13256
13273
  CMD_DELETE_DRAW_CHART_ID:6,CMD_CHANGE_FONT_COLOR_ID:7,//切换字体颜色
13257
13274
  CMD_CHANGE_BG_COLOR_ID:8//切换背景色
13258
- };function JSDialogDrawTool(){this.AryChartGroup=[{Title:"线段",AryChart:[{Title:'线段',ClassName:'hqchart_drawtool icon-draw_line',Type:0,Data:{ID:"线段"}},{Title:'射线',ClassName:'hqchart_drawtool icon-draw_rays',Type:0,Data:{ID:"射线"}},{Title:'标价线',ClassName:'hqchart_drawtool icon-price_line',Type:0,Data:{ID:"标价线"}},{Title:'垂直线',ClassName:'hqchart_drawtool icon-vertical_line',Type:0,Data:{ID:"垂直线"}},{Title:'十字线',ClassName:'hqchart_drawtool icon-tubiao_shizixian',Type:0,Data:{ID:"十字线"}},{Title:'箭头',ClassName:'hqchart_drawtool icon-draw_rays',Type:0,Data:{ID:"箭头"}},{Title:'趋势线',ClassName:'hqchart_drawtool icon-draw_trendline',Type:0,Data:{ID:"趋势线"}},{Title:'水平线',ClassName:'hqchart_drawtool icon-draw_hline',Type:0,Data:{ID:"水平线"}},{Title:'涂鸦线段',ClassName:'hqchart_drawtool icon-draw_line',Type:0,Data:{ID:"涂鸦线段"}},{Title:'阻速线',ClassName:'hqchart_drawtool icon-draw_resline',Type:0,Data:{ID:"阻速线"}},{Title:'江恩角度线',ClassName:'hqchart_drawtool icon-jiangenjiaoduxian',Type:0,Data:{ID:"江恩角度线"}}]},{Title:"通道",AryChart:[{Title:'平行线',ClassName:'hqchart_drawtool icon-draw_parallel_lines',Type:0,Data:{ID:"平行线"}},{Title:'水平线段',ClassName:'hqchart_drawtool icon-draw_hlinesegment',Type:0,Data:{ID:"水平线段"}},{Title:'平行射线',ClassName:'hqchart_drawtool icon-draw_p_rays_lines',Type:0,Data:{ID:"平行射线"}},{Title:'平行通道',ClassName:'hqchart_drawtool icon-draw_parallelchannel',Type:0,Data:{ID:"平行通道"}},{Title:'价格通道线',ClassName:'hqchart_drawtool icon-draw_pricechannel',Type:0,Data:{ID:"价格通道线"}},{Title:'箱型线',ClassName:'hqchart_drawtool icon-draw_box',Type:0,Data:{ID:"箱型线"}},{Title:"不相交通道",ClassName:"hqchart_drawtool icon-buxiangjiaojiao",Type:0,Data:{ID:"DisjointChannel"}},{Title:"平滑顶/底",ClassName:"hqchart_drawtool icon-tubiao_buxiangjiaotongdao",Type:0,Data:{ID:"FlatTop"}},{Title:"波段线",ClassName:'hqchart_drawtool icon-draw_waveband',Type:0,Data:{ID:"波段线"}},{Title:"百分比线",ClassName:'hqchart_drawtool icon-PercentageLine',Type:0,Data:{ID:"百分比线"}},{Title:"黄金分割",ClassName:'hqchart_drawtool icon-GoldenSection',Type:0,Data:{ID:"黄金分割"}},{Title:"线形回归线",ClassName:'hqchart_drawtool icon-linear_3',Type:0,Data:{ID:"线形回归线"}},{Title:"线形回归带",ClassName:'hqchart_drawtool icon-linear_1',Type:0,Data:{ID:"线形回归带"}},{Title:"延长线形回归带",ClassName:'hqchart_drawtool icon-linear_2',Type:0,Data:{ID:"延长线形回归带"}}]},{Title:"形状",AryChart:[{Title:'圆弧线',ClassName:'hqchart_drawtool icon-draw_arc',Type:0,Data:{ID:"圆弧线"}},{Title:'矩形',ClassName:'hqchart_drawtool icon-rectangle',Type:0,Data:{ID:"矩形"}},{Title:'平行四边形',ClassName:'hqchart_drawtool icon-draw_quadrangle',Type:0,Data:{ID:"平行四边形"}},{Title:'三角形',ClassName:'hqchart_drawtool icon-draw_triangle',Type:0,Data:{ID:"三角形"}},{Title:'圆',ClassName:'hqchart_drawtool icon-draw_circle',Type:0,Data:{ID:"圆"}},{Title:'对称角度',ClassName:'hqchart_drawtool icon-draw_symangle',Type:0,Data:{ID:"对称角度"}}]},{Title:"波浪线",AryChart:[{Title:'M头W底',ClassName:'hqchart_drawtool icon-draw_wavemw',Type:0,Data:{ID:"M头W底"}},{Title:'头肩型',ClassName:'hqchart_drawtool icon-draw_head_shoulders_bt',Type:0,Data:{ID:"头肩型"}},{Title:'波浪尺',ClassName:'hqchart_drawtool icon-waveruler',Type:0,Data:{ID:"波浪尺"}},{Title:'AB波浪尺',ClassName:'hqchart_drawtool icon-waveruler',Type:0,Data:{ID:"AB波浪尺"}}]},{Title:"斐波那契",AryChart:[{Title:'斐波那契周期线',ClassName:'hqchart_drawtool icon-feibonaqizhouqixian',Type:0,Data:{ID:"斐波那契周期线"}},{Title:'斐波那契楔形',ClassName:'hqchart_drawtool icon-feibonaqiqixing',Type:0,Data:{ID:"FibWedge"}},{Title:'斐波那契回撤',ClassName:'hqchart_drawtool icon-feibonaqihuiche',Type:0,Data:{ID:"FibRetracement"}},{Title:'斐波那契速度阻力扇',ClassName:'hqchart_drawtool icon-feibonaqisuduzulishan',Type:0,Data:{ID:"FibSpeedResistanceFan"}}]},{Title:"测量工具",AryChart:[{Title:'价格范围',ClassName:'hqchart_drawtool icon-shijianfanwei',Type:0,Data:{ID:"PriceRange"}},{Title:'时间范围',ClassName:'hqchart_drawtool icon-jiagefanwei',Type:0,Data:{ID:"DateRange"}},{Title:"监测线",ClassName:"hqchart_drawtool icon-jiance",Type:0,Data:{ID:"MonitorLine"}}]},{Title:"文字",AryChart:[{Title:"文字",ClassName:'hqchart_drawtool icon-draw_text',Type:0,Data:{ID:"文本"}},{Title:"锚点文字",ClassName:'hqchart_drawtool icon-maodianwenzi',Type:0,Data:{ID:"AnchoredText"}},{Title:"注释",ClassName:'hqchart_drawtool icon-maodian ',Type:0,Data:{ID:"Note"}},{Title:'价格标签',ClassName:'hqchart_drawtool icon-Tooltip',Type:0,Data:{ID:"PriceLabel"}},{Title:'价格注释',ClassName:'hqchart_drawtool icon-tooltiptext',Type:0,Data:{ID:"PriceNote"}},{Title:'向上箭头',ClassName:'iconfont icon-arrow_up',Type:0,Data:{ID:"icon-arrow_up"}},{Title:'向下箭头',ClassName:'iconfont icon-arrow_down',Type:0,Data:{ID:"icon-arrow_down"}},{Title:'向左箭头',ClassName:'iconfont icon-arrow_left',Type:0,Data:{ID:"icon-arrow_left"}},{Title:'向右箭头',ClassName:'iconfont icon-arrow_right',Type:0,Data:{ID:"icon-arrow_right"}}]}];this.ToolConfig={Title:"工具",AryTool:[{Title:"选中",ClassName:'hqchart_drawtool icon-arrow',Type:1,Data:{ID:JS_DRAWTOOL_MENU_ID.CMD_SELECTED_ID}},{Title:'尺子',ClassName:'hqchart_drawtool icon-ruler',Type:0,Data:{ID:"尺子"}},{Title:"磁铁",ClassName:'hqchart_drawtool icon-xifu',Type:2,Data:{ID:JS_DRAWTOOL_MENU_ID.CMD_ENABLE_MAGNET_ID}},{Title:"点击切换颜色",ClassName:'hqchart_drawtool icon-fangkuai',Type:2,Data:{ID:JS_DRAWTOOL_MENU_ID.CMD_CHANGE_LINE_COLOR_ID}},{Title:"擦除画线",ClassName:'hqchart_drawtool icon-a-xiangpicachuxiangpica',Type:2,Data:{ID:JS_DRAWTOOL_MENU_ID.CMD_ERASE_DRAW_CHART_ID}},{Title:"删除所有画线",ClassName:'hqchart_drawtool icon-recycle_bin',Type:2,Data:{ID:JS_DRAWTOOL_MENU_ID.CMD_DELETE_ALL_DRAW_CHART_ID}}]};this.DivDialog=null;this.AryDivChart=[];this.HQChart=null;this.LineColor='rgb(255,140,0)';this.LineColorIndex=0;this.RandomLineColor=["rgb(255,69,0)","rgb(0,191,255)","rgb(255,0,255)","rgb(255,105,180)"];this.LineWidth=1*GetDevicePixelRatio();this.ColumnCount=4;this.DragTitle=null;this.Inital=function(hqchart){this.LineColor=g_JSChartResource.DrawPicture.LineColor[0];this.RandomLineColor.splice(0,0,this.LineColor);this.HQChart=hqchart;};this.Create=function(){var _this69=this;var divDom=document.createElement("div");divDom.className='UMyChart_DrawTool_Dialog_Div';var divTitle=document.createElement("div");divTitle.className='UMyChart_DrawTool_Title_Div';divTitle.innerText="画图工具";divTitle.onmousedown=function(e){_this69.OnMouseDownTitle(e);};var divClose=document.createElement("div");divClose.className='UMyChart_DrawTool_Close_Div';divClose.innerText="x";divClose.onmousedown=function(e){_this69.Close(e);};divTitle.appendChild(divClose);divDom.appendChild(divTitle);var table=document.createElement("table");table.className="UMyChart_DrawTool_Table";divDom.appendChild(table);var tbody=document.createElement("tbody");tbody.className="UMyChart_DrawTool_Tbody";table.appendChild(tbody);for(var i=0;i<this.AryChartGroup.length;++i){var item=this.AryChartGroup[i];if(!IFrameSplitOperator.IsNonEmptyArray(item.AryChart))continue;this.CreateChartGroupItem(item,tbody);var trDom=document.createElement("tr");trDom.className='UMyChart_DrawTool_Group_End_Tr';tbody.appendChild(trDom);}//工具栏
13275
+ };function JSDialogDrawTool(){this.AryChartGroup=[{Title:"线段",AryChart:[{Title:'线段',ClassName:'hqchart_drawtool icon-draw_line',Type:0,Data:{ID:"线段"}},{Title:'线段信息',ClassName:'hqchart_drawtool icon-infoline',Type:0,Data:{ID:"InfoLine"}},{Title:'射线',ClassName:'hqchart_drawtool icon-draw_rays',Type:0,Data:{ID:"射线"}},{Title:'标价线',ClassName:'hqchart_drawtool icon-price_line',Type:0,Data:{ID:"标价线"}},{Title:'垂直线',ClassName:'hqchart_drawtool icon-vertical_line',Type:0,Data:{ID:"垂直线"}},{Title:'十字线',ClassName:'hqchart_drawtool icon-tubiao_shizixian',Type:0,Data:{ID:"十字线"}},{Title:'箭头',ClassName:'hqchart_drawtool icon-draw_rays',Type:0,Data:{ID:"箭头"}},{Title:'趋势线',ClassName:'hqchart_drawtool icon-draw_trendline',Type:0,Data:{ID:"趋势线"}},{Title:'水平线',ClassName:'hqchart_drawtool icon-draw_hline',Type:0,Data:{ID:"水平线"}},{Title:'涂鸦线段',ClassName:'hqchart_drawtool icon-draw_line',Type:0,Data:{ID:"涂鸦线段"}},{Title:'阻速线',ClassName:'hqchart_drawtool icon-draw_resline',Type:0,Data:{ID:"阻速线"}},{Title:'江恩角度线',ClassName:'hqchart_drawtool icon-jiangenjiaoduxian',Type:0,Data:{ID:"江恩角度线"}}]},{Title:"通道",AryChart:[{Title:'平行线',ClassName:'hqchart_drawtool icon-draw_parallel_lines',Type:0,Data:{ID:"平行线"}},{Title:'水平线段',ClassName:'hqchart_drawtool icon-draw_hlinesegment',Type:0,Data:{ID:"水平线段"}},{Title:'平行射线',ClassName:'hqchart_drawtool icon-draw_p_rays_lines',Type:0,Data:{ID:"平行射线"}},{Title:'平行通道',ClassName:'hqchart_drawtool icon-draw_parallelchannel',Type:0,Data:{ID:"平行通道"}},{Title:'价格通道线',ClassName:'hqchart_drawtool icon-draw_pricechannel',Type:0,Data:{ID:"价格通道线"}},{Title:'箱型线',ClassName:'hqchart_drawtool icon-draw_box',Type:0,Data:{ID:"箱型线"}},{Title:"不相交通道",ClassName:"hqchart_drawtool icon-buxiangjiaojiao",Type:0,Data:{ID:"DisjointChannel"}},{Title:"平滑顶/底",ClassName:"hqchart_drawtool icon-tubiao_buxiangjiaotongdao",Type:0,Data:{ID:"FlatTop"}},{Title:"波段线",ClassName:'hqchart_drawtool icon-draw_waveband',Type:0,Data:{ID:"波段线"}},{Title:"百分比线",ClassName:'hqchart_drawtool icon-PercentageLine',Type:0,Data:{ID:"百分比线"}},{Title:"黄金分割",ClassName:'hqchart_drawtool icon-GoldenSection',Type:0,Data:{ID:"黄金分割"}},{Title:"线形回归线",ClassName:'hqchart_drawtool icon-linear_3',Type:0,Data:{ID:"线形回归线"}},{Title:"线形回归带",ClassName:'hqchart_drawtool icon-linear_1',Type:0,Data:{ID:"线形回归带"}},{Title:"延长线形回归带",ClassName:'hqchart_drawtool icon-linear_2',Type:0,Data:{ID:"延长线形回归带"}}]},{Title:"形状",AryChart:[{Title:'圆弧线',ClassName:'hqchart_drawtool icon-draw_arc',Type:0,Data:{ID:"圆弧线"}},{Title:'矩形',ClassName:'hqchart_drawtool icon-rectangle',Type:0,Data:{ID:"矩形"}},{Title:'平行四边形',ClassName:'hqchart_drawtool icon-draw_quadrangle',Type:0,Data:{ID:"平行四边形"}},{Title:'三角形',ClassName:'hqchart_drawtool icon-draw_triangle',Type:0,Data:{ID:"三角形"}},{Title:'圆',ClassName:'hqchart_drawtool icon-draw_circle',Type:0,Data:{ID:"圆"}},{Title:'对称角度',ClassName:'hqchart_drawtool icon-draw_symangle',Type:0,Data:{ID:"对称角度"}}]},{Title:"波浪线",AryChart:[{Title:'M头W底',ClassName:'hqchart_drawtool icon-draw_wavemw',Type:0,Data:{ID:"M头W底"}},{Title:'头肩型',ClassName:'hqchart_drawtool icon-draw_head_shoulders_bt',Type:0,Data:{ID:"头肩型"}},{Title:'波浪尺',ClassName:'hqchart_drawtool icon-waveruler',Type:0,Data:{ID:"波浪尺"}},{Title:'AB波浪尺',ClassName:'hqchart_drawtool icon-waveruler',Type:0,Data:{ID:"AB波浪尺"}}]},{Title:"斐波那契",AryChart:[{Title:'斐波那契周期线',ClassName:'hqchart_drawtool icon-feibonaqizhouqixian',Type:0,Data:{ID:"斐波那契周期线"}},{Title:'斐波那契楔形',ClassName:'hqchart_drawtool icon-feibonaqiqixing',Type:0,Data:{ID:"FibWedge"}},{Title:'斐波那契回撤',ClassName:'hqchart_drawtool icon-feibonaqihuiche',Type:0,Data:{ID:"FibRetracement"}},{Title:'斐波那契速度阻力扇',ClassName:'hqchart_drawtool icon-feibonaqisuduzulishan',Type:0,Data:{ID:"FibSpeedResistanceFan"}}]},{Title:"测量工具",AryChart:[{Title:'价格范围',ClassName:'hqchart_drawtool icon-shijianfanwei',Type:0,Data:{ID:"PriceRange"}},{Title:'时间范围',ClassName:'hqchart_drawtool icon-jiagefanwei',Type:0,Data:{ID:"DateRange"}},{Title:"监测线",ClassName:"hqchart_drawtool icon-jiance",Type:0,Data:{ID:"MonitorLine"}}]},{Title:"文字",AryChart:[{Title:"文字",ClassName:'hqchart_drawtool icon-draw_text',Type:0,Data:{ID:"文本"}},{Title:"锚点文字",ClassName:'hqchart_drawtool icon-maodianwenzi',Type:0,Data:{ID:"AnchoredText"}},{Title:"注释",ClassName:'hqchart_drawtool icon-maodian ',Type:0,Data:{ID:"Note"}},{Title:'价格标签',ClassName:'hqchart_drawtool icon-Tooltip',Type:0,Data:{ID:"PriceLabel"}},{Title:'价格注释',ClassName:'hqchart_drawtool icon-tooltiptext',Type:0,Data:{ID:"PriceNote"}},{Title:'向上箭头',ClassName:'iconfont icon-arrow_up',Type:0,Data:{ID:"icon-arrow_up"}},{Title:'向下箭头',ClassName:'iconfont icon-arrow_down',Type:0,Data:{ID:"icon-arrow_down"}},{Title:'向左箭头',ClassName:'iconfont icon-arrow_left',Type:0,Data:{ID:"icon-arrow_left"}},{Title:'向右箭头',ClassName:'iconfont icon-arrow_right',Type:0,Data:{ID:"icon-arrow_right"}}]}];this.ToolConfig={Title:"工具",AryTool:[{Title:"选中",ClassName:'hqchart_drawtool icon-arrow',Type:1,Data:{ID:JS_DRAWTOOL_MENU_ID.CMD_SELECTED_ID}},{Title:'尺子',ClassName:'hqchart_drawtool icon-ruler',Type:0,Data:{ID:"尺子"}},{Title:"磁铁",ClassName:'hqchart_drawtool icon-xifu',Type:2,Data:{ID:JS_DRAWTOOL_MENU_ID.CMD_ENABLE_MAGNET_ID}},{Title:"点击切换颜色",ClassName:'hqchart_drawtool icon-fangkuai',Type:2,Data:{ID:JS_DRAWTOOL_MENU_ID.CMD_CHANGE_LINE_COLOR_ID}},{Title:"擦除画线",ClassName:'hqchart_drawtool icon-a-xiangpicachuxiangpica',Type:2,Data:{ID:JS_DRAWTOOL_MENU_ID.CMD_ERASE_DRAW_CHART_ID}},{Title:"删除所有画线",ClassName:'hqchart_drawtool icon-recycle_bin',Type:2,Data:{ID:JS_DRAWTOOL_MENU_ID.CMD_DELETE_ALL_DRAW_CHART_ID}}]};this.DivDialog=null;this.AryDivChart=[];this.HQChart=null;this.LineColor='rgb(255,140,0)';this.LineColorIndex=0;this.RandomLineColor=["rgb(255,69,0)","rgb(0,191,255)","rgb(255,0,255)","rgb(255,105,180)"];this.LineWidth=1*GetDevicePixelRatio();this.ColumnCount=4;this.DragTitle=null;this.Inital=function(hqchart){this.LineColor=g_JSChartResource.DrawPicture.LineColor[0];this.RandomLineColor.splice(0,0,this.LineColor);this.HQChart=hqchart;};this.Create=function(){var _this69=this;var divDom=document.createElement("div");divDom.className='UMyChart_DrawTool_Dialog_Div';var divTitle=document.createElement("div");divTitle.className='UMyChart_DrawTool_Title_Div';divTitle.innerText="画图工具";divTitle.onmousedown=function(e){_this69.OnMouseDownTitle(e);};var divClose=document.createElement("div");divClose.className='UMyChart_DrawTool_Close_Div';divClose.innerText="x";divClose.onmousedown=function(e){_this69.Close(e);};divTitle.appendChild(divClose);divDom.appendChild(divTitle);var table=document.createElement("table");table.className="UMyChart_DrawTool_Table";divDom.appendChild(table);var tbody=document.createElement("tbody");tbody.className="UMyChart_DrawTool_Tbody";table.appendChild(tbody);for(var i=0;i<this.AryChartGroup.length;++i){var item=this.AryChartGroup[i];if(!IFrameSplitOperator.IsNonEmptyArray(item.AryChart))continue;this.CreateChartGroupItem(item,tbody);var trDom=document.createElement("tr");trDom.className='UMyChart_DrawTool_Group_End_Tr';tbody.appendChild(trDom);}//工具栏
13259
13276
  this.CreateToolGroup(tbody);this.DivDialog=divDom;document.body.appendChild(divDom);};this.Destroy=function(){this.AryDivChart=[];document.body.remove(this.DivDialog);this.DivDialog=null;};this.CreateChartGroupItem=function(groupItem,tbody){var trDom=document.createElement("tr");trDom.className='UMyChart_DrawTool_Group_Tr';tbody.appendChild(trDom);var tdDom=document.createElement("td");tdDom.className="UMyChart_DrawTool_Group_Td";tdDom.innerText=groupItem.Title;tdDom.colSpan=this.ColumnCount;trDom.appendChild(tdDom);var chartCount=groupItem.AryChart.length;for(var i=0,j=0;i<chartCount;){var trDom=document.createElement("tr");trDom.className='UMyChart_DrawTool_Tr';for(j=0;j<this.ColumnCount&&i<chartCount;++j,++i){var item=groupItem.AryChart[i];this.CreateChartItem(item,trDom);}tbody.appendChild(trDom);}};this.CreateChartItem=function(item,trDom){var _this70=this;var tdDom=document.createElement("td");tdDom.className="UMyChart_DrawTool_Td";tdDom.title=item.Title;trDom.appendChild(tdDom);var spanDom=document.createElement("span");spanDom.className=item.ClassName;spanDom.classList.add("UMyChart_DrawTool_Span");tdDom.appendChild(spanDom);var data={Item:item,TD:tdDom,Span:spanDom};tdDom.onmousedown=function(e){_this70.OnClickItem(e,data);};//点击
13260
13277
  this.AryDivChart.push(data);};this.OnClickItem=function(e,data){console.log('[JSDialogDrawTool::OnClickChartItem] ',data);if(!data.Item||!data.Item.Data)return;var type=data.Item.Type;var id=data.Item.Data.ID;if(type==2&&id==JS_DRAWTOOL_MENU_ID.CMD_CHANGE_LINE_COLOR_ID){this.OnChangeLineColor(data);}else if(type==2&&id==JS_DRAWTOOL_MENU_ID.CMD_DELETE_ALL_DRAW_CHART_ID){this.DeleteAllChart();}else if(type==2&&id==JS_DRAWTOOL_MENU_ID.CMD_ERASE_DRAW_CHART_ID){this.ClearAllSelectedChart();this.ClearCurrnetDrawPicture();this.EnableEraseChart(true);}else if(type==1&&id==JS_DRAWTOOL_MENU_ID.CMD_SELECTED_ID){this.ClearAllSelectedChart();this.ClearCurrnetDrawPicture();this.EnableEraseChart(false);}else if(type==2&&id==JS_DRAWTOOL_MENU_ID.CMD_ENABLE_MAGNET_ID){this.ChangeMagnet(data);}else if(type==0){this.ClearAllSelectedChart();this.EnableEraseChart(false);data.Span.classList.remove("UMyChart_DrawTool_Span");data.Span.classList.add("UMyChart_DrawTool_Span_Selected");this.CreateDrawPicture(data);}};//清空选中状态
13261
13278
  this.ClearAllSelectedChart=function(){for(var i=0;i<this.AryDivChart.length;++i){var item=this.AryDivChart[i];if(item.Item.Type==2)continue;item.Span.classList.remove("UMyChart_DrawTool_Span_Selected");item.Span.classList.add("UMyChart_DrawTool_Span");}};this.CreateToolGroup=function(tbody){var trDom=document.createElement("tr");trDom.className='UMyChart_DrawTool_Group_Tr';tbody.appendChild(trDom);var tdDom=document.createElement("td");tdDom.className="UMyChart_DrawTool_Group_Td";tdDom.innerText=this.ToolConfig.Title;tdDom.colSpan=this.ColumnCount;trDom.appendChild(tdDom);var chartCount=this.ToolConfig.AryTool.length;for(var i=0,j=0;i<chartCount;){var trDom=document.createElement("tr");trDom.className='UMyChart_DrawTool_Tr';for(j=0;j<this.ColumnCount&&i<chartCount;++j,++i){var item=this.ToolConfig.AryTool[i];this.CreateToolItem(item,trDom);}tbody.appendChild(trDom);}};this.CreateToolItem=function(item,trDom){var _this71=this;var tdDom=document.createElement("td");tdDom.className="UMyChart_DrawTool_Td";tdDom.title=item.Title;trDom.appendChild(tdDom);var spanDom=document.createElement("span");spanDom.className=item.ClassName;spanDom.classList.add("UMyChart_DrawTool_Span");tdDom.appendChild(spanDom);var data={Item:item,TD:tdDom,Span:spanDom};if(item.Type==2&&item.Data.ID==JS_DRAWTOOL_MENU_ID.CMD_CHANGE_LINE_COLOR_ID)//颜色
@@ -13264,8 +13281,9 @@ this.AryDivChart.push(data);};this.OnChangeLineColor=function(data){++this.LineC
13264
13281
  this.DeleteAllChart=function(){if(!this.HQChart)return;this.HQChart.ClearChartDrawPicture();};this.SetEraseChartButtonStatus=function(enable){for(var i=0;i<this.AryDivChart.length;++i){var item=this.AryDivChart[i];if(item.Item.Type==2&&item.Item.Data&&item.Item.Data.ID==JS_DRAWTOOL_MENU_ID.CMD_ERASE_DRAW_CHART_ID){if(enable){if(item.Span.classList.contains("UMyChart_DrawTool_Span")){item.Span.classList.replace("UMyChart_DrawTool_Span","UMyChart_DrawTool_Span_Selected");}}else{if(item.Span.classList.contains("UMyChart_DrawTool_Span_Selected")){item.Span.classList.replace("UMyChart_DrawTool_Span_Selected","UMyChart_DrawTool_Span");}}break;}}};this.EnableEraseChart=function(enable){if(!this.HQChart)return;if(this.HQChart.EnableEraseChartDrawPicture==enable)return;this.HQChart.EnableEraseChartDrawPicture=enable;this.SetEraseChartButtonStatus(enable);};this.ChangeMagnet=function(data){if(!this.HQChart)return;var enable=true;if(this.HQChart.ChartDrawOption.Magnet){var item=this.HQChart.ChartDrawOption.Magnet;var enable=!item.Enable;}if(enable){this.HQChart.SetChartDrawOption({Magnet:{Enable:enable,Type:0}});data.Span.classList.remove("UMyChart_DrawTool_Span");data.Span.classList.add("UMyChart_DrawTool_Span_Selected");}else{this.HQChart.SetChartDrawOption({Magnet:{Enable:false}});data.Span.classList.remove("UMyChart_DrawTool_Span_Selected");data.Span.classList.add("UMyChart_DrawTool_Span");}};this.CreateDrawPicture=function(data){var _this72=this;if(!this.HQChart)return null;var option={LineColor:this.LineColor,//线段颜色
13265
13282
  LineWidth:this.LineWidth,//线段宽度
13266
13283
  PointColor:this.LineColor//点颜色
13267
- };var name=data.Item.Data.ID;if(["icon-arrow_up","icon-arrow_down","icon-arrow_left","icon-arrow_right"].includes(name))option=null;this.HQChart.CreateChartDrawPicture(name,option,function(chart){_this72.OnFinishDrawPicture(chart,data);});};this.ClearCurrnetDrawPicture=function(){if(this.HQChart)this.HQChart.ClearCurrnetDrawPicture();};//画图工具绘制完成
13268
- this.OnFinishDrawPicture=function(chart,data){data.Span.classList.remove("UMyChart_DrawTool_Span_Selected");data.Span.classList.add("UMyChart_DrawTool_Span");};this.Show=function(x,y){if(!this.DivDialog)return;this.DivDialog.style.visibility='visible';this.DivDialog.style.top=y+"px";this.DivDialog.style.left=x+"px";};this.Close=function(e){if(!this.DivDialog)return;this.DivDialog.style.visibility='hidden';};this.IsShow=function(){if(!this.DivDialog)return false;return this.DivDialog.style.visibility==='visible';};this.OnMouseDownTitle=function(e){var _this73=this;if(!this.DivDialog)return;var dragData={X:e.clientX,Y:e.clientY};dragData.YOffset=e.clientX-this.DivDialog.offsetLeft;dragData.XOffset=e.clientY-this.DivDialog.offsetTop;this.DragTitle=dragData;document.onmousemove=function(e){_this73.DocOnMouseMoveTitle(e);};document.onmouseup=function(e){_this73.DocOnMouseUpTitle(e);};};this.DocOnMouseMoveTitle=function(e){if(!this.DragTitle)return;var left=e.clientX-this.DragTitle.YOffset;var top=e.clientY-this.DragTitle.XOffset;var right=left+this.DivDialog.offsetWidth;var bottom=top+this.DivDialog.offsetHeight;if(right+5>=window.innerWidth)left=window.innerWidth-this.DivDialog.offsetWidth-5;if(bottom+5>=window.innerHeight)top=window.innerHeight-this.DivDialog.offsetHeight-5;this.DivDialog.style.left=left+'px';this.DivDialog.style.top=top+'px';if(e.preventDefault)e.preventDefault();};this.DocOnMouseUpTitle=function(e){this.DragTitle=null;this.onmousemove=null;this.onmouseup=null;};}/////////////////////////////////////////////////////////////////////////////////////
13284
+ };var name=data.Item.Data.ID;if(["icon-arrow_up","icon-arrow_down","icon-arrow_left","icon-arrow_right"].includes(name))option=null;else if(name=="InfoLine")option.FormatLabelTextCallback=function(lableInfo){_this72.ChartInfoLine_FormatLabelText(lableInfo);};else if(name=="MonitorLine")option.FormatLabelTextCallback=function(lableInfo){_this72.ChartDrawMonitorLine_FormatLabelText(lableInfo);};this.HQChart.CreateChartDrawPicture(name,option,function(chart){_this72.OnFinishDrawPicture(chart,data);});};this.ClearCurrnetDrawPicture=function(){if(this.HQChart)this.HQChart.ClearCurrnetDrawPicture();};//画图工具绘制完成
13285
+ this.OnFinishDrawPicture=function(chart,data){data.Span.classList.remove("UMyChart_DrawTool_Span_Selected");data.Span.classList.add("UMyChart_DrawTool_Span");};this.Show=function(x,y){if(!this.DivDialog)return;this.DivDialog.style.visibility='visible';this.DivDialog.style.top=y+"px";this.DivDialog.style.left=x+"px";};this.Close=function(e){if(!this.DivDialog)return;this.DivDialog.style.visibility='hidden';};this.IsShow=function(){if(!this.DivDialog)return false;return this.DivDialog.style.visibility==='visible';};this.OnMouseDownTitle=function(e){var _this73=this;if(!this.DivDialog)return;var dragData={X:e.clientX,Y:e.clientY};dragData.YOffset=e.clientX-this.DivDialog.offsetLeft;dragData.XOffset=e.clientY-this.DivDialog.offsetTop;this.DragTitle=dragData;document.onmousemove=function(e){_this73.DocOnMouseMoveTitle(e);};document.onmouseup=function(e){_this73.DocOnMouseUpTitle(e);};};this.DocOnMouseMoveTitle=function(e){if(!this.DragTitle)return;var left=e.clientX-this.DragTitle.YOffset;var top=e.clientY-this.DragTitle.XOffset;var right=left+this.DivDialog.offsetWidth;var bottom=top+this.DivDialog.offsetHeight;if(right+5>=window.innerWidth)left=window.innerWidth-this.DivDialog.offsetWidth-5;if(bottom+5>=window.innerHeight)top=window.innerHeight-this.DivDialog.offsetHeight-5;this.DivDialog.style.left=left+'px';this.DivDialog.style.top=top+'px';if(e.preventDefault)e.preventDefault();};this.DocOnMouseUpTitle=function(e){this.DragTitle=null;this.onmousemove=null;this.onmouseup=null;};this.ChartInfoLine_FormatLabelText=function(labelInfo){if(!IFrameSplitOperator.IsNonEmptyArray(labelInfo.AryValue))return;if(!labelInfo.Data||!IFrameSplitOperator.IsNonEmptyArray(labelInfo.Data.Data))return;for(var i=0;i<labelInfo.AryValue.length;++i){var item=labelInfo.AryValue[i];if(!IFrameSplitOperator.IsNumber(item.XValue)||item.XValue<0)return;}var startIndex=labelInfo.AryValue[0].XValue;var endIndex=labelInfo.AryValue[1].XValue;var startItem=labelInfo.Data.Data[startIndex];var endItem=labelInfo.Data.Data[endIndex];if(!startItem||!endItem)return;var isMinutePeriod=ChartData.IsMinutePeriod(labelInfo.Data.Period,true);labelInfo.AryText=[];labelInfo.AryText.push({Name:"起始日期: ",Text:IFrameSplitOperator.FormatDateString(startItem.Date),NameColor:"rgb(0,0,0)",TextColor:"rgb(30,10,30)"});if(isMinutePeriod)labelInfo.AryText.push({Name:"起始时间: ",Text:IFrameSplitOperator.FormatTimeString(startItem.Time,"HH:MM"),NameColor:"rgb(0,0,0)",TextColor:"rgb(30,10,30)"});labelInfo.AryText.push({Name:"结束日期: ",Text:IFrameSplitOperator.FormatDateString(endItem.Date),NameColor:"rgb(0,0,0)",TextColor:"rgb(30,10,30)"});if(isMinutePeriod)labelInfo.AryText.push({Name:"结束时间: ",Text:IFrameSplitOperator.FormatTimeString(endItem.Time,"HH:MM"),NameColor:"rgb(0,0,0)",TextColor:"rgb(30,10,30)"});//示例:计算一个斜率数据
13286
+ var x=labelInfo.AryPoint[1].X-labelInfo.AryPoint[0].X;var y=labelInfo.AryPoint[1].Y-labelInfo.AryPoint[0].Y;var text="--";if(x!=0)text=''+(y/x).toFixed(4);labelInfo.AryText.push({Name:"斜率: ",Text:text,NameColor:"rgb(0,0,0)",TextColor:"rgb(238, 0, 238)"});labelInfo.AryText.push({Name:"其他: ",Text:'......',NameColor:"rgb(0,0,0)",TextColor:"rgb(156, 156, 156)"});};this.ChartDrawMonitorLine_FormatLabelText=function(labelInfo){if(!labelInfo.Data||!IFrameSplitOperator.IsNonEmptyArray(labelInfo.Data.Data))return;if(!IFrameSplitOperator.IsNumber(labelInfo.StartIndex)||labelInfo.StartIndex<0)return;var startItem=labelInfo.Data.Data[labelInfo.StartIndex];var endItem=labelInfo.Data.Data[labelInfo.Data.Data.length-1];labelInfo.YValue=endItem.Close;var isMinutePeriod=ChartData.IsMinutePeriod(labelInfo.Data.Period,true);labelInfo.AryText=[];labelInfo.AryText.push({Name:"起始: ",Text:IFrameSplitOperator.FormatDateString(startItem.Date,"MM-DD"),NameColor:"rgb(0,0,0)",TextColor:"rgb(30,10,30)"});if(isMinutePeriod)labelInfo.AryText.push({Name:"起始: ",Text:IFrameSplitOperator.FormatTimeString(startItem.Time,"HH:MM"),NameColor:"rgb(0,0,0)",TextColor:"rgb(30,10,30)"});labelInfo.AryText.push({Name:"最新: ",Text:IFrameSplitOperator.FormatDateString(endItem.Date,"MM-DD"),NameColor:"rgb(0,0,0)",TextColor:"rgb(30,10,30)"});if(isMinutePeriod)labelInfo.AryText.push({Name:"最新: ",Text:IFrameSplitOperator.FormatTimeString(endItem.Time,"HH:MM"),NameColor:"rgb(0,0,0)",TextColor:"rgb(30,10,30)"});labelInfo.AryText.push({Name:"ɑ: ",Text:"--.--",NameColor:"rgb(0, 0 ,255)",TextColor:"rgb(255, 165, 0)"});labelInfo.AryText.push({Name:"β: ",Text:"--.--",NameColor:"rgb(0 ,0 ,255)",TextColor:"rgb(238 ,121, 66)"});};}/////////////////////////////////////////////////////////////////////////////////////
13269
13287
  // 修改画图工具
13270
13288
  //
13271
13289
  //
@@ -13290,7 +13308,7 @@ hisData.Symbol=message.symbol;}var stockObj={HQDataType:HQ_DATA_TYPE.KLINE_ID,St
13290
13308
  this.ExecuteScript(item,data);}this.Status=0;}};this.OnExecuteFinish=function(data,indexInfo,jsExectute,jobInfo){var message={Data:data,IndexInfo:indexInfo,ID:JSCHART_WORKER_MESSAGE_ID.FINISH_EXECUTE_SCRIPT,JobInfo:jobInfo};postMessage(message);};this.OnExecuteError=function(error,indexInfo,jobData){var message={IndexInfo:indexInfo,ID:JSCHART_WORKER_MESSAGE_ID.ERROR_EXECUTE_SCRIPT,Error:error};postMessage(message);};}/********************************************************************************
13291
13309
  * 版本信息输出
13292
13310
  *
13293
- */var HQCHART_VERSION="1.1.13334";function PrintHQChartVersion(){var log='*************************************************************************************************************\n*\n* HQChart Ver: '+HQCHART_VERSION+' \n* \n* License: Apache License 2.0 \n* Source: https://github.com/jones2000/HQChart\n*\n*************************************************************************************************************\n';console.log(log);}PrintHQChartVersion();//把给外界调用的方法暴露出来
13311
+ */var HQCHART_VERSION="1.1.13345";function PrintHQChartVersion(){var log='*************************************************************************************************************\n*\n* HQChart Ver: '+HQCHART_VERSION+' \n* \n* License: Apache License 2.0 \n* Source: https://github.com/jones2000/HQChart\n*\n*************************************************************************************************************\n';console.log(log);}PrintHQChartVersion();//把给外界调用的方法暴露出来
13294
13312
  exports.default=(_jsChartInit$jsChartS={jsChartInit:JSChart.Init,jsChartStyle:JSChart.SetStyle,// IsIndexSymbol:IsIndexSymbol,
13295
13313
  // BaseIndex:BaseIndex,
13296
13314
  // ChartLine:ChartLine,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hqchart",
3
- "version": "1.1.13335",
3
+ "version": "1.1.13346",
4
4
  "description": "HQChart - H5, 微信小程序 沪深/港股/数字货币/期货/美股 K线图(kline),走势图,缩放,拖拽,十字光标,画图工具,截图,筹码图. 分析家语法,通达信语法,(麦语法),第3方数据对接",
5
5
  "main": "lib/main.js",
6
6
  "scripts": {
@@ -32,6 +32,7 @@ function JSDialogDrawTool()
32
32
  AryChart:
33
33
  [
34
34
  { Title: '线段', ClassName: 'hqchart_drawtool icon-draw_line', Type:0, Data:{ ID:"线段" } },
35
+ { Title: '线段信息', ClassName: 'hqchart_drawtool icon-infoline', Type:0, Data:{ ID:"InfoLine" } },
35
36
  { Title: '射线', ClassName: 'hqchart_drawtool icon-draw_rays', Type:0, Data:{ ID:"射线" } },
36
37
  { Title: '标价线', ClassName: 'hqchart_drawtool icon-price_line', Type:0, Data:{ ID:"标价线" } },
37
38
  { Title: '垂直线', ClassName: 'hqchart_drawtool icon-vertical_line', Type:0, Data:{ ID:"垂直线" } },
@@ -458,6 +459,9 @@ function JSDialogDrawTool()
458
459
 
459
460
  var name=data.Item.Data.ID;
460
461
  if (["icon-arrow_up","icon-arrow_down","icon-arrow_left", "icon-arrow_right"].includes(name)) option=null;
462
+ else if (name=="InfoLine") option.FormatLabelTextCallback=(lableInfo)=>{ this.ChartInfoLine_FormatLabelText(lableInfo); }
463
+ else if (name=="MonitorLine") option.FormatLabelTextCallback=(lableInfo)=>{ this.ChartDrawMonitorLine_FormatLabelText(lableInfo); }
464
+
461
465
 
462
466
  this.HQChart.CreateChartDrawPicture(name, option, (chart)=>{ this.OnFinishDrawPicture(chart, data); });
463
467
  }
@@ -535,6 +539,60 @@ function JSDialogDrawTool()
535
539
  this.onmousemove = null;
536
540
  this.onmouseup = null;
537
541
  }
542
+
543
+ this.ChartInfoLine_FormatLabelText=function(labelInfo)
544
+ {
545
+ if (!IFrameSplitOperator.IsNonEmptyArray(labelInfo.AryValue)) return;
546
+ if (!labelInfo.Data || !IFrameSplitOperator.IsNonEmptyArray(labelInfo.Data.Data)) return;
547
+ for(var i=0;i<labelInfo.AryValue.length;++i)
548
+ {
549
+ var item=labelInfo.AryValue[i];
550
+ if (!IFrameSplitOperator.IsNumber(item.XValue) || item.XValue<0) return;
551
+ }
552
+
553
+ var startIndex=labelInfo.AryValue[0].XValue;
554
+ var endIndex=labelInfo.AryValue[1].XValue;
555
+ var startItem=labelInfo.Data.Data[startIndex];
556
+ var endItem=labelInfo.Data.Data[endIndex];
557
+ if (!startItem || !endItem) return;
558
+
559
+ var isMinutePeriod=ChartData.IsMinutePeriod(labelInfo.Data.Period, true);
560
+ labelInfo.AryText=[];
561
+ labelInfo.AryText.push({ Name:"起始日期: ", Text:IFrameSplitOperator.FormatDateString(startItem.Date), NameColor:"rgb(0,0,0)", TextColor:"rgb(30,10,30)" });
562
+ if (isMinutePeriod) labelInfo.AryText.push({ Name:"起始时间: ", Text:IFrameSplitOperator.FormatTimeString(startItem.Time, "HH:MM"), NameColor:"rgb(0,0,0)", TextColor:"rgb(30,10,30)" });
563
+
564
+ labelInfo.AryText.push({ Name:"结束日期: ", Text:IFrameSplitOperator.FormatDateString(endItem.Date), NameColor:"rgb(0,0,0)", TextColor:"rgb(30,10,30)" });
565
+ if (isMinutePeriod) labelInfo.AryText.push({ Name:"结束时间: ", Text:IFrameSplitOperator.FormatTimeString(endItem.Time, "HH:MM"), NameColor:"rgb(0,0,0)", TextColor:"rgb(30,10,30)" });
566
+
567
+ //示例:计算一个斜率数据
568
+ var x=labelInfo.AryPoint[1].X-labelInfo.AryPoint[0].X;
569
+ var y=labelInfo.AryPoint[1].Y-labelInfo.AryPoint[0].Y;
570
+ var text="--";
571
+ if (x!=0) text=`${(y/x).toFixed(4)}`;
572
+ labelInfo.AryText.push({ Name:"斜率: ", Text:text, NameColor:"rgb(0,0,0)", TextColor:"rgb(238, 0, 238)"});
573
+ labelInfo.AryText.push({ Name:"其他: ", Text:'......', NameColor:"rgb(0,0,0)", TextColor:"rgb(156, 156, 156)"});
574
+ }
575
+
576
+ this.ChartDrawMonitorLine_FormatLabelText=function(labelInfo)
577
+ {
578
+ if (!labelInfo.Data || !IFrameSplitOperator.IsNonEmptyArray(labelInfo.Data.Data)) return;
579
+ if (!IFrameSplitOperator.IsNumber(labelInfo.StartIndex) || labelInfo.StartIndex<0) return;
580
+
581
+ var startItem=labelInfo.Data.Data[labelInfo.StartIndex];
582
+ var endItem=labelInfo.Data.Data[labelInfo.Data.Data.length-1];
583
+ labelInfo.YValue=endItem.Close;
584
+ var isMinutePeriod=ChartData.IsMinutePeriod(labelInfo.Data.Period, true);
585
+
586
+ labelInfo.AryText=[];
587
+ labelInfo.AryText.push({ Name:"起始: ", Text:IFrameSplitOperator.FormatDateString(startItem.Date,"MM-DD"), NameColor:"rgb(0,0,0)", TextColor:"rgb(30,10,30)" });
588
+ if (isMinutePeriod) labelInfo.AryText.push({ Name:"起始: ", Text:IFrameSplitOperator.FormatTimeString(startItem.Time, "HH:MM"), NameColor:"rgb(0,0,0)", TextColor:"rgb(30,10,30)" });
589
+
590
+ labelInfo.AryText.push({ Name:"最新: ", Text:IFrameSplitOperator.FormatDateString(endItem.Date,"MM-DD"), NameColor:"rgb(0,0,0)", TextColor:"rgb(30,10,30)" });
591
+ if (isMinutePeriod) labelInfo.AryText.push({ Name:"最新: ", Text:IFrameSplitOperator.FormatTimeString(endItem.Time, "HH:MM"), NameColor:"rgb(0,0,0)", TextColor:"rgb(30,10,30)" });
592
+
593
+ labelInfo.AryText.push({ Name:"ɑ: ", Text:"--.--", NameColor:"rgb(0, 0 ,255)", TextColor:"rgb(255, 165, 0)"});
594
+ labelInfo.AryText.push({ Name:"β: ", Text:"--.--", NameColor:"rgb(0 ,0 ,255)", TextColor:"rgb(238 ,121, 66)"});
595
+ }
538
596
  }
539
597
 
540
598