public void DeleteSeriesObject(IChartInteractiveObject obj) { foreach (var series in listInteractiveSeries) { series.RemoveObjectFromList(obj); } }
protected override void OnMouseDown(List <SeriesEditParameter> parameters, MouseEventArgs e, Keys modifierKeys, out IChartInteractiveObject objectToEdit) { objectToEdit = null; if (e.Button != MouseButtons.Left) { return; } var pointD = Chart.Owner.MouseToWorldCoords(e.X, e.Y); var index = (int)Math.Round(pointD.X); if (index >= 0 && index < Chart.StockPane.StockSeries.Data.Count) { pointD.Y = (double)(Chart.StockPane.StockSeries.Data[index].low); } var incompleted = data.Find(s => s.Completed == false); if (incompleted != null) { incompleted.AddPoint(pointD.X, pointD.Y); MakeProjections(); } else { var span = new FiboSpan(this); span.AddPoint(pointD.X, pointD.Y); if (Owner.Owner.Owner.AdjustObjectColorsOnCreation) { span.AjustColorScheme(Owner.Owner.Owner); } data.Add(span); } }
protected override bool OnMouseUp(List <SeriesEditParameter> parameters, MouseEventArgs e, Keys modifierKeys, out IChartInteractiveObject objectToEdit) { var hideLine = SeriesEditParameter.TryGetParamValue(parameters, "HideSegment", true); objectToEdit = null; var pair = data.FirstOrDefault(p => p.IsBeingCreated); if (pair == null) { return(false); } // если проекция выродилась - удалить ее if (Math.Abs(pair.points[0].b - pair.points[1].b) < 0.00001f) { data.Remove(pair); return(true); } // завершить создание pair.IsBeingCreated = false; pair.HideLine = hideLine; objectToEdit = pair; return(true); }
protected override bool OnMouseUp(List <SeriesEditParameter> parameters, MouseEventArgs e, Keys modifierKeys, out IChartInteractiveObject objectToEdit) { objectToEdit = null; var editedComment = data.Find(c => c.IsBeingCreated); if (editedComment == null) { return(false); } // завершить создание комментария - открыть окно редактирования текста editedComment.IsBeingCreated = false; var showWindow = SeriesEditParameter.TryGetParamValue(parameters, "ShowWindow", true); if (showWindow) { Chart.toolSkipMouseDown = true; if (editedComment.ShowEditDialog() == DialogResult.Cancel) { // удалить комментарий data.Remove(editedComment); return(true); } } return(false); }
protected virtual bool OnMouseUp(List <SeriesEditParameter> parameters, MouseEventArgs e, Keys modifierKeys, out IChartInteractiveObject objectToEdit) { objectToEdit = null; return(false); }
/// <summary> /// закончить создание линии /// </summary> protected override bool OnMouseUp(List <SeriesEditParameter> parameters, MouseEventArgs e, Keys modifierKeys, out IChartInteractiveObject objectToEdit) { objectToEdit = null; var incompleted = data.Find(s => s.IsBeingCreated); if (incompleted == null) { return(false); } var pointD = Chart.Owner.MouseToWorldCoords(e.X, e.Y); incompleted.AddPoint(pointD.X, pointD.Y); // если линия слишком короткая - возможно, создана случайно? var screenPtA = Chart.Owner.WorldToChartCoords(incompleted.linePoints[0].X, incompleted.linePoints[0].Y); var deltaPix = Math.Abs(e.X - screenPtA.X) + Math.Abs(e.Y - screenPtA.Y); if (deltaPix < 4) { data.Remove(incompleted); return(true); } var shouldDeleteOnMouseUp = SeriesEditParameter.TryGetParamValue(parameters, "MeasureOnly", false); if (shouldDeleteOnMouseUp) { data.Remove(incompleted); return(true); } incompleted.IsBeingCreated = false; incompleted.ShowTags = false; var showWindow = SeriesEditParameter.TryGetParamValue(parameters, "ShowWindow", false); var shouldEdit = SeriesEditParameter.TryGetParamValue(parameters, "Edit", true); if (shouldEdit) { objectToEdit = incompleted; } else if (showWindow) { Chart.toolSkipMouseDown = true; var dlg = new ObjectPropertyWindow(new List <object> { incompleted }); dlg.ShowDialog(); } return(true); }
protected override void OnMouseDown(List <SeriesEditParameter> parameters, MouseEventArgs e, Keys modifierKeys, out IChartInteractiveObject objectToEdit) { objectToEdit = null; if (e.Button != MouseButtons.Left) { return; } var editedComment = data.Find(c => c.IsBeingCreated); if (editedComment != null) { return; } // получить время и цену var clientPoint = Chart.PointToScreen(new Point(e.X, e.Y)); clientPoint = Chart.StockPane.PointToClient(clientPoint); var x = clientPoint.X; var y = clientPoint.Y; var pointD = Conversion.ScreenToWorld(new PointD(x, y), Chart.StockPane.WorldRect, Chart.StockPane.CanvasRect); // начинается редактирование - выбрана первая точка var text = SeriesEditParameter.TryGetParamValue(parameters, "Text", "..."); var lineColor = SeriesEditParameter.TryGetParamValue(parameters, "Stroke", Color.Black); var fillColor = SeriesEditParameter.TryGetParamValue(parameters, "Filling", Color.White); var colorText = SeriesEditParameter.TryGetParamValue(parameters, "TextColor", Color.Black); var alphaColor = SeriesEditParameter.TryGetParamValue(parameters, "Transparency", 192); var hideArrow = SeriesEditParameter.TryGetParamValue(parameters, "HideArrow", false); var drawFrame = SeriesEditParameter.TryGetParamValue(parameters, "DrawFrame", true); var comment = new ChartComment { IsBeingCreated = true, PivotIndex = pointD.X, PivotPrice = pointD.Y, ArrowLength = 0, ArrowAngle = -45, Owner = this, Text = text, Color = lineColor, ColorFill = fillColor, FillTransparency = alphaColor, HideArrow = hideArrow, DrawFrame = drawFrame, ColorText = colorText }; if (Owner.Owner.Owner.AdjustObjectColorsOnCreation) { comment.AjustColorScheme(Owner.Owner.Owner); } data.Add(comment); }
public void LoadObjects(XmlElement xmlRoot, bool trimOutOfHistoryObjects, bool ajustColorScheme) { if (xmlRoot == null) { return; } foreach (XmlElement nodeSeries in xmlRoot.ChildNodes) { // получить тип серии if (nodeSeries.Attributes["type"] == null) { continue; } var typeStr = nodeSeries.Attributes["type"].Value; if (string.IsNullOrEmpty(typeStr)) { continue; } foreach (var series in listInteractiveSeries) { if (series.GetType().ToString() == typeStr) { // очистить серию while (series.DataCount > 0) { series.RemoveObjectByNum(0); } // загрузить объекты foreach (XmlElement nodeObject in nodeSeries.ChildNodes) { IChartInteractiveObject obj = null; try { obj = series.LoadObject(nodeObject, this, trimOutOfHistoryObjects); } catch (Exception ex) { Logger.ErrorFormat("Ошибка загрузки объекта серии {0}: {1}", series.GetType().Name, ex); } if (obj == null) { continue; } if (ajustColorScheme) { obj.AjustColorScheme(this); } } series.ProcessLoadingCompleted(this); } } } }
public override void RemoveObjectFromList(IChartInteractiveObject interObject) { if (interObject == null) { return; } if (interObject is DealMarker == false) { return; } data.Remove((DealMarker)interObject); }
public override void RemoveObjectFromList(IChartInteractiveObject interObject) { if (interObject == null) { return; } if (interObject is ProjectionPair == false) { return; } data.Remove((ProjectionPair)interObject); }
public override void RemoveObjectFromList(IChartInteractiveObject interObject) { if (interObject == null) { return; } if (interObject is TrendLine == false) { return; } data.Remove((TrendLine)interObject); }
public override void RemoveObjectFromList(IChartInteractiveObject interObject) { if (interObject == null) { return; } if (interObject is ChartComment == false) { return; } data.Remove((ChartComment)interObject); }
public override void RemoveObjectFromList(IChartInteractiveObject interObject) { if (interObject == null) { return; } if (interObject is FiboChannel == false) { return; } data.Remove((FiboChannel)interObject); }
public override void RemoveObjectFromList(IChartInteractiveObject interObject) { if (interObject == null) { return; } if (interObject is FiboSpan == false) { return; } data.Remove((FiboSpan)interObject); MakeProjections(); }
public bool OnMouseUp(List <SeriesEditParameter> parameters, MouseEventArgs e, CandleChartControl.ChartTool activeChartTool, Keys modifierKeys, out IChartInteractiveObject objectToEdit) { if (activeChartTool != linkedChartTool) { objectToEdit = null; return(false); } return(OnMouseUp(parameters, e, modifierKeys, out objectToEdit)); }
public bool OnMouseUp(List<SeriesEditParameter> parameters, MouseEventArgs e, CandleChartControl.ChartTool activeChartTool, Keys modifierKeys, out IChartInteractiveObject objectToEdit) { if (activeChartTool != linkedChartTool) { objectToEdit = null; return false; } return OnMouseUp(parameters, e, modifierKeys, out objectToEdit); }
/// <summary> /// выбранный объект графика - выбран простым наведением курсора мыши /// рисуется жирненьким /// </summary> protected bool UpdateSelectedObject(IChartInteractiveObject value) { if (value == selectedObject) return false; if (selectedObject != null) { if (selectedObject != editingObject) selectedObject.Selected = false; } selectedObject = value; if (selectedObject != null) selectedObject.Selected = true; return true; }
protected override void OnMouseDown(List <SeriesEditParameter> parameters, MouseEventArgs e, Keys modifierKeys, out IChartInteractiveObject objectToEdit) { objectToEdit = null; if (e.Button != MouseButtons.Left) { return; } var sellSide = (Control.ModifierKeys & Keys.Control) == Keys.Control; var clientPoint = Chart.PointToScreen(new Point(e.X, e.Y)); clientPoint = Chart.StockPane.PointToClient(clientPoint); AddOrRemovePoint(new PointF(clientPoint.X, clientPoint.Y), !sellSide); }
public bool OnMouseDown(MouseEventArgs e, List <SeriesEditParameter> parameters, CandleChartControl.ChartTool activeChartTool, Keys modifierKeys, out IChartInteractiveObject objectToEdit) { if (activeChartTool == linkedChartTool) { OnMouseDown(parameters, e, modifierKeys, out objectToEdit); return(true); } objectToEdit = null; return(false); }
public bool OnMouseDown(MouseEventArgs e, List<SeriesEditParameter> parameters, CandleChartControl.ChartTool activeChartTool, Keys modifierKeys, out IChartInteractiveObject objectToEdit) { if (activeChartTool == linkedChartTool) { OnMouseDown(parameters, e, modifierKeys, out objectToEdit); return true; } objectToEdit = null; return false; }
public override void RemoveObjectFromList(IChartInteractiveObject interObject) { if (interObject is AsteriskTooltip == false) { return; } try { data.Remove((AsteriskTooltip)interObject); } catch (Exception ex) { Logger.Error("RemoveObjectFromList error:", ex); } }
private bool SelectObject(IChartInteractiveObject obj) { if (editingObject == obj) { return(false); } if (editingObject != null) { editingObject.Selected = false; } editingObject = obj; obj.Selected = true; editingMarker = null; return(true); }
public override void RemoveObjectFromList(IChartInteractiveObject interObject) { var bar = interObject as TurnBar; if (bar == null) { return; } if (!bar.IsKeyBar) { return; } barsKey.Remove(bar); CountTurnBars(); }
protected override void OnMouseDown(List <SeriesEditParameter> parameters, MouseEventArgs e, Keys modifierKeys, out IChartInteractiveObject objectToEdit) { objectToEdit = null; if (e.Button != MouseButtons.Left) { return; } // получить время и цену var pointD = Chart.Owner.MouseToWorldCoords(e.X, e.Y); var editedEllipse = data.FirstOrDefault(el => el.IsBeingCreated); var shiftPressed = (Control.ModifierKeys & Keys.Shift) == Keys.Shift; var controlPressed = (Control.ModifierKeys & Keys.Control) == Keys.Control; if (editedEllipse == null) {// начинается редактирование - выбрана первая точка var lineColor = SeriesEditParameter.TryGetParamValue(parameters, "Stroke", Color.Black); var buildAuto = SeriesEditParameter.TryGetParamValue(parameters, "ByTwoPoints", false) ^ controlPressed; var buildTangent = SeriesEditParameter.TryGetParamValue(parameters, "Tangent", false) ^ shiftPressed; var tangentType = SeriesEditParameter.TryGetParamValue(parameters, "TangentView", ChartEllipse.EllipseTangentType.Отрезок); data.Add(new ChartEllipse { Owner = this, Color = lineColor, BuildTangent = buildTangent, TangentType = tangentType, buildAuto = buildAuto }); editedEllipse = data[data.Count - 1]; editedEllipse.IsBeingCreated = true; if (Owner.Owner.Owner.AdjustObjectColorsOnCreation) { editedEllipse.AjustColorScheme(Owner.Owner.Owner); } } // добавить точку в эллипс editedEllipse.points.Add(pointD.ToPointF()); // ... или сразу две if (editedEllipse.points.Count == 1) { editedEllipse.points.Add(pointD.ToPointF()); } ellipseBeingSized = editedEllipse; }
protected override void OnMouseDown(List <SeriesEditParameter> parameters, MouseEventArgs e, Keys modifierKeys, out IChartInteractiveObject objectToEdit) { objectToEdit = null; if (e.Button != MouseButtons.Left) { return; } // поставить или снять ключевой бар // получить время (свечку) var clientPoint = Chart.PointToScreen(new Point(e.X, e.Y)); clientPoint = Chart.StockPane.PointToClient(clientPoint); var pointD = Conversion.ScreenToWorld(new PointD(clientPoint.X, clientPoint.Y), Owner.WorldRect, Owner.CanvasRect); var index = (int)(pointD.X + 0.5); if (index >= Owner.StockSeries.Data.Count || index < 0) { return; } // найти ключевой бар на свечке var keyBar = barsKey.FirstOrDefault(b => b.candleIndexes.Contains(index)); if (keyBar != null) { // удалить ключевой бар barsKey.Remove(keyBar); CountTurnBars(); return; } // добавить новый бар var bar = new TurnBar(new List <int> { index }, true, Chart); barsKey.Add(bar); if (Owner.Owner.Owner.AdjustObjectColorsOnCreation) { bar.AjustColorScheme(Owner.Owner.Owner); } CountTurnBars(); }
protected override void OnMouseDown(List <SeriesEditParameter> parameters, MouseEventArgs e, Keys modifierKeys, out IChartInteractiveObject objectToEdit) { objectToEdit = null; if (e.Button != MouseButtons.Left) { return; } var pointD = Chart.Owner.MouseToWorldCoords(e.X, e.Y); var incompleted = data.Find(s => s.IsBeingCreated); if (incompleted != null) { // добавить третью точку incompleted.Point3 = new PointD( (incompleted.linePoints[0].X + incompleted.linePoints[1].X) / 2, (incompleted.linePoints[0].Y + incompleted.linePoints[1].Y) / 2); channelBeingCreated = incompleted; return; } // ReSharper disable UseObjectOrCollectionInitializer var channel = new FiboChannel { Owner = this, IsBeingCreated = true }; // ReSharper restore UseObjectOrCollectionInitializer channel.DrawText = SeriesEditParameter.TryGetParamValue(parameters, "DrawLabels", false); channel.LineColor = SeriesEditParameter.TryGetParamValue(parameters, "Color", Color.DarkBlue); channel.LineStyle = SeriesEditParameter.TryGetParamValue(parameters, "LineType", TrendLine.TrendLineStyle.Отрезок); channel.AddPoint(pointD.X, pointD.Y); channel.AddPoint(pointD.X, pointD.Y); channelBeingCreated = channel; if (Owner.Owner.Owner.AdjustObjectColorsOnCreation) { channel.AjustColorScheme(Owner.Owner.Owner); } data.Add(channel); }
/// <summary> /// выбранный объект графика - выбран простым наведением курсора мыши /// рисуется жирненьким /// </summary> protected bool UpdateSelectedObject(IChartInteractiveObject value) { if (value == selectedObject) { return(false); } if (selectedObject != null) { if (selectedObject != editingObject) { selectedObject.Selected = false; } } selectedObject = value; if (selectedObject != null) { selectedObject.Selected = true; } return(true); }
protected override bool OnMouseUp(List <SeriesEditParameter> parameters, MouseEventArgs e, Keys modifierKeys, out IChartInteractiveObject objectToEdit) { objectToEdit = null; if (channelBeingCreated == null) { return(false); } // если канал незавершен - нет точки проекции if (!channelBeingCreated.Point3.HasValue) { // если канал сжался в точку сингулярности - удалить его var lenPx = Conversion.GetSpanLenInScreenCoords(channelBeingCreated.linePoints[0], channelBeingCreated.linePoints[1], Chart.StockPane.WorldRect, Chart.StockPane.CanvasRect); if (lenPx < 3) { data.Remove(channelBeingCreated); channelBeingCreated = null; return(true); } // добавить третью точку channelBeingCreated.Point3 = new PointD( (channelBeingCreated.linePoints[0].X + channelBeingCreated.linePoints[1].X) / 2, (channelBeingCreated.linePoints[0].Y + channelBeingCreated.linePoints[1].Y) / 2); channelBeingCreated = null; return(true); } // канал завершен channelBeingCreated.IsBeingCreated = false; objectToEdit = channelBeingCreated; channelBeingCreated = null; return(true); }
protected override bool OnMouseUp(List <SeriesEditParameter> parameters, MouseEventArgs e, Keys modifierKeys, out IChartInteractiveObject objectToEdit) { objectToEdit = null; if (ellipseBeingSized == null) { return(false); } // полуось эллипса не выродилась в точку? var lenPx = Conversion.GetSpanLenInScreenCoords(ellipseBeingSized.points[0], ellipseBeingSized.points[1], Chart.StockPane.WorldRect, Chart.StockPane.CanvasRect); if (lenPx < 3) { data.Remove(ellipseBeingSized); ellipseBeingSized = null; return(true); } ellipseBeingSized.buildAuto = false; // если в эллипсе все три точки - завершить редактирование if (ellipseBeingSized.points.Count == 3) { // проставить время - по первой точке var minIndex = ellipseBeingSized.points.Min(p => p.X); ellipseBeingSized.DateStart = Chart.StockSeries.GetCandleOpenTimeByIndex((int)minIndex); ellipseBeingSized.IsBeingCreated = false; objectToEdit = ellipseBeingSized; } // иначе - просто завершить режим "резинки" до след. нажатия ellipseBeingSized = null; return(true); }
public abstract void RemoveObjectFromList(IChartInteractiveObject interObject);
protected override bool OnMouseUp(List<SeriesEditParameter> parameters, MouseEventArgs e, Keys modifierKeys, out IChartInteractiveObject objectToEdit) { objectToEdit = null; if (channelBeingCreated == null) return false; // если канал незавершен - нет точки проекции if (!channelBeingCreated.Point3.HasValue) { // если канал сжался в точку сингулярности - удалить его var lenPx = Conversion.GetSpanLenInScreenCoords(channelBeingCreated.linePoints[0], channelBeingCreated.linePoints[1], Chart.StockPane.WorldRect, Chart.StockPane.CanvasRect); if (lenPx < 3) { data.Remove(channelBeingCreated); channelBeingCreated = null; return true; } // добавить третью точку channelBeingCreated.Point3 = new PointD( (channelBeingCreated.linePoints[0].X + channelBeingCreated.linePoints[1].X) / 2, (channelBeingCreated.linePoints[0].Y + channelBeingCreated.linePoints[1].Y) / 2); channelBeingCreated = null; return true; } // канал завершен channelBeingCreated.IsBeingCreated = false; objectToEdit = channelBeingCreated; channelBeingCreated = null; return true; }
protected override void OnMouseDown(List<SeriesEditParameter> parameters, MouseEventArgs e, Keys modifierKeys, out IChartInteractiveObject objectToEdit) { objectToEdit = null; if (e.Button != MouseButtons.Left) return; // поставить или снять ключевой бар // получить время (свечку) var clientPoint = Chart.PointToScreen(new Point(e.X, e.Y)); clientPoint = Chart.StockPane.PointToClient(clientPoint); var pointD = Conversion.ScreenToWorld(new PointD(clientPoint.X, clientPoint.Y), Owner.WorldRect, Owner.CanvasRect); var index = (int)(pointD.X + 0.5); if (index >= Owner.StockSeries.Data.Count || index < 0) return; // найти ключевой бар на свечке var keyBar = barsKey.FirstOrDefault(b => b.candleIndexes.Contains(index)); if (keyBar != null) { // удалить ключевой бар barsKey.Remove(keyBar); CountTurnBars(); return; } // добавить новый бар var bar = new TurnBar(new List<int> {index}, true, Chart); barsKey.Add(bar); if (Owner.Owner.Owner.AdjustObjectColorsOnCreation) bar.AjustColorScheme(Owner.Owner.Owner); CountTurnBars(); }
private bool SelectObject(IChartInteractiveObject obj) { if (editingObject == obj) return false; if (editingObject != null) editingObject.Selected = false; editingObject = obj; obj.Selected = true; editingMarker = null; return true; }
protected virtual bool OnMouseUp(List<SeriesEditParameter> parameters, MouseEventArgs e, Keys modifierKeys, out IChartInteractiveObject objectToEdit) { objectToEdit = null; return false; }
protected override bool OnMouseUp(List<SeriesEditParameter> parameters, MouseEventArgs e, Keys modifierKeys, out IChartInteractiveObject objectToEdit) { var hideLine = SeriesEditParameter.TryGetParamValue(parameters, "HideSegment", true); objectToEdit = null; var pair = data.FirstOrDefault(p => p.IsBeingCreated); if (pair == null) return false; // если проекция выродилась - удалить ее if (Math.Abs(pair.points[0].b - pair.points[1].b) < 0.00001f) { data.Remove(pair); return true; } // завершить создание pair.IsBeingCreated = false; pair.HideLine = hideLine; objectToEdit = pair; return true; }
protected override void OnMouseDown(List<SeriesEditParameter> parameters, MouseEventArgs e, Keys modifierKeys, out IChartInteractiveObject objectToEdit) { objectToEdit = null; if (e.Button != MouseButtons.Left) return; var editedComment = data.Find(c => c.IsBeingCreated); if (editedComment != null) return; // получить время и цену var clientPoint = Chart.PointToScreen(new Point(e.X, e.Y)); clientPoint = Chart.StockPane.PointToClient(clientPoint); var x = clientPoint.X; var y = clientPoint.Y; var pointD = Conversion.ScreenToWorld(new PointD(x, y), Chart.StockPane.WorldRect, Chart.StockPane.CanvasRect); // начинается редактирование - выбрана первая точка var text = SeriesEditParameter.TryGetParamValue(parameters, "Text", "..."); var lineColor = SeriesEditParameter.TryGetParamValue(parameters, "Stroke", Color.Black); var fillColor = SeriesEditParameter.TryGetParamValue(parameters, "Filling", Color.White); var colorText = SeriesEditParameter.TryGetParamValue(parameters, "TextColor", Color.Black); var alphaColor = SeriesEditParameter.TryGetParamValue(parameters, "Transparency", 192); var hideArrow = SeriesEditParameter.TryGetParamValue(parameters, "HideArrow", false); var drawFrame = SeriesEditParameter.TryGetParamValue(parameters, "DrawFrame", true); var comment = new ChartComment { IsBeingCreated = true, PivotIndex = pointD.X, PivotPrice = pointD.Y, ArrowLength = 0, ArrowAngle = -45, Owner = this, Text = text, Color = lineColor, ColorFill = fillColor, FillTransparency = alphaColor, HideArrow = hideArrow, DrawFrame = drawFrame, ColorText = colorText }; if (Owner.Owner.Owner.AdjustObjectColorsOnCreation) comment.AjustColorScheme(Owner.Owner.Owner); data.Add(comment); }
public override void RemoveObjectFromList(IChartInteractiveObject interObject) { if (interObject == null) return; if (interObject is ProjectionPair == false) return; data.Remove((ProjectionPair)interObject); }
public override void RemoveObjectFromList(IChartInteractiveObject interObject) { var bar = interObject as TurnBar; if (bar == null) return; if (!bar.IsKeyBar) return; barsKey.Remove(bar); CountTurnBars(); }
public override void RemoveObjectFromList(IChartInteractiveObject interObject) { if (interObject == null) return; if (interObject is FiboSpan == false) return; data.Remove((FiboSpan)interObject); MakeProjections(); }
private void DeselectObject() { editingObject.Selected = false; editingObject = null; editingMarker = null; }
protected override void OnMouseDown(List <SeriesEditParameter> parameters, MouseEventArgs e, Keys modifierKeys, out IChartInteractiveObject objectToEdit) { objectToEdit = null; if (e.Button != MouseButtons.Left) { return; } // по одному клику добавить маркер, по двум - открыть // редактор // получить время и цену var clientPoint = Chart.PointToScreen(new Point(e.X, e.Y)); clientPoint = Chart.StockPane.PointToClient(clientPoint); var x = clientPoint.X; var y = clientPoint.Y; var markers = data.Where(aster => aster.IsIn( x - Chart.StockPane.CanvasRect.Left, y)).ToList(); if (markers.Count > 0) { var selected = markers[markers.Count - 1]; // показать текст маркера во всплывающем окне var markerDlg = new MarkerWindow { Text = selected.Text }; var result = markerDlg.ShowDialog(); if (markerDlg.IsDeleteBtnPressed) { data.Remove(selected); } else if (result == DialogResult.OK) { selected.Text = markerDlg.Text; } return; } var pointD = Conversion.ScreenToWorld(new PointD(x, y), Chart.StockPane.WorldRect, Chart.StockPane.CanvasRect); // поставить маркер и открыть диалог редактирования свойств var isShiftPressed = (modifierKeys & Keys.Shift) == Keys.Shift; var text = SeriesEditParameter.TryGetParamValue(parameters, "Text", "e"); var lineColor = SeriesEditParameter.TryGetParamValue(parameters, "Stroke", Color.Black); var fillColor = SeriesEditParameter.TryGetParamValue(parameters, "Filling", Color.White); var textShift = SeriesEditParameter.TryGetParamValue(parameters, "Text_Shift", "e"); var lineColorShift = SeriesEditParameter.TryGetParamValue(parameters, "Stroke_Shift", Color.Black); var fillColorShift = SeriesEditParameter.TryGetParamValue(parameters, "Filling_Shift", Color.White); var shape = SeriesEditParameter.TryGetParamValue(parameters, "Type", AsteriskTooltip.ShapeType.СтрелкаВверх); var shapeShift = SeriesEditParameter.TryGetParamValue(parameters, "Type_Shift", AsteriskTooltip.ShapeType.СтрелкаВниз); var alphaColor = SeriesEditParameter.TryGetParamValue(parameters, "Transparency", 192); var marker = new AsteriskTooltip { Price = (float)pointD.Y, CandleIndex = (int)(Math.Round(pointD.X)), Shape = isShiftPressed ? shapeShift : shape, Transparency = alphaColor, ColorFill = isShiftPressed ? fillColorShift : fillColor, ColorLine = isShiftPressed ? lineColorShift : lineColor, Sign = isShiftPressed ? textShift : text, Owner = this }; if (Owner.Owner.Owner.AdjustObjectColorsOnCreation) { marker.AjustColorScheme(Owner.Owner.Owner); } marker.DateStart = Chart.StockSeries.GetCandleOpenTimeByIndex(marker.CandleIndex); data.Add(marker); //var dlg = new ObjectPropertyWindow(new object[] { marker }); Chart.toolSkipMouseDown = true; //dlg.ShowDialog(); }
protected override void OnMouseDown(List<SeriesEditParameter> parameters, MouseEventArgs e, Keys modifierKeys, out IChartInteractiveObject objectToEdit) { objectToEdit = null; if (e.Button != MouseButtons.Left) return; // получить время и цену var pointD = Chart.Owner.MouseToWorldCoords(e.X, e.Y); var editedEllipse = data.FirstOrDefault(el => el.IsBeingCreated); var shiftPressed = (Control.ModifierKeys & Keys.Shift) == Keys.Shift; var controlPressed = (Control.ModifierKeys & Keys.Control) == Keys.Control; if (editedEllipse == null) {// начинается редактирование - выбрана первая точка var lineColor = SeriesEditParameter.TryGetParamValue(parameters, "Stroke", Color.Black); var buildAuto = SeriesEditParameter.TryGetParamValue(parameters, "ByTwoPoints", false) ^ controlPressed; var buildTangent = SeriesEditParameter.TryGetParamValue(parameters, "Tangent", false) ^ shiftPressed; var tangentType = SeriesEditParameter.TryGetParamValue(parameters, "TangentView", ChartEllipse.EllipseTangentType.Отрезок); data.Add(new ChartEllipse { Owner = this, Color = lineColor, BuildTangent = buildTangent, TangentType = tangentType, buildAuto = buildAuto }); editedEllipse = data[data.Count - 1]; editedEllipse.IsBeingCreated = true; if (Owner.Owner.Owner.AdjustObjectColorsOnCreation) editedEllipse.AjustColorScheme(Owner.Owner.Owner); } // добавить точку в эллипс editedEllipse.points.Add(pointD.ToPointF()); // ... или сразу две if (editedEllipse.points.Count == 1) editedEllipse.points.Add(pointD.ToPointF()); ellipseBeingSized = editedEllipse; }
/// <summary> /// добавить точку в пару, определяющую проекцию /// либо создать новую пару /// либо удалить точку (или всю пару) /// </summary> protected override void OnMouseDown(List <SeriesEditParameter> parameters, MouseEventArgs e, Keys modifierKeys, out IChartInteractiveObject objectToEdit) { objectToEdit = null; if (e.Button != MouseButtons.Left) { return; } // получить индекс свечки, в которую было попадание var point = GetCandlePoint(e); if (!point.HasValue) { return; } // перебрать все пары // при попадании в точку пары удалить ее for (var i = 0; i < data.Count; i++) { var p = data[i]; if (p.IsInPoint(point.Value.a, point.Value.b)) { data.RemoveAt(i); return; } } var defaultCorrectionObj = SeriesEditParameter.TryGetParamValue(parameters, "Correction"); var defaultCorrection = defaultCorrectionObj == null ? false : (bool)defaultCorrectionObj; var defaultHideErrorsObj = SeriesEditParameter.TryGetParamValue(parameters, "HideMisses"); var defaultHideErrors = defaultHideErrorsObj == null ? true : (bool)defaultHideErrorsObj; var defaultMarkersObj = SeriesEditParameter.TryGetParamValue(parameters, "Labels"); var defaultMarkers = defaultMarkersObj != null ? (ProjectionPair.MarkerPlacement)defaultMarkersObj : ProjectionPair.MarkerPlacement.Слева; var levelsProjStr = SeriesEditParameter.TryGetParamValue(parameters, "ExpansionLevels", "0.618 1 1.618"); var levelsCorrStr = SeriesEditParameter.TryGetParamValue(parameters, "CorrectionLevels", "0.236 0.382 0.618"); var correctWithProj = SeriesEditParameter.TryGetParamValue(parameters, "CorrectionPlusProjections", false); var barsLength = SeriesEditParameter.TryGetParamValue(parameters, "LengthInBars", 60); // добавить новую пару var shiftPressed = ((modifierKeys & Keys.Shift) == Keys.Shift); var pair = new ProjectionPair(point.Value.a, point.Value.b) { IsCorrection = defaultCorrection ^ shiftPressed, HideFarParts = defaultHideErrors ^ shiftPressed, IsExtension = defaultCorrection ^ !shiftPressed, Color = fiboProjectionColors[fiboProjectionColorsIndex++], Markers = defaultMarkers, Owner = this, LevelsProj = levelsProjStr, LevelsCorr = levelsCorrStr, HideLine = false, IsBeingCreated = true }; pair.points.Add(new Cortege2 <int, float>(point.Value.a, point.Value.b)); if (Owner.Owner.Owner.AdjustObjectColorsOnCreation) { pair.AjustColorScheme(Owner.Owner.Owner); } if (correctWithProj) { pair.IsCorrection = true; pair.IsExtension = true; } if (barsLength > 0) { pair.ProjectionLength = barsLength; } data.Add(pair); if (fiboProjectionColorsIndex >= fiboProjectionColors.Length) { fiboProjectionColorsIndex = 0; } }
protected override bool OnMouseUp(List<SeriesEditParameter> parameters, MouseEventArgs e, Keys modifierKeys, out IChartInteractiveObject objectToEdit) { objectToEdit = null; if (ellipseBeingSized == null) return false; // полуось эллипса не выродилась в точку? var lenPx = Conversion.GetSpanLenInScreenCoords(ellipseBeingSized.points[0], ellipseBeingSized.points[1], Chart.StockPane.WorldRect, Chart.StockPane.CanvasRect); if (lenPx < 3) { data.Remove(ellipseBeingSized); ellipseBeingSized = null; return true; } ellipseBeingSized.buildAuto = false; // если в эллипсе все три точки - завершить редактирование if (ellipseBeingSized.points.Count == 3) { // проставить время - по первой точке var minIndex = ellipseBeingSized.points.Min(p => p.X); ellipseBeingSized.DateStart = Chart.StockSeries.GetCandleOpenTimeByIndex((int)minIndex); ellipseBeingSized.IsBeingCreated = false; objectToEdit = ellipseBeingSized; } // иначе - просто завершить режим "резинки" до след. нажатия ellipseBeingSized = null; return true; }
public override void RemoveObjectFromList(IChartInteractiveObject interObject) { if (interObject == null) return; if (interObject is DealMarker == false) return; data.Remove((DealMarker)interObject); }
/// <summary> /// добавить точку в пару, определяющую проекцию /// либо создать новую пару /// либо удалить точку (или всю пару) /// </summary> protected override void OnMouseDown(List<SeriesEditParameter> parameters, MouseEventArgs e, Keys modifierKeys, out IChartInteractiveObject objectToEdit) { objectToEdit = null; if (e.Button != MouseButtons.Left) return; // получить индекс свечки, в которую было попадание var point = GetCandlePoint(e); if (!point.HasValue) return; // перебрать все пары // при попадании в точку пары удалить ее for (var i = 0; i < data.Count; i++) { var p = data[i]; if (p.IsInPoint(point.Value.a, point.Value.b)) { data.RemoveAt(i); return; } } var defaultCorrectionObj = SeriesEditParameter.TryGetParamValue(parameters, "Correction"); var defaultCorrection = defaultCorrectionObj == null ? false : (bool)defaultCorrectionObj; var defaultHideErrorsObj = SeriesEditParameter.TryGetParamValue(parameters, "HideMisses"); var defaultHideErrors = defaultHideErrorsObj == null ? true : (bool)defaultHideErrorsObj; var defaultMarkersObj = SeriesEditParameter.TryGetParamValue(parameters, "Labels"); var defaultMarkers = defaultMarkersObj != null ? (ProjectionPair.MarkerPlacement) defaultMarkersObj : ProjectionPair.MarkerPlacement.Слева; var levelsProjStr = SeriesEditParameter.TryGetParamValue(parameters, "ExpansionLevels", "0.618 1 1.618"); var levelsCorrStr = SeriesEditParameter.TryGetParamValue(parameters, "CorrectionLevels", "0.236 0.382 0.618"); var correctWithProj = SeriesEditParameter.TryGetParamValue(parameters, "CorrectionPlusProjections", false); var barsLength = SeriesEditParameter.TryGetParamValue(parameters, "LengthInBars", 60); // добавить новую пару var shiftPressed = ((modifierKeys & Keys.Shift) == Keys.Shift); var pair = new ProjectionPair(point.Value.a, point.Value.b) { IsCorrection = defaultCorrection ^ shiftPressed, HideFarParts = defaultHideErrors ^ shiftPressed, IsExtension = defaultCorrection ^ !shiftPressed, Color = fiboProjectionColors[fiboProjectionColorsIndex++], Markers = defaultMarkers, Owner = this, LevelsProj = levelsProjStr, LevelsCorr = levelsCorrStr, HideLine = false, IsBeingCreated = true }; pair.points.Add(new Cortege2<int, float>(point.Value.a, point.Value.b)); if (Owner.Owner.Owner.AdjustObjectColorsOnCreation) pair.AjustColorScheme(Owner.Owner.Owner); if (correctWithProj) { pair.IsCorrection = true; pair.IsExtension = true; } if (barsLength > 0) pair.ProjectionLength = barsLength; data.Add(pair); if (fiboProjectionColorsIndex >= fiboProjectionColors.Length) fiboProjectionColorsIndex = 0; }
protected override void OnMouseDown(List<SeriesEditParameter> parameters, MouseEventArgs e, Keys modifierKeys, out IChartInteractiveObject objectToEdit) { objectToEdit = null; if (e.Button != MouseButtons.Left) return; var sellSide = (Control.ModifierKeys & Keys.Control) == Keys.Control; var clientPoint = Chart.PointToScreen(new Point(e.X, e.Y)); clientPoint = Chart.StockPane.PointToClient(clientPoint); AddOrRemovePoint(new PointF(clientPoint.X, clientPoint.Y), !sellSide); }
public override void RemoveObjectFromList(IChartInteractiveObject interObject) { if (interObject == null) return; if (interObject is ChartComment == false) return; data.Remove((ChartComment)interObject); }
public override void RemoveObjectFromList(IChartInteractiveObject interObject) { if (interObject == null) return; if (interObject is FiboChannel == false) return; data.Remove((FiboChannel) interObject); }
protected override bool OnMouseUp(List<SeriesEditParameter> parameters, MouseEventArgs e, Keys modifierKeys, out IChartInteractiveObject objectToEdit) { objectToEdit = null; var editedComment = data.Find(c => c.IsBeingCreated); if (editedComment == null) return false; // завершить создание комментария - открыть окно редактирования текста editedComment.IsBeingCreated = false; var showWindow = SeriesEditParameter.TryGetParamValue(parameters, "ShowWindow", true); if (showWindow) { Chart.toolSkipMouseDown = true; if (editedComment.ShowEditDialog() == DialogResult.Cancel) { // удалить комментарий data.Remove(editedComment); return true; } } return false; }
protected override void OnMouseDown(List<SeriesEditParameter> parameters, MouseEventArgs e, Keys modifierKeys, out IChartInteractiveObject objectToEdit) { objectToEdit = null; if (e.Button != MouseButtons.Left) return; var pointD = Chart.Owner.MouseToWorldCoords(e.X, e.Y); var incompleted = data.Find(s => s.IsBeingCreated); if (incompleted != null) { // добавить третью точку incompleted.Point3 = new PointD( (incompleted.linePoints[0].X + incompleted.linePoints[1].X)/2, (incompleted.linePoints[0].Y + incompleted.linePoints[1].Y)/2); channelBeingCreated = incompleted; return; } // ReSharper disable UseObjectOrCollectionInitializer var channel = new FiboChannel { Owner = this, IsBeingCreated = true }; // ReSharper restore UseObjectOrCollectionInitializer channel.DrawText = SeriesEditParameter.TryGetParamValue(parameters, "DrawLabels", false); channel.LineColor = SeriesEditParameter.TryGetParamValue(parameters, "Color", Color.DarkBlue); channel.LineStyle = SeriesEditParameter.TryGetParamValue(parameters, "LineType", TrendLine.TrendLineStyle.Отрезок); channel.AddPoint(pointD.X, pointD.Y); channel.AddPoint(pointD.X, pointD.Y); channelBeingCreated = channel; if (Owner.Owner.Owner.AdjustObjectColorsOnCreation) channel.AjustColorScheme(Owner.Owner.Owner); data.Add(channel); }
public override void RemoveObjectFromList(IChartInteractiveObject interObject) { if (interObject == null) return; if (interObject is TrendLine == false) return; data.Remove((TrendLine)interObject); }
protected abstract void OnMouseDown(List<SeriesEditParameter> parameters, MouseEventArgs e, Keys modifierKeys, out IChartInteractiveObject objectToEdit);
public void ChartMouseMove(object sender, MouseEventArgs e) { if (chart.StockPane.YAxis.DragModeIsOn) { // изменить масштаб по оси Y if ((ModifierKeys & Keys.Shift) != Keys.Shift) { if (chart.StockPane.YAxis.ChangeScaleByDragCursor(e.X, e.Y)) { RedrawChartSafe(); } } else {// изменить смещение оси Y if (chart.StockPane.YAxis.ChangeShiftYByDragCursor(e.X, e.Y)) { RedrawChartSafe(); } } return; } var needRedraw = false; if (ActiveChartTool == ChartTool.Cursor) { // получить данные индикаторов в точке курсора if (IndicatorsProcessMouseMove(e)) { RedrawChartSafe(); return; } // "подсветить" (выделить жирным) объект IChartInteractiveObject selectedObj = null; var ptScreen = chart.PointToScreen(new Point(e.X, e.Y)); foreach (var series in listInteractiveSeries) { selectedObj = series.GetObjectsUnderCursor(ptScreen.X, ptScreen.Y, MouseHitTolerancePix).FirstOrDefault(); if (selectedObj != null) { break; } } if (UpdateSelectedObject(selectedObj)) { needRedraw = true; } } // режим "резинка" при создании объекта графика? else if (ActiveChartTool != ChartTool.Cursor) { foreach (var series in listInteractiveSeries) { var redraw = series.OnMouseMove(e, ModifierKeys, ActiveChartTool); if (redraw) { needRedraw = true; } } // перерисовать if (needRedraw) { chart.Invalidate(); return; } } // перетащить - растянуть объект if (ActiveChartTool == ChartTool.Cursor) { if (EditChartObjectMouseMove(e.X, e.Y)) { return; } } if (needRedraw) { chart.Invalidate(); } }
protected override void OnMouseDown(List<SeriesEditParameter> parameters, MouseEventArgs e, Keys modifierKeys, out IChartInteractiveObject objectToEdit) { objectToEdit = null; if (e.Button != MouseButtons.Left) return; var pointD = Chart.Owner.MouseToWorldCoords(e.X, e.Y); var incompleted = data.Find(s => s.IsBeingCreated); if (incompleted != null) return; // создать линию, которая будет рисоваться в режиме "резинка" var lineType = SeriesEditParameter.TryGetParamValue(parameters, "Type", TrendLine.TrendLineStyle.Отрезок); var lineColor = SeriesEditParameter.TryGetParamValue(parameters, "Stroke", Color.Black); var fillColor = SeriesEditParameter.TryGetParamValue(parameters, "Filling", Color.White); var alphaColor = SeriesEditParameter.TryGetParamValue(parameters, "Transparency", 192); var isHorisont = SeriesEditParameter.TryGetParamValue(parameters, "Horizontal", false); var isHorisontShift = SeriesEditParameter.TryGetParamValue(parameters, "Horizontal_Shift", true); var showTags = SeriesEditParameter.TryGetParamValue(parameters, "Subtitles", true); var shiftPressed = (Control.ModifierKeys & Keys.Shift) == Keys.Shift; if (!isHorisont) isHorisont = shiftPressed && isHorisontShift; var span = new TrendLine { Owner = this, LineStyle = isHorisont ? TrendLine.TrendLineStyle.Линия : lineType, LineColor = lineColor, ShapeFillColor = fillColor, ShapeAlpha = alphaColor, IsBeingCreated = true, ShowTags = showTags }; span.AddPoint(pointD.X, pointD.Y); if (Owner.Owner.Owner.AdjustObjectColorsOnCreation) span.AjustColorScheme(Owner.Owner.Owner); // автоматом добавить вторую точку на одной высоте if (isHorisont) { var shouldEdit = SeriesEditParameter.TryGetParamValue(parameters, "Edit", true); AddSecondPointAuto(span); if (shouldEdit) objectToEdit = span; } data.Add(span); }
protected override void OnMouseDown(List<SeriesEditParameter> parameters, MouseEventArgs e, Keys modifierKeys, out IChartInteractiveObject objectToEdit) { objectToEdit = null; if (e.Button != MouseButtons.Left) return; var pointD = Chart.Owner.MouseToWorldCoords(e.X, e.Y); var index = (int)Math.Round(pointD.X); if (index >= 0 && index < Chart.StockPane.StockSeries.Data.Count) pointD.Y = (double)(Chart.StockPane.StockSeries.Data[index].low); var incompleted = data.Find(s => s.Completed == false); if (incompleted != null) { incompleted.AddPoint(pointD.X, pointD.Y); MakeProjections(); } else { var span = new FiboSpan(this); span.AddPoint(pointD.X, pointD.Y); if (Owner.Owner.Owner.AdjustObjectColorsOnCreation) span.AjustColorScheme(Owner.Owner.Owner); data.Add(span); } }
/// <summary> /// закончить создание линии /// </summary> protected override bool OnMouseUp(List<SeriesEditParameter> parameters, MouseEventArgs e, Keys modifierKeys, out IChartInteractiveObject objectToEdit) { objectToEdit = null; var incompleted = data.Find(s => s.IsBeingCreated); if (incompleted == null) return false; var pointD = Chart.Owner.MouseToWorldCoords(e.X, e.Y); incompleted.AddPoint(pointD.X, pointD.Y); // если линия слишком короткая - возможно, создана случайно? var screenPtA = Chart.Owner.WorldToChartCoords(incompleted.linePoints[0].X, incompleted.linePoints[0].Y); var deltaPix = Math.Abs(e.X - screenPtA.X) + Math.Abs(e.Y - screenPtA.Y); if (deltaPix < 4) { data.Remove(incompleted); return true; } var shouldDeleteOnMouseUp = SeriesEditParameter.TryGetParamValue(parameters, "MeasureOnly", false); if (shouldDeleteOnMouseUp) { data.Remove(incompleted); return true; } incompleted.IsBeingCreated = false; incompleted.ShowTags = false; var showWindow = SeriesEditParameter.TryGetParamValue(parameters, "ShowWindow", false); var shouldEdit = SeriesEditParameter.TryGetParamValue(parameters, "Edit", true); if (shouldEdit) objectToEdit = incompleted; else if (showWindow) { Chart.toolSkipMouseDown = true; var dlg = new ObjectPropertyWindow(new List<object> { incompleted }); dlg.ShowDialog(); } return true; }