Ejemplo n.º 1
0
        public override void OnMouseDown(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, ChartAnchor dataPoint)
        {
            switch (DrawingState)
            {
            case DrawingState.Building:
                if (PointsPerBar < 0)
                {
                    PointsPerBar = AttachedTo.Instrument.MasterInstrument.TickSize;
                }
                dataPoint.CopyDataValues(Anchor);
                Anchor.IsEditing = false;
                DrawingState     = DrawingState.Normal;
                IsSelected       = false;
                break;

            case DrawingState.Normal:
                // make sure they clicked near our anchor or a gann line
                Point point = dataPoint.GetPoint(chartControl, chartPanel, chartScale);
                if (GetClosestAnchor(chartControl, chartPanel, chartScale, 10, point) == Anchor)
                {
                    DrawingState = DrawingState.Editing;
                }
                else if (GetCursor(chartControl, chartControl.ChartPanels[PanelIndex], chartScale, point) == Cursors.SizeAll)
                {
                    DrawingState = DrawingState.Moving;
                }
                else
                {
                    IsSelected = false;
                }
                break;
            }
        }
Ejemplo n.º 2
0
        public override void OnMouseDown(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, ChartAnchor dataPoint)
        {
            switch (DrawingState)
            {
            case DrawingState.Building:
                if (StartAnchor.IsEditing)
                {
                    dataPoint.CopyDataValues(StartAnchor);
                    dataPoint.CopyDataValues(EndAnchor);
                    StartAnchor.IsEditing = false;
                }
                else if (EndAnchor.IsEditing)
                {
                    dataPoint.CopyDataValues(EndAnchor);
                    EndAnchor.IsEditing = false;
                    DrawingState        = DrawingState.Normal;
                    IsSelected          = false;
                }
                break;

            case DrawingState.Normal:
                Point  p = dataPoint.GetPoint(chartControl, chartPanel, chartScale);
                Cursor c = GetCursor(chartControl, chartPanel, chartScale, p);

                if (c == Cursors.SizeWE)
                {
                    int editingAnchor = GetClosestBarAnchor(chartControl, p, false);
                    int i             = anchorBars.IndexOf(editingAnchor);

                    if (editingAnchor != int.MinValue && i > -1)
                    {
                        StartAnchor.UpdateXFromPoint(new Point(anchorBars[i == 0 ? i : i - 1], chartPanel.Y + chartPanel.H), chartControl, chartScale);
                        EndAnchor.UpdateXFromPoint(new Point(anchorBars[i == 0 ? i + 1 : i], chartPanel.Y + chartPanel.H), chartControl, chartScale);

                        EndAnchor.IsEditing = true;
                        DrawingState        = DrawingState.Editing;
                    }
                }
                else if (c == Cursors.SizeAll)
                {
                    int editingAnchor = GetClosestBarAnchor(chartControl, p, true);
                    int i             = anchorBars.IndexOf(editingAnchor);

                    if (editingAnchor != int.MinValue && i > -1)
                    {
                        StartAnchor.UpdateXFromPoint(new Point(anchorBars[i - 1], chartPanel.Y + chartPanel.H), chartControl, chartScale);
                        EndAnchor.UpdateXFromPoint(new Point(anchorBars[i], chartPanel.Y + chartPanel.H), chartControl, chartScale);

                        // We have to update the InitialMouseDownAnchor here because we moved our Start/End anchors
                        InitialMouseDownAnchor = dataPoint.Clone() as ChartAnchor;
                        DrawingState           = DrawingState.Moving;
                    }
                }
                else
                {
                    IsSelected = false;
                }
                break;
            }
        }
