예제 #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="args"></param>
        protected void OnVertexSelected(object sender, VertexSelectedEventArgs args)
        {
            // Toggle and append selection occurs in area selection only. No need to worry about it here
            var control = args.VertexControl;
            var vertex  = args.VertexControl.Vertex as VertexBase;

            if (args.MouseArgs.LeftButton == MouseButtonState.Pressed)
            {
                // Is this a new selection and/or a toggle selection?
                if (!selected_vertices_.Contains(vertex))
                {
                    ClearSelection();

                    // User is only selecting one vertex
                    SelectVertex(control, false);
                }

                last_vertex_control_ = control;
                //last_vertex_position_.X = last_vertex_control_.GetPosition().X;
                //last_vertex_position_.Y = last_vertex_control_.GetPosition().Y;
                var position = zoom_control_.TranslatePoint(args.MouseArgs.GetPosition(zoom_control_), graph_area_);
                last_vertex_position_.X = position.X;
                last_vertex_position_.Y = position.Y;
            }
        }
예제 #2
0
        private void VertexSelectedAction(object sender, VertexSelectedEventArgs args)
        {
            this.currentVertex = args.VertexControl;
            if (this.elementProvider.Element?.InstanceMetatype == Repo.Metatype.Edge)
            {
                if (this.previosVertex == null)
                {
                    this.editorManager.CreateVirtualEdge(this.currentVertex, this.currentVertex.GetPosition());
                    this.previosVertex = this.currentVertex;
                }
                else
                {
                    if (((VertexControlWithVCP)currentVertex).VCPTargetRoot == null)
                    {
                        this.editorManager.DestroyVirtualEdge();
                        return;
                    }
                    var command = new Commands.CreateEdgeCommand(
                        this.model,
                        this.elementProvider.Element,
                        (this.previosVertex?.Vertex as NodeViewModel)?.Node,
                        (this.currentVertex?.Vertex as NodeViewModel)?.Node);
                    this.controller.Execute(command);
                    this.ElementManipulationDone?.Invoke(this, EventArgs.Empty);
                }

                return;
            }

            this.NodeSelected?.Invoke(
                this,
                new NodeSelectedEventArgs {
                Node = this.currentVertex.GetDataVertex <NodeViewModel>()
            });

            this.graphArea.GetAllVertexControls().ToList().ForEach(x => x.GetDataVertex <NodeViewModel>().
                                                                   Color = Brushes.Green);

            this.currentVertex.GetDataVertex <NodeViewModel>().Color = Brushes.LightBlue;
            if (this.previosVertex != null)
            {
                this.previosVertex.GetDataVertex <NodeViewModel>().Color = Brushes.Yellow;
            }

            if (args.MouseArgs.RightButton == MouseButtonState.Pressed)
            {
                args.VertexControl.ContextMenu = new ContextMenu();
                var mi = new MenuItem {
                    Header = "Delete item", Tag = args.VertexControl
                };
                mi.Click += this.MenuItemClickedOnVertex;
                args.VertexControl.ContextMenu.Items.Add(mi);
                args.VertexControl.ContextMenu.IsOpen = true;
            }
        }
예제 #3
0
        /// <summary>
        /// Event handler that is triggered when a vertex is clicked.
        /// </summary>
        /// <param name="sender">The sender.</param>
        /// <param name="args">The event arguments.</param>
        private void VertexSelectedEvent(object sender, VertexSelectedEventArgs args)
        {
            var sequenceGraph = this.sequenceGraph as GraphXSequenceGraph;

            if (sequenceGraph == null)
            {
                return;
            }

            var graph  = (DataGraph)this.SequenceGraphArea.LogicCore.Graph;
            var vertex = (DataVertex)args.VertexControl.Vertex;

            this.SelectedVertices = graph.GetAllSequencePaths(vertex, sequenceGraph.EndPoint);
        }
