protected override void OnStateChange() { if (State == State.SetDefaults) { //LineStroke = new Stroke(Brushes.DarkGray, DashStyleHelper.Solid, 2f); Description = ""; DrawingState = DrawingState.Building; Name = "RP2CustomLine"; StartAnchor = new ChartAnchor { IsBrowsable = true, IsEditing = true, DrawingTool = this, DisplayName = Custom.Resource.NinjaScriptDrawingToolAnchorStart, }; EndAnchor = new ChartAnchor { IsBrowsable = true, IsEditing = true, DrawingTool = this, DisplayName = Custom.Resource.NinjaScriptDrawingToolAnchorEnd, }; } else if (State == State.Terminated) { Dispose(); } }
protected override void OnStateChange() { if (State == State.SetDefaults) { Name = "Bricks"; // LineType = ChartLineType.Line; DrawingState = DrawingState.Building; StartAnchor = new ChartAnchor { IsEditing = true, DrawingTool = this }; EndAnchor = new ChartAnchor { IsEditing = true, DrawingTool = this }; StartAnchor.DisplayName = Custom.Resource.NinjaScriptDrawingToolAnchorStart; EndAnchor.DisplayName = Custom.Resource.NinjaScriptDrawingToolAnchorEnd; // a normal line with both end points has two anchors StartAnchor.IsBrowsable = true; EndAnchor.IsBrowsable = true; Stroke = new Stroke(Brushes.MediumOrchid, 2f); } else if (State == State.Terminated) { // release any device resources Dispose(); } }
public override void OnMouseUp(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, ChartAnchor dataPoint) { //don't set anchors until we're done drawing if (DrawingState == DrawingState.Building) { return; } //set the drawing state back to normal when mouse is relased if (DrawingState == DrawingState.Editing || DrawingState == DrawingState.Moving) { DrawingState = DrawingState.Normal; } if (editingAnchor != null) { if (editingAnchor == EntryAnchor) { SetReward(); if (Ratio.ApproxCompare(0) != 0) { SetRisk(); } } editingAnchor.IsEditing = false; } editingAnchor = null; }
protected override void OnStateChange() { if (State == State.SetDefaults) { Description = Custom.Resource.NinjaScriptDrawingToolRiskRewardDescription; Name = Custom.Resource.NinjaScriptDrawingToolRiskRewardName; Ratio = 2; AnchorLineStroke = new Stroke(Brushes.DarkGray, DashStyleHelper.Solid, 1f, 50); EntryLineStroke = new Stroke(Brushes.Goldenrod, DashStyleHelper.Solid, 2f); StopLineStroke = new Stroke(Brushes.Crimson, DashStyleHelper.Solid, 2f); TargetLineStroke = new Stroke(Brushes.SeaGreen, DashStyleHelper.Solid, 2f); EntryAnchor = new ChartAnchor { IsEditing = true, DrawingTool = this }; RiskAnchor = new ChartAnchor { IsEditing = true, DrawingTool = this }; RewardAnchor = new ChartAnchor { IsEditing = true, DrawingTool = this }; EntryAnchor.DisplayName = Custom.Resource.NinjaScriptDrawingToolRiskRewardAnchorEntry; RiskAnchor.DisplayName = Custom.Resource.NinjaScriptDrawingToolRiskRewardAnchorRisk; RewardAnchor.DisplayName = Custom.Resource.NinjaScriptDrawingToolRiskRewardAnchorReward; } else if (State == State.Terminated) { Dispose(); } }
protected override void OnStateChange() { if (State == State.SetDefaults) { Name = Custom.Resource.NinjaScriptDrawingToolRuler; DrawingState = DrawingState.Building; StartAnchor = new ChartAnchor { IsEditing = true, DrawingTool = this }; EndAnchor = new ChartAnchor { IsEditing = true, DrawingTool = this }; TextAnchor = new ChartAnchor { IsEditing = true, DrawingTool = this }; StartAnchor.DisplayName = Custom.Resource.NinjaScriptDrawingToolAnchorStart; EndAnchor.DisplayName = Custom.Resource.NinjaScriptDrawingToolAnchorEnd; TextAnchor.DisplayName = Custom.Resource.NinjaScriptDrawingToolAnchorText; LineColor = new Stroke(Brushes.DarkGray, DashStyleHelper.Solid, 1f, 50); TextColor = Application.Current.FindResource("ChartControl.DataBoxForeground") as Brush ?? Brushes.CornflowerBlue; } else if (State == State.Terminated) { // release any device resources Dispose(); } }
protected override void OnStateChange() { if (State == State.SetDefaults) { Description = Custom.Resource.NinjaScriptDrawingToolRegion; Name = Custom.Resource.NinjaScriptDrawingToolRegion; DisplayOnChartsMenus = false; IgnoresUserInput = true; StartAnchor = new ChartAnchor { IsYPropertyVisible = false, IsXPropertiesVisible = false }; EndAnchor = new ChartAnchor { IsYPropertyVisible = false, IsXPropertiesVisible = false }; StartAnchor.DisplayName = Custom.Resource.NinjaScriptDrawingToolAnchorStart; EndAnchor.DisplayName = Custom.Resource.NinjaScriptDrawingToolAnchorEnd; AreaBrush = Brushes.DarkCyan; OutlineStroke = new Stroke(Brushes.Goldenrod); AreaOpacity = 40; ZOrderType = DrawingToolZOrder.AlwaysDrawnFirst; } else if (State == State.Terminated) { Dispose(); } }
public override Cursor GetCursor(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, Point point) { switch (DrawingState) { case DrawingState.Building: return(Cursors.Pen); case DrawingState.Moving: return(IsLocked ? Cursors.No : Cursors.SizeAll); case DrawingState.Editing: if (IsLocked) { return(Cursors.No); } if (editingAnchor == TextAnchor) { return(Cursors.SizeNESW); } return(editingAnchor == StartAnchor ? Cursors.SizeNESW : Cursors.SizeNWSE); default: // see if we are near an anchor right away. this is is cheap so no big deal to do often ChartAnchor closest = GetClosestAnchor(chartControl, chartPanel, chartScale, cursorSensitivity, point); if (closest != null) { if (IsLocked) { return(Cursors.Arrow); } return(closest == StartAnchor ? Cursors.SizeNESW : Cursors.SizeNWSE); } // draw move cursor if cursor is near line path anywhere Point startAnchorPoint = StartAnchor.GetPoint(chartControl, chartPanel, chartScale); Point endAnchorPoint = EndAnchor.GetPoint(chartControl, chartPanel, chartScale); Point txtAnchorPoint = TextAnchor.GetPoint(chartControl, chartPanel, chartScale); Vector startEndVector = endAnchorPoint - startAnchorPoint; Vector endToTextVector = txtAnchorPoint - endAnchorPoint; //Text Outline Box Path as well UpdateTextLayout(chartControl, ChartPanel, chartScale); Point bottomLeft = new Point(txtAnchorPoint.X - textLayout.MaxWidth - textMargin, txtAnchorPoint.Y); Point topLeft = new Point(bottomLeft.X, txtAnchorPoint.Y - textLayout.MaxHeight - 2 * textMargin); Point topRight = new Point(txtAnchorPoint.X, txtAnchorPoint.Y - textLayout.MaxHeight - 2 * textMargin); Vector txtBottomLeft = bottomLeft - txtAnchorPoint; Vector bottomLeftTopLeft = topLeft - bottomLeft; Vector topLeftTopRight = topRight - topLeft; Vector topRightTxt = txtAnchorPoint - topRight; if (MathHelper.IsPointAlongVector(point, startAnchorPoint, startEndVector, cursorSensitivity) || MathHelper.IsPointAlongVector(point, endAnchorPoint, endToTextVector, cursorSensitivity) || MathHelper.IsPointAlongVector(point, txtAnchorPoint, txtBottomLeft, cursorSensitivity) || MathHelper.IsPointAlongVector(point, bottomLeft, bottomLeftTopLeft, cursorSensitivity) || MathHelper.IsPointAlongVector(point, topLeft, topLeftTopRight, cursorSensitivity) || MathHelper.IsPointAlongVector(point, topRight, topRightTxt, cursorSensitivity)) { return(IsLocked ? Cursors.Arrow : Cursors.SizeAll); } return(null); } }
protected override void OnStateChange() { if (State == State.SetDefaults) { Name = Custom.Resource.NinjaScriptDrawingToolText; Alignment = TextAlignment.Left; Anchor = new ChartAnchor { IsEditing = true, DrawingTool = this, DisplayName = Custom.Resource.NinjaScriptDrawingToolAnchor }; Font = new Gui.Tools.SimpleFont() { Size = 14 }; OutlineStroke = new Stroke(Brushes.Transparent, 2f); TextBrush = textBrush; AreaBrush = Brushes.Transparent; AreaOpacity = 100; YPixelOffset = 0; } else if (State == State.Terminated) { TextBrush = null; textBrush = null; Dispose(); } }
public override Cursor GetCursor(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, Point point) { if (!IsVisible) { return(null); } switch (DrawingState) { case DrawingState.Building: return(Cursors.Pen); case DrawingState.Moving: return(IsLocked ? Cursors.No : Cursors.SizeAll); case DrawingState.Editing: if (IsLocked) { return(Cursors.No); } return(editingAnchor == StartAnchor ? Cursors.SizeNESW : Cursors.SizeNWSE); default: Point startAnchorPixelPoint = StartAnchor.GetPoint(chartControl, chartPanel, chartScale); ChartAnchor closest = GetClosestAnchor(chartControl, chartPanel, chartScale, cursorSensitivity, point); if (closest != null) { if (IsLocked) { return(Cursors.Arrow); } return(closest == StartAnchor ? Cursors.SizeNESW : Cursors.SizeNWSE); } // Check the anchor lines for cursor Point endAnchorPixelPoint = EndAnchor.GetPoint(chartControl, chartPanel, chartScale); Point extAnchorPixelPoint = ExtensionAnchor.GetPoint(chartControl, chartPanel, chartScale); Point midAnchorPixelPoint = new Point((endAnchorPixelPoint.X + extAnchorPixelPoint.X) / 2, (endAnchorPixelPoint.Y + extAnchorPixelPoint.Y) / 2); Vector startToEndVec = endAnchorPixelPoint - startAnchorPixelPoint; Vector endToExtVec = extAnchorPixelPoint - endAnchorPixelPoint; Vector startToMidVec = midAnchorPixelPoint - startAnchorPixelPoint; foreach (Tuple <Point, Point> endPoint in GetAndrewsEndPoints(chartControl, chartScale)) { Vector andrewVector = endPoint.Item1 - endPoint.Item2; if (MathHelper.IsPointAlongVector(point, endPoint.Item2, andrewVector, cursorSensitivity)) { return(IsLocked ? Cursors.Arrow : Cursors.SizeAll); } } return(MathHelper.IsPointAlongVector(point, startAnchorPixelPoint, startToEndVec, cursorSensitivity) || MathHelper.IsPointAlongVector(point, endAnchorPixelPoint, endToExtVec, cursorSensitivity) || MathHelper.IsPointAlongVector(point, startAnchorPixelPoint, startToMidVec, cursorSensitivity) ? (IsLocked ? Cursors.Arrow : Cursors.SizeAll) : null); } }
public override void OnMouseUp(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, ChartAnchor dataPoint) { if (DrawingState == DrawingState.Building) { return; } DrawingState = DrawingState.Normal; editingAnchor = null; }
public override Cursor GetCursor(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, Point point) { switch (DrawingState) { case DrawingState.Building: return(Cursors.Pen); case DrawingState.Moving: return(IsLocked ? Cursors.No : Cursors.SizeAll); case DrawingState.Editing: if (IsLocked) { return(Cursors.No); } return(editingAnchor == StartAnchor ? Cursors.SizeNESW : Cursors.SizeNWSE); default: // draw move cursor if cursor is near line path anywhere Point startPoint = StartAnchor.GetPoint(chartControl, chartPanel, chartScale); ChartAnchor closest = GetClosestAnchor(chartControl, chartPanel, chartScale, cursorSensitivity, point); if (closest != null) { if (IsLocked) { return(Cursors.Arrow); } return(closest == StartAnchor ? Cursors.SizeNESW : Cursors.SizeNWSE); } Point endPoint = EndAnchor.GetPoint(chartControl, chartPanel, chartScale); Point minPoint = startPoint; Point maxPoint = endPoint; /*Vector totalVector = maxPoint - minPoint; * return MathHelper.IsPointAlongVector(point, minPoint, totalVector, cursorSensitivity) ? * IsLocked ? Cursors.Arrow : Cursors.SizeAll : null;*/ Vector DelVector1 = maxPoint - new Point(minPoint.X, maxPoint.Y); Vector DelVector2 = maxPoint - new Point(maxPoint.X, minPoint.Y); Vector DelVector3 = minPoint - new Point(maxPoint.X, minPoint.Y); Vector DelVector4 = minPoint - new Point(minPoint.X, maxPoint.Y); return /*MathHelper.IsPointAlongVector(point, minPoint, totalVector, cursorSensitivity)||*/ /*MathHelper.IsPointAlongVector(point, minPoint, DelVector1, cursorSensitivity)|| * MathHelper.IsPointAlongVector(point, minPoint, DelVector2, cursorSensitivity)|| * MathHelper.IsPointAlongVector(point, maxPoint, DelVector3, cursorSensitivity)|| * MathHelper.IsPointAlongVector(point, maxPoint, DelVector4, cursorSensitivity)*/ (MathHelper.IsPointInsideTriangle(point, minPoint, maxPoint, new Point(minPoint.X, maxPoint.Y)) || MathHelper.IsPointInsideTriangle(point, minPoint, maxPoint, new Point(maxPoint.X, minPoint.Y))? IsLocked ? Cursors.Arrow : Cursors.SizeAll : null); } }
private static Arc ArcCore(NinjaScriptBase owner, bool isAutoScale, string tag, int startBarsAgo, DateTime startTime, double startY, int endBarsAgo, DateTime endTime, double endY, Brush brush, DashStyleHelper dashStyle, int width, bool isGlobal, string templateName) { if (owner == null) { throw new ArgumentException("owner"); } if (startTime == Core.Globals.MinDate && endTime == Core.Globals.MinDate && startBarsAgo == int.MinValue && endBarsAgo == int.MinValue) { throw new ArgumentException("bad start/end date/time"); } if (string.IsNullOrWhiteSpace(tag)) { throw new ArgumentException("tag cant be null or empty", "tag"); } if (isGlobal && tag[0] != GlobalDrawingToolManager.GlobalDrawingToolTagPrefix) { tag = GlobalDrawingToolManager.GlobalDrawingToolTagPrefix + tag; } Arc newArc = DrawingTool.GetByTagOrNew(owner, typeof(Arc), tag, templateName) as Arc; if (newArc == null) { return(null); } DrawingTool.SetDrawingToolCommonValues(newArc, tag, isAutoScale, owner, isGlobal); // dont nuke existing anchor refs on the instance ChartAnchor startAnchor = DrawingTool.CreateChartAnchor(owner, startBarsAgo, startTime, startY); ChartAnchor endAnchor = DrawingTool.CreateChartAnchor(owner, endBarsAgo, endTime, endY); startAnchor.CopyDataValues(newArc.StartAnchor); endAnchor.CopyDataValues(newArc.EndAnchor); if (brush != null) { newArc.Stroke = new Stroke(brush, dashStyle, width, 50) { RenderTarget = newArc.Stroke.RenderTarget }; newArc.ArcStroke = new Stroke(brush, dashStyle, width) { RenderTarget = newArc.ArcStroke.RenderTarget }; } newArc.SetState(State.Active); return(newArc); }
public override void OnMouseDown(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, ChartAnchor dataPoint) { switch (DrawingState) { case DrawingState.Building: if (EntryAnchor.IsEditing) { dataPoint.CopyDataValues(EntryAnchor); dataPoint.CopyDataValues(RiskAnchor); EntryAnchor.IsEditing = false; entryPrice = AttachedTo.Instrument.MasterInstrument.RoundToTickSize(EntryAnchor.Price); } else if (RiskAnchor.IsEditing) { dataPoint.CopyDataValues(RiskAnchor); RiskAnchor.IsEditing = false; stopPrice = AttachedTo.Instrument.MasterInstrument.RoundToTickSize(RiskAnchor.Price); SetReward(); // we set the anchor for the target after stop mouse down event via SetReward() //however we need make sure Time is in view when builiding, but always when SetRreward is used.. RewardAnchor.Time = EntryAnchor.Time; RewardAnchor.SlotIndex = EntryAnchor.SlotIndex; RewardAnchor.IsEditing = false; } // if the anchors are no longer being edited, set the drawing state to normal and unselect the object if (!EntryAnchor.IsEditing && !RiskAnchor.IsEditing && !RewardAnchor.IsEditing) { DrawingState = DrawingState.Normal; IsSelected = false; } break; case DrawingState.Normal: Point point = dataPoint.GetPoint(chartControl, chartPanel, chartScale); //find which anchor has been clicked relative to the mouse point and make whichever anchor now editable editingAnchor = GetClosestAnchor(chartControl, chartPanel, chartScale, cursorSensitivity, point); if (editingAnchor != null) { editingAnchor.IsEditing = true; DrawingState = DrawingState.Editing; } else if (GetCursor(chartControl, chartPanel, chartScale, point) == null) { IsSelected = false; // missed } else { // didnt click an anchor but on a line so start moving DrawingState = DrawingState.Moving; } break; } }
public override void OnMouseUp(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, ChartAnchor dataPoint) { if (DrawingState == DrawingState.Editing || DrawingState == DrawingState.Moving) { DrawingState = DrawingState.Normal; } if (editingAnchor != null) { editingAnchor.IsEditing = false; } editingAnchor = null; }
private static T DrawRangeProfileTypeCore <T>(NinjaScriptBase owner, bool isAutoScale, string tag, int startBarsAgo, DateTime startTime, double startY, int endBarsAgo, DateTime endTime, double endY, Brush brush, DashStyleHelper dashStyle, int width, bool isGlobal, string templateName, Model model) where T : RangeProfile { if (owner == null) { throw new ArgumentException("owner"); } if (string.IsNullOrWhiteSpace(tag)) { throw new ArgumentException(@"tag cant be null or empty", "tag"); } if (isGlobal && tag[0] != GlobalDrawingToolManager.GlobalDrawingToolTagPrefix) { tag = string.Format("{0}{1}", GlobalDrawingToolManager.GlobalDrawingToolTagPrefix, tag); } T lineT = DrawingTool.GetByTagOrNew(owner, typeof(T), tag, templateName) as T; lineT.model = model; if (lineT == null) { return(null); } if (startTime == Core.Globals.MinDate && endTime == Core.Globals.MinDate && startBarsAgo == int.MinValue && endBarsAgo == int.MinValue) { throw new ArgumentException("bad start/end date/time"); } DrawingTool.SetDrawingToolCommonValues(lineT, tag, isAutoScale, owner, isGlobal); // dont nuke existing anchor refs on the instance ChartAnchor startAnchor; startAnchor = DrawingTool.CreateChartAnchor(owner, startBarsAgo, startTime, startY); ChartAnchor endAnchor = DrawingTool.CreateChartAnchor(owner, endBarsAgo, endTime, endY); startAnchor.CopyDataValues(lineT.StartAnchor); endAnchor.CopyDataValues(lineT.EndAnchor); /*if (brush != null) * lineT.LineStroke = new Stroke(brush, dashStyle, width);*/ lineT.SetState(State.Active); return(lineT); }
private static AndrewsPitchfork AndrewsPitchforkCore(NinjaScriptBase owner, string tag, bool isAutoScale, int anchor1BarsAgo, DateTime anchor1Time, double anchor1Y, int anchor2BarsAgo, DateTime anchor2Time, double anchor2Y, int anchor3BarsAgo, DateTime anchor3Time, double anchor3Y, Brush brush, DashStyleHelper dashStyle, int width, bool isGlobal, string templateName) { if (owner == null) { throw new ArgumentException("owner"); } if (string.IsNullOrWhiteSpace(tag)) { throw new ArgumentException(@"tag cant be null or empty", "tag"); } if (isGlobal && tag[0] != GlobalDrawingToolManager.GlobalDrawingToolTagPrefix) { tag = GlobalDrawingToolManager.GlobalDrawingToolTagPrefix + tag; } AndrewsPitchfork pitchfork = DrawingTool.GetByTagOrNew(owner, typeof(AndrewsPitchfork), tag, templateName) as AndrewsPitchfork; if (pitchfork == null) { return(null); } DrawingTool.SetDrawingToolCommonValues(pitchfork, tag, isAutoScale, owner, isGlobal); ChartAnchor startAnchor = DrawingTool.CreateChartAnchor(owner, anchor1BarsAgo, anchor1Time, anchor1Y); ChartAnchor endAnchor = DrawingTool.CreateChartAnchor(owner, anchor2BarsAgo, anchor2Time, anchor2Y); ChartAnchor extAnchor = DrawingTool.CreateChartAnchor(owner, anchor3BarsAgo, anchor3Time, anchor3Y); startAnchor.CopyDataValues(pitchfork.StartAnchor); endAnchor.CopyDataValues(pitchfork.EndAnchor); extAnchor.CopyDataValues(pitchfork.ExtensionAnchor); if (string.IsNullOrEmpty(templateName) || brush != null) { pitchfork.AnchorLineStroke.Width = width; pitchfork.RetracementLineStroke = new Stroke(brush, dashStyle, width) { RenderTarget = pitchfork.RetracementLineStroke.RenderTarget }; } pitchfork.SetState(State.Active); return(pitchfork); }
public override void OnMouseDown(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, ChartAnchor dataPoint) { switch (DrawingState) { case DrawingState.Building: if (StartAnchor.IsEditing) { dataPoint.CopyDataValues(StartAnchor); StartAnchor.IsEditing = false; // give end anchor something to start with so we dont try to render it with bad values right away dataPoint.CopyDataValues(EndAnchor); } else if (EndAnchor.IsEditing) { dataPoint.CopyDataValues(EndAnchor); EndAnchor.IsEditing = false; } // is initial building done (both anchors set) if (!StartAnchor.IsEditing && !EndAnchor.IsEditing) { DrawingState = DrawingState.Normal; IsSelected = false; } break; case DrawingState.Normal: Point point = dataPoint.GetPoint(chartControl, chartPanel, chartScale); // see if they clicked near a point to edit, if so start editing editingAnchor = GetClosestAnchor(chartControl, chartPanel, chartScale, cursorSensitivity, point); if (editingAnchor != null) { editingAnchor.IsEditing = true; DrawingState = DrawingState.Editing; } else { if (GetCursor(chartControl, chartPanel, chartScale, point) != null) { DrawingState = DrawingState.Moving; } else { // user whiffed. IsSelected = false; } } break; } }
public override void OnMouseUp(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, ChartAnchor dataPoint) { // simply end whatever moving if (DrawingState == DrawingState.Moving || DrawingState == DrawingState.Editing) { DrawingState = DrawingState.Normal; model.SaveProfiles(); } if (editingAnchor != null) { editingAnchor.IsEditing = false; } editingAnchor = null; }
public override void OnMouseUp(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, ChartAnchor dataPoint) { if (DrawingState == DrawingState.Building) { return; } // simply end whatever was editing / moving DrawingState = DrawingState.Normal; if (editingAnchor != null) { editingAnchor.IsEditing = false; } editingAnchor = null; }
public override void OnMouseUp(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, ChartAnchor dataPoint) { // simply end whatever moving if (DrawingState == DrawingState.Moving || DrawingState == DrawingState.Editing) { DrawingState = DrawingState.Normal; } if (editingAnchor != null) { editingAnchor.IsEditing = false; } editingAnchor = null; foreach (ChartAnchor anchor in Anchors) { anchor.ClearMoveDelta(); } lastMouseMoveDataPoint = null; }
public override Cursor GetCursor(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, Point point) { switch (DrawingState) { case DrawingState.Building: return(Cursors.Pen); case DrawingState.Editing: return(IsLocked ? Cursors.No : Mode == RegionHighlightMode.Time ? Cursors.SizeWE : Cursors.SizeNS); case DrawingState.Moving: return(IsLocked ? Cursors.No : Cursors.SizeAll); default: Point startAnchorPixelPoint = StartAnchor.GetPoint(chartControl, chartPanel, chartScale); ChartAnchor closest = GetClosestAnchor(chartControl, chartPanel, chartScale, cursorSensitivity, point); if (closest != null) { if (IsLocked) { return(Cursors.Arrow); } return(Mode == RegionHighlightMode.Time ? Cursors.SizeWE : Cursors.SizeNS); } Point endAnchorPixelPoint = EndAnchor.GetPoint(chartControl, chartPanel, chartScale); Vector totalVector = endAnchorPixelPoint - startAnchorPixelPoint; if (MathHelper.IsPointAlongVector(point, startAnchorPixelPoint, totalVector, cursorSensitivity)) { return(IsLocked ? Cursors.Arrow : Cursors.SizeAll); } // check if cursor is along region edges foreach (Point anchorPoint in new[] { startAnchorPixelPoint, endAnchorPixelPoint }) { if (Mode == RegionHighlightMode.Price && Math.Abs(anchorPoint.Y - point.Y) <= cursorSensitivity) { return(IsLocked ? Cursors.Arrow : Cursors.SizeAll); } if (Mode == RegionHighlightMode.Time && Math.Abs(anchorPoint.X - point.X) <= cursorSensitivity) { return(IsLocked ? Cursors.Arrow : Cursors.SizeAll); } } return(null); } }
private static Ruler RulerCore(NinjaScriptBase owner, string tag, bool isAutoScale, int startBarsAgo, DateTime startTime, double startY, int endBarsAgo, DateTime endTime, double endY, int textBarsAgo, DateTime textTime, double textY, bool isGlobal, string templateName) { if (owner == null) { throw new ArgumentException("owner"); } if (startTime == Core.Globals.MinDate && endTime == Core.Globals.MinDate && startBarsAgo == int.MinValue && endBarsAgo == int.MinValue) { throw new ArgumentException("bad start/end date/time"); } if (string.IsNullOrWhiteSpace(tag)) { throw new ArgumentException(@"tag cant be null or empty", "tag"); } if (isGlobal && tag[0] != GlobalDrawingToolManager.GlobalDrawingToolTagPrefix) { tag = GlobalDrawingToolManager.GlobalDrawingToolTagPrefix + tag; } Ruler ruler = DrawingTool.GetByTagOrNew(owner, typeof(Ruler), tag, templateName) as Ruler; if (ruler == null) { return(null); } DrawingTool.SetDrawingToolCommonValues(ruler, tag, isAutoScale, owner, isGlobal); ChartAnchor startAnchor = DrawingTool.CreateChartAnchor(owner, startBarsAgo, startTime, startY); ChartAnchor endAnchor = DrawingTool.CreateChartAnchor(owner, endBarsAgo, endTime, endY); ChartAnchor txtAnchor = DrawingTool.CreateChartAnchor(owner, textBarsAgo, textTime, textY); startAnchor.CopyDataValues(ruler.StartAnchor); endAnchor.CopyDataValues(ruler.EndAnchor); txtAnchor.CopyDataValues(ruler.TextAnchor); ruler.SetState(State.Active); return(ruler); }
public override Cursor GetCursor(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, Point point) { switch (DrawingState) { case DrawingState.Building: return(Cursors.Pen); case DrawingState.Moving: return(IsLocked ? Cursors.No : Cursors.SizeAll); case DrawingState.Editing: return(IsLocked ? Cursors.No : (editingAnchor == EntryAnchor ? Cursors.SizeNESW : Cursors.SizeNWSE)); default: // draw move cursor if cursor is near line path anywhere Point entryAnchorPixelPoint = EntryAnchor.GetPoint(chartControl, chartPanel, chartScale); // see if we are near an anchor right away. this is is cheap so no big deal to do often ChartAnchor closest = GetClosestAnchor(chartControl, chartPanel, chartScale, cursorSensitivity, point); if (closest != null) { return(IsLocked ? Cursors.Arrow : (closest == EntryAnchor ? Cursors.SizeNESW : Cursors.SizeNWSE)); } Point stopAnchorPixelPoint = RiskAnchor.GetPoint(chartControl, chartPanel, chartScale); Vector anchorsVector = stopAnchorPixelPoint - entryAnchorPixelPoint; // see if the mouse is along one of our lines for moving if (MathHelper.IsPointAlongVector(point, entryAnchorPixelPoint, anchorsVector, cursorSensitivity)) { return(IsLocked ? Cursors.Arrow : Cursors.SizeAll); } if (!DrawTarget) { return(null); } Point targetPoint = RewardAnchor.GetPoint(chartControl, chartPanel, chartScale); Vector targetToEntryVector = targetPoint - entryAnchorPixelPoint; return(MathHelper.IsPointAlongVector(point, entryAnchorPixelPoint, targetToEntryVector, cursorSensitivity) ? (IsLocked ? Cursors.Arrow : Cursors.SizeAll) : null); } }
public override Cursor GetCursor(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, Point point) { switch (DrawingState) { case DrawingState.Building: return(Cursors.Pen); case DrawingState.Moving: return(IsLocked ? Cursors.No : Cursors.SizeAll); case DrawingState.Editing: if (IsLocked) { return(Cursors.No); } return(editingAnchor == StartAnchor ? Cursors.SizeNESW : Cursors.SizeNWSE); default: // draw move cursor if cursor is near line path anywhere Point startPoint = StartAnchor.GetPoint(chartControl, chartPanel, chartScale); ChartAnchor closest = GetClosestAnchor(chartControl, chartPanel, chartScale, cursorSensitivity, point); if (closest != null) { if (IsLocked) { return(Cursors.Arrow); } return(closest == StartAnchor ? Cursors.SizeNESW : Cursors.SizeNWSE); } Point endPoint = EndAnchor.GetPoint(chartControl, chartPanel, chartScale); Point minPoint = startPoint; Point maxPoint = endPoint; maxPoint = GetExtendedPoint(startPoint, endPoint); Vector totalVector = maxPoint - minPoint; return(MathHelper.IsPointAlongVector(point, minPoint, totalVector, cursorSensitivity) ? IsLocked ? Cursors.Arrow : Cursors.SizeAll : null); } }
protected override void OnStateChange() { if (State == State.SetDefaults) { AreaBrush = Brushes.CornflowerBlue; AreaOpacity = 40; DrawingState = DrawingState.Building; Name = Custom.Resource.NinjaScriptDrawingToolTimeCycles; OutlineStroke = new Stroke(Brushes.CornflowerBlue, DashStyleHelper.Solid, 2, 100); StartAnchor = new ChartAnchor { DisplayName = Custom.Resource.NinjaScriptDrawingToolAnchorStart, IsEditing = true, DrawingTool = this }; EndAnchor = new ChartAnchor { DisplayName = Custom.Resource.NinjaScriptDrawingToolAnchorEnd, IsEditing = true, DrawingTool = this }; } else if (State == State.Terminated) { Dispose(); } }
protected override void OnStateChange() { base.OnStateChange(); switch (State) { case State.SetDefaults: AnchorLineStroke = new Stroke(Brushes.DarkGray, DashStyleHelper.Solid, 1f, 50); RetracementLineStroke = new Stroke(Brushes.SeaGreen, DashStyleHelper.Solid, 2f); Description = Custom.Resource.NinjaScriptDrawingToolAndrewsPitchforkDescription; Name = Custom.Resource.NinjaScriptDrawingToolAndrewsPitchfork; StartAnchor = new ChartAnchor { IsEditing = true, DrawingTool = this }; ExtensionAnchor = new ChartAnchor { IsEditing = true, DrawingTool = this }; EndAnchor = new ChartAnchor { IsEditing = true, DrawingTool = this }; StartAnchor.DisplayName = Custom.Resource.NinjaScriptDrawingToolAnchorStart; EndAnchor.DisplayName = Custom.Resource.NinjaScriptDrawingToolAnchorEnd; ExtensionAnchor.DisplayName = Custom.Resource.NinjaScriptDrawingToolAnchorExtension; PriceLevelOpacity = 5; IsTextDisplayed = true; break; case State.Configure: if (PriceLevels.Count == 0) { PriceLevels.Add(new PriceLevel(0, Brushes.SeaGreen)); PriceLevels.Add(new PriceLevel(50, Brushes.SeaGreen)); PriceLevels.Add(new PriceLevel(100, Brushes.SeaGreen)); } break; case State.Terminated: Dispose(); break; } }
private static Region Region(NinjaScriptBase owner, string tag, int startBarsAgo, DateTime startTime, int endBarsAgo, DateTime endTime, ISeries <double> series1, ISeries <double> series2, double price, Brush outlineBrush, Brush areaBrush, int areaOpacity, int displacement) { Region region = DrawingTool.GetByTagOrNew(owner, typeof(Region), tag, null) as Region; if (region == null) { return(null); } DrawingTool.SetDrawingToolCommonValues(region, tag, false, owner, false); ChartAnchor startAnchor = DrawingTool.CreateChartAnchor(owner, startBarsAgo, startTime, 0); ChartAnchor endAnchor = DrawingTool.CreateChartAnchor(owner, endBarsAgo, endTime, 0); startAnchor.CopyDataValues(region.StartAnchor); endAnchor.CopyDataValues(region.EndAnchor); if (series1 == null && series2 == null) { throw new ArgumentException("At least one series is required"); } region.Series1 = series1; region.Series2 = series2; region.Price = price; region.Displacement = displacement; region.AreaBrush = areaBrush; region.AreaOpacity = areaOpacity; region.OutlineStroke = outlineBrush != null ? new Stroke(outlineBrush) : null; region.SetState(State.Active); region.DrawingState = DrawingState.Normal; region.IsSelected = false; return(region); }
protected override void OnStateChange() { if (State == State.SetDefaults) { AnchorLineStroke = new Stroke(Brushes.DarkGray, DashStyleHelper.Dash, 1f); AreaBrush = Brushes.Goldenrod; AreaOpacity = 25; DrawingState = DrawingState.Building; EndAnchor = new ChartAnchor { DisplayName = Custom.Resource.NinjaScriptDrawingToolAnchorEnd, IsEditing = true, DrawingTool = this }; OutlineStroke = new Stroke(Brushes.Goldenrod, 2f); StartAnchor = new ChartAnchor { DisplayName = Custom.Resource.NinjaScriptDrawingToolAnchorStart, IsEditing = true, DrawingTool = this }; ZOrderType = DrawingToolZOrder.AlwaysDrawnFirst; } else if (State == State.Terminated) { Dispose(); } }
private static GannFan GannFanCore(NinjaScriptBase owner, bool isAutoScale, string tag, int barsAgo, DateTime time, double y, bool isGlobal, string templateName) { if (owner == null) { throw new ArgumentException("owner"); } if (time == Core.Globals.MinDate && barsAgo == int.MinValue) { throw new ArgumentException("bad start/end date/time"); } if (string.IsNullOrWhiteSpace(tag)) { throw new ArgumentException("tag cant be null or empty"); } if (isGlobal && tag[0] != '@') { tag = "@" + tag; } GannFan gannFan = DrawingTool.GetByTagOrNew(owner, typeof(GannFan), tag, templateName) as GannFan; if (gannFan == null) { return(null); } DrawingTool.SetDrawingToolCommonValues(gannFan, tag, isAutoScale, owner, isGlobal); ChartAnchor anchor = DrawingTool.CreateChartAnchor(owner, barsAgo, time, y); anchor.CopyDataValues(gannFan.Anchor); gannFan.SetState(State.Active); return(gannFan); }
protected override void OnStateChange() { switch (State) { case State.SetDefaults: Description = Custom.Resource.NinjaScriptDrawingToolGannFan; Name = Custom.Resource.NinjaScriptDrawingToolGannFan; Anchor = new ChartAnchor { DisplayName = Custom.Resource.NinjaScriptDrawingToolAnchor, IsEditing = true, }; FanDirection = GannFanDirection.UpRight; PriceLevelOpacity = 5; IsTextDisplayed = true; PointsPerBar = -1; break; case State.Configure: if (GannAngles.Count == 0) { Brush[] gannBrushes = { Brushes.Red, Brushes.MediumOrchid, Brushes.DarkSlateBlue, Brushes.SteelBlue, Brushes.Gray, Brushes.MediumAquamarine, Brushes.Khaki, Brushes.Coral, Brushes.Red }; for (int i = 0; i < 9; i++) { int ratioX = i == 8 ? 8 : (i <= 4 ? 1 : i - 3); int ratioY = i == 0 ? 8 : (i <= 4 ? 5 - i : 1); GannAngles.Add(new GannAngle(ratioX, ratioY, gannBrushes[i % 8])); } } break; case State.Terminated: Dispose(); break; } }