Ejemplo n.º 3
0
        public override void OnMouseDown(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, ChartAnchor dataPoint)
        {
            switch (DrawingState)
            {
            case DrawingState.Building:
                if (EntryAnchor.IsEditing)
                {
                    dataPoint.CopyDataValues(EntryAnchor);
                    dataPoint.CopyDataValues(RiskAnchor);
                    EntryAnchor.IsEditing = false;
                    entryPrice            = AttachedTo.Instrument.MasterInstrument.RoundToTickSize(EntryAnchor.Price);
                }
                else if (RiskAnchor.IsEditing)
                {
                    dataPoint.CopyDataValues(RiskAnchor);
                    RiskAnchor.IsEditing = false;
                    stopPrice            = AttachedTo.Instrument.MasterInstrument.RoundToTickSize(RiskAnchor.Price);
                    SetReward();
                    // we set the anchor for the target after stop mouse down event via SetReward()
                    //however we need make sure Time is in view when builiding, but always when SetRreward is used..
                    RewardAnchor.Time      = EntryAnchor.Time;
                    RewardAnchor.SlotIndex = EntryAnchor.SlotIndex;
                    RewardAnchor.IsEditing = false;
                }
                // if the anchors are no longer being edited, set the drawing state to normal and unselect the object
                if (!EntryAnchor.IsEditing && !RiskAnchor.IsEditing && !RewardAnchor.IsEditing)
                {
                    DrawingState = DrawingState.Normal;
                    IsSelected   = false;
                }
                break;

            case DrawingState.Normal:
                Point point = dataPoint.GetPoint(chartControl, chartPanel, chartScale);
                //find which anchor has been clicked relative to the mouse point and make whichever anchor now editable
                editingAnchor = GetClosestAnchor(chartControl, chartPanel, chartScale, cursorSensitivity, point);
                if (editingAnchor != null)
                {
                    editingAnchor.IsEditing = true;
                    DrawingState            = DrawingState.Editing;
                }
                else if (GetCursor(chartControl, chartPanel, chartScale, point) == null)
                {
                    IsSelected = false;                             // missed
                }
                else
                {
                    // didnt click an anchor but on a line so start moving
                    DrawingState = DrawingState.Moving;
                }
                break;
            }
        }
Ejemplo n.º 4
0
        public override void OnMouseDown(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, ChartAnchor dataPoint)
        {
            switch (DrawingState)
            {
            case DrawingState.Building:
                if (StartAnchor.IsEditing)
                {
                    dataPoint.CopyDataValues(StartAnchor);
                    StartAnchor.IsEditing = false;

                    // give end anchor something to start with so we dont try to render it with bad values right away
                    dataPoint.CopyDataValues(EndAnchor);
                }
                else if (EndAnchor.IsEditing)
                {
                    dataPoint.CopyDataValues(EndAnchor);
                    EndAnchor.IsEditing = false;
                }

                // is initial building done (both anchors set)
                if (!StartAnchor.IsEditing && !EndAnchor.IsEditing)
                {
                    DrawingState = DrawingState.Normal;
                    IsSelected   = false;
                }
                break;

            case DrawingState.Normal:
                Point point = dataPoint.GetPoint(chartControl, chartPanel, chartScale);
                // see if they clicked near a point to edit, if so start editing
                editingAnchor = GetClosestAnchor(chartControl, chartPanel, chartScale, cursorSensitivity, point);

                if (editingAnchor != null)
                {
                    editingAnchor.IsEditing = true;
                    DrawingState            = DrawingState.Editing;
                }
                else
                {
                    if (GetCursor(chartControl, chartPanel, chartScale, point) != null)
                    {
                        DrawingState = DrawingState.Moving;
                    }
                    else
                    {
                        // user whiffed.
                        IsSelected = false;
                    }
                }
                break;
            }
        }
Ejemplo n.º 5
0
        public override void OnMouseDown(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, ChartAnchor dataPoint)
        {
            switch (DrawingState)
            {
            case DrawingState.Building:

                if (Mode == RegionHighlightMode.Price)
                {
                    dataPoint.Time = chartControl.FirstTimePainted.AddSeconds((chartControl.LastTimePainted - chartControl.FirstTimePainted).TotalSeconds / 2);
                }
                else
                {
                    dataPoint.Price = chartScale.MinValue + (chartScale.MaxMinusMin / 2);
                }

                if (StartAnchor.IsEditing)
                {
                    dataPoint.CopyDataValues(StartAnchor);
                    StartAnchor.IsEditing = false;
                    dataPoint.CopyDataValues(EndAnchor);
                }
                else if (EndAnchor.IsEditing)
                {
                    if (Mode == RegionHighlightMode.Price)
                    {
                        dataPoint.Time      = StartAnchor.Time;
                        dataPoint.SlotIndex = StartAnchor.SlotIndex;
                    }
                    else
                    {
                        dataPoint.Price = StartAnchor.Price;
                    }

                    dataPoint.CopyDataValues(EndAnchor);
                    EndAnchor.IsEditing = false;
                }
                if (!StartAnchor.IsEditing && !EndAnchor.IsEditing)
                {
                    DrawingState = DrawingState.Normal;
                    IsSelected   = false;
                }
                break;

            case DrawingState.Normal:
                Point point = dataPoint.GetPoint(chartControl, chartPanel, chartScale);
                editingAnchor = GetClosestAnchor(chartControl, chartPanel, chartScale, cursorSensitivity, point);
                if (editingAnchor != null)
                {
                    editingAnchor.IsEditing = true;
                    DrawingState            = DrawingState.Editing;
                }
                else
                {
                    if (GetCursor(chartControl, chartPanel, chartScale, point) == Cursors.SizeAll)
                    {
                        DrawingState = DrawingState.Moving;
                    }
                    else if (GetCursor(chartControl, chartPanel, chartScale, point) == Cursors.SizeWE || GetCursor(chartControl, chartPanel, chartScale, point) == Cursors.SizeNS)
                    {
                        DrawingState = DrawingState.Editing;
                    }
                    else if (GetCursor(chartControl, chartPanel, chartScale, point) == Cursors.Arrow)
                    {
                        DrawingState = DrawingState.Editing;
                    }
                    else if (GetCursor(chartControl, chartPanel, chartScale, point) == null)
                    {
                        IsSelected = false;
                    }
                }
                break;
            }
        }
