public override void OnMouseDown(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, ChartAnchor dataPoint) { switch (DrawingState) { case DrawingState.Building: if (PointsPerBar < 0) { PointsPerBar = AttachedTo.Instrument.MasterInstrument.TickSize; } dataPoint.CopyDataValues(Anchor); Anchor.IsEditing = false; DrawingState = DrawingState.Normal; IsSelected = false; break; case DrawingState.Normal: // make sure they clicked near our anchor or a gann line Point point = dataPoint.GetPoint(chartControl, chartPanel, chartScale); if (GetClosestAnchor(chartControl, chartPanel, chartScale, 10, point) == Anchor) { DrawingState = DrawingState.Editing; } else if (GetCursor(chartControl, chartControl.ChartPanels[PanelIndex], chartScale, point) == Cursors.SizeAll) { DrawingState = DrawingState.Moving; } else { IsSelected = false; } break; } }
public override void OnMouseDown(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, ChartAnchor dataPoint) { switch (DrawingState) { case DrawingState.Building: if (StartAnchor.IsEditing) { dataPoint.CopyDataValues(StartAnchor); dataPoint.CopyDataValues(EndAnchor); StartAnchor.IsEditing = false; } else if (EndAnchor.IsEditing) { dataPoint.CopyDataValues(EndAnchor); EndAnchor.IsEditing = false; DrawingState = DrawingState.Normal; IsSelected = false; } break; case DrawingState.Normal: Point p = dataPoint.GetPoint(chartControl, chartPanel, chartScale); Cursor c = GetCursor(chartControl, chartPanel, chartScale, p); if (c == Cursors.SizeWE) { int editingAnchor = GetClosestBarAnchor(chartControl, p, false); int i = anchorBars.IndexOf(editingAnchor); if (editingAnchor != int.MinValue && i > -1) { StartAnchor.UpdateXFromPoint(new Point(anchorBars[i == 0 ? i : i - 1], chartPanel.Y + chartPanel.H), chartControl, chartScale); EndAnchor.UpdateXFromPoint(new Point(anchorBars[i == 0 ? i + 1 : i], chartPanel.Y + chartPanel.H), chartControl, chartScale); EndAnchor.IsEditing = true; DrawingState = DrawingState.Editing; } } else if (c == Cursors.SizeAll) { int editingAnchor = GetClosestBarAnchor(chartControl, p, true); int i = anchorBars.IndexOf(editingAnchor); if (editingAnchor != int.MinValue && i > -1) { StartAnchor.UpdateXFromPoint(new Point(anchorBars[i - 1], chartPanel.Y + chartPanel.H), chartControl, chartScale); EndAnchor.UpdateXFromPoint(new Point(anchorBars[i], chartPanel.Y + chartPanel.H), chartControl, chartScale); // We have to update the InitialMouseDownAnchor here because we moved our Start/End anchors InitialMouseDownAnchor = dataPoint.Clone() as ChartAnchor; DrawingState = DrawingState.Moving; } } else { IsSelected = false; } break; } }
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 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 OnMouseDown(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, ChartAnchor dataPoint) { switch (DrawingState) { case DrawingState.Building: if (Mode == RegionHighlightMode.Price) { dataPoint.Time = chartControl.FirstTimePainted.AddSeconds((chartControl.LastTimePainted - chartControl.FirstTimePainted).TotalSeconds / 2); } else { dataPoint.Price = chartScale.MinValue + (chartScale.MaxMinusMin / 2); } if (StartAnchor.IsEditing) { dataPoint.CopyDataValues(StartAnchor); StartAnchor.IsEditing = false; dataPoint.CopyDataValues(EndAnchor); } else if (EndAnchor.IsEditing) { if (Mode == RegionHighlightMode.Price) { dataPoint.Time = StartAnchor.Time; dataPoint.SlotIndex = StartAnchor.SlotIndex; } else { dataPoint.Price = StartAnchor.Price; } dataPoint.CopyDataValues(EndAnchor); EndAnchor.IsEditing = false; } if (!StartAnchor.IsEditing && !EndAnchor.IsEditing) { DrawingState = DrawingState.Normal; IsSelected = false; } break; case DrawingState.Normal: Point point = dataPoint.GetPoint(chartControl, chartPanel, chartScale); editingAnchor = GetClosestAnchor(chartControl, chartPanel, chartScale, cursorSensitivity, point); if (editingAnchor != null) { editingAnchor.IsEditing = true; DrawingState = DrawingState.Editing; } else { if (GetCursor(chartControl, chartPanel, chartScale, point) == Cursors.SizeAll) { DrawingState = DrawingState.Moving; } else if (GetCursor(chartControl, chartPanel, chartScale, point) == Cursors.SizeWE || GetCursor(chartControl, chartPanel, chartScale, point) == Cursors.SizeNS) { DrawingState = DrawingState.Editing; } else if (GetCursor(chartControl, chartPanel, chartScale, point) == Cursors.Arrow) { DrawingState = DrawingState.Editing; } else if (GetCursor(chartControl, chartPanel, chartScale, point) == null) { IsSelected = false; } } break; } }
public override void OnMouseDown(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, ChartAnchor dataPoint) { Point p = dataPoint.GetPoint(chartControl, chartPanel, chartScale); switch (DrawingState) { case DrawingState.Building: if (ChartAnchors.Count == 0) { ChartAnchors.Add(new ChartAnchor { DisplayName = Custom.Resource.NinjaScriptDrawingToolAnchor, IsEditing = true, DrawingTool = this }); } foreach (ChartAnchor ca in ChartAnchors) { if (ca.IsEditing) { dataPoint.CopyDataValues(ca); ca.IsEditing = false; } } ChartAnchor clickTestAnchor = GetClosestAnchor(chartControl, chartPanel, chartScale, cursorSensitivity, p); if (ChartAnchors.Count > 1 && doubleClickTimer.IsEnabled && clickTestAnchor != null && clickTestAnchor != ChartAnchors[ChartAnchors.Count - 1]) { // ChartAnchors[ChartAnchors.Count - 1] is the 'temp anchor' ChartAnchors.Remove(ChartAnchors[ChartAnchors.Count - 1]); PathToolSegments.Remove(PathToolSegments[PathToolSegments.Count - 1]); doubleClickTimer.Stop(); DrawingState = DrawingState.Normal; IsSelected = false; } else { ChartAnchor ca = new ChartAnchor { DisplayName = Custom.Resource.NinjaScriptDrawingToolAnchor, IsEditing = true, DrawingTool = this }; dataPoint.CopyDataValues(ca); ChartAnchors.Add(ca); if (ChartAnchors.Count > 1) { PathToolSegments.Add(new PathToolSegment(ChartAnchors[ChartAnchors.Count - 2], ChartAnchors[ChartAnchors.Count - 1], string.Format("{0} {1}", Custom.Resource.NinjaScriptDrawingToolPathSegment, PathToolSegments.Count + 1))); if (!doubleClickTimer.IsEnabled) { doubleClickTimer.Start(); } } } break; case DrawingState.Normal: editingAnchor = GetClosestAnchor(chartControl, chartPanel, chartScale, cursorSensitivity, p); if (editingAnchor != null) { editingAnchor.IsEditing = true; DrawingState = DrawingState.Editing; } else { if (GetCursor(chartControl, chartPanel, chartScale, p) != null) { DrawingState = DrawingState.Moving; } } break; } }
public override void OnMouseDown(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, ChartAnchor dataPoint) { if (DrawingState == DrawingState.Building) { dataPoint.CopyDataValues(Anchor); Anchor.IsEditing = false; DisplayText = string.Empty; TextBox tb = new TextBox { AcceptsReturn = true, Background = new SolidColorBrush(Color.FromArgb(4, 0, 0, 0)), BorderBrush = chartControl.Properties.AxisPen.Brush, FontFamily = Font.Family, FontSize = Font.Size, FontStyle = Font.Italic ? FontStyles.Italic : FontStyles.Normal, FontWeight = Font.Bold ? FontWeights.Bold : FontWeights.Normal, Foreground = TextBrush ?? chartControl.Properties.ChartText, HorizontalAlignment = HorizontalAlignment.Stretch, Style = Application.Current.FindResource("TextBoxNoEffects") as Style }; if (TextBrush == null) { UseChartTextBrush = true; } popup = new Popup { AllowsTransparency = true, PlacementTarget = chartPanel, Placement = PlacementMode.MousePoint, MinWidth = 75, IsOpen = false, StaysOpen = false, Child = tb }; tb.PreviewKeyDown += (sender, args) => { if (args.Key == Key.System && args.SystemKey == Key.Enter) { int oldIdx = tb.CaretIndex; string text1 = tb.Text.Substring(0, oldIdx); string text2 = tb.Text.Substring(oldIdx); tb.Text = string.Format("{0}{1}{2}", text1, Environment.NewLine, text2); tb.CaretIndex = oldIdx + Environment.NewLine.Length; args.Handled = true; } if (args.Key == Key.Enter) { popup.IsOpen = false; args.Handled = true; } }; tb.PreviewLostKeyboardFocus += (sender, args) => { popup.IsOpen = false; }; popup.IsOpen = true; ManuallyDrawn = true; tb.Focus(); chartControl.OwnerChart.PreviewMouseDown += OnChartMouseDown; popup.Closed += (sender, args) => { chartControl.OwnerChart.PreviewMouseDown -= OnChartMouseDown; DisplayText = tb.Text; DrawingState = DrawingState.Normal; IsSelected = false; chartControl.InvalidateVisual(); if (chartControl.IsStayInDrawMode) { chartControl.TryStartDrawing(GetType().FullName); } }; } else { Point point = dataPoint.GetPoint(chartControl, chartPanel, chartScale); if (GetCurrentRect(layoutRect, outlinePadding).IntersectsWith(new Rect(point.X, point.Y, 2, 2))) { Anchor.IsEditing = true; DrawingState = DrawingState.Moving; } else { IsSelected = false; } } }
public override void OnMouseDown(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, ChartAnchor dataPoint) { if (IsButtonCLick) { IsButtonCLick = false; return; } 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. int start_X = ((int)model.parent.ChartControl.GetXByTime(StartAnchor.Time)); int end_X = ((int)model.parent.ChartControl.GetXByTime(EndAnchor.Time)); int start_Y = chartScale.GetYByValue(StartAnchor.Price); int end_Y = chartScale.GetYByValue(EndAnchor.Price); int leftPosition = 0; int topPosition = 0; if (start_X < end_X) { leftPosition = start_X; } else { leftPosition = end_X; } if (start_Y < end_Y) { topPosition = start_Y; } else { topPosition = end_Y; } if (point.X >= leftPosition && point.X <= leftPosition + 15 && point.Y >= topPosition - 20 && point.Y <= topPosition - 5) { model.parent.RemoveDrawObject(this.Tag); model.DeleteProfile(this.Tag); model.SaveProfiles(); IsButtonCLick = true; break; } if (point.X >= leftPosition + 20 && point.X <= leftPosition + 20 + 15 && point.Y >= topPosition - 20 && point.Y <= topPosition - 5) { if (ProfileType == 0) { ProfileType = 1; } else if (ProfileType == 1) { ProfileType = 2; } else if (ProfileType == 2) { ProfileType = 0; } model.SaveProfiles(); IsButtonCLick = true; break; } if (point.X >= leftPosition + 40 && point.X <= leftPosition + 40 + 15 && point.Y >= topPosition - 20 && point.Y <= topPosition - 5) { ExtendedLine = !ExtendedLine; model.SaveProfiles(); IsButtonCLick = true; break; } IsSelected = false; } } break; } /*Point point1 = dataPoint.GetPoint(chartControl, chartPanel, chartScale); * */ }
public override void OnMouseDown(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, ChartAnchor dataPoint) { Point p = dataPoint.GetPoint(chartControl, chartPanel, chartScale); switch (DrawingState) { case DrawingState.Building: if (ChartAnchors.Count == 0) { ChartAnchors.Add(new ChartAnchor { DisplayName = Custom.Resource.NinjaScriptDrawingToolAnchor, IsEditing = true, DrawingTool = this }); } foreach (ChartAnchor ca in ChartAnchors) { if (ca.IsEditing) { dataPoint.CopyDataValues(ca); ca.IsEditing = false; } } if (ChartAnchors.Count > 2 && (GetCursor(chartControl, chartPanel, chartScale, p) == Cursors.Cross || DateTime.Now.Subtract(lastClick).TotalMilliseconds <= 200)) { ChartAnchors.Remove(ChartAnchors[ChartAnchors.Count - 1]); DrawingState = DrawingState.Normal; IsSelected = false; } else { ChartAnchor ca = new ChartAnchor { DisplayName = Custom.Resource.NinjaScriptDrawingToolAnchor, IsEditing = true, DrawingTool = this }; dataPoint.CopyDataValues(ca); ChartAnchors.Add(ca); } lastClick = DateTime.Now; break; case DrawingState.Normal: editingAnchor = GetClosestAnchor(chartControl, chartPanel, chartScale, cursorSensitivity, p); if (editingAnchor != null) { editingAnchor.IsEditing = true; DrawingState = DrawingState.Editing; } else { if (GetCursor(chartControl, chartPanel, chartScale, p) != null) { DrawingState = DrawingState.Moving; } else if (!IsPointInsidePolygon(chartControl, chartPanel, chartScale, p)) { IsSelected = false; } } break; } }
public override void OnMouseDown(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, ChartAnchor dataPoint) { switch (DrawingState) { case DrawingState.Building: if (StartAnchor.IsEditing) { dataPoint.CopyDataValues(StartAnchor); // give end anchor something to start with so we dont try to render it with bad values right away dataPoint.CopyDataValues(EndAnchor); dataPoint.CopyDataValues(TextAnchor); StartAnchor.IsEditing = false; } else if (EndAnchor.IsEditing) { dataPoint.CopyDataValues(EndAnchor); EndAnchor.IsEditing = false; // give text anchor something to start with right away so we dont try to render it // with uninitialized values as well dataPoint.CopyDataValues(TextAnchor); } else if (TextAnchor.IsEditing) { dataPoint.CopyDataValues(TextAnchor); TextAnchor.IsEditing = false; } // is initial building done (all anchors set) if (!StartAnchor.IsEditing && !EndAnchor.IsEditing && !TextAnchor.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 (editingAnchor == null || IsLocked) { // or if they didnt click particulary close to either, move (they still clicked close to our line) // set it to moving even if locked so we know to change cursor if (GetCursor(chartControl, chartPanel, chartScale, point) != null) { DrawingState = DrawingState.Moving; } else { IsSelected = false; } } break; } }
public override void OnMouseDown(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, ChartAnchor dataPoint) { switch (DrawingState) { case DrawingState.Building: if (StartAnchor.IsEditing) { dataPoint.CopyDataValues(StartAnchor); // Give end anchor something to start with so we dont try to render it with bad values right away dataPoint.CopyDataValues(EndAnchor); StartAnchor.IsEditing = false; } else if (EndAnchor.IsEditing) { dataPoint.CopyDataValues(EndAnchor); // Give extension anchor something nearby to start with dataPoint.CopyDataValues(ExtensionAnchor); EndAnchor.IsEditing = false; } else if (ExtensionAnchor.IsEditing) { dataPoint.CopyDataValues(ExtensionAnchor); ExtensionAnchor.IsEditing = false; } // Is initial building done (all anchors set) if (Anchors.All(a => !a.IsEditing)) { DrawingState = DrawingState.Normal; IsSelected = false; } break; case DrawingState.Normal: Point point = dataPoint.GetPoint(chartControl, chartPanel, chartScale); editingAnchor = GetClosestAnchor(chartControl, chartPanel, chartScale, cursorSensitivity, point); if (editingAnchor != null) { editingAnchor.IsEditing = true; DrawingState = DrawingState.Editing; } else { if (GetCursor(chartControl, chartPanel, chartScale, point) == Cursors.SizeAll) { DrawingState = DrawingState.Moving; } else if (GetCursor(chartControl, chartPanel, chartScale, point) == Cursors.SizeNESW || GetCursor(chartControl, chartPanel, chartScale, point) == Cursors.SizeNWSE) { DrawingState = DrawingState.Editing; } else if (GetCursor(chartControl, chartPanel, chartScale, point) == Cursors.Arrow) { DrawingState = DrawingState.Editing; } else if (GetCursor(chartControl, chartPanel, chartScale, point) == null) { IsSelected = false; } } break; } }