From f3d477a8030e9a19bafc7b35d6e973e770de55b2 Mon Sep 17 00:00:00 2001 From: Sean Date: Sun, 23 Feb 2025 12:35:56 -0500 Subject: [PATCH] Added ability render bases on phone/tablet --- Navigator/Renderers/BollingerBandRenderer.cs | 51 ++++++++++++++++++-- 1 file changed, 47 insertions(+), 4 deletions(-) diff --git a/Navigator/Renderers/BollingerBandRenderer.cs b/Navigator/Renderers/BollingerBandRenderer.cs index cff9579..9e7a93c 100644 --- a/Navigator/Renderers/BollingerBandRenderer.cs +++ b/Navigator/Renderers/BollingerBandRenderer.cs @@ -33,20 +33,30 @@ namespace Navigator.Renderers private PortfolioTradesWithParityPrice portfolioTradesWithParityPrice; private StopLimit stopLimit; private DateGenerator dateGenerator=new DateGenerator(); + private bool deviceIsTablet=false; public BollingerBandRenderer() { } + public void SetPaint(SKPaint paint,Band band) { if(!bollingerBandGraphs.ContainsKey((int)band))return; bollingerBandGraphs[(int)band].SetPaint(paint); } + + public bool DeviceIsTablet + { + get{return deviceIsTablet;} + set{deviceIsTablet=value;} + } + public StopLimit StopLimit { get{return stopLimit;} set{stopLimit=value;} } + public PortfolioTradesWithParityPrice PortfolioTradesWithParityPrice { get{return portfolioTradesWithParityPrice;} @@ -57,6 +67,7 @@ namespace Navigator.Renderers } } private PortfolioTrades PortfolioTrades{get;set;} + public CompositeDataSource K { set @@ -65,6 +76,7 @@ namespace Navigator.Renderers else bollingerBandGraphs.Add((int)Band.K,new LineGraph(paintK,value)); } } + public CompositeDataSource KL1 { set @@ -73,6 +85,7 @@ namespace Navigator.Renderers else bollingerBandGraphs.Add((int)Band.KL1,new LineGraph(paintKL1,value)); } } + public CompositeDataSource L { set @@ -81,6 +94,7 @@ namespace Navigator.Renderers else bollingerBandGraphs.Add((int)Band.L,new LineGraph(paintL,value)); } } + public CompositeDataSource LP1 { set @@ -89,6 +103,7 @@ namespace Navigator.Renderers else bollingerBandGraphs.Add((int)Band.LP1,new LineGraph(paintLP1,value)); } } + public CompositeDataSource High { set @@ -97,6 +112,7 @@ namespace Navigator.Renderers else bollingerBandGraphs.Add((int)Band.High,new LineGraph(paintHigh,value)); } } + public CompositeDataSource Low { set @@ -105,6 +121,7 @@ namespace Navigator.Renderers else bollingerBandGraphs.Add((int)Band.Low,new LineGraph(paintLow,value)); } } + public CompositeDataSource Close { set @@ -113,14 +130,17 @@ namespace Navigator.Renderers else bollingerBandGraphs.Add((int)Band.Close,new LineGraph(paintClose,value)); } } + private Type GetXDataType() { return typeof(DateTime); } + private Type GetYDataType() { return typeof(double); } + //********************************************************************************************************************************************************************* public CompositeDataSource SMAN { @@ -130,6 +150,7 @@ namespace Navigator.Renderers else bollingerBandGraphs.Add((int)Band.SMAN,new LineGraph(paintSMAN,value)); } } + public void Refresh() { RefreshRequested?.Invoke(this, EventArgs.Empty); @@ -172,6 +193,7 @@ namespace Navigator.Renderers RenderParityPricePointMarker(canvas,pointMapping,paintParityPricePointMarkerStroke,paintParityPricePointMarkerFill); RenderStopLimitPointMarker(canvas,pointMapping,paintStopLimitMarkerStroke,paintStopLimitMarkerFill); } + public void RenderPositionPointMarkers(SKCanvas canvas,PointMapping pointMapping,SKPaint paintPointMarkerStroke,SKPaint paintPointMarkerFill) { if(null==PortfolioTrades||0==PortfolioTrades.Count)return; @@ -185,29 +207,45 @@ namespace Navigator.Renderers { SKPoint tradePoint=new SKPoint((float)(portfolioTrade.TradeDate.Ticks/10000000000.0),(float)portfolioTrade.Price); tradePoint=pointMapping.MapPoint(tradePoint); - DrawingHelper.DrawIsoTriangle(canvas,tradePoint,50,paintPointMarkerStroke,paintPointMarkerFill); + DrawTriangle(canvas,tradePoint,paintPointMarkerStroke,paintPointMarkerFill); } } + public void RenderParityPricePointMarker(SKCanvas canvas,PointMapping pointMapping,SKPaint parityPricePointMarkerStroke,SKPaint parityPricePointMarkerFill) { if(null==PortfolioTradesWithParityPrice||null==PortfolioTradesWithParityPrice.ParityPrice)return; SKPoint parityPoint=new SKPoint((float)(portfolioTradesWithParityPrice.ParityPrice.Date.Ticks/10000000000.0),(float)portfolioTradesWithParityPrice.ParityPrice.Close); parityPoint=pointMapping.MapPoint(parityPoint); - DrawingHelper.DrawIsoTriangle(canvas,parityPoint,50,parityPricePointMarkerStroke,parityPricePointMarkerFill); + DrawTriangle(canvas,parityPoint,parityPricePointMarkerStroke,parityPricePointMarkerFill); } + public void RenderStopLimitPointMarker(SKCanvas canvas,PointMapping pointMapping,SKPaint stopLimitPointMarkerStroke,SKPaint stopLimitPointMarkerFill) { if(null==stopLimit)return; SKPoint stopLimitPoint=new SKPoint((float)(pointMapping.XDataExtent),(float)stopLimit.StopPrice); stopLimitPoint=pointMapping.MapPoint(stopLimitPoint); - DrawingHelper.DrawIsoTriangle(canvas,stopLimitPoint,50,stopLimitPointMarkerStroke,stopLimitPointMarkerFill); + DrawTriangle(canvas,stopLimitPoint,stopLimitPointMarkerStroke,stopLimitPointMarkerFill); } + + public void DrawTriangle(SKCanvas canvas,SKPoint point,SKPaint paintStrokeMarker,SKPaint paintFillMarker) + { + double baseLength = 50; + if(DeviceIsTablet)baseLength*=.45; + DrawingHelper.DrawIsoTriangle(canvas, point, (int)baseLength, paintStrokeMarker, paintFillMarker); + } + public double XDataExtent{get;set;} + public double XDataExtentMin{get;set;} + public double XRange{get{return XDataExtent-XDataExtentMin;}} + public double YDataExtent{get;set;} + public double YDataExtentMin{get;set;} + public double YRange{get{return YDataExtent-YDataExtentMin;}} + private bool AnyData() { if(bollingerBandGraphs.ContainsKey((int)Band.K))return true; @@ -221,6 +259,7 @@ namespace Navigator.Renderers if(bollingerBandGraphs.ContainsKey((int)Band.SMAN))return true; return false; } + private double GetXDataExtent() { List xExtents=new List(); @@ -235,6 +274,7 @@ namespace Navigator.Renderers if(bollingerBandGraphs.ContainsKey((int)Band.SMAN))xExtents.Add(bollingerBandGraphs[(int)Band.SMAN].GetXExtent()); return xExtents.Count>0?xExtents.Max(x=>x):0; } + private double GetXDataExtentMin() { List xExtents=new List(); @@ -249,6 +289,7 @@ namespace Navigator.Renderers if(bollingerBandGraphs.ContainsKey((int)Band.SMAN))xExtents.Add(bollingerBandGraphs[(int)Band.SMAN].GetXExtentMin()); return xExtents.Count>0?xExtents.Min(x=>x):0; } + private double GetYDataExtent() { List yExtents=new List(); @@ -268,6 +309,7 @@ namespace Navigator.Renderers } return maxDataExtent; } + private double GetYDataExtentMin() { List yExtents=new List(); @@ -287,6 +329,7 @@ namespace Navigator.Renderers } return minDataExtent; } - public event EventHandler RefreshRequested; + + public event EventHandler RefreshRequested; } }