예제 #4
0
        /// <summary>
        /// Event handler that is triggered when a vertex is clicked.
        /// </summary>
        /// <param name="sender">The sender.</param>
        /// <param name="args">The event arguments.</param>
        private void VertexSelectedEvent(object sender, VertexSelectedEventArgs args)
        {
            if (!(sequenceGraph is GraphXSequenceGraph seqGraph))
            {
                return;
            }

            var graph  = (DataGraph)SequenceGraphArea.LogicCore.Graph;
            var vertex = (DataVertex)args.VertexControl.Vertex;

#pragma warning disable 618
            SelectedVertices = graph.GetAllSequencePaths(vertex, seqGraph.EndPoint);
#pragma warning restore 618
        }
예제 #5
0
        private void CheckThatForReconnection(VertexSelectedEventArgs args)
        {
            var vertexToCheck = args.VertexControl;

            if (IsVertexVirtual(vertexToCheck))
            {
                var vertices          = this.graphArea.VertexList.Select(x => x.Value).Where(x => !IsVertexVirtual(x));
                var verticesToConnect = vertices.Where(x => IsCenterOfFirstVertexOnAnother(vertexToCheck, x));
                if (verticesToConnect.Count() != 0)
                {
                    var vertexToConnect = verticesToConnect.First();
                    ReconnectEdgeFromVirtualNodeToReal(vertexToCheck, vertexToConnect);
                }
            }
        }
예제 #6
0
        private void MyArea_VertexSelected(object sender, VertexSelectedEventArgs args)
        {
            if (args.MouseArgs.ChangedButton == MouseButton.Right)
            {
                if (args.VertexControl.ContextMenu == null)
                {
                    args.VertexControl.ContextMenu = new ContextMenu();
                    var propagate = new MenuItem()
                    {
                        Header      = "Propagate",
                        DataContext = args.VertexControl.DataContext
                    };
                    propagate.Click += Propagate_Click;
                    args.VertexControl.ContextMenu.Items.Add(propagate);

                    var delete = new MenuItem()
                    {
                        Header      = "Delete",
                        DataContext = args.VertexControl.DataContext
                    };
                    delete.Click += Delete_Click;
                    args.VertexControl.ContextMenu.Items.Add(delete);
                }
                args.VertexControl.ContextMenu.IsOpen = true;
            }
            else if (args.MouseArgs.ChangedButton == MouseButton.Left)
            {
                if (args.Modifiers == ModifierKeys.Control)
                {
                    var job         = args.VertexControl.Vertex as MyVertex;
                    var jobselected = selectedVertices.Contains(job);

                    if (jobselected)
                    {
                        job.Selected = false;
                        job.RaisePropertyChanged("Selected");
                        selectedVertices.Remove(job);
                    }
                    else
                    {
                        job.Selected = true;
                        job.RaisePropertyChanged("Selected");
                        selectedVertices.Add(job);
                    }
                }
            }
        }
예제 #7
0
 void graphArea_VertexSelected(object sender, VertexSelectedEventArgs args)
 {
     if (args.MouseArgs.LeftButton == MouseButtonState.Pressed)
     {
         if (_opMode == EditorOperationMode.Edit)
         {
             CreateEdgeControl(args.VertexControl);
         }
         else if (_opMode == EditorOperationMode.Delete)
         {
             SafeRemoveVertex(args.VertexControl);
         }
         else if (_opMode == EditorOperationMode.Select && args.Modifiers == ModifierKeys.Control)
         {
             SelectVertex(args.VertexControl);
         }
     }
 }
예제 #8
0
        private void VertexSelectedAction(object sender, VertexSelectedEventArgs args)
        {
            this.ctrlVer = args.VertexControl;
            if (this.elementProvider.Element?.InstanceMetatype == Repo.Metatype.Edge)
            {
                if (this.prevVer == null)
                {
                    this.editorManager.CreateVirtualEdge(this.ctrlVer, this.ctrlVer.GetPosition());
                    this.prevVer = this.ctrlVer;
                }
                else
                {
                    this.controller.NewEdge(this.elementProvider.Element, this.prevVer, this.ctrlVer);
                    this.ElementUsed?.Invoke(this, EventArgs.Empty);
                }

                return;
            }

            this.NodeSelected?.Invoke(this,
                                      new NodeSelectedEventArgs {
                Node = this.ctrlVer.GetDataVertex <NodeViewModel>()
            });

            this.scene.GetAllVertexControls().ToList().ForEach(x => x.GetDataVertex <NodeViewModel>().
                                                               Color = Brushes.Green);

            this.ctrlVer.GetDataVertex <NodeViewModel>().Color = Brushes.LightBlue;
            if (this.prevVer != null)
            {
                this.prevVer.GetDataVertex <NodeViewModel>().Color = Brushes.Yellow;
            }

            if (args.MouseArgs.RightButton == MouseButtonState.Pressed)
            {
                args.VertexControl.ContextMenu = new ContextMenu();
                var mi = new MenuItem {
                    Header = "Delete item", Tag = args.VertexControl
                };
                mi.Click += this.MenuItemClickVert;
                args.VertexControl.ContextMenu.Items.Add(mi);
                args.VertexControl.ContextMenu.IsOpen = true;
            }
        }
