private void UpdateHighlightBehaviour(bool clearSelectedVertices)
        {
            if (clearSelectedVertices)
            {
                _selectedVertices.Clear();
            }

            if (tbtnCanEdit.IsChecked.Value)
            {
                foreach (var v in Area.VertexList)
                {
                    HighlightBehaviour.SetIsHighlightEnabled(v.Value, false);
                    HighlightBehaviour.SetHighlighted(v.Value, false);
                }
                foreach (var edge in Area.EdgesList)
                {
                    HighlightBehaviour.SetIsHighlightEnabled(edge.Value, false);
                    HighlightBehaviour.SetHighlighted(edge.Value, false);
                }
            }
            else
            {
                foreach (var v in Area.VertexList)
                {
                    HighlightBehaviour.SetIsHighlightEnabled(v.Value, true);
                    HighlightBehaviour.SetHighlighted(v.Value, false);
                }
                foreach (var edge in Area.EdgesList)
                {
                    HighlightBehaviour.SetIsHighlightEnabled(edge.Value, true);
                    HighlightBehaviour.SetHighlighted(edge.Value, false);
                }
            }
        }
        public override void UnDo()
        {
            _graph.Graph.AddVertex(_vertex);
            _vCtrl = new VertexControl(_vertex);
            _graph.AddVertex(_vertex, _vCtrl);

            HighlightBehaviour.SetIsHighlightEnabled(_vCtrl, false);

            foreach (var edge in _relatedEdges)
            {
                var source = _graph.VertexList.FirstOrDefault(v => v.Key.Id == edge.Item2.Id);
                var target = _graph.VertexList.FirstOrDefault(v => v.Key.Id == edge.Item3.Id);

                if (source.Value == null || target.Value == null)
                {
                    throw new Exception("source or target vertex not found");
                }

                var edgeCtrl = new EdgeControl(source.Value, target.Value, edge.Item1)
                {
                    ShowArrows = true,
                    ShowLabel  = true
                };

                _graph.Graph.AddEdge(edge.Item1);
                _graph.AddEdge(edge.Item1, edgeCtrl);

                HighlightBehaviour.SetIsHighlightEnabled(edgeCtrl, false);
            }

            if (_undoCallback != null)
            {
                _undoCallback.Invoke(_vertex);
            }
        }
        private void UpdateIsInEditing(bool value)
        {
            if (View == null)
            {
                return;
            }

            var area            = View.Area;
            var highlightEnable = !value;
            var highlighted     = false;

            foreach (var v in area.VertexList)
            {
                v.Key.IsEditing = value;
                //if (value)
                //{
                //    v.Key.ChangedCommited += ChangedCommited;
                //}
                //else
                //{
                //    v.Key.ChangedCommited -= ChangedCommited;
                //}

                HighlightBehaviour.SetIsHighlightEnabled(v.Value, highlightEnable);
                HighlightBehaviour.SetHighlighted(v.Value, highlighted);
            }

            foreach (var edge in area.EdgesList)
            {
                HighlightBehaviour.SetIsHighlightEnabled(edge.Value, highlightEnable);
                HighlightBehaviour.SetHighlighted(edge.Value, highlighted);
            }
        }
Пример #4
0
        public override void UnDo()
        {
            _Edge = new DataEdge(_source, _target);

            _sourceVC = _graph.VertexList.Where(pair => pair.Key == _source).Select(pair => pair.Value).FirstOrDefault();
            _targetVC = _graph.VertexList.Where(pair => pair.Key == _target).Select(pair => pair.Value).FirstOrDefault();

            if (_sourceVC == null || _targetVC == null)
            {
                throw new ArgumentNullException("VertexControl");
            }

            _eCtrl = new EdgeControl(_sourceVC, _targetVC, _Edge)
            {
                ShowArrows = true,
                ShowLabel  = true
            };

            _graph.Graph.AddEdge(_Edge);
            _graph.AddEdge(_Edge, _eCtrl);

            HighlightBehaviour.SetIsHighlightEnabled(_eCtrl, false);

            if (_undoCallback != null)
            {
                _undoCallback.Invoke(_eCtrl);
            }
        }
