SilverlightMappingToolBasic.UI.SuperGraph.View.SuperGraphControl.ModelChanged C# (CSharp) Method

ModelChanged() public method

public ModelChanged ( object sender, Relationship>.ModelChangedEventArgs e ) : void
sender object
e Relationship>.ModelChangedEventArgs
return void
        public void ModelChanged(object sender, ModelChangedEventArgs<Node, Relationship> e)
        {
            NodeControl focusedNode = null;
            var controller = sender as SuperGraphController;

            if (controller != null)
            {
                Context = controller.Context;
            }
            /// TODO: Need to refactor the following to be self-contained.
            foreach (KeyValuePair<Node, ModelOperationType> viewModelNodeOperation in e.Nodes)
            {
                if (viewModelNodeOperation.Value == ModelOperationType.New ||
                    viewModelNodeOperation.Value == ModelOperationType.Clone)
                {
                    var viewModelNode = viewModelNodeOperation.Key;
                    var nodeControl = NodeFactory.CreateNode(viewModelNode, this);
                    if (nodeControl != null && !NodeContainer.Children.Contains(nodeControl))
                    {
                        nodeControl.RenderTransform = MoveGraphTransform;
                        nodeControl.CutClicked += OnCutClicked;
                        nodeControl.CopyClicked += OnCopyClicked;
                        nodeControl.CloneClicked += OnCloneClicked;
                        nodeControl.NodeClicked += OnNodeClicked;
                        nodeControl.ChangeNodeTypeClicked += OnChangeNodeTypeClicked;
                        nodeControl.NodeSelected += OnNodeSelected;
                        if (viewModelNode.IsFocused)
                        {
                            focusedNode = nodeControl;
                        }

                        //nodeControl.NodeCornerControl.DataContext = viewModelNode;
                        NodeContainer.Children.Add(nodeControl);
                    }
                }
                else if (viewModelNodeOperation.Value == ModelOperationType.Deleted)
                {
                    var viewModelNode = viewModelNodeOperation.Key;
                    if (viewModelNode == null)
                    {
                        continue;
                    }

                    var removedNodeSet = NodeFactory.RemoveNode(viewModelNode);
                    if (removedNodeSet != null)
                    {
                        NodeContainer.Children.Remove(removedNodeSet.Control);
                        if (removedNodeSet.Control != null)
                        {
                            removedNodeSet.Control.Dispose();
                        }
                    }

                    var irrelevantArrowSets = ArrowFactory.RemoveArrows(viewModelNode);

                    foreach (ArrowControlFactorySet irrelevantArrowSet in irrelevantArrowSets)
                    {
                        NodeContainer.Children.Remove(irrelevantArrowSet.Control);
                    }
                }
            }

            var arrows = ArrowFactory.ReassessPendingRelationships();
            foreach (ArrowControl arrow in arrows)
            {
                NodeContainer.Children.Add(arrow);
            }

            /// TODO: Need to refactor the following to be self-contained.

            foreach (KeyValuePair<Relationship, ModelOperationType> viewModelRelationshipOperation in e.Relationships)
            {
                if (viewModelRelationshipOperation.Value == ModelOperationType.New)
                {
                    var viewModelRelationship = viewModelRelationshipOperation.Key;

                    var arrow = ArrowFactory.CreateArrow(viewModelRelationship);

                    if (arrow != null)
                    {
                        arrow.RenderTransform = MoveGraphTransform;
                        arrow.Ref = this;
                        if (!NodeContainer.Children.Contains(arrow))
                        {
                            NodeContainer.Children.Add(arrow);
                        }
                    }
                }
                else if (viewModelRelationshipOperation.Value == ModelOperationType.Deleted)
                {
                    var viewModelRelationship = viewModelRelationshipOperation.Key;

                    var arrowSet = ArrowFactory.RemoveArrow(viewModelRelationship);

                    if (arrowSet != null)
                    {
                        NodeContainer.Children.Remove(arrowSet.Control);
                        arrowSet.Control.UnlinkRelatedNodeControls();
                    }
                }
            }

            GC.Collect();
            NodeContainer.InvalidateArrange();
            if (focusedNode != null && focusedNode.Name.Trim().Length == 0)
            {
                focusedNode.SetEditFocus();
                focusedNode.GiveEditorFocus();
            }
        }
SuperGraphControl