Ejemplo n.º 6
0
        public override void OnMouseDown(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, ChartAnchor dataPoint)
        {
            Point p = dataPoint.GetPoint(chartControl, chartPanel, chartScale);

            switch (DrawingState)
            {
            case DrawingState.Building:
                if (ChartAnchors.Count == 0)
                {
                    ChartAnchors.Add(new ChartAnchor {
                        DisplayName = Custom.Resource.NinjaScriptDrawingToolAnchor, IsEditing = true, DrawingTool = this
                    });
                }

                foreach (ChartAnchor ca in ChartAnchors)
                {
                    if (ca.IsEditing)
                    {
                        dataPoint.CopyDataValues(ca);
                        ca.IsEditing = false;
                    }
                }

                ChartAnchor clickTestAnchor = GetClosestAnchor(chartControl, chartPanel, chartScale, cursorSensitivity, p);

                if (ChartAnchors.Count > 1 && doubleClickTimer.IsEnabled && clickTestAnchor != null && clickTestAnchor != ChartAnchors[ChartAnchors.Count - 1])
                {
                    // ChartAnchors[ChartAnchors.Count - 1] is the 'temp anchor'
                    ChartAnchors.Remove(ChartAnchors[ChartAnchors.Count - 1]);
                    PathToolSegments.Remove(PathToolSegments[PathToolSegments.Count - 1]);
                    doubleClickTimer.Stop();
                    DrawingState = DrawingState.Normal;
                    IsSelected   = false;
                }
                else
                {
                    ChartAnchor ca = new ChartAnchor {
                        DisplayName = Custom.Resource.NinjaScriptDrawingToolAnchor, IsEditing = true, DrawingTool = this
                    };

                    dataPoint.CopyDataValues(ca);
                    ChartAnchors.Add(ca);

                    if (ChartAnchors.Count > 1)
                    {
                        PathToolSegments.Add(new PathToolSegment(ChartAnchors[ChartAnchors.Count - 2], ChartAnchors[ChartAnchors.Count - 1], string.Format("{0} {1}", Custom.Resource.NinjaScriptDrawingToolPathSegment, PathToolSegments.Count + 1)));

                        if (!doubleClickTimer.IsEnabled)
                        {
                            doubleClickTimer.Start();
                        }
                    }
                }
                break;

            case DrawingState.Normal:
                editingAnchor = GetClosestAnchor(chartControl, chartPanel, chartScale, cursorSensitivity, p);

                if (editingAnchor != null)
                {
                    editingAnchor.IsEditing = true;
                    DrawingState            = DrawingState.Editing;
                }
                else
                {
                    if (GetCursor(chartControl, chartPanel, chartScale, p) != null)
                    {
                        DrawingState = DrawingState.Moving;
                    }
                }
                break;
            }
        }