예제 #9
0
 void dg_Area_VertexSelected(object sender, VertexSelectedEventArgs args)
 {
     if (args.MouseArgs.LeftButton == MouseButtonState.Pressed)
     {
         if (Keyboard.IsKeyDown(Key.LeftCtrl))
         {
             SelectVertex(args.VertexControl);
         }
     }
     else if (args.MouseArgs.RightButton == MouseButtonState.Pressed)
     {
         args.VertexControl.ContextMenu = new ContextMenu();
         var mi = new MenuItem {
             Header = "Delete item", Tag = args.VertexControl
         };
         mi.Click += mi_Click;
         args.VertexControl.ContextMenu.Items.Add(mi);
     }
 }
예제 #10
0
        void tg_Area_VertexSelected(object sender, VertexSelectedEventArgs args)
        {
            if (args.MouseArgs.LeftButton == MouseButtonState.Pressed && tg_edgeMode.SelectedIndex == 1)
            {
                tg_Area.GenerateEdgesForVertex(args.VertexControl, (EdgesType)tg_edgeType.SelectedItem);
            }
            if (args.MouseArgs.RightButton != MouseButtonState.Pressed)
            {
                return;
            }
            args.VertexControl.ContextMenu = new ContextMenu();
            var menuitem = new MenuItem {
                Header = "Delete item", Tag = args.VertexControl
            };

            menuitem.Click += tg_deleteitem_Click;
            args.VertexControl.ContextMenu.Items.Add(menuitem);
            args.VertexControl.ContextMenu.IsOpen = true;
        }
예제 #11
0
        /// <summary>
        /// Вызывается, когда была выделена какая-либо вершина.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="args"></param>
        private void graphArea_VertexSelected(object sender, VertexSelectedEventArgs args)
        {
            if (args.MouseArgs.LeftButton == MouseButtonState.Pressed)
            {
                switch (operationMode)
                {
                case EditorOperationMode.Create:
                    CreateEdgeControl(args.VertexControl);
                    break;

                case EditorOperationMode.CreateVillage:
                    CreateEdgeControl(args.VertexControl);
                    break;

                case EditorOperationMode.Delete:
                    SafeRemoveVertex(args.VertexControl);
                    break;
                }
            }
        }
예제 #12
0
        private void VertexSelectedAction(object sender, VertexSelectedEventArgs args)
        {
            this.ctrlVer = args.VertexControl;
            if (this.currentElement != null && this.currentElement.InstanceMetatype == Repo.Metatype.Edge)
            {
                if (this.prevVer == null)
                {
                    this.editorManager.CreateVirtualEdge(this.ctrlVer, this.ctrlVer.GetPosition());
                    this.prevVer = this.ctrlVer;
                }
                else
                {
                    this.CreateEdge(this.currentElement as Repo.IEdge);
                    this.prevVer = null;
                    this.editorManager.DestroyVirtualEdge();
                    this.currentElement = null;
                }
            }

            this.attributesView.DataContext = this.ctrlVer.GetDataVertex <DataVertex>();

            this.g_Area.GetAllVertexControls().ToList().ForEach(x => x.GetDataVertex <DataVertex>().Color = Brushes.Green);

            this.ctrlVer.GetDataVertex <DataVertex>().Color = Brushes.LightBlue;
            if (this.prevVer != null)
            {
                this.prevVer.GetDataVertex <DataVertex>().Color = Brushes.Yellow;
            }

            if (args.MouseArgs.RightButton == MouseButtonState.Pressed)
            {
                args.VertexControl.ContextMenu = new ContextMenu();
                var mi = new MenuItem {
                    Header = "Delete item", Tag = args.VertexControl
                };
                mi.Click += this.MenuItemClickVert;
                args.VertexControl.ContextMenu.Items.Add(mi);
                args.VertexControl.ContextMenu.IsOpen = true;
            }
        }
