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);
        }
Beispiel #4
0
        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);
 }
Beispiel #6
0
        /// <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);
        }
Beispiel #7
0
        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);
                    }
                }
            }
        }
Beispiel #9
0
 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);
 }
Beispiel #11
0
 public override void RemoveObjectFromList(IChartInteractiveObject interObject)
 {
     if (interObject == null)
     {
         return;
     }
     if (interObject is TrendLine == false)
     {
         return;
     }
     data.Remove((TrendLine)interObject);
 }
Beispiel #12
0
 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;
        }
Beispiel #18
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 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);
 }
Beispiel #23
0
        public override void RemoveObjectFromList(IChartInteractiveObject interObject)
        {
            var bar = interObject as TurnBar;

            if (bar == null)
            {
                return;
            }
            if (!bar.IsKeyBar)
            {
                return;
            }
            barsKey.Remove(bar);
            CountTurnBars();
        }
Beispiel #24
0
        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;
        }
Beispiel #25
0
        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);
        }
Beispiel #29
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 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;
        }
Beispiel #32
0
        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;
        }
Beispiel #36
0
        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 void DeleteSeriesObject(IChartInteractiveObject obj)
 {
     foreach (var series in listInteractiveSeries)
     {
         series.RemoveObjectFromList(obj);
     }
 }
Beispiel #39
0
 public override void RemoveObjectFromList(IChartInteractiveObject interObject)
 {
     var bar = interObject as TurnBar;
     if (bar == null) return;
     if (!bar.IsKeyBar) return;
     barsKey.Remove(bar);
     CountTurnBars();
 }
Beispiel #40
0
 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();
        }
Beispiel #43
0
        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;
            }
        }
Beispiel #45
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;
        }
 private void DeselectObject()
 {
     editingObject.Selected = false;
     editingObject = null;
     editingMarker = null;
 }
Beispiel #47
0
 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;
        }
Beispiel #49
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);
 }
Beispiel #50
0
 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);
 }
Beispiel #52
0
        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);
Beispiel #56
0
        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);
        }
Beispiel #58
0
        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;
        }