Ejemplo n.º 7
0
        public override void OnMouseDown(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, ChartAnchor dataPoint)
        {
            if (DrawingState == DrawingState.Building)
            {
                dataPoint.CopyDataValues(Anchor);
                Anchor.IsEditing = false;

                DisplayText = string.Empty;
                TextBox tb = new TextBox
                {
                    AcceptsReturn       = true,
                    Background          = new SolidColorBrush(Color.FromArgb(4, 0, 0, 0)),
                    BorderBrush         = chartControl.Properties.AxisPen.Brush,
                    FontFamily          = Font.Family,
                    FontSize            = Font.Size,
                    FontStyle           = Font.Italic ? FontStyles.Italic : FontStyles.Normal,
                    FontWeight          = Font.Bold ? FontWeights.Bold : FontWeights.Normal,
                    Foreground          = TextBrush ?? chartControl.Properties.ChartText,
                    HorizontalAlignment = HorizontalAlignment.Stretch,
                    Style = Application.Current.FindResource("TextBoxNoEffects") as Style
                };
                if (TextBrush == null)
                {
                    UseChartTextBrush = true;
                }

                popup = new Popup
                {
                    AllowsTransparency = true,
                    PlacementTarget    = chartPanel,
                    Placement          = PlacementMode.MousePoint,
                    MinWidth           = 75,
                    IsOpen             = false,
                    StaysOpen          = false,
                    Child = tb
                };

                tb.PreviewKeyDown += (sender, args) =>
                {
                    if (args.Key == Key.System && args.SystemKey == Key.Enter)
                    {
                        int    oldIdx = tb.CaretIndex;
                        string text1  = tb.Text.Substring(0, oldIdx);
                        string text2  = tb.Text.Substring(oldIdx);
                        tb.Text       = string.Format("{0}{1}{2}", text1, Environment.NewLine, text2);
                        tb.CaretIndex = oldIdx + Environment.NewLine.Length;
                        args.Handled  = true;
                    }
                    if (args.Key == Key.Enter)
                    {
                        popup.IsOpen = false;
                        args.Handled = true;
                    }
                };

                tb.PreviewLostKeyboardFocus += (sender, args) => { popup.IsOpen = false; };

                popup.IsOpen  = true;
                ManuallyDrawn = true;
                tb.Focus();

                chartControl.OwnerChart.PreviewMouseDown += OnChartMouseDown;

                popup.Closed += (sender, args) =>
                {
                    chartControl.OwnerChart.PreviewMouseDown -= OnChartMouseDown;
                    DisplayText  = tb.Text;
                    DrawingState = DrawingState.Normal;
                    IsSelected   = false;
                    chartControl.InvalidateVisual();
                    if (chartControl.IsStayInDrawMode)
                    {
                        chartControl.TryStartDrawing(GetType().FullName);
                    }
                };
            }
            else
            {
                Point point = dataPoint.GetPoint(chartControl, chartPanel, chartScale);
                if (GetCurrentRect(layoutRect, outlinePadding).IntersectsWith(new Rect(point.X, point.Y, 2, 2)))
                {
                    Anchor.IsEditing = true;
                    DrawingState     = DrawingState.Moving;
                }
                else
                {
                    IsSelected = false;
                }
            }
        }