예제 #13
0
 void dg_Area_VertexSelected(object sender, VertexSelectedEventArgs args)
 {
     if (args.MouseArgs.LeftButton == MouseButtonState.Pressed)
     {
         if (Keyboard.IsKeyDown(Key.LeftCtrl))
         {
             SelectVertex(args.VertexControl);
         }
     }
     else if (args.MouseArgs.RightButton == MouseButtonState.Pressed)
     {
         var countTagged = dg_Area.VertexList.Values.Count(DragBehaviour.GetIsTagged);
         var isTagged    = DragBehaviour.GetIsTagged(args.VertexControl);
         args.VertexControl.ContextMenu = new ContextMenu();
         var mi = new MenuItem {
             Header = "Delete item" + (isTagged && countTagged > 1 ? "s" : ""), Tag = args.VertexControl, Margin = new Thickness(5)
         };
         mi.Click += mi_Click;
         args.VertexControl.ContextMenu.Items.Add(mi);
         args.VertexControl.ContextMenu.IsOpen = true;
     }
 }
예제 #14
0
        void dg_Area_VertexSelected(object sender, VertexSelectedEventArgs args)
        {
            if (args.MouseArgs.LeftButton == MouseButtonState.Pressed)
            {
                if (Keyboard.IsKeyDown(Key.LeftCtrl))
                {
                    //if (DragBehaviour.GetIsDragging(args.VertexControl)) return;

                    SelectVertex(args.VertexControl);
                }
            }
            else if (args.MouseArgs.RightButton == MouseButtonState.Pressed)
            {
                args.VertexControl.ContextMenu = new System.Windows.Controls.ContextMenu();
                var mi = new System.Windows.Controls.MenuItem()
                {
                    Header = "Delete item", Tag = args.VertexControl
                };
                mi.Click += mi_Click;
                args.VertexControl.ContextMenu.Items.Add(mi);
            }
        }
예제 #15
0
        void tg_Area_VertexSelected(object sender, VertexSelectedEventArgs args)
        {
            if (args.MouseArgs.LeftButton == MouseButtonState.Pressed && tg_edgeMode.SelectedIndex == 1)
            {
                tg_Area.GenerateEdgesForVertex(args.VertexControl, (EdgesType)tg_edgeType.SelectedItem);
            }
            if (args.MouseArgs.RightButton == MouseButtonState.Pressed)
            {
                args.VertexControl.ContextMenu = new System.Windows.Controls.ContextMenu();
                var menuitem = new System.Windows.Controls.MenuItem()
                {
                    Header = "Delete item", Tag = args.VertexControl
                };
                menuitem.Click += tg_deleteitem_Click;
                args.VertexControl.ContextMenu.Items.Add(menuitem);

                var str = new StringBuilder();
                using (var writer = new StringWriter(str))
                    XamlWriter.Save(args.VertexControl.ContextMenu.Template, writer);
                Debug.Write(str);
            }
        }
예제 #16
0
        void graphArea_VertexSelected(object sender, VertexSelectedEventArgs args)
        {
            if (args.MouseArgs.LeftButton == MouseButtonState.Pressed)
            {
                switch (_opMode)
                {
                case EditorOperationMode.Edit:
                    CreateEdgeControl(args.VertexControl);
                    break;

                case EditorOperationMode.Delete:
                    SafeRemoveVertex(args.VertexControl);
                    break;

                default:
                    if (_opMode == EditorOperationMode.Select && args.Modifiers == ModifierKeys.Control)
                    {
                        SelectVertex(args.VertexControl);
                    }
                    break;
                }
            }
        }