Пример #5
0
        void tst_but_gen_Click(object sender, RoutedEventArgs e)
        {
            var _graph = new GraphExample();

            /*var v1 = new DataVertex("Start");
             * _graph.AddVertex(v1);
             * var v2 = new DataVertex("End");
             * _graph.AddVertex(v2);
             * var e1 = new DataEdge(v1, v2);
             * _graph.AddEdge(e1);
             *
             * _graph.AddVertex(new DataVertex("Block 1"));
             * _graph.AddVertex(new DataVertex("Block 2"));
             */
            for (int i = 0; i < 10; i++)
            {
                _graph.AddVertex(new DataVertex(i.ToString() + "bldsddd\ndssdsds"));
            }

            _graph.AddEdge(new DataEdge(_graph.Vertices.First(), _graph.Vertices.Last()));
            _graph.AddEdge(new DataEdge(_graph.Vertices.Last(), _graph.Vertices.First()));
            _graph.AddEdge(new DataEdge(_graph.Vertices.First(), _graph.Vertices.Last()));

            // Resets external algorithms to null to start new fresh graph given that starting algo is a default algo
            tst_Area.DefaultEdgeRoutingAlgorithm = EdgeRoutingAlgorithmTypeEnum.None;
            //tst_Area.DefaultEdgeRoutingAlgorithmParams = tst_Area.AlgorithmFactory.CreateEdgeRoutingParameters(EdgeRoutingAlgorithmTypeEnum.SimpleER);
            //((SimpleERParameters)tst_Area.DefaultEdgeRoutingAlgorithmParams).BackStep = 10;

            tst_Area.DefaultOverlapRemovalAlgorithm = OverlapRemovalAlgorithmTypeEnum.FSA;

            tst_Area.GenerateGraph(_graph, true);

            /*var vlist = tst_Area.VertexList.Values.ToList();
             * vlist[0].SetPosition(new Point(100, 100)); vlist[0].MathShape = VertexShape.Circle;
             * vlist[1].SetPosition(new Point(600, 100));
             *
             * vlist[2].SetPosition(new Point(400, 100));
             * vlist[3].SetPosition(new Point(440, 150));
             */
            foreach (var item in tst_Area.VertexList)
            {
                item.Value.MathShape = VertexShape.Rectangle;
                DragBehaviour.SetIsDragEnabled(item.Value, true);
                DragBehaviour.SetUpdateEdgesOnMove(item.Value, true);
                HighlightBehaviour.SetIsHighlightEnabled(item.Value, true);
                HighlightBehaviour.SetHighlightControl(item.Value, GraphControlType.VertexAndEdge);
                HighlightBehaviour.SetHighlightEdges(item.Value, EdgesType.All);
            }

            foreach (var item in tst_Area.EdgesList.Values)
            {
                HighlightBehaviour.SetHighlightControl(item, GraphControlType.VertexAndEdge);
                HighlightBehaviour.SetHighlightEdges(item, EdgesType.All);
                HighlightBehaviour.SetHighlightControl(item, GraphControlType.VertexAndEdge);
            }
        }
Пример #6
0
 private void tg_highlightEnabled_Checked(object sender, RoutedEventArgs e)
 {
     foreach (var item in tg_Area.VertexList)
     {
         HighlightBehaviour.SetIsHighlightEnabled(item.Value, tg_highlightEnabled.IsChecked != null && tg_highlightEnabled.IsChecked.Value);
     }
     foreach (var item in tg_Area.EdgesList)
     {
         HighlightBehaviour.SetIsHighlightEnabled(item.Value, tg_highlightEnabled.IsChecked != null && tg_highlightEnabled.IsChecked.Value);
     }
 }
