示例#1
0
        public EdgeControl GetEdgeControl(TEdge edge)
        {
            EdgeControl ec;

            EdgeControls.TryGetValue(edge, out ec);
            return(ec);
        }
示例#2
0
 private void OnMutableGraphEdgeRemoved(TEdge edge)
 {
     if (EdgeControls.ContainsKey(edge))
     {
         _edgesRemoved.Enqueue(edge);
         DoNotificationLayout();
     }
 }
示例#3
0
        protected EdgeControl GetOrCreateEdgeControl(TEdge edge)
        {
            if (!EdgeControls.ContainsKey(edge))
            {
                CreateEdgeControl(edge);
            }

            return(EdgeControls[edge]);
        }
示例#4
0
        public void RemoveSemiHighlightFromEdge(TEdge edge)
        {
            _semiHighlightedEdges.Remove(edge);
            EdgeControl ec;

            if (EdgeControls.TryGetValue(edge, out ec))
            {
                GraphElementBehavior.SetIsSemiHighlighted(ec, false);
                GraphElementBehavior.SetSemiHighlightInfo(ec, null);
            }
        }
示例#5
0
        public void SemiHighlightEdge(TEdge edge, object semiHighlightInfo)
        {
            _semiHighlightedEdges[edge] = semiHighlightInfo;
            EdgeControl ec;

            if (EdgeControls.TryGetValue(edge, out ec))
            {
                GraphElementBehavior.SetIsSemiHighlighted(ec, true);
                GraphElementBehavior.SetSemiHighlightInfo(ec, semiHighlightInfo);
            }
        }
示例#6
0
        public void HighlightEdge(TEdge edge, object highlightInfo)
        {
            _highlightedEdges[edge] = highlightInfo;
            EdgeControl ec;

            if (EdgeControls.TryGetValue(edge, out ec))
            {
                GraphElementBehavior.SetIsHighlighted(ec, true);
                GraphElementBehavior.SetHighlightInfo(ec, highlightInfo);
            }
        }
示例#7
0
 protected void RemoveAllGraphElement()
 {
     foreach (var vertex in VertexControls.Keys.ToArray())
     {
         RemoveVertexControl(vertex);
     }
     foreach (var edge in EdgeControls.Keys.ToArray())
     {
         RemoveEdgeControl(edge);
     }
     VertexControls.Clear();
     EdgeControls.Clear();
 }
示例#8
0
 protected virtual void RemoveEdgeControl(TEdge edge)
 {
     RunDestructionTransition(EdgeControls[edge], false);
     EdgeControls.Remove(edge);
 }
示例#9
0
        /// <summary>
        /// If the graph has been changed, the elements will be regenerated.
        /// </summary>
        protected void RecreateGraphElements(bool tryKeepControls)
        {
            if (Graph == null)
            {
                RemoveAllGraphElement();
            }
            else
            {
                if (tryKeepControls && !IsCompoundMode)
                {
                    //remove the old graph elements
                    foreach (var kvp in EdgeControls.ToList())
                    {
                        bool remove = false;
                        try
                        {
                            remove = !Graph.ContainsEdge(kvp.Key.Source, kvp.Key.Target) || !Graph.ContainsEdge(kvp.Key);
                        }
                        catch
                        {
                        }

                        if (remove)
                        {
                            RemoveEdgeControl(kvp.Key);
                        }
                    }
                    foreach (var kvp in VertexControls.ToList())
                    {
                        if (!Graph.ContainsVertex(kvp.Key))
                        {
                            RemoveVertexControl(kvp.Key);
                        }
                    }
                }
                else
                {
                    RemoveAllGraphElement();
                }

                //
                // Presenters for vertices
                //
                foreach (var vertex in Graph.Vertices)
                {
                    if (!VertexControls.ContainsKey(vertex))
                    {
                        CreateVertexControl(vertex);
                    }
                }

                //
                // Presenters for edges
                //
                foreach (var edge in Graph.Edges)
                {
                    if (!EdgeControls.ContainsKey(edge))
                    {
                        CreateEdgeControl(edge);
                    }
                }

                //
                // subscribe to events of the Graph mutations
                //
                if (!IsCompoundMode)
                {
                    var mutableGraph = Graph as IMutableBidirectionalGraph <TVertex, TEdge>;
                    if (mutableGraph != null)
                    {
                        mutableGraph.VertexAdded   += OnMutableGraphVertexAdded;
                        mutableGraph.VertexRemoved += OnMutableGraphVertexRemoved;
                        mutableGraph.EdgeAdded     += OnMutableGraphEdgeAdded;
                        mutableGraph.EdgeRemoved   += OnMutableGraphEdgeRemoved;
                    }
                }
            }

            Sizes = null;
        }