Ejemplo n.º 8
0
        public override void OnMouseDown(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, ChartAnchor dataPoint)
        {
            if (IsButtonCLick)
            {
                IsButtonCLick = false;
                return;
            }


            switch (DrawingState)
            {
            case DrawingState.Building:
                if (StartAnchor.IsEditing)
                {
                    dataPoint.CopyDataValues(StartAnchor);
                    StartAnchor.IsEditing = false;

                    // give end anchor something to start with so we dont try to render it with bad values right away
                    dataPoint.CopyDataValues(EndAnchor);
                }
                else if (EndAnchor.IsEditing)
                {
                    dataPoint.CopyDataValues(EndAnchor);
                    EndAnchor.IsEditing = false;
                }

                // is initial building done (both anchors set)
                if (!StartAnchor.IsEditing && !EndAnchor.IsEditing)
                {
                    DrawingState = DrawingState.Normal;
                    IsSelected   = false;
                }
                break;

            case DrawingState.Normal:
                Point point = dataPoint.GetPoint(chartControl, chartPanel, chartScale);
                // see if they clicked near a point to edit, if so start editing
                editingAnchor = GetClosestAnchor(chartControl, chartPanel, chartScale, cursorSensitivity, point);



                if (editingAnchor != null)
                {
                    editingAnchor.IsEditing = true;
                    DrawingState            = DrawingState.Editing;
                }
                else
                {
                    if (GetCursor(chartControl, chartPanel, chartScale, point) != null)
                    {
                        DrawingState = DrawingState.Moving;
                    }
                    else
                    {
                        // user whiffed.
                        int start_X = ((int)model.parent.ChartControl.GetXByTime(StartAnchor.Time));
                        int end_X   = ((int)model.parent.ChartControl.GetXByTime(EndAnchor.Time));

                        int start_Y = chartScale.GetYByValue(StartAnchor.Price);
                        int end_Y   = chartScale.GetYByValue(EndAnchor.Price);

                        int leftPosition = 0;
                        int topPosition  = 0;
                        if (start_X < end_X)
                        {
                            leftPosition = start_X;
                        }
                        else
                        {
                            leftPosition = end_X;
                        }
                        if (start_Y < end_Y)
                        {
                            topPosition = start_Y;
                        }
                        else
                        {
                            topPosition = end_Y;
                        }


                        if (point.X >= leftPosition && point.X <= leftPosition + 15 && point.Y >= topPosition - 20 && point.Y <= topPosition - 5)
                        {
                            model.parent.RemoveDrawObject(this.Tag);
                            model.DeleteProfile(this.Tag);
                            model.SaveProfiles();
                            IsButtonCLick = true;
                            break;
                        }

                        if (point.X >= leftPosition + 20 && point.X <= leftPosition + 20 + 15 && point.Y >= topPosition - 20 && point.Y <= topPosition - 5)
                        {
                            if (ProfileType == 0)
                            {
                                ProfileType = 1;
                            }
                            else if (ProfileType == 1)
                            {
                                ProfileType = 2;
                            }
                            else if (ProfileType == 2)
                            {
                                ProfileType = 0;
                            }

                            model.SaveProfiles();
                            IsButtonCLick = true;
                            break;
                        }

                        if (point.X >= leftPosition + 40 && point.X <= leftPosition + 40 + 15 && point.Y >= topPosition - 20 && point.Y <= topPosition - 5)
                        {
                            ExtendedLine = !ExtendedLine;
                            model.SaveProfiles();
                            IsButtonCLick = true;
                            break;
                        }


                        IsSelected = false;
                    }
                }
                break;
            }

            /*Point point1 = dataPoint.GetPoint(chartControl, chartPanel, chartScale);
             *
             */
        }
Ejemplo n.º 9
0
        public override void OnMouseDown(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, ChartAnchor dataPoint)
        {
            Point p = dataPoint.GetPoint(chartControl, chartPanel, chartScale);

            switch (DrawingState)
            {
            case DrawingState.Building:
                if (ChartAnchors.Count == 0)
                {
                    ChartAnchors.Add(new ChartAnchor {
                        DisplayName = Custom.Resource.NinjaScriptDrawingToolAnchor, IsEditing = true, DrawingTool = this
                    });
                }

                foreach (ChartAnchor ca in ChartAnchors)
                {
                    if (ca.IsEditing)
                    {
                        dataPoint.CopyDataValues(ca);
                        ca.IsEditing = false;
                    }
                }

                if (ChartAnchors.Count > 2 && (GetCursor(chartControl, chartPanel, chartScale, p) == Cursors.Cross || DateTime.Now.Subtract(lastClick).TotalMilliseconds <= 200))
                {
                    ChartAnchors.Remove(ChartAnchors[ChartAnchors.Count - 1]);
                    DrawingState = DrawingState.Normal;
                    IsSelected   = false;
                }
                else
                {
                    ChartAnchor ca = new ChartAnchor {
                        DisplayName = Custom.Resource.NinjaScriptDrawingToolAnchor, IsEditing = true, DrawingTool = this
                    };
                    dataPoint.CopyDataValues(ca);
                    ChartAnchors.Add(ca);
                }

                lastClick = DateTime.Now;
                break;

            case DrawingState.Normal:
                editingAnchor = GetClosestAnchor(chartControl, chartPanel, chartScale, cursorSensitivity, p);
                if (editingAnchor != null)
                {
                    editingAnchor.IsEditing = true;
                    DrawingState            = DrawingState.Editing;
                }
                else
                {
                    if (GetCursor(chartControl, chartPanel, chartScale, p) != null)
                    {
                        DrawingState = DrawingState.Moving;
                    }
                    else if (!IsPointInsidePolygon(chartControl, chartPanel, chartScale, p))
                    {
                        IsSelected = false;
                    }
                }
                break;
            }
        }