Пример #7
0
        private void ElementInBoxSelectedAction(object sender, EventArgs e)
        {
            StackPanel sp = (this.elementsListBox.SelectedItem as ListBoxItem)?.Content as StackPanel;

            if (sp == null)
            {
                return;
            }

            if (sp.Children.Count > 3)
            {
                var source = (sp.Children[2] as TextBlock).Text;
                var target = (sp.Children[4] as TextBlock).Text;
                for (int i = 0; i < this.dataGraph.Edges.Count(); i++)
                {
                    if (this.dataGraph.Edges.ToList()[i].Source.Name == source &&
                        this.dataGraph.Edges.ToList()[i].Target.Name == target)
                    {
                        var edge = this.dataGraph.Edges.ToList()[i];
                        foreach (KeyValuePair <DataEdge, EdgeControl> ed in this.g_Area.EdgesList)
                        {
                            if (ed.Key == edge)
                            {
                                HighlightBehaviour.SetIsHighlightEnabled(ed.Value, true);
                                break;
                            }
                        }

                        break;
                    }
                }
            }
            else
            {
                var name = (sp.Children[2] as TextBlock).Text;
                for (int i = 0; i < this.dataGraph.Vertices.Count(); i++)
                {
                    if (this.dataGraph.Vertices.ToList()[i].Name == name)
                    {
                        var vertex = this.dataGraph.Vertices.ToList()[i];
                        this.attributesView.DataContext = vertex;
                        foreach (KeyValuePair <DataVertex, VertexControl> ed in this.g_Area.VertexList)
                        {
                            if (ed.Key == vertex)
                            {
                                HighlightBehaviour.SetIsHighlightEnabled(ed.Value, true);
                            }
                        }

                        break;
                    }
                }
            }
        }
Пример #8
0
        private void tg_highlightEnabled_Checked(object sender, RoutedEventArgs e)
        {
            foreach (var item in tg_Area.VertexList.Values)
            {
                HighlightBehaviour.SetIsHighlightEnabled(item, (bool)tg_highlightEnabled.IsChecked);
            }
            foreach (var item in tg_Area.EdgesList.Values)
            {
                HighlightBehaviour.SetIsHighlightEnabled(item, (bool)tg_highlightEnabled.IsChecked);
            }

            tg_highlightStrategy.IsEnabled = tg_highlightType.IsEnabled = tg_highlightEdgeType.IsEnabled = (bool)tg_highlightEnabled.IsChecked;
        }
Пример #9
0
        // TODO: Selecting shall be done on actual IElement reference.
        // TODO: It seems to be non-working anyway.
        public void SelectEdge(string source, string target)
        {
            for (var i = 0; i < this.Graph.DataGraph.Edges.Count(); i++)
            {
                if (this.Graph.DataGraph.Edges.ToList()[i].Source.Name == source &&
                    this.Graph.DataGraph.Edges.ToList()[i].Target.Name == target)
                {
                    var edge = this.Graph.DataGraph.Edges.ToList()[i];
                    foreach (var ed in this.graphArea.EdgesList)
                    {
                        if (ed.Key == edge)
                        {
                            HighlightBehaviour.SetIsHighlightEnabled(ed.Value, true);
                            break;
                        }
                    }

                    break;
                }
            }
        }
Пример #10
0
        public void SelectNode(string name)
        {
            for (var i = 0; i < this.Graph.DataGraph.Vertices.Count(); i++)
            {
                if (this.Graph.DataGraph.Vertices.ToList()[i].Name == name)
                {
                    var vertex = this.Graph.DataGraph.Vertices.ToList()[i];
                    this.NodeSelected?.Invoke(this, new NodeSelectedEventArgs {
                        Node = vertex
                    });
                    foreach (var ed in this.graphArea.VertexList)
                    {
                        if (ed.Key == vertex)
                        {
                            HighlightBehaviour.SetIsHighlightEnabled(ed.Value, true);
                        }
                    }

                    break;
                }
            }
        }
        public void CreateEdge(int fromId, int toId)
        {
            if (View == null)
            {
                return;
            }

            var area   = View.Area;
            var source = area.VertexList.Where(pair => pair.Key.Id == fromId).Select(pair => pair.Key).FirstOrDefault();
            var target = area.VertexList.Where(pair => pair.Key.Id == toId).Select(pair => pair.Key).FirstOrDefault();

            if (source == null || target == null)
            {
                return;
            }

            Do(new CreateEdgeOperation(area, source, target,
                                       (e) =>
            {
                //on vertex created
                //_selectedVertices.Add(v.Id);

                HighlightBehaviour.SetIsHighlightEnabled(e, false);
                HighlightBehaviour.SetHighlighted(e, false);

                HighlightBehaviour.SetHighlighted(area.VertexList[source], false);
                HighlightBehaviour.SetHighlighted(area.VertexList[target], false);

                //UpdateIsInEditing(true);
            },
                                       (e) =>
            {
                //_selectedVertices.Remove(v.Id);
                //on vertex recreated
            }));
        }