private void AddVerticle()
        {
            var   line             = (SelectedObject as Line);
            Point newVerticlePoint = Clicks.Last();
            var   newLine          = (line.ParentGraphicObject as Poligon).InsertLine(line, newVerticlePoint);

            GraphicObjects.Add(newLine.Guid, newLine);
            GraphicObjects.Add(newLine.StartVerticle.Guid, newLine.StartVerticle);
            Redraw();
        }
        //private readonly Action _graphicObjectSelected;
        //private readonly Action _verticleSelected;
        //private readonly Func<int, bool> _lineSelected;
        //private readonly Action _nullSelected;
        //private readonly Action _circleSelected;


        private void DrawCircle()
        {
            var circle = new Circle(Clicks.Last(), Radius, Drawing, GuidMapLogic, Width);

            GraphicObjects.Add(circle.Guid, circle);
            circle.DrawItself();
            circle.DrawOnGuidMap();
            //GuidMapLogic.SetOnMap(circle);
            Clicks.Clear();
        }
        DocumentEvents saveEvent;//DocumentEvents object used for saving events

        /// <summary>
        /// Initialization of UI and editing related events and members
        /// </summary>
        /// <param name="textView"></param>
        /// <param name="mcb"></param>
        /// <param name="cs"></param>
        public CoProCommandFilter(IWpfTextView textView, CoProNetwork mcb, GraphicObjects cs)
        {
            m_textView = textView;
            m_adornmentLayer = m_textView.GetAdornmentLayer("MultiEditLayer");
            m_added = false;
            m_textView.LayoutChanged += m_textView_LayoutChanged;
            cb = mcb;
            gobj = cs;
            //crts.DTE2.Events.TextEditorEvents.LineChanged += new _dispTextEditorEvents_LineChangedEventHandler();
            events = gobj.DTE2.Events;
            saveEvent = events.DocumentEvents;
            saveEvent.DocumentSaved += new _dispDocumentEvents_DocumentSavedEventHandler(my_DocWasSaved);
            cb.NewCaret += new NewCaretEventHandler(my_NewCaret);
            cb.ChangeCaret += new ChangeCaretEventHandler(my_ChangedCaret);
            cb.EditorDisc += new EditorDisconnectedEventHandler(my_EditorDisc);
            cb.NewText += new NewTextEventHandler(my_AddedText);
            cb.RemovedText += new RemovedTextEventHandler(my_RemovedText);
            cb.SaveEvent += new SaveEventHandler(my_Save);
            cb.AddAllEditors += new AddCurrentEditorsEventHandler(my_AddEditors);
            cb.ItemRemoved += new ItemRemovedEventHandler(my_RemovedItem);
            cb.ItemAdded += new NewItemAddedEventHandler(my_ItemAdded);
            textView.Caret.PositionChanged += new EventHandler<CaretPositionChangedEventArgs>(my_PositionChanged);
            textView.TextBuffer.Changed += TextBuffer_Changed;
            InitBrushes();
            uiDisp = Dispatcher.CurrentDispatcher;
            ITextDocument textDoc;
            var rc = m_textView.TextBuffer.Properties.TryGetProperty<ITextDocument>(
              typeof(ITextDocument), out textDoc);
            filename = gobj.DTE2.Solution.FullName;
            filename = filename.Substring(filename.LastIndexOf('\\') + 1);
            filename = filename.Split('.')[0];
            filename = textDoc.FilePath.Substring(textDoc.FilePath.IndexOf(filename));
            if (cb.IsAdmin)
            {
                cb.AdminEvent += my_AdminCallback;
            }
            if (isFirstTime)
            {
                isFirstTime = false;
            }
            else
            {
                if (!cb.IsAdmin)
                {
                    cb.UpdateSpecificFile(filename);
                }
            }
            filename = filename.Substring(filename.LastIndexOf('\\') + 1);
            cb.IntializePosition(filename, m_textView.Caret.Position.BufferPosition.Position, cb.Name);

            currBufferSize = m_textView.TextSnapshot.Length;
        }
 private void DrawLine()
 {
     if (Clicks.Count == 2)
     {
         var line = new Line(Clicks[0], Clicks[1], Width, Drawing, GuidMapLogic);
         line.DrawItself();
         GraphicObjects.Add(line.Guid, line);
         GraphicObjects.Add(line.StartVerticle.Guid, line.StartVerticle);
         GraphicObjects.Add(line.EndVerticle.Guid, line.EndVerticle);
         line.DrawOnGuidMap();
         Clicks.Clear();
     }
 }
        private void StartDrawingPolygon()
        {
            if (Clicks.Count == 1)
            {
                Poligon poligon = new Poligon(Drawing, GuidMapLogic);
                CurrentPolygon = poligon;
                GraphicObjects.Add(poligon.Guid, poligon);
                return;
            }
            var line = new Line(Clicks[Clicks.Count - 2], Clicks.Last(), Width, Drawing, GuidMapLogic, CurrentPolygon);

            CurrentPolygon.AddLine(line);
            line.DrawItself();
        }
        private void DeleteObject()
        {
            if (SelectedObject.GraphicObjectType == GraphicObjectType.Verticle)
            {
                Verticle verticle = (SelectedObject as Verticle);
                Line     line     = (verticle.ParentGraphicObject as Line);
                Poligon  poligon  = line.ParentGraphicObject != null ? line.ParentGraphicObject as Poligon : null;
                if (poligon == null)
                {
                    return;
                }
                else
                {
                    var lineToDelete = poligon.DeleteVerticle(verticle);
                    GraphicObjects.Remove(lineToDelete.Guid);
                    GraphicObjects.Remove(verticle.Guid);
                }
            }
            else if (SelectedObject.GraphicObjectType == GraphicObjectType.Line)
            {
                Line line = (SelectedObject as Line);

                if (line.ParentGraphicObject == null)
                {
                    GraphicObjects.Remove(line.StartVerticle.Guid);
                    GraphicObjects.Remove(line.EndVerticle.Guid);
                    GraphicObjects.Remove(line.Guid);
                }
                else
                {
                    Poligon poligon = line.ParentGraphicObject as Poligon;
                    poligon.Lines.ForEach(x => GraphicObjects.Remove(x.Guid));
                    poligon.Verticies.ForEach(x => GraphicObjects.Remove(x.Guid));
                    GraphicObjects.Remove(poligon.Guid);
                }
            }
            else if (SelectedObject.GraphicObjectType == GraphicObjectType.Circle)
            {
                GraphicObjects.Remove(SelectedObject.Guid);
            }

            SelectedObject = null;
            Redraw();
        }
        private void SetConcrentic()
        {
            Guid          mapGuid       = GuidMapLogic.GuidMap[Clicks.Last().X + Clicks.Last().Y *Drawing.Width];
            GraphicObject graphicObject = null;

            //Guid mapGuiFirstCircle = GuidMapLogic.GuidMap[Clicks.First().X + Clicks.First().Y * Drawing.Width];

            if (mapGuid != Guid.Empty)
            {
                ConnectedCircle connectedCircle;
                graphicObject = GraphicObjects[mapGuid];

                if (GraphicObjects[mapGuid].GraphicObjectType == GraphicObjectType.Circle)
                {
                    ConnectedCircles.Add(GraphicObjects[mapGuid] as Circle);
                }


                if (graphicObject.GraphicObjectType == GraphicObjectType.Circle)
                {
                    var firstCircle = ConnectedCircles.FirstOrDefault();
                    var circle      = ConnectedCircles.LastOrDefault();
                    if (ConnectedCircles.Count > 1)
                    {
                        if (firstCircle.ParentGraphicObject == null)
                        {
                            connectedCircle = new ConnectedCircle(firstCircle, circle, Drawing, GuidMapLogic);
                            firstCircle.ParentGraphicObject = connectedCircle;
                            circle.ParentGraphicObject      = connectedCircle;
                            circle.Center = firstCircle.Center;
                            GraphicObjects.Add(connectedCircle.Guid, connectedCircle);
                        }
                        else
                        {
                            circle.Center = firstCircle.Center;
                            (firstCircle.ParentGraphicObject as ConnectedCircle).AddCircle(circle);
                        }
                    }
                }
            }

            Redraw();
        }
        private void StopDrawPolygon()
        {
            if (Clicks.Count > 2)
            {
                var line = new Line(Clicks.Last(), Clicks.First(), Width, Drawing, GuidMapLogic, CurrentPolygon);
                CurrentPolygon.AddLastLine(line);
                line.DrawItself();

                CurrentPolygon
                .Lines.ForEach(poligonLine => GraphicObjects.Add(poligonLine.Guid, poligonLine));

                CurrentPolygon
                .Verticies.ForEach(poligonVerticle => GraphicObjects.Add(poligonVerticle.Guid, poligonVerticle));

                CurrentPolygon.DrawOnGuidMap();
                //GuidMapLogic.SetOnMap(CurrentPolygon);
            }
            _buttonControl.StopDrawingPoligon();
            Clicks.Clear();
        }