Ejemplo n.º 10
0
        public override void OnMouseDown(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, ChartAnchor dataPoint)
        {
            switch (DrawingState)
            {
            case DrawingState.Building:
                if (StartAnchor.IsEditing)
                {
                    dataPoint.CopyDataValues(StartAnchor);
                    // give end anchor something to start with so we dont try to render it with bad values right away
                    dataPoint.CopyDataValues(EndAnchor);
                    dataPoint.CopyDataValues(TextAnchor);
                    StartAnchor.IsEditing = false;
                }
                else if (EndAnchor.IsEditing)
                {
                    dataPoint.CopyDataValues(EndAnchor);
                    EndAnchor.IsEditing = false;

                    // give text anchor something to start with right away so we dont try to render it
                    // with uninitialized values as well
                    dataPoint.CopyDataValues(TextAnchor);
                }
                else if (TextAnchor.IsEditing)
                {
                    dataPoint.CopyDataValues(TextAnchor);
                    TextAnchor.IsEditing = false;
                }

                // is initial building done (all anchors set)
                if (!StartAnchor.IsEditing && !EndAnchor.IsEditing && !TextAnchor.IsEditing)
                {
                    DrawingState = DrawingState.Normal;
                    IsSelected   = false;
                }
                break;

            case DrawingState.Normal:
                Point point = dataPoint.GetPoint(chartControl, chartPanel, chartScale);
                // see if they clicked near a point to edit, if so start editing
                editingAnchor = GetClosestAnchor(chartControl, chartPanel, chartScale, cursorSensitivity, point);
                if (editingAnchor != null)
                {
                    editingAnchor.IsEditing = true;
                    DrawingState            = DrawingState.Editing;
                }
                else if (editingAnchor == null || IsLocked)
                {
                    // or if they didnt click particulary close to either, move (they still clicked close to our line)
                    // set it to moving even if locked so we know to change cursor
                    if (GetCursor(chartControl, chartPanel, chartScale, point) != null)
                    {
                        DrawingState = DrawingState.Moving;
                    }
                    else
                    {
                        IsSelected = false;
                    }
                }
                break;
            }
        }
Ejemplo n.º 11
0
        public override void OnMouseDown(ChartControl chartControl, ChartPanel chartPanel, ChartScale chartScale, ChartAnchor dataPoint)
        {
            switch (DrawingState)
            {
            case DrawingState.Building:
                if (StartAnchor.IsEditing)
                {
                    dataPoint.CopyDataValues(StartAnchor);
                    // Give end anchor something to start with so we dont try to render it with bad values right away
                    dataPoint.CopyDataValues(EndAnchor);
                    StartAnchor.IsEditing = false;
                }
                else if (EndAnchor.IsEditing)
                {
                    dataPoint.CopyDataValues(EndAnchor);
                    // Give extension anchor something nearby to start with
                    dataPoint.CopyDataValues(ExtensionAnchor);
                    EndAnchor.IsEditing = false;
                }
                else if (ExtensionAnchor.IsEditing)
                {
                    dataPoint.CopyDataValues(ExtensionAnchor);
                    ExtensionAnchor.IsEditing = false;
                }

                // Is initial building done (all anchors set)
                if (Anchors.All(a => !a.IsEditing))
                {
                    DrawingState = DrawingState.Normal;
                    IsSelected   = false;
                }
                break;

            case DrawingState.Normal:
                Point point = dataPoint.GetPoint(chartControl, chartPanel, chartScale);
                editingAnchor = GetClosestAnchor(chartControl, chartPanel, chartScale, cursorSensitivity, point);
                if (editingAnchor != null)
                {
                    editingAnchor.IsEditing = true;
                    DrawingState            = DrawingState.Editing;
                }
                else
                {
                    if (GetCursor(chartControl, chartPanel, chartScale, point) == Cursors.SizeAll)
                    {
                        DrawingState = DrawingState.Moving;
                    }
                    else if (GetCursor(chartControl, chartPanel, chartScale, point) == Cursors.SizeNESW ||
                             GetCursor(chartControl, chartPanel, chartScale, point) == Cursors.SizeNWSE)
                    {
                        DrawingState = DrawingState.Editing;
                    }
                    else if (GetCursor(chartControl, chartPanel, chartScale, point) == Cursors.Arrow)
                    {
                        DrawingState = DrawingState.Editing;
                    }
                    else if (GetCursor(chartControl, chartPanel, chartScale, point) == null)
                    {
                        IsSelected = false;
                    }
                }
                break;
            }
        }