Example #1
0
        private void OnInheritanceGraphCompleted(TypeRelationshipDocument document)
        {
            if (!document.Edges.Any())
            {
                MessageBox.Show("No nodes found");
                return;
            }

            var presentation = myPresentationCreationService.CreatePresentation(Path.GetDirectoryName(AssemblyToAnalyseLocation));

            var captionModule   = presentation.GetPropertySetFor <Caption>();
            var tooltipModule   = presentation.GetPropertySetFor <ToolTipContent>();
            var edgeStyleModule = presentation.GetPropertySetFor <EdgeStyle>();

            var builder = new RelaxedGraphBuilder();

            foreach (var edge in document.Edges)
            {
                var e = builder.TryAddEdge(edge.Item1, edge.Item2);
                edgeStyleModule.Add(new EdgeStyle(e.Id)
                {
                    Color = edge.Item3 == ReferenceType.DerivesFrom ? Brushes.Black : Brushes.Blue
                });
            }

            presentation.Graph = builder.Graph;

            foreach (var desc in document.Descriptors)
            {
                captionModule.Add(new Caption(desc.Id, desc.Name));
                tooltipModule.Add(new ToolTipContent(desc.Id, desc.FullName));
            }

            if (myAddToGraph && Model.Presentation != null && Model.Presentation.Graph != null)
            {
                presentation = Model.Presentation.UnionWith(presentation,
                                                            () => myPresentationCreationService.CreatePresentation(Path.GetDirectoryName(AssemblyToAnalyseLocation)));

                myAddToGraph = false;
            }

            if (document.FailedItems.Any())
            {
                foreach (var item in document.FailedItems)
                {
                    var sb = new StringBuilder();
                    sb.AppendLine("Loading failed");
                    sb.AppendFormat("Item: {0}", item.Item);
                    sb.AppendLine();
                    sb.AppendFormat("Reason: {0}", item.FailureReason);
                    myStatusMessageService.Publish(new StatusMessage(sb.ToString()));
                }
            }

            Model.Presentation = presentation;
        }
        private void TakeSiblingsOf( TypeRelationshipDocument document, HashSet<TypeDescriptor> visitedTypes, params TypeDescriptor[] roots )
        {
            if( !roots.Any() )
            {
                return;
            }

            var typesToFollow = new HashSet<TypeDescriptor>();

            foreach( var root in roots )
            {
                visitedTypes.Add( root );

                var node = myBuilder.Graph.FindNode( root.Id );

                document.AddNode( root );

                foreach( var edge in node.In )
                {
                    var source = myIdToTypeMap[ edge.Source.Id ];
                    document.AddEdge( source, root );
                    typesToFollow.Add( source );
                }

                // TODO: down only - otherwise we need a "MaxDepth"
                //foreach( var edge in node.Out )
                //{
                //    var target = myIdToTypeMap[ edge.Target.Id ];
                //    document.AddEdge( root, target );
                //    typesToFollow.Add( target );
                //}
            }

            typesToFollow.ExceptWith( visitedTypes );

            TakeSiblingsOf( document, visitedTypes, typesToFollow.ToArray() );
        }
        internal void WriteTo( string forTypeId, TypeRelationshipDocument document )
        {
            var visitedTypes = new HashSet<TypeDescriptor>();
            TakeSiblingsOf( document, visitedTypes, myIdToTypeMap[ forTypeId ] );

            foreach( var edge in document.Graph.Edges )
            {
                document.EdgeTypes.Add( edge.Id, myEdgeTypes[ edge.Id ] );
            }
        }
Example #4
0
        private void OnInheritanceGraphCompleted(TypeRelationshipDocument document)
        {
            try
            {
                if (document == null)
                {
                    return;
                }

                if (!document.Graph.Nodes.Any())
                {
                    MessageBox.Show("No nodes found");
                    return;
                }

                var presentation = PresentationCreationService.CreatePresentation(Path.GetDirectoryName(AssemblyToAnalyseLocation));

                var captionModule   = presentation.GetPropertySetFor <Caption>();
                var tooltipModule   = presentation.GetPropertySetFor <ToolTipContent>();
                var edgeStyleModule = presentation.GetPropertySetFor <EdgeStyle>();

                presentation.Graph = document.Graph;

                foreach (var desc in document.Descriptors)
                {
                    captionModule.Add(new Caption(desc.Id, desc.Name));
                    tooltipModule.Add(new ToolTipContent(desc.Id, desc.FullName));
                }

                foreach (var entry in document.EdgeTypes)
                {
                    edgeStyleModule.Add(new EdgeStyle(entry.Key)
                    {
                        Color = entry.Value == ReferenceType.DerivesFrom ? Brushes.Black : Brushes.Blue
                    });
                }

                if (myAddToGraph && Model.Presentation != null && Model.Presentation.Graph != null)
                {
                    presentation = Model.Presentation.UnionWith(presentation,
                                                                () => PresentationCreationService.CreatePresentation(Path.GetDirectoryName(AssemblyToAnalyseLocation)));

                    myAddToGraph = false;
                }

                if (document.FailedItems.Any())
                {
                    foreach (var item in document.FailedItems)
                    {
                        var sb = new StringBuilder();
                        sb.AppendLine("Loading failed");
                        sb.AppendFormat("Item: {0}", item.Item);
                        sb.AppendLine();
                        sb.AppendFormat("Reason: {0}", item.FailureReason);
                        StatusMessageService.Publish(new StatusMessage(sb.ToString()));
                    }
                }

                Model.Presentation = presentation;
            }
            finally
            {
                myCancelBackgroundProcessing = null;
                ProgressValue = 0;
                IsReady       = true;
            }
        }