예제 #17
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="args"></param>
        protected void OnVertexMouseLeftButtonUp(object sender, VertexSelectedEventArgs args)
        {
            // nothing for now
            bool append = Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift);
            bool toggle = Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl);

            // Vertex group dragging -> Don't clear selection
            if (last_vertex_control_ != null)
            {
                // Compare the last position and current position
                // If they are the same then you move to just selection

                var position = zoom_control_.TranslatePoint(args.MouseArgs.GetPosition(zoom_control_), graph_area_);

                if (last_vertex_position_ == position)
                //if (last_vertex_position_ == last_vertex_control_.GetPosition())
                {
                    ClearSelection();
                    SelectVertex(last_vertex_control_, false);
                }

                last_vertex_control_ = null;
            }
        }
예제 #18
0
 private void GraphArea_VertexSelected(object sender, VertexSelectedEventArgs args)
 {
 }
예제 #19
0
        void dg_Area_VertexSelectedForED(object sender, VertexSelectedEventArgs args)
        {
            if (!_isInEdMode)
            {
                return;
            }
            if (_edVertex == null) //select starting vertex
            {
                _edVertex = args.VertexControl;
                _edFakeDv = new DataVertex {
                    ID = -666
                };
                _edGeo = new PathGeometry(new PathFigureCollection {
                    new PathFigure {
                        IsClosed = false, StartPoint = _edVertex.GetPosition(), Segments = new PathSegmentCollection {
                            new PolyLineSegment(new List <Point> {
                                new Point()
                            }, true)
                        }
                    }
                });
                var dedge = new DataEdge(_edVertex.Vertex as DataVertex, _edFakeDv);
                _edEdge = new EdgeControl(_edVertex, null, dedge)
                {
                    ManualDrawing = true
                };
                dg_Area.AddEdge(dedge, _edEdge);
                dg_Area.LogicCore.Graph.AddVertex(_edFakeDv);
                dg_Area.LogicCore.Graph.AddEdge(dedge);
                _edEdge.SetEdgePathManually(_edGeo);
            }
            else if (!Equals(_edVertex, args.VertexControl)) //finish draw
            {
                _edEdge.Target = args.VertexControl;
                var dedge = _edEdge.Edge as DataEdge;
                if (dedge != null)
                {
                    dedge.Target = args.VertexControl.Vertex as DataVertex;
                }
                var fig = _edGeo.Figures[0];
                var seg = fig.Segments[_edGeo.Figures[0].Segments.Count - 1] as PolyLineSegment;

                if (seg != null && seg.Points.Count > 0)
                {
                    var targetPos = _edEdge.Target.GetPosition();
                    var sourcePos = _edEdge.Source.GetPosition();
                    //get the size of the source
                    var sourceSize = new Size
                    {
                        Width  = _edEdge.Source.ActualWidth,
                        Height = _edEdge.Source.ActualHeight
                    };
                    var targetSize = new Size
                    {
                        Width  = _edEdge.Target.ActualWidth,
                        Height = _edEdge.Target.ActualHeight
                    };

                    var srcStart = seg.Points.Count == 0 ? fig.StartPoint : seg.Points[0];
                    var srcEnd   = seg.Points.Count > 1 ? (seg.Points[seg.Points.Count - 1] == targetPos ? seg.Points[seg.Points.Count - 2] : seg.Points[seg.Points.Count - 1]) : fig.StartPoint;
                    var p1       = GeometryHelper.GetEdgeEndpoint(sourcePos, new Rect(sourceSize), srcStart, _edEdge.Source.VertexShape);
                    var p2       = GeometryHelper.GetEdgeEndpoint(targetPos, new Rect(targetSize), srcEnd, _edEdge.Target.VertexShape);


                    fig.StartPoint = p1;
                    if (seg.Points.Count > 1)
                    {
                        seg.Points[seg.Points.Count - 1] = p2;
                    }
                }
                GeometryHelper.TryFreeze(_edGeo);
                _edEdge.SetEdgePathManually(new PathGeometry(_edGeo.Figures));
                _isInEdMode = false;
                ClearEdgeDrawing();
            }
        }