├── .gitignore ├── Backlog.md ├── ChangeLog.md ├── LICENSE ├── Plainion.GraphViz.gc ├── Plainion.GraphViz.sln ├── README.md ├── build ├── Packaging.xaml └── Targets.fsx ├── docs ├── Acknowledgements.md ├── Basics.md ├── Bookmarks.md ├── Clusters.md ├── Development.md ├── Filters.md ├── HowTos │ ├── Create graphs with DOT language.md │ ├── Discover a call tree.md │ ├── Explore indirect assembly dependencies.md │ ├── Save my work.md │ ├── Trace paths between nodes.md │ └── Visualize code dependencies.md ├── Properties │ └── AssemblyInfo.cs ├── ReadMe.md ├── Screenshots │ ├── AddToCluster.png │ ├── BookmarksEditor.png │ ├── CallTree.Tree.png │ ├── CallTree.png │ ├── ClusterEditor.png │ ├── Deselect-all.png │ ├── FilterFromAlgos.png │ ├── FilterFromNodes.png │ ├── FilterWithPattern.png │ ├── FiltersEditor.png │ ├── Flow.png │ ├── Fold.png │ ├── Galaxies.png │ ├── Galaxy.1.png │ ├── Galaxy.2.png │ ├── GenerateGraphFromPackageSpec.png │ ├── Goto-target.png │ ├── Home.png │ ├── Overview.2.png │ ├── Overview.png │ ├── PackageDependencies.png │ ├── PackageSpecEditor.png │ ├── PathFinder.Indirect.png │ ├── PathFinder.Tree.png │ ├── PathFinder.Tree2.png │ ├── PathFinder.png │ ├── RayCasting.png │ ├── RayCasting.xml │ ├── Search.png │ ├── SubGraphs.png │ ├── TraceResult.png │ ├── TraceTargetSelection.png │ ├── TraceTo.png │ └── Trees.png ├── SupportedFormats.md ├── Viewer.Samples │ ├── Blade.GraphViz.Viewer.xaml │ ├── CallTree.Sample.json │ ├── Clusters.dot │ ├── Cycles.dot │ ├── Graph.1.dgml │ ├── Graph.1.dot │ ├── Graph.1.tips │ ├── Graph.2.plain │ ├── Packaging.xaml │ ├── PathFinder.Sample.json │ └── wikipedia.sample.graphml ├── _config.yml ├── _layouts │ └── default.html ├── docs.csproj └── docs.csproj.user ├── etc ├── DepCop2PackageSpec.fsx ├── DepCopRules.xml ├── NsDepCop2PackageSpec.fsx ├── config.nsdepcop ├── depsjson2dot.fsx └── npm-list-json2dot.js ├── extern ├── GraphViz │ ├── Pathplan.dll │ ├── acyclic.exe │ ├── ann.dll │ ├── bcomps.exe │ ├── brotlicommon.dll │ ├── brotlidec.dll │ ├── bz2.dll │ ├── cairo-2.dll │ ├── ccomps.exe │ ├── cdt.dll │ ├── cgraph++.dll │ ├── cgraph.dll │ ├── circo.exe │ ├── cluster.exe │ ├── concrt140.dll │ ├── config6 │ ├── diffimg.exe │ ├── dijkstra.exe │ ├── dot.exe │ ├── dot2gxl.exe │ ├── dot_builtins.exe │ ├── dot_sandbox │ ├── edgepaint.exe │ ├── fdp.exe │ ├── ffi-8.dll │ ├── fontconfig-1.dll │ ├── freetype.dll │ ├── fribidi-0.dll │ ├── gc.exe │ ├── gdtclft.dll │ ├── getopt.dll │ ├── gio-2.0-0.dll │ ├── glib-2.0-0.dll │ ├── gml2gv.exe │ ├── gmodule-2.0-0.dll │ ├── gobject-2.0-0.dll │ ├── graphml2gv.exe │ ├── gts.dll │ ├── gv2gml.exe │ ├── gv2gxl.exe │ ├── gvc++.dll │ ├── gvc.dll │ ├── gvcolor.exe │ ├── gvgen.exe │ ├── gvmap.exe │ ├── gvmap.sh │ ├── gvpack.exe │ ├── gvplugin_core.dll │ ├── gvplugin_dot_layout.dll │ ├── gvplugin_gd.dll │ ├── gvplugin_gdiplus.dll │ ├── gvplugin_kitty.dll │ ├── gvplugin_neato_layout.dll │ ├── gvplugin_pango.dll │ ├── gvplugin_vt.dll │ ├── gvplugin_webp.dll │ ├── gvpr.exe │ ├── gxl2dot.exe │ ├── gxl2gv.exe │ ├── harfbuzz.dll │ ├── iconv-2.dll │ ├── intl-8.dll │ ├── jpeg62.dll │ ├── libexpat.dll │ ├── libgd.dll │ ├── liblzma.dll │ ├── libpng16.dll │ ├── libsharpyuv.dll │ ├── libwebp.dll │ ├── mingle.exe │ ├── mm2gv.exe │ ├── msvcp140.dll │ ├── msvcp140_1.dll │ ├── msvcp140_2.dll │ ├── msvcp140_atomic_wait.dll │ ├── msvcp140_codecvt_ids.dll │ ├── neato.exe │ ├── nop.exe │ ├── osage.exe │ ├── pango-1.0-0.dll │ ├── pangocairo-1.0-0.dll │ ├── pangoft2-1.0-0.dll │ ├── pangowin32-1.0-0.dll │ ├── patchwork.exe │ ├── pcre2-8.dll │ ├── pixman-1-0.dll │ ├── prune.exe │ ├── sccmap.exe │ ├── sfdp.exe │ ├── tcl86t.dll │ ├── tcldot.dll │ ├── tcldot_builtin.dll │ ├── tclplan.dll │ ├── tiff.dll │ ├── tred.exe │ ├── twopi.exe │ ├── unflatten.exe │ ├── vcruntime140.dll │ ├── vcruntime140_1.dll │ ├── xdot.dll │ └── zlib1.dll └── REAMDE.md ├── src ├── Directory.Build.props ├── Plainion.GraphViz.Actors.Client │ ├── ActorClientBase.cs │ ├── ActorsBase.cs │ ├── DocumentSerializer.cs │ ├── Messages.cs │ ├── Plainion.GraphViz.Actors.Client.csproj │ ├── Properties │ │ ├── AssemblyDefs.cs │ │ └── AssemblyInfo.cs │ └── TupleStringConverter.cs ├── Plainion.GraphViz.Actors.Host │ ├── Plainion.GraphViz.Actors.Host.csproj │ ├── Program.cs │ └── Properties │ │ └── AssemblyInfo.cs ├── Plainion.GraphViz.CodeInspection.Tests │ ├── Inspect_CalledMethods_Tests.cs │ ├── Inspect_HardcodedStrings_Tests.cs │ ├── Inspect_TypeUsage_Tests.cs │ ├── MethodCallTests.cs │ ├── MethodTests.cs │ ├── Plainion.GraphViz.CodeInspection.Tests.csproj │ ├── Properties │ │ ├── AssemblyDefs.cs │ │ └── AssemblyInfo.cs │ └── ReferenceTests.cs ├── Plainion.GraphViz.CodeInspection │ ├── AssemblyDependencyAnalyzer.cs │ ├── AssemblyLoader │ │ ├── AbstractAssemblyResolver.cs │ │ ├── AssemblyLoaderFactory.cs │ │ ├── AssemblyResolutionResult.cs │ │ ├── CustomMetadataAssemblyResolver.cs │ │ ├── DotNetFrameworkVersion.cs │ │ ├── DotNetFrameworkVersionExtensions.cs │ │ ├── GacResolver.cs │ │ ├── IAssemblyLoader.cs │ │ ├── MscorlibResolutionResult.cs │ │ ├── MscorlibResolver.cs │ │ ├── NugetAssemblyResolutionResult.cs │ │ ├── NugetResolver.cs │ │ ├── ReflectionOnlyAssemblyLoader.cs │ │ ├── RelativePathResolver.cs │ │ ├── SemanticVersion.cs │ │ ├── VersionExtensions.cs │ │ └── VersionMatchingStrategy.cs │ ├── Contracts.cs │ ├── Inspector.cs │ ├── Method.cs │ ├── MethodCall.cs │ ├── MonoLoader.cs │ ├── Plainion.GraphViz.CodeInspection.csproj │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── R.cs │ ├── Reference.cs │ ├── ReferenceType.cs │ └── Wildcard.cs ├── Plainion.GraphViz.Modules.Analysis │ ├── AnalysisModule.cs │ ├── Bookmarks │ │ ├── BookmarksView.xaml │ │ ├── BookmarksView.xaml.cs │ │ ├── BookmarksViewModel.cs │ │ ├── OpenBookmarksView.xaml │ │ ├── OpenBookmarksView.xaml.cs │ │ └── OpenBookmarksViewModel.cs │ ├── Clusters │ │ ├── ClusterEditor.xaml │ │ ├── ClusterEditor.xaml.cs │ │ ├── ClusterEditorViewModel.cs │ │ ├── ExtendedTreeView.cs │ │ ├── NodeDropRequest.cs │ │ ├── NodeView.cs │ │ ├── NodeViewModel.cs │ │ ├── OpenClustersView.xaml │ │ ├── OpenClustersView.xaml.cs │ │ ├── OpenClustersViewModel.cs │ │ ├── PreviewViewModel.cs │ │ ├── TreeEditor.xaml │ │ ├── TreeEditor.xaml.cs │ │ ├── TreeEditorViewModel.cs │ │ └── VisualTreeUtils.cs │ ├── NodeMasks │ │ ├── NodeMasksEditor.xaml │ │ ├── NodeMasksEditor.xaml.cs │ │ ├── NodeMasksEditorModel.cs │ │ ├── NodeMasksView.xaml │ │ ├── NodeMasksView.xaml.cs │ │ ├── NodeMasksViewModel.cs │ │ ├── OpenNodeMasksView.xaml │ │ ├── OpenNodeMasksView.xaml.cs │ │ └── OpenNodeMasksViewModel.cs │ ├── Plainion.GraphViz.Modules.Analysis.csproj │ ├── Plainion.GraphViz.Modules.Analysis.csproj.user │ ├── Properties │ │ ├── AssemblyDefs.cs │ │ └── AssemblyInfo.cs │ ├── RegionNames.cs │ ├── Resources │ │ ├── Bookmarks.png │ │ ├── Clusters.png │ │ └── Filter.png │ └── Search │ │ ├── ExtendedAutoCompleteBox.cs │ │ ├── SearchBox.xaml │ │ ├── SearchBox.xaml.cs │ │ └── SearchBoxModel.cs ├── Plainion.GraphViz.Modules.CodeInspection.CallTree.Tests │ ├── Plainion.GraphViz.Modules.CodeInspection.CallTree.Tests.csproj │ ├── Properties │ │ ├── AssemblyDefs.cs │ │ └── AssemblyInfo.cs │ └── SmokeTest.cs ├── Plainion.GraphViz.Modules.CodeInspection.CallTree │ ├── Actors │ │ ├── CallTreeActor.cs │ │ ├── CallTreeClient.cs │ │ └── Messages.cs │ ├── Analyzers │ │ ├── CallTreeAnalyzer.cs │ │ └── InterfaceImplementationsMap.cs │ ├── CallTreeMenuItem.xaml │ ├── CallTreeMenuItem.xaml.cs │ ├── CallTreeMenuItemModel.cs │ ├── CallTreeModule.cs │ ├── CallTreeView.xaml │ ├── CallTreeView.xaml.cs │ ├── CallTreeViewModel.cs │ ├── Plainion.GraphViz.Modules.CodeInspection.CallTree.csproj │ ├── Properties │ │ ├── AssemblyDefs.cs │ │ └── AssemblyInfo.cs │ └── RegionNames.cs ├── Plainion.GraphViz.Modules.CodeInspection.Inheritance.Tests │ ├── Plainion.GraphViz.Modules.CodeInspection.Inheritance.Tests.csproj │ ├── Properties │ │ ├── AssemblyDefs.cs │ │ └── AssemblyInfo.cs │ └── SmokeTest.cs ├── Plainion.GraphViz.Modules.CodeInspection.Inheritance │ ├── Actors │ │ ├── AllTypesActor.cs │ │ ├── InheritanceActor.cs │ │ ├── InheritanceClient.cs │ │ └── Messages.cs │ ├── Analyzers │ │ ├── AssemblyUtils.cs │ │ ├── InheritanceAnalyzer.cs │ │ ├── TypeDescriptor.cs │ │ └── TypeRelationshipDocument.cs │ ├── InheritanceGraphBuilderView.xaml │ ├── InheritanceGraphBuilderView.xaml.cs │ ├── InheritanceGraphBuilderViewModel.cs │ ├── InheritanceGraphMenuItem.xaml │ ├── InheritanceGraphMenuItem.xaml.cs │ ├── InheritanceGraphMenuItemModel.cs │ ├── InheritanceModule.cs │ ├── Plainion.GraphViz.Modules.CodeInspection.Inheritance.csproj │ ├── Properties │ │ ├── AssemblyDefs.cs │ │ └── AssemblyInfo.cs │ └── RegionNames.cs ├── Plainion.GraphViz.Modules.CodeInspection.Packaging.Tests │ ├── Plainion.GraphViz.Modules.CodeInspection.Packaging.Tests.csproj │ ├── Properties │ │ ├── AssemblyDefs.cs │ │ └── AssemblyInfo.cs │ ├── SmokeTest.cs │ └── Spec │ │ ├── ClusterMatchingTests.cs │ │ └── SerializationTests.cs ├── Plainion.GraphViz.Modules.CodeInspection.Packaging │ ├── Actors │ │ ├── Messages.cs │ │ ├── PackageAnalysisActor.cs │ │ └── PackageAnalysisClient.cs │ ├── Analyzers │ │ ├── AnalysisDocument.cs │ │ ├── GraphUtils.cs │ │ ├── PackageAnalyzer.cs │ │ └── TypesLoader.cs │ ├── EnumToBoolExtension.cs │ ├── GraphToSpecSynchronizer.cs │ ├── PackagingGraphBuilderView.xaml │ ├── PackagingGraphBuilderView.xaml.cs │ ├── PackagingGraphBuilderViewModel.cs │ ├── PackagingGraphMenuItem.xaml │ ├── PackagingGraphMenuItem.xaml.cs │ ├── PackagingGraphMenuItemModel.cs │ ├── PackagingModule.cs │ ├── Plainion.GraphViz.Modules.CodeInspection.Packaging.csproj │ ├── Plainion.GraphViz.Modules.CodeInspection.Packaging.csproj.user │ ├── PrivateSettersContractResolver.cs │ ├── Properties │ │ ├── AssemblyDefs.cs │ │ └── AssemblyInfo.cs │ ├── RegionNames.cs │ ├── Resources │ │ └── SystemPackagingTemplate.xaml │ ├── Spec │ │ ├── Cluster.cs │ │ ├── Exclude.cs │ │ ├── Include.cs │ │ ├── Package.cs │ │ ├── PackageBase.cs │ │ ├── SpecUtils.cs │ │ ├── SystemPackaging.cs │ │ └── Wildcard.cs │ └── XmlEditor │ │ ├── AbstractCompletionData.cs │ │ ├── AttributeCompletionData.cs │ │ ├── ElementCompletionData.cs │ │ ├── PropertyElementCompletionData.cs │ │ ├── XmlEditor.xaml │ │ └── XmlEditor.xaml.cs ├── Plainion.GraphViz.Modules.CodeInspection.PathFinder.Tests │ ├── Plainion.GraphViz.Modules.CodeInspection.PathFinder.Tests.csproj │ ├── Properties │ │ ├── AssemblyDefs.cs │ │ └── AssemblyInfo.cs │ └── SmokeTest.cs ├── Plainion.GraphViz.Modules.CodeInspection.PathFinder │ ├── Actors │ │ ├── Messages.cs │ │ ├── PathFinderActor.cs │ │ └── PathFinderClient.cs │ ├── Analyzers │ │ └── PathFinderAnalyzer.cs │ ├── PathFinderMenuItem.xaml │ ├── PathFinderMenuItem.xaml.cs │ ├── PathFinderMenuItemModel.cs │ ├── PathFinderModule.cs │ ├── PathFinderView.xaml │ ├── PathFinderView.xaml.cs │ ├── PathFinderViewModel.cs │ ├── Plainion.GraphViz.Modules.CodeInspection.PathFinder.csproj │ ├── Properties │ │ ├── AssemblyDefs.cs │ │ └── AssemblyInfo.cs │ └── RegionNames.cs ├── Plainion.GraphViz.Modules.CodeInspection │ ├── Plainion.GraphViz.Modules.CodeInspection.csproj │ └── Properties │ │ ├── AssemblyDefs.cs │ │ └── AssemblyInfo.cs ├── Plainion.GraphViz.Modules.Documents.Tests │ ├── DotLangPureDocumentTests.cs │ ├── Plainion.GraphViz.Modules.Documents.Tests.csproj │ └── Properties │ │ ├── AssemblyDefs.cs │ │ └── AssemblyInfo.cs ├── Plainion.GraphViz.Modules.Documents │ ├── AbstractGraphDocument.cs │ ├── BasicDocumentProcessor.cs │ ├── DgmlDocument.cs │ ├── DocumentsModule.cs │ ├── DotLang │ │ ├── IMatcher.cs │ │ ├── Iterator.cs │ │ ├── Lexer.cs │ │ ├── MatchKeyword.cs │ │ ├── MatchNewLine.cs │ │ ├── MatchNumber.cs │ │ ├── MatchString.cs │ │ ├── MatchWhiteSpace.cs │ │ ├── MatchWord.cs │ │ ├── MatcherBase.cs │ │ ├── Parser.cs │ │ ├── Token.cs │ │ └── Tokenizer.cs │ ├── DotLangDocument.cs │ ├── DotPlainDocument.cs │ ├── GraphMLDocument.cs │ ├── GraphToDotLangSynchronizer.cs │ ├── ICaptionDocument.cs │ ├── IDocument.cs │ ├── IGraphDocument.cs │ ├── ILayoutDocument.cs │ ├── IStyleDocument.cs │ ├── OpenDocumentsView.xaml │ ├── OpenDocumentsView.xaml.cs │ ├── OpenDocumentsViewModel.cs │ ├── Plainion.GraphViz.Modules.Documents.csproj │ ├── Plainion.GraphViz.Modules.Documents.csproj.user │ ├── Properties │ │ ├── AssemblyDefs.cs │ │ └── AssemblyInfo.cs │ ├── Resources │ │ ├── Open.png │ │ └── Save.png │ ├── SaveDocumentsView.xaml │ ├── SaveDocumentsView.xaml.cs │ ├── SaveDocumentsViewModel.cs │ └── ToolTipsDocument.cs ├── Plainion.GraphViz.Modules.Markdown.Tests │ ├── AnalyzerTests.cs │ ├── ParserTests.cs │ ├── Plainion.GraphViz.Modules.Markdown.Tests.csproj │ ├── Properties │ │ ├── AssemblyDefs.cs │ │ └── AssemblyInfo.cs │ ├── ResolverTests.cs │ └── VerifierTests.cs ├── Plainion.GraphViz.Modules.Markdown │ ├── Analyzer │ │ ├── AnalysisDocument.cs │ │ ├── FailedFile.cs │ │ ├── LinkResolverExtension.cs │ │ ├── LinkVerifierExtensions.cs │ │ ├── MDFile.cs │ │ ├── Markdown │ │ │ ├── DocLink.cs │ │ │ ├── ImageLink.cs │ │ │ ├── Link.cs │ │ │ └── MDDocument.cs │ │ ├── MarkdownAnalyzer.cs │ │ ├── Parser │ │ │ ├── AbstractParser.cs │ │ │ ├── IMarkdownParser.cs │ │ │ └── MarkdigParser.cs │ │ ├── Resolver │ │ │ ├── ExternalLink.cs │ │ │ ├── ILinkResolver.cs │ │ │ ├── InternalLink.cs │ │ │ ├── LinkResolver.cs │ │ │ └── ResolvedLink.cs │ │ └── Verifier │ │ │ ├── ILinkVerifier.cs │ │ │ ├── InvalidLink.cs │ │ │ ├── LinkVerifier.cs │ │ │ ├── ValidLink.cs │ │ │ └── VerifiedLink.cs │ ├── ConfigurationView.xaml │ ├── ConfigurationView.xaml.cs │ ├── ConfigurationViewModel.cs │ ├── Contract.cs │ ├── MdFilesModule.cs │ ├── Plainion.GraphViz.Modules.Markdown.csproj │ ├── Properties │ │ ├── AssemblyDefs.cs │ │ └── AssemblyInfo.cs │ ├── RegionNames.cs │ ├── ToolsMenuItem.xaml │ ├── ToolsMenuItem.xaml.cs │ └── ToolsMenuItemModel.cs ├── Plainion.GraphViz.Modules.Metrics.Tests │ ├── CycleDetectionAlgorithmTests.cs │ ├── GraphMetricsTests.cs │ ├── Plainion.GraphViz.Modules.Metrics.Tests.csproj │ ├── Properties │ │ ├── AssemblyDefs.cs │ │ └── AssemblyInfo.cs │ ├── ShortestPathsFinderTests.cs │ ├── UndirectedGraphMetricsTests.cs │ ├── UndirectedGraphTests.cs │ └── UndirectedShortestPathFinderTests.cs ├── Plainion.GraphViz.Modules.Metrics │ ├── Algorithms │ │ ├── Cycle.cs │ │ ├── CycleFinder.cs │ │ ├── GraphItemMeasurement.cs │ │ ├── GraphMetrics.cs │ │ ├── Path.cs │ │ ├── ShortestPathFinder.cs │ │ ├── ShortestPaths.cs │ │ ├── ShortestUndirectedPaths.cs │ │ ├── UndirectedGraphMetrics.cs │ │ ├── UndirectedPath.cs │ │ └── UndirectedShortestPathFinder.cs │ ├── CycleVM.cs │ ├── GraphDensityVM.cs │ ├── GraphItemMeasurementVM.cs │ ├── HighlightViewModel.cs │ ├── MetricsComputationViewModel.cs │ ├── MetricsModule.cs │ ├── MetricsView.xaml │ ├── MetricsView.xaml.cs │ ├── MetricsViewModel.cs │ ├── NodeDegreesVM.cs │ ├── Plainion.GraphViz.Modules.Metrics.csproj │ ├── Plainion.GraphViz.Modules.Metrics.csproj.user │ ├── Properties │ │ ├── AssemblyDefs.cs │ │ └── AssemblyInfo.cs │ ├── RegionNames.cs │ ├── ToolsMenuItem.xaml │ ├── ToolsMenuItem.xaml.cs │ └── ToolsMenuItemModel.cs ├── Plainion.GraphViz.Modules.Obfuscate │ ├── IObfuscator.cs │ ├── ObfuscateModule.cs │ ├── Plainion.GraphViz.Modules.Obfuscate.csproj │ ├── Properties │ │ ├── AssemblyDefs.cs │ │ └── AssemblyInfo.cs │ ├── SimpleObfuscator.cs │ ├── StructureAwareObfuscator.cs │ ├── ToolsMenuItem.xaml │ ├── ToolsMenuItem.xaml.cs │ └── ToolsMenuItemModel.cs ├── Plainion.GraphViz.Modules.Properties │ ├── OpenPropertiesView.xaml │ ├── OpenPropertiesView.xaml.cs │ ├── OpenPropertiesViewModel.cs │ ├── Plainion.GraphViz.Modules.Properties.csproj │ ├── Properties │ │ ├── AssemblyDefs.cs │ │ └── AssemblyInfo.cs │ ├── PropertiesModule.cs │ ├── PropertiesView.xaml │ ├── PropertiesView.xaml.cs │ ├── PropertiesViewModel.cs │ ├── RegionNames.cs │ └── Resources │ │ └── Properties.png ├── Plainion.GraphViz.Modules.SDK │ ├── Analysis1 │ │ ├── AnalysisDocument.cs │ │ ├── Analyzer.cs │ │ ├── ConfigurationView.xaml │ │ ├── ConfigurationView.xaml.cs │ │ ├── ConfigurationViewModel.cs │ │ ├── ToolsMenuItem.xaml │ │ ├── ToolsMenuItem.xaml.cs │ │ └── ToolsMenuItemModel.cs │ ├── Plainion.GraphViz.Modules.SDK.csproj │ ├── Properties │ │ ├── AssemblyDefs.cs │ │ └── AssemblyInfo.cs │ ├── ReadMe.md │ ├── RegionNames.cs │ └── SdkModule.cs ├── Plainion.GraphViz.Modules.VsProjects │ ├── AnalysisDocument.cs │ ├── Analyzer.cs │ ├── ConfigurationView.xaml │ ├── ConfigurationView.xaml.cs │ ├── ConfigurationViewModel.cs │ ├── FailedProject.cs │ ├── Plainion.GraphViz.Modules.VsProjects.csproj │ ├── Properties │ │ ├── AssemblyDefs.cs │ │ └── AssemblyInfo.cs │ ├── RegionNames.cs │ ├── ToolsMenuItem.xaml │ ├── ToolsMenuItem.xaml.cs │ ├── ToolsMenuItemModel.cs │ ├── VsProject.cs │ └── VsProjectsModule.cs ├── Plainion.GraphViz.Tests │ ├── BinaryPresentationSerializationTests.cs │ ├── BookmarkBuilderTests.cs │ ├── DotPlainReaderTests.cs │ ├── Plainion.GraphViz.Tests.csproj │ └── Properties │ │ ├── AssemblyDefs.cs │ │ └── AssemblyInfo.cs ├── Plainion.GraphViz.Viewer.Abstractions │ ├── FailedItem.cs │ ├── NodeFocusedEvent.cs │ ├── Plainion.GraphViz.Viewer.Abstractions.csproj │ ├── Properties │ │ ├── AssemblyDefs.cs │ │ └── AssemblyInfo.cs │ ├── RegionNames.cs │ ├── Services │ │ ├── IDocumentLoader.cs │ │ ├── IPresentationCreationService.cs │ │ ├── IStatusMessageService.cs │ │ └── StatusMessage.cs │ └── ViewModel │ │ ├── DefaultDomainModel.cs │ │ ├── IDomainModel.cs │ │ ├── NodeWithCaption.cs │ │ └── ViewModelBase.cs ├── Plainion.GraphViz.Viewer │ ├── App.xaml │ ├── App.xaml.cs │ ├── CoreModule.cs │ ├── GraphIcon.ico │ ├── Plainion.GraphViz.Viewer.csproj │ ├── Plainion.GraphViz.Viewer.csproj.user │ ├── Plainion.GraphViz.Viewer.xaml │ ├── Properties │ │ ├── AssemblyDefs.cs │ │ └── AssemblyInfo.cs │ ├── RegionNames.cs │ ├── Resources │ │ ├── Export.png │ │ ├── GraphIcon.png │ │ ├── Print.png │ │ ├── Refresh.png │ │ ├── Settings.png │ │ └── StatusMessages.png │ ├── Services │ │ ├── Config.cs │ │ ├── ConfigurationService.cs │ │ ├── PresentationCreationService.cs │ │ ├── RegexConversion.cs │ │ └── StatusMessageService.cs │ ├── Shell.xaml │ ├── Shell.xaml.cs │ ├── ShellViewModel.cs │ ├── ViewModels │ │ ├── ClusterWithCaption.cs │ │ ├── GraphViewerModel.cs │ │ ├── LabelViewModel.cs │ │ ├── SettingsEditorModel.cs │ │ └── StatusMessagesViewModel.cs │ └── Views │ │ ├── GraphViewer.xaml │ │ ├── GraphViewer.xaml.cs │ │ ├── LayoutAlgorithmsConverter.cs │ │ ├── SettingsEditor.xaml │ │ ├── SettingsEditor.xaml.cs │ │ ├── StatusMessagesView.xaml │ │ └── StatusMessagesView.xaml.cs ├── Plainion.GraphViz │ ├── Dot │ │ ├── DotGraphHeader.cs │ │ ├── DotPlainParser.cs │ │ ├── DotPlainReader.cs │ │ ├── DotToDotPlainConverter.cs │ │ ├── DotToolLayoutEngine.cs │ │ ├── DotWriter.cs │ │ ├── LayoutAlgorithm.cs │ │ └── StyleConverter.cs │ ├── GraphPaginator.cs │ ├── GraphView.xaml │ ├── GraphView.xaml.cs │ ├── HelpLink.xaml │ ├── HelpLink.xaml.cs │ ├── IGraphViewExport.cs │ ├── IGraphViewNavigation.cs │ ├── ILayoutEngine.cs │ ├── Plainion.GraphViz.csproj │ ├── Presentation │ │ ├── AbstractModule.cs │ │ ├── AbstractModuleChangedObserver.cs │ │ ├── AbstractPropertySet.cs │ │ ├── AbstractStyle.cs │ │ ├── BinaryPresentationReader.cs │ │ ├── BinaryPresentationWriter.cs │ │ ├── Bookmark.cs │ │ ├── BookmarkBuilder.cs │ │ ├── Caption.cs │ │ ├── CaptionModule.cs │ │ ├── ClusterFoldingTransformation.cs │ │ ├── DynamicClusterTransformation.cs │ │ ├── EdgeLayout.cs │ │ ├── EdgeStyle.cs │ │ ├── GenericLabelConverter.cs │ │ ├── GenericModuleChangedJournal.cs │ │ ├── GenericModuleChangedObserver.cs │ │ ├── GraphAttribute.cs │ │ ├── GraphAttributesModule.cs │ │ ├── GraphLayoutModule.cs │ │ ├── GraphPicking.cs │ │ ├── GraphPresentation.cs │ │ ├── GraphPresentationExtensions.cs │ │ ├── ICaptionModule.cs │ │ ├── IGraphAttributesModule.cs │ │ ├── IGraphLayoutModule.cs │ │ ├── IGraphPresentation.cs │ │ ├── IGraphTransformation.cs │ │ ├── ILabelConversionStep.cs │ │ ├── ILabelConverter.cs │ │ ├── IModule.cs │ │ ├── IModuleChangedJournal.cs │ │ ├── IModuleChangedObserver.cs │ │ ├── IModuleRepository.cs │ │ ├── INodeMaskModule.cs │ │ ├── IPropertySetModule.cs │ │ ├── ITransformationModule.cs │ │ ├── NodeLayout.cs │ │ ├── NodeMaskModule.cs │ │ ├── NodeStyle.cs │ │ ├── PickingCache.cs │ │ ├── PropertySetComparer.cs │ │ ├── PropertySetModule.cs │ │ ├── Selection.cs │ │ ├── ToolTipContent.cs │ │ └── TransformationModule.cs │ ├── Profile.cs │ ├── Properties │ │ ├── AssemblyDefs.cs │ │ └── AssemblyInfo.cs │ ├── RubberbandAdorner.cs │ ├── Themes.cs │ ├── TipsPopup.xaml │ ├── TipsPopup.xaml.cs │ ├── ToolTipAdorner.cs │ ├── ToolTipController.cs │ └── Visuals │ │ ├── AbstractElementVisual.cs │ │ ├── ClusterVisual.cs │ │ ├── EdgeVisual.cs │ │ ├── GraphVisual.cs │ │ ├── IVisualPicking.cs │ │ └── NodeVisual.cs ├── Plainion.Graphs.Algorithms.Tests │ ├── ModelExtensions.cs │ ├── Plainion.Graphs.Algorithms.Tests.csproj │ ├── Properties │ │ └── AssemblyInfo.cs │ └── RemoveNodesNotConnectedOutsideClusterTests.cs ├── Plainion.Graphs.Algorithms │ ├── AbstractAlgorithm.cs │ ├── AddRemoveNodes.cs │ ├── AddRemoveTransitiveHull.cs │ ├── CreateGraphOfReachables.cs │ ├── GetNodesOutsideCluster.cs │ ├── ICaptionProvider.cs │ ├── NullCaptionProvider.cs │ ├── Plainion.Graphs.Algorithms.csproj │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── RemoveClusters.cs │ ├── RemoveNodesNotConnectedOutsideCluster.cs │ ├── RemoveNodesWithoutSiblings.cs │ ├── ShowCycles.cs │ ├── ShowPath.cs │ └── Traverse.cs └── Plainion.Graphs │ ├── Cluster.cs │ ├── Contracts.cs │ ├── Edge.cs │ ├── Graph.cs │ ├── IGraph.cs │ ├── IGraphItem.cs │ ├── Node.cs │ ├── NotifyPropertyChangedBase.cs │ ├── Plainion.Graphs.csproj │ ├── Projections │ ├── AbstractNodeMask.cs │ ├── ClusterFolding.cs │ ├── IClusterFolding.cs │ ├── IGraphPicking.cs │ ├── IGraphProjections.cs │ ├── INodeMask.cs │ ├── NodeMask.cs │ ├── NullGraphPicking.cs │ └── NullGraphProjections.cs │ ├── Properties │ └── AssemblyInfo.cs │ ├── RelaxedGraphBuilder.cs │ ├── SiblingsType.cs │ └── Undirected │ ├── Graph.cs │ ├── Node.cs │ └── RelaxedGraphBuilder.cs └── testData ├── DummyProject.Lib ├── AbstractBuilder.cs ├── DummyProject.Lib.csproj └── IBuilder.cs ├── DummyProject.sln └── DummyProject ├── Builder.cs ├── Component.cs └── DummyProject.csproj /.gitignore: -------------------------------------------------------------------------------- 1 | **/bin/** 2 | .vs/** 3 | **/obj/** 4 | /*.suo 5 | /packages/** 6 | /TestResult.xml 7 | /Plainion.GraphViz.gc.* 8 | /build/.fake 9 | *.suo 10 | /.ionide 11 | /.vscode 12 | -------------------------------------------------------------------------------- /Backlog.md: -------------------------------------------------------------------------------- 1 | 2 | # Tests for CodeInspection 3 | 4 | we need tests to load 5 | - .netfw 6 | - .netcore 7 | - .net6 8 | 9 | with following analyzers 10 | - packages 11 | - inheritance 12 | - calltree 13 | - pathfinder 14 | 15 | 16 | test setup: 17 | - 2 assemblies depending on each other 18 | - API usage as well as inheritance 19 | - require nuget dependency 20 | 21 | 22 | Once tests available consider using AssemblyLoader everywhere 23 | 24 | # Unsorted 25 | 26 | - ensure that actor host is closed on main app close 27 | - dispose of unity 28 | 29 | - change design to make it easier to add new algorithms to the UI 30 | - consider splitting "model + presentation + algo" and "visualization" 31 | 32 | - take over Rajeev's Inspector implementation 33 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # Plainion.GraphViz: Graph browser 3 | 4 | [Plainion.GraphViz](http://plainionist.github.io/Plainion.GraphViz/) is a browser for huge and complex graphs. 5 | Plainion.GraphViz provides techniques like filtering and folding of graphs and various algorithms to explore the 6 | parts of the graph you are interested in. 7 | 8 | Graphs can be impored from various formats, e.g.: 9 | 10 | - GraphML 11 | - DGML 12 | - DOT 13 | 14 | or generated some from source code, e.g: 15 | 16 | - inheritance hierarchies (.Net only) 17 | - class and package dependencies (.Net only) 18 | 19 | ![](docs/Screenshots/Overview.png) 20 | 21 | ![](docs/Screenshots/Galaxy.1.png) 22 | 23 | -------------------------------------------------------------------------------- /build/Packaging.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /docs/Acknowledgements.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Acknowledgements 3 | section: References 4 | navigation_weight: 500 5 | --- 6 | 7 | # Acknowledgements 8 | 9 | For rendering Plainion.GraphViz uses the great [graphviz](http://graphviz.org) library. 10 | 11 | The WPF UI around the graphviz library was initially inspired by [Dot2WPF - a WPF control for viewing Dot graphs](http://www.codeproject.com/Articles/18870/Dot2WPF-a-WPF-control-for-viewing-Dot-graphs) 12 | 13 | -------------------------------------------------------------------------------- /docs/Bookmarks.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Bookmarks 3 | navigation_weight: 40 4 | --- 5 | 6 | # Bookmarks 7 | 8 | Bookmarks can be used to jump between different views on the graph 9 | 10 | ![](Screenshots/BookmarksEditor.png) 11 | 12 | Bookmarks remember filters and cluster foldings. 13 | 14 | Use double-click to apply a bookmark. Use the context menu to delete a bookmark. -------------------------------------------------------------------------------- /docs/HowTos/Save my work.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Save my work 3 | navigation_weight: 130 4 | --- 5 | 6 | Sometimes quite some work on the graph is needed to finally be able to see what you were looking for. 7 | You may need to create several filters and you may need to apply quite some clustering. 8 | 9 | If you want to save your work for later just 10 | - Click on the "Save" button in the toolbar 11 | - Select "Plainion.GraphViz files (*.pgv)" 12 | - Click "Save" 13 | 14 | If you later want to resume your work you can 15 | - Either use the "Open" button from the toolbar and select again "Plainion.GraphViz files (*.pgv)" 16 | - Or just drop the saved ".pgv" file onto the canvas 17 | 18 | 19 | -------------------------------------------------------------------------------- /docs/HowTos/Trace paths between nodes.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Trace paths between nodes 3 | navigation_weight: 110 4 | --- 5 | 6 | # Trace paths between nodes 7 | 8 | You can visualize all paths between nodes by first selecting the target node with Ctrl-LMB click 9 | 10 | ![](../Screenshots/TraceTargetSelection.png) 11 | 12 | Then use the context menu entry "Trace" on the source node to start the tracing. 13 | 14 | ![](../Screenshots/TraceTo.png) 15 | 16 | As a trace result a filter will be created which only shows all paths from this source node to 17 | the selected target node. 18 | 19 | ![](../Screenshots/TraceResult.png) 20 | -------------------------------------------------------------------------------- /docs/Screenshots/AddToCluster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/docs/Screenshots/AddToCluster.png -------------------------------------------------------------------------------- /docs/Screenshots/BookmarksEditor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/docs/Screenshots/BookmarksEditor.png -------------------------------------------------------------------------------- /docs/Screenshots/CallTree.Tree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/docs/Screenshots/CallTree.Tree.png -------------------------------------------------------------------------------- /docs/Screenshots/CallTree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/docs/Screenshots/CallTree.png -------------------------------------------------------------------------------- /docs/Screenshots/ClusterEditor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/docs/Screenshots/ClusterEditor.png -------------------------------------------------------------------------------- /docs/Screenshots/Deselect-all.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/docs/Screenshots/Deselect-all.png -------------------------------------------------------------------------------- /docs/Screenshots/FilterFromAlgos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/docs/Screenshots/FilterFromAlgos.png -------------------------------------------------------------------------------- /docs/Screenshots/FilterFromNodes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/docs/Screenshots/FilterFromNodes.png -------------------------------------------------------------------------------- /docs/Screenshots/FilterWithPattern.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/docs/Screenshots/FilterWithPattern.png -------------------------------------------------------------------------------- /docs/Screenshots/FiltersEditor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/docs/Screenshots/FiltersEditor.png -------------------------------------------------------------------------------- /docs/Screenshots/Flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/docs/Screenshots/Flow.png -------------------------------------------------------------------------------- /docs/Screenshots/Fold.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/docs/Screenshots/Fold.png -------------------------------------------------------------------------------- /docs/Screenshots/Galaxies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/docs/Screenshots/Galaxies.png -------------------------------------------------------------------------------- /docs/Screenshots/Galaxy.1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/docs/Screenshots/Galaxy.1.png -------------------------------------------------------------------------------- /docs/Screenshots/Galaxy.2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/docs/Screenshots/Galaxy.2.png -------------------------------------------------------------------------------- /docs/Screenshots/GenerateGraphFromPackageSpec.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/docs/Screenshots/GenerateGraphFromPackageSpec.png -------------------------------------------------------------------------------- /docs/Screenshots/Goto-target.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/docs/Screenshots/Goto-target.png -------------------------------------------------------------------------------- /docs/Screenshots/Home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/docs/Screenshots/Home.png -------------------------------------------------------------------------------- /docs/Screenshots/Overview.2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/docs/Screenshots/Overview.2.png -------------------------------------------------------------------------------- /docs/Screenshots/Overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/docs/Screenshots/Overview.png -------------------------------------------------------------------------------- /docs/Screenshots/PackageDependencies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/docs/Screenshots/PackageDependencies.png -------------------------------------------------------------------------------- /docs/Screenshots/PackageSpecEditor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/docs/Screenshots/PackageSpecEditor.png -------------------------------------------------------------------------------- /docs/Screenshots/PathFinder.Indirect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/docs/Screenshots/PathFinder.Indirect.png -------------------------------------------------------------------------------- /docs/Screenshots/PathFinder.Tree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/docs/Screenshots/PathFinder.Tree.png -------------------------------------------------------------------------------- /docs/Screenshots/PathFinder.Tree2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/docs/Screenshots/PathFinder.Tree2.png -------------------------------------------------------------------------------- /docs/Screenshots/PathFinder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/docs/Screenshots/PathFinder.png -------------------------------------------------------------------------------- /docs/Screenshots/RayCasting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/docs/Screenshots/RayCasting.png -------------------------------------------------------------------------------- /docs/Screenshots/Search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/docs/Screenshots/Search.png -------------------------------------------------------------------------------- /docs/Screenshots/SubGraphs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/docs/Screenshots/SubGraphs.png -------------------------------------------------------------------------------- /docs/Screenshots/TraceResult.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/docs/Screenshots/TraceResult.png -------------------------------------------------------------------------------- /docs/Screenshots/TraceTargetSelection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/docs/Screenshots/TraceTargetSelection.png -------------------------------------------------------------------------------- /docs/Screenshots/TraceTo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/docs/Screenshots/TraceTo.png -------------------------------------------------------------------------------- /docs/Screenshots/Trees.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/docs/Screenshots/Trees.png -------------------------------------------------------------------------------- /docs/Viewer.Samples/Blade.GraphViz.Viewer.xaml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /docs/Viewer.Samples/CallTree.Sample.json: -------------------------------------------------------------------------------- 1 | { 2 | "binFolder": "C:/Workspace/Plainion/Plainion.GraphViz/bin/Debug", 3 | "sources": [ "Plainion.GraphViz.dll" ], 4 | "targets": [ 5 | { 6 | "assembly": "Plainion.Core.dll", 7 | "type": "Plainion.Objects", 8 | "method": "Clone" 9 | } 10 | ], 11 | "relevantAssemblies": [ "Plainion.*" ] 12 | } 13 | -------------------------------------------------------------------------------- /docs/Viewer.Samples/Cycles.dot: -------------------------------------------------------------------------------- 1 | digraph { 2 | ratio="compress" 3 | rankdir=BT 4 | ranksep="2.0 equally" 5 | 6 | A -> B 7 | B -> C 8 | C -> D 9 | D -> E 10 | E -> F 11 | F -> G 12 | 13 | D -> A 14 | G -> D 15 | 16 | B -> X 17 | X -> Y 18 | X -> Z 19 | 20 | F -> 42 21 | 42 -> 21 22 | } 23 | -------------------------------------------------------------------------------- /docs/Viewer.Samples/Graph.1.tips: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/docs/Viewer.Samples/Graph.1.tips -------------------------------------------------------------------------------- /docs/Viewer.Samples/PathFinder.Sample.json: -------------------------------------------------------------------------------- 1 | { 2 | "binFolder": "C:/Workspace/Plainion/Plainion.GraphViz/bin/Debug", 3 | "keepInnerAssemblyDependencies": false, 4 | "keepSourceAssemblyClusters": false, 5 | "keepTargetAssemblyClusters": false, 6 | "sources": [ "Plainion.GraphViz.Modules.CodeInspection.*.dll" ], 7 | "targets": [ "Plainion.Core.dll" ], 8 | "relevantAssemblies": [ "Plainion.*" ] 9 | } -------------------------------------------------------------------------------- /docs/Viewer.Samples/wikipedia.sample.graphml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /docs/_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-architect 2 | 3 | # Enter your Google Analytics web tracking code (e.g. UA-2110908-2) to activate tracking 4 | google_analytics: 5 | 6 | plugins: 7 | - jekyll-sitemap 8 | - jekyll-seo-tag 9 | 10 | 11 | -------------------------------------------------------------------------------- /docs/docs.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | netstandard2.0 5 | 4 6 | true 7 | 618,672,1030 8 | 1591,8032 9 | 9.0 10 | false 11 | false 12 | 13 | 14 | -------------------------------------------------------------------------------- /docs/docs.csproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | ProjectFiles 5 | false 6 | 7 | -------------------------------------------------------------------------------- /etc/DepCopRules.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /etc/config.nsdepcop: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /etc/npm-list-json2dot.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs') 2 | 3 | // 4 | // usage: 5 | // run "npm list --json > deps.json" in your web project home 6 | // run "node deps.json > deps.dot" 7 | // load "deps.dot" into Plainion.GraphViz 8 | // 9 | 10 | const file = process.argv[2] 11 | const json = JSON.parse(fs.readFileSync(file, 'utf8')) 12 | 13 | function visit(source, deps) { 14 | Object.getOwnPropertyNames(deps).forEach( key => { 15 | console.log(` "${source}" -> "${key}"`) 16 | 17 | if (deps[key].dependencies) { 18 | visit(key, deps[key].dependencies) 19 | } 20 | }) 21 | } 22 | 23 | 24 | console.log('digraph {') 25 | 26 | visit('PROJECT', json.dependencies) 27 | 28 | console.log('}') 29 | 30 | 31 | -------------------------------------------------------------------------------- /extern/GraphViz/Pathplan.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/Pathplan.dll -------------------------------------------------------------------------------- /extern/GraphViz/acyclic.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/acyclic.exe -------------------------------------------------------------------------------- /extern/GraphViz/ann.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/ann.dll -------------------------------------------------------------------------------- /extern/GraphViz/bcomps.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/bcomps.exe -------------------------------------------------------------------------------- /extern/GraphViz/brotlicommon.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/brotlicommon.dll -------------------------------------------------------------------------------- /extern/GraphViz/brotlidec.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/brotlidec.dll -------------------------------------------------------------------------------- /extern/GraphViz/bz2.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/bz2.dll -------------------------------------------------------------------------------- /extern/GraphViz/cairo-2.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/cairo-2.dll -------------------------------------------------------------------------------- /extern/GraphViz/ccomps.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/ccomps.exe -------------------------------------------------------------------------------- /extern/GraphViz/cdt.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/cdt.dll -------------------------------------------------------------------------------- /extern/GraphViz/cgraph++.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/cgraph++.dll -------------------------------------------------------------------------------- /extern/GraphViz/cgraph.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/cgraph.dll -------------------------------------------------------------------------------- /extern/GraphViz/circo.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/circo.exe -------------------------------------------------------------------------------- /extern/GraphViz/cluster.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/cluster.exe -------------------------------------------------------------------------------- /extern/GraphViz/concrt140.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/concrt140.dll -------------------------------------------------------------------------------- /extern/GraphViz/diffimg.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/diffimg.exe -------------------------------------------------------------------------------- /extern/GraphViz/dijkstra.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/dijkstra.exe -------------------------------------------------------------------------------- /extern/GraphViz/dot.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/dot.exe -------------------------------------------------------------------------------- /extern/GraphViz/dot2gxl.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/dot2gxl.exe -------------------------------------------------------------------------------- /extern/GraphViz/dot_builtins.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/dot_builtins.exe -------------------------------------------------------------------------------- /extern/GraphViz/edgepaint.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/edgepaint.exe -------------------------------------------------------------------------------- /extern/GraphViz/fdp.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/fdp.exe -------------------------------------------------------------------------------- /extern/GraphViz/ffi-8.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/ffi-8.dll -------------------------------------------------------------------------------- /extern/GraphViz/fontconfig-1.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/fontconfig-1.dll -------------------------------------------------------------------------------- /extern/GraphViz/freetype.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/freetype.dll -------------------------------------------------------------------------------- /extern/GraphViz/fribidi-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/fribidi-0.dll -------------------------------------------------------------------------------- /extern/GraphViz/gc.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/gc.exe -------------------------------------------------------------------------------- /extern/GraphViz/gdtclft.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/gdtclft.dll -------------------------------------------------------------------------------- /extern/GraphViz/getopt.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/getopt.dll -------------------------------------------------------------------------------- /extern/GraphViz/gio-2.0-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/gio-2.0-0.dll -------------------------------------------------------------------------------- /extern/GraphViz/glib-2.0-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/glib-2.0-0.dll -------------------------------------------------------------------------------- /extern/GraphViz/gml2gv.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/gml2gv.exe -------------------------------------------------------------------------------- /extern/GraphViz/gmodule-2.0-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/gmodule-2.0-0.dll -------------------------------------------------------------------------------- /extern/GraphViz/gobject-2.0-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/gobject-2.0-0.dll -------------------------------------------------------------------------------- /extern/GraphViz/graphml2gv.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/graphml2gv.exe -------------------------------------------------------------------------------- /extern/GraphViz/gts.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/gts.dll -------------------------------------------------------------------------------- /extern/GraphViz/gv2gml.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/gv2gml.exe -------------------------------------------------------------------------------- /extern/GraphViz/gv2gxl.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/gv2gxl.exe -------------------------------------------------------------------------------- /extern/GraphViz/gvc++.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/gvc++.dll -------------------------------------------------------------------------------- /extern/GraphViz/gvc.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/gvc.dll -------------------------------------------------------------------------------- /extern/GraphViz/gvcolor.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/gvcolor.exe -------------------------------------------------------------------------------- /extern/GraphViz/gvgen.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/gvgen.exe -------------------------------------------------------------------------------- /extern/GraphViz/gvmap.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/gvmap.exe -------------------------------------------------------------------------------- /extern/GraphViz/gvpack.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/gvpack.exe -------------------------------------------------------------------------------- /extern/GraphViz/gvplugin_core.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/gvplugin_core.dll -------------------------------------------------------------------------------- /extern/GraphViz/gvplugin_dot_layout.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/gvplugin_dot_layout.dll -------------------------------------------------------------------------------- /extern/GraphViz/gvplugin_gd.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/gvplugin_gd.dll -------------------------------------------------------------------------------- /extern/GraphViz/gvplugin_gdiplus.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/gvplugin_gdiplus.dll -------------------------------------------------------------------------------- /extern/GraphViz/gvplugin_kitty.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/gvplugin_kitty.dll -------------------------------------------------------------------------------- /extern/GraphViz/gvplugin_neato_layout.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/gvplugin_neato_layout.dll -------------------------------------------------------------------------------- /extern/GraphViz/gvplugin_pango.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/gvplugin_pango.dll -------------------------------------------------------------------------------- /extern/GraphViz/gvplugin_vt.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/gvplugin_vt.dll -------------------------------------------------------------------------------- /extern/GraphViz/gvplugin_webp.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/gvplugin_webp.dll -------------------------------------------------------------------------------- /extern/GraphViz/gvpr.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/gvpr.exe -------------------------------------------------------------------------------- /extern/GraphViz/gxl2dot.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/gxl2dot.exe -------------------------------------------------------------------------------- /extern/GraphViz/gxl2gv.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/gxl2gv.exe -------------------------------------------------------------------------------- /extern/GraphViz/harfbuzz.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/harfbuzz.dll -------------------------------------------------------------------------------- /extern/GraphViz/iconv-2.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/iconv-2.dll -------------------------------------------------------------------------------- /extern/GraphViz/intl-8.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/intl-8.dll -------------------------------------------------------------------------------- /extern/GraphViz/jpeg62.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/jpeg62.dll -------------------------------------------------------------------------------- /extern/GraphViz/libexpat.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/libexpat.dll -------------------------------------------------------------------------------- /extern/GraphViz/libgd.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/libgd.dll -------------------------------------------------------------------------------- /extern/GraphViz/liblzma.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/liblzma.dll -------------------------------------------------------------------------------- /extern/GraphViz/libpng16.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/libpng16.dll -------------------------------------------------------------------------------- /extern/GraphViz/libsharpyuv.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/libsharpyuv.dll -------------------------------------------------------------------------------- /extern/GraphViz/libwebp.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/libwebp.dll -------------------------------------------------------------------------------- /extern/GraphViz/mingle.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/mingle.exe -------------------------------------------------------------------------------- /extern/GraphViz/mm2gv.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/mm2gv.exe -------------------------------------------------------------------------------- /extern/GraphViz/msvcp140.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/msvcp140.dll -------------------------------------------------------------------------------- /extern/GraphViz/msvcp140_1.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/msvcp140_1.dll -------------------------------------------------------------------------------- /extern/GraphViz/msvcp140_2.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/msvcp140_2.dll -------------------------------------------------------------------------------- /extern/GraphViz/msvcp140_atomic_wait.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/msvcp140_atomic_wait.dll -------------------------------------------------------------------------------- /extern/GraphViz/msvcp140_codecvt_ids.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/msvcp140_codecvt_ids.dll -------------------------------------------------------------------------------- /extern/GraphViz/neato.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/neato.exe -------------------------------------------------------------------------------- /extern/GraphViz/nop.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/nop.exe -------------------------------------------------------------------------------- /extern/GraphViz/osage.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/osage.exe -------------------------------------------------------------------------------- /extern/GraphViz/pango-1.0-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/pango-1.0-0.dll -------------------------------------------------------------------------------- /extern/GraphViz/pangocairo-1.0-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/pangocairo-1.0-0.dll -------------------------------------------------------------------------------- /extern/GraphViz/pangoft2-1.0-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/pangoft2-1.0-0.dll -------------------------------------------------------------------------------- /extern/GraphViz/pangowin32-1.0-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/pangowin32-1.0-0.dll -------------------------------------------------------------------------------- /extern/GraphViz/patchwork.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/patchwork.exe -------------------------------------------------------------------------------- /extern/GraphViz/pcre2-8.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/pcre2-8.dll -------------------------------------------------------------------------------- /extern/GraphViz/pixman-1-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/pixman-1-0.dll -------------------------------------------------------------------------------- /extern/GraphViz/prune.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/prune.exe -------------------------------------------------------------------------------- /extern/GraphViz/sccmap.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/sccmap.exe -------------------------------------------------------------------------------- /extern/GraphViz/sfdp.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/sfdp.exe -------------------------------------------------------------------------------- /extern/GraphViz/tcl86t.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/tcl86t.dll -------------------------------------------------------------------------------- /extern/GraphViz/tcldot.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/tcldot.dll -------------------------------------------------------------------------------- /extern/GraphViz/tcldot_builtin.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/tcldot_builtin.dll -------------------------------------------------------------------------------- /extern/GraphViz/tclplan.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/tclplan.dll -------------------------------------------------------------------------------- /extern/GraphViz/tiff.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/tiff.dll -------------------------------------------------------------------------------- /extern/GraphViz/tred.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/tred.exe -------------------------------------------------------------------------------- /extern/GraphViz/twopi.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/twopi.exe -------------------------------------------------------------------------------- /extern/GraphViz/unflatten.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/unflatten.exe -------------------------------------------------------------------------------- /extern/GraphViz/vcruntime140.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/vcruntime140.dll -------------------------------------------------------------------------------- /extern/GraphViz/vcruntime140_1.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/vcruntime140_1.dll -------------------------------------------------------------------------------- /extern/GraphViz/xdot.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/xdot.dll -------------------------------------------------------------------------------- /extern/GraphViz/zlib1.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/extern/GraphViz/zlib1.dll -------------------------------------------------------------------------------- /extern/REAMDE.md: -------------------------------------------------------------------------------- 1 | 2 | ## GraphViz 3 | 4 | - https://graphviz.org/download/ 5 | - version 12.2.1 64bit 6 | 7 | -------------------------------------------------------------------------------- /src/Directory.Build.props: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | true 5 | 4 6 | 618,672,1030 7 | 1591,8032 8 | Latest 9 | false 10 | false 11 | ..\..\bin\$(Configuration)\ 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Actors.Client/Messages.cs: -------------------------------------------------------------------------------- 1 | namespace Plainion.GraphViz.Actors.Client; 2 | 3 | public class CancelMessage { } 4 | 5 | public class CanceledMessage { } 6 | 7 | public class FailedMessage 8 | { 9 | // https://github.com/akkadotnet/akka.net/issues/1409 10 | // -> exceptions are currently not serializable in raw version 11 | public string Error { get; set; } 12 | } 13 | 14 | public class FinishedMessage { } 15 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Actors.Client/Plainion.GraphViz.Actors.Client.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net8.0-windows 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Actors.Client/Properties/AssemblyDefs.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.Versioning; 2 | 3 | [assembly: SupportedOSPlatform("windows7.0")] 4 | 5 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Actors.Client/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | // Auto-Generated by FAKE; do not edit 2 | // 3 | using System.Reflection; 4 | 5 | [assembly: AssemblyTitle("Plainion.GraphViz.Actors.Client")] 6 | [assembly: AssemblyProduct("Plainion.GraphViz")] 7 | [assembly: AssemblyDescription("Plainion.GraphViz")] 8 | [assembly: AssemblyCopyright("Copyright @ 2025")] 9 | [assembly: AssemblyVersion("8.3")] 10 | [assembly: AssemblyFileVersion("8.3")] 11 | namespace System { 12 | internal static class AssemblyVersionInformation { 13 | internal const System.String AssemblyTitle = "Plainion.GraphViz.Actors.Client"; 14 | internal const System.String AssemblyProduct = "Plainion.GraphViz"; 15 | internal const System.String AssemblyDescription = "Plainion.GraphViz"; 16 | internal const System.String AssemblyCopyright = "Copyright @ 2025"; 17 | internal const System.String AssemblyVersion = "8.3"; 18 | internal const System.String AssemblyFileVersion = "8.3"; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Actors.Host/Plainion.GraphViz.Actors.Host.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net8.0-windows 5 | 6 | true 7 | Exe 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Actors.Host/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | // Auto-Generated by FAKE; do not edit 2 | // 3 | using System.Reflection; 4 | 5 | [assembly: AssemblyTitle("Plainion.GraphViz.Actors.Host")] 6 | [assembly: AssemblyProduct("Plainion.GraphViz")] 7 | [assembly: AssemblyDescription("Plainion.GraphViz")] 8 | [assembly: AssemblyCopyright("Copyright @ 2025")] 9 | [assembly: AssemblyVersion("8.3")] 10 | [assembly: AssemblyFileVersion("8.3")] 11 | namespace System { 12 | internal static class AssemblyVersionInformation { 13 | internal const System.String AssemblyTitle = "Plainion.GraphViz.Actors.Host"; 14 | internal const System.String AssemblyProduct = "Plainion.GraphViz"; 15 | internal const System.String AssemblyDescription = "Plainion.GraphViz"; 16 | internal const System.String AssemblyCopyright = "Copyright @ 2025"; 17 | internal const System.String AssemblyVersion = "8.3"; 18 | internal const System.String AssemblyFileVersion = "8.3"; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.CodeInspection.Tests/Plainion.GraphViz.CodeInspection.Tests.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net8.0-windows 5 | false 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.CodeInspection.Tests/Properties/AssemblyDefs.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.Versioning; 2 | 3 | [assembly: SupportedOSPlatform("windows7.0")] 4 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.CodeInspection/AssemblyLoader/AssemblyLoaderFactory.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Extensions.Logging; 2 | 3 | namespace Plainion.GraphViz.CodeInspection.AssemblyLoader; 4 | 5 | public enum DotNetRuntime 6 | { 7 | Core, 8 | Framework 9 | } 10 | 11 | public class AssemblyLoaderFactory 12 | { 13 | public static IAssemblyLoader Create(ILoggerFactory loggerFactory, DotNetRuntime runtime) => 14 | new ReflectionOnlyAssemblyLoader(loggerFactory, runtime); 15 | } -------------------------------------------------------------------------------- /src/Plainion.GraphViz.CodeInspection/AssemblyLoader/AssemblyResolutionResult.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.IO; 4 | using System.Reflection; 5 | 6 | namespace Plainion.GraphViz.CodeInspection.AssemblyLoader; 7 | 8 | [DebuggerDisplay("{AssemblyName}")] 9 | class AssemblyResolutionResult 10 | { 11 | public AssemblyResolutionResult(FileInfo file) 12 | { 13 | Contract.RequiresNotNull(file, nameof(file)); 14 | 15 | File = file; 16 | AssemblyName = AssemblyName.GetAssemblyName(file.FullName); 17 | } 18 | 19 | public FileInfo File { get; } 20 | public AssemblyName AssemblyName { get; private set; } 21 | } 22 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.CodeInspection/AssemblyLoader/IAssemblyLoader.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Reflection; 3 | 4 | namespace Plainion.GraphViz.CodeInspection.AssemblyLoader; 5 | 6 | public interface IAssemblyLoader : IDisposable 7 | { 8 | Assembly TryLoadAssembly(string path); 9 | Assembly TryLoadDependency(Assembly requestingAssembly, AssemblyName dependency); 10 | } -------------------------------------------------------------------------------- /src/Plainion.GraphViz.CodeInspection/AssemblyLoader/MscorlibResolutionResult.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.IO; 3 | using System.Linq; 4 | 5 | namespace Plainion.GraphViz.CodeInspection.AssemblyLoader; 6 | 7 | class MscorlibResolutionResult : AssemblyResolutionResult 8 | { 9 | public MscorlibResolutionResult(FileInfo file, params string[] referenceAssemblies) 10 | : base(file) 11 | { 12 | ReferenceAssemblies = referenceAssemblies 13 | .Select(x => new DirectoryInfo(x)) 14 | .ToList(); 15 | } 16 | 17 | public IReadOnlyCollection ReferenceAssemblies { get; } 18 | } -------------------------------------------------------------------------------- /src/Plainion.GraphViz.CodeInspection/AssemblyLoader/VersionExtensions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Plainion.GraphViz.CodeInspection.AssemblyLoader; 4 | 5 | static class VersionExtensions 6 | { 7 | internal static bool Matches(this Version lhs, Version rhs, VersionMatchingStrategy strategy) => 8 | lhs != null && rhs != null && strategy switch 9 | { 10 | VersionMatchingStrategy.Exact => lhs.Major == rhs.Major && lhs.Minor == rhs.Minor && lhs.Build == rhs.Build, 11 | VersionMatchingStrategy.SemanticVersion => lhs.Major == rhs.Major && lhs.Minor <= rhs.Minor, 12 | _ => false, 13 | }; 14 | } 15 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.CodeInspection/AssemblyLoader/VersionMatchingStrategy.cs: -------------------------------------------------------------------------------- 1 | namespace Plainion.GraphViz.CodeInspection.AssemblyLoader; 2 | 3 | enum VersionMatchingStrategy 4 | { 5 | Exact = 0, 6 | SemanticVersion = 1, 7 | } 8 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.CodeInspection/Plainion.GraphViz.CodeInspection.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net8.0 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.CodeInspection/R.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Reflection; 3 | 4 | namespace Plainion.GraphViz.CodeInspection; 5 | 6 | public class R 7 | { 8 | public static string AssemblyName(Assembly asm) 9 | { 10 | return asm.GetName().Name; 11 | } 12 | 13 | public static string TypeFullName(Type t) 14 | { 15 | return t.FullName ?? $"{t.Namespace}.{t.Name}"; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.CodeInspection/ReferenceType.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace Plainion.GraphViz.CodeInspection 3 | { 4 | public enum ReferenceType 5 | { 6 | Undefined, 7 | DerivesFrom, 8 | Implements, 9 | Calls 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Analysis/Bookmarks/BookmarksView.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Controls; 2 | 3 | namespace Plainion.GraphViz.Modules.Analysis.Bookmarks 4 | { 5 | partial class BookmarksView : UserControl 6 | { 7 | public BookmarksView(BookmarksViewModel model ) 8 | { 9 | InitializeComponent(); 10 | 11 | DataContext = model; 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Analysis/Bookmarks/OpenBookmarksView.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Controls; 2 | using Prism.Navigation.Regions; 3 | 4 | namespace Plainion.GraphViz.Modules.Analysis.Bookmarks; 5 | 6 | [ViewSortHint(Viewer.Abstractions.RegionNames.SecondaryToolBox + ".0040")] 7 | partial class OpenBookmarksView : UserControl 8 | { 9 | public OpenBookmarksView(OpenBookmarksViewModel model) 10 | { 11 | InitializeComponent(); 12 | 13 | DataContext = model; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Analysis/Clusters/ClusterEditor.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Controls; 2 | 3 | namespace Plainion.GraphViz.Modules.Analysis.Clusters 4 | { 5 | partial class ClusterEditor : UserControl 6 | { 7 | public ClusterEditor(ClusterEditorViewModel model) 8 | { 9 | InitializeComponent(); 10 | 11 | DataContext = model; 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Analysis/Clusters/NodeDropRequest.cs: -------------------------------------------------------------------------------- 1 | namespace Plainion.GraphViz.Modules.Analysis.Clusters; 2 | 3 | class NodeDropRequest 4 | { 5 | public NodeDropRequest(NodeViewModel droppedNode, NodeViewModel dropTarget) 6 | { 7 | System.Contract.RequiresNotNull(droppedNode); 8 | System.Contract.RequiresNotNull(dropTarget); 9 | 10 | DroppedNode = droppedNode; 11 | DropTarget = dropTarget; 12 | } 13 | 14 | public NodeViewModel DroppedNode { get; } 15 | public NodeViewModel DropTarget { get; } 16 | } 17 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Analysis/Clusters/OpenClustersView.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Controls; 2 | using Prism.Navigation.Regions; 3 | 4 | namespace Plainion.GraphViz.Modules.Analysis.Clusters; 5 | 6 | [ViewSortHint(Viewer.Abstractions.RegionNames.SecondaryToolBox + ".0030")] 7 | partial class OpenClustersView : UserControl 8 | { 9 | public OpenClustersView(OpenClustersViewModel model) 10 | { 11 | InitializeComponent(); 12 | 13 | DataContext = model; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Analysis/Clusters/TreeEditor.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Controls; 2 | 3 | namespace Plainion.GraphViz.Modules.Analysis.Clusters; 4 | 5 | partial class TreeEditor : UserControl 6 | { 7 | public TreeEditor() 8 | { 9 | InitializeComponent(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Analysis/Clusters/VisualTreeUtils.cs: -------------------------------------------------------------------------------- 1 | using System.Windows; 2 | using System.Windows.Media; 3 | 4 | namespace Plainion.GraphViz.Modules.Analysis.Clusters; 5 | 6 | static class VisualTreeUtils 7 | { 8 | public static T FindParentOfType(this DependencyObject self) where T : DependencyObject 9 | { 10 | while (self != null && self is not T) 11 | { 12 | self = VisualTreeHelper.GetParent(self); 13 | } 14 | return (T)self; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Analysis/NodeMasks/NodeMasksEditor.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Controls; 2 | 3 | namespace Plainion.GraphViz.Modules.Analysis.Filters 4 | { 5 | partial class NodeMasksEditor : UserControl 6 | { 7 | public NodeMasksEditor( NodeMasksEditorModel model ) 8 | { 9 | InitializeComponent(); 10 | 11 | DataContext = model; 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Analysis/NodeMasks/NodeMasksView.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Controls; 2 | using Plainion.GraphViz.Viewer.Abstractions.ViewModel; 3 | 4 | namespace Plainion.GraphViz.Modules.Analysis.Filters 5 | { 6 | partial class NodeMasksView : UserControl 7 | { 8 | // designer only 9 | public NodeMasksView() 10 | : this(new NodeMasksViewModel(new DefaultDomainModel())) 11 | { 12 | } 13 | 14 | public NodeMasksView(NodeMasksViewModel model) 15 | { 16 | InitializeComponent(); 17 | 18 | DataContext = model; 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Analysis/NodeMasks/OpenNodeMasksView.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Controls; 2 | using Prism.Navigation.Regions; 3 | 4 | namespace Plainion.GraphViz.Modules.Analysis.NodeMasks; 5 | 6 | [ViewSortHint(Viewer.Abstractions.RegionNames.SecondaryToolBox + ".0020")] 7 | partial class OpenNodeMasksView : UserControl 8 | { 9 | public OpenNodeMasksView(OpenNodeMasksViewModel model) 10 | { 11 | InitializeComponent(); 12 | 13 | DataContext = model; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Analysis/Plainion.GraphViz.Modules.Analysis.csproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | Designer 7 | 8 | 9 | Designer 10 | 11 | 12 | Designer 13 | 14 | 15 | Designer 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Analysis/Properties/AssemblyDefs.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.Versioning; 2 | 3 | [assembly: SupportedOSPlatform("windows7.0")] 4 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Analysis/RegionNames.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace Plainion.GraphViz.Modules.Analysis; 3 | 4 | public static class RegionNames 5 | { 6 | public static readonly string NodeMasksView = "Region.Analysis.NodeMasks.View"; 7 | public static readonly string NodeMasksEditor = "Region.Analysis.NodeMasks.Editor"; 8 | public static readonly string ClusterEditor = "Region.Analysis.ClusterEditor"; 9 | public static readonly string Bookmarks = "Region.Analysis.Bookmarks"; 10 | } 11 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Analysis/Resources/Bookmarks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/src/Plainion.GraphViz.Modules.Analysis/Resources/Bookmarks.png -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Analysis/Resources/Clusters.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/src/Plainion.GraphViz.Modules.Analysis/Resources/Clusters.png -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Analysis/Resources/Filter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/src/Plainion.GraphViz.Modules.Analysis/Resources/Filter.png -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Analysis/Search/SearchBox.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Controls; 2 | using Prism.Navigation.Regions; 3 | 4 | namespace Plainion.GraphViz.Modules.Analysis.Search 5 | { 6 | [ViewSortHint(Viewer.Abstractions.RegionNames.SecondaryToolBox + ".0010")] 7 | partial class SearchBox : UserControl 8 | { 9 | public SearchBox( SearchBoxModel model ) 10 | { 11 | InitializeComponent(); 12 | 13 | DataContext = model; 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.CallTree.Tests/Plainion.GraphViz.Modules.CodeInspection.CallTree.Tests.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net8.0-windows 5 | false 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.CallTree.Tests/Properties/AssemblyDefs.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.Versioning; 2 | 3 | [assembly: SupportedOSPlatform("windows7.0")] 4 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.CallTree/Actors/CallTreeClient.cs: -------------------------------------------------------------------------------- 1 | using System.Threading; 2 | using System.Threading.Tasks; 3 | using Plainion.GraphViz.Actors.Client; 4 | 5 | namespace Plainion.GraphViz.Modules.CodeInspection.CallTree.Actors 6 | { 7 | class CallTreeClient : ActorClientBase 8 | { 9 | public async Task AnalyzeAsync(CallTreeRequest request, CancellationToken cancellationToken = default) 10 | { 11 | var response = await this.ProcessAsync(typeof(CallTreeActor), request, cancellationToken); 12 | 13 | if (response is CallTreeResponse m) 14 | { 15 | return m.DotFile; 16 | } 17 | else 18 | { 19 | return null; 20 | } 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.CallTree/Actors/Messages.cs: -------------------------------------------------------------------------------- 1 | using Plainion.GraphViz.Actors.Client; 2 | 3 | namespace Plainion.GraphViz.Modules.CodeInspection.CallTree.Actors 4 | { 5 | class CallTreeRequest 6 | { 7 | public string ConfigFile { get; set; } 8 | public bool AssemblyReferencesOnly { get; set; } 9 | public bool StrictCallsOnly { get; set; } 10 | } 11 | 12 | class CallTreeResponse : FinishedMessage 13 | { 14 | public string DotFile { get; set; } 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.CallTree/CallTreeMenuItem.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Controls; 2 | using Prism.Navigation.Regions; 3 | 4 | namespace Plainion.GraphViz.Modules.CodeInspection.CallTree 5 | { 6 | [ViewSortHint(Viewer.Abstractions.RegionNames.AddIns + ".0010")] 7 | partial class CallTreeMenuItem : MenuItem 8 | { 9 | public CallTreeMenuItem(CallTreeMenuItemModel model) 10 | { 11 | InitializeComponent(); 12 | 13 | DataContext = model; 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.CallTree/CallTreeMenuItemModel.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Input; 2 | using Plainion.Prism.Interactivity.InteractionRequest; 3 | using Prism.Commands; 4 | using Prism.Mvvm; 5 | 6 | namespace Plainion.GraphViz.Modules.CodeInspection.CallTree 7 | { 8 | class CallTreeMenuItemModel : BindableBase 9 | { 10 | public CallTreeMenuItemModel() 11 | { 12 | OpenCallTreeCommand = new DelegateCommand(OnOpenCallTree); 13 | CallTreeRequest = new InteractionRequest(); 14 | } 15 | 16 | private void OnOpenCallTree() 17 | { 18 | var notification = new Notification(); 19 | notification.Title = "CallTree"; 20 | 21 | CallTreeRequest.Raise(notification, c => { }); 22 | } 23 | 24 | public ICommand OpenCallTreeCommand { get; private set; } 25 | 26 | public InteractionRequest CallTreeRequest { get; private set; } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.CallTree/CallTreeView.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Controls; 2 | 3 | namespace Plainion.GraphViz.Modules.CodeInspection.CallTree 4 | { 5 | partial class CallTreeView : UserControl 6 | { 7 | public CallTreeView( CallTreeViewModel model ) 8 | { 9 | InitializeComponent(); 10 | 11 | DataContext = model; 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.CallTree/Properties/AssemblyDefs.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | using System.Runtime.Versioning; 3 | 4 | [assembly: SupportedOSPlatform("windows7.0")] 5 | 6 | [assembly: InternalsVisibleTo("Plainion.GraphViz.Modules.CodeInspection.CallTree.Tests")] 7 | 8 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.CallTree/RegionNames.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace Plainion.GraphViz.Modules.CodeInspection 3 | { 4 | static class RegionNames 5 | { 6 | public static readonly string CallTree = "Region.CallTree"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.Inheritance.Tests/Plainion.GraphViz.Modules.CodeInspection.Inheritance.Tests.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net8.0-windows 5 | false 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.Inheritance.Tests/Properties/AssemblyDefs.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.Versioning; 2 | 3 | [assembly: SupportedOSPlatform("windows7.0")] 4 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.Inheritance/Actors/Messages.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using Plainion.GraphViz.Actors.Client; 3 | using Plainion.GraphViz.Modules.CodeInspection.Inheritance.Analyzers; 4 | 5 | namespace Plainion.GraphViz.Modules.CodeInspection.Inheritance.Actors 6 | { 7 | class GetAllTypesMessage 8 | { 9 | public string AssemblyLocation { get; set; } 10 | } 11 | 12 | class AllTypesMessage : FinishedMessage 13 | { 14 | public IEnumerable Types { get; set; } 15 | } 16 | 17 | class GetInheritanceGraphMessage 18 | { 19 | public bool IgnoreDotNetTypes { get; set; } 20 | public string AssemblyLocation { get; set; } 21 | public TypeDescriptor TypeToAnalyze { get; set; } 22 | } 23 | 24 | class InheritanceGraphMessage : FinishedMessage 25 | { 26 | public byte[] Document { get; set; } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.Inheritance/InheritanceGraphBuilderView.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Controls; 2 | 3 | namespace Plainion.GraphViz.Modules.CodeInspection.Inheritance 4 | { 5 | partial class InheritanceGraphBuilderView : UserControl 6 | { 7 | public InheritanceGraphBuilderView( InheritanceGraphBuilderViewModel model ) 8 | { 9 | InitializeComponent(); 10 | 11 | DataContext = model; 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.Inheritance/InheritanceGraphMenuItem.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Controls; 2 | using Prism.Navigation.Regions; 3 | 4 | namespace Plainion.GraphViz.Modules.CodeInspection.Inheritance 5 | { 6 | [ViewSortHint(Viewer.Abstractions.RegionNames.AddIns + ".0020")] 7 | partial class InheritanceGraphMenuItem : MenuItem 8 | { 9 | public InheritanceGraphMenuItem( InheritanceGraphMenuItemModel model ) 10 | { 11 | InitializeComponent(); 12 | 13 | DataContext = model; 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.Inheritance/Properties/AssemblyDefs.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | using System.Runtime.Versioning; 3 | 4 | [assembly: SupportedOSPlatform("windows7.0")] 5 | 6 | [assembly: InternalsVisibleTo("Plainion.GraphViz.Modules.CodeInspection.Inheritance.Tests")] 7 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.Inheritance/RegionNames.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace Plainion.GraphViz.Modules.CodeInspection 3 | { 4 | static class RegionNames 5 | { 6 | public static readonly string InheritanceGraphBuilder = "Region.InheritanceGraphBuilder"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.Packaging.Tests/Plainion.GraphViz.Modules.CodeInspection.Packaging.Tests.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net8.0-windows 5 | false 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.Packaging.Tests/Properties/AssemblyDefs.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.Versioning; 2 | 3 | [assembly: SupportedOSPlatform("windows7.0")] 4 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.Packaging/Actors/Messages.cs: -------------------------------------------------------------------------------- 1 | using Plainion.GraphViz.Actors.Client; 2 | 3 | namespace Plainion.GraphViz.Modules.CodeInspection.Packaging.Actors 4 | { 5 | class AnalysisRequest 6 | { 7 | public string Spec { get; set; } 8 | 9 | public string[] PackagesToAnalyze { get; set; } 10 | } 11 | 12 | class AnalysisMessage : AnalysisRequest 13 | { 14 | public string OutputFile { get; set; } 15 | } 16 | 17 | class AnalysisResponse : FinishedMessage 18 | { 19 | public string File { get; set; } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.Packaging/Analyzers/GraphUtils.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Plainion.GraphViz.CodeInspection; 3 | 4 | namespace Plainion.GraphViz.Modules.CodeInspection.Packaging.Analyzers 5 | { 6 | static class GraphUtils 7 | { 8 | public static Reference Edge(Reference edge) 9 | { 10 | return Edge(edge.From, edge.To, edge.ReferenceType); 11 | } 12 | 13 | public static Reference Edge(Type source, Type target) 14 | { 15 | return Edge(source, target, ReferenceType.Undefined); 16 | } 17 | 18 | public static Reference Edge(Type source, Type target, ReferenceType edgeType) 19 | { 20 | return new Reference(source, target, edgeType); 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.Packaging/PackagingGraphBuilderView.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Linq; 2 | using System.Windows.Controls; 3 | 4 | namespace Plainion.GraphViz.Modules.CodeInspection.Packaging 5 | { 6 | partial class PackagingGraphBuilderView : UserControl 7 | { 8 | public PackagingGraphBuilderView( PackagingGraphBuilderViewModel model ) 9 | { 10 | InitializeComponent(); 11 | 12 | DataContext = model; 13 | 14 | myPackagesFilter.SelectionChanged += myPackagesFilter_SelectionChanged; 15 | } 16 | 17 | private void myPackagesFilter_SelectionChanged( object sender, SelectionChangedEventArgs e ) 18 | { 19 | ( ( PackagingGraphBuilderViewModel )DataContext ).PackagesToAnalyze = myPackagesFilter.SelectedItems 20 | .OfType() 21 | .ToList(); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.Packaging/PackagingGraphMenuItem.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Controls; 2 | using Prism.Navigation.Regions; 3 | 4 | namespace Plainion.GraphViz.Modules.CodeInspection.Packaging 5 | { 6 | [ViewSortHint(Viewer.Abstractions.RegionNames.AddIns + ".0030")] 7 | partial class PackagingGraphMenuItem : MenuItem 8 | { 9 | public PackagingGraphMenuItem( PackagingGraphMenuItemModel model ) 10 | { 11 | InitializeComponent(); 12 | 13 | DataContext = model; 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.Packaging/Plainion.GraphViz.Modules.CodeInspection.Packaging.csproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | Designer 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.Packaging/PrivateSettersContractResolver.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Reflection; 5 | using Newtonsoft.Json; 6 | using Newtonsoft.Json.Serialization; 7 | 8 | namespace Plainion.GraphViz.Modules.CodeInspection.Packaging 9 | { 10 | class PrivateSettersContractResolver : DefaultContractResolver 11 | { 12 | protected override IList CreateProperties( Type type, MemberSerialization memberSerialization ) 13 | { 14 | var props = type.GetProperties( BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance ) 15 | .Select( p => base.CreateProperty( p, memberSerialization ) ) 16 | .ToList(); 17 | 18 | props.ForEach( p => { p.Writable = true; p.Readable = true; } ); 19 | 20 | return props; 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.Packaging/Properties/AssemblyDefs.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | using System.Runtime.Versioning; 3 | using System.Windows.Markup; 4 | 5 | [assembly: XmlnsDefinition( "http://github.com/ronin4net/plainion/GraphViz/Packaging/Spec", "Plainion.GraphViz.Modules.CodeInspection.Packaging.Spec" )] 6 | 7 | [assembly: SupportedOSPlatform("windows7.0")] 8 | 9 | [assembly: InternalsVisibleTo( "Plainion.GraphViz.Modules.CodeInspection.Packaging.Tests" )] 10 | 11 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.Packaging/RegionNames.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace Plainion.GraphViz.Modules.CodeInspection 3 | { 4 | static class RegionNames 5 | { 6 | public static readonly string PackagingGraphBuilder = "Region.PackagingGraphBuilder"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.Packaging/Resources/SystemPackagingTemplate.xaml: -------------------------------------------------------------------------------- 1 |  2 | true 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.Packaging/Spec/Cluster.cs: -------------------------------------------------------------------------------- 1 | using System.Linq; 2 | using System.Windows.Markup; 3 | 4 | namespace Plainion.GraphViz.Modules.CodeInspection.Packaging.Spec 5 | { 6 | [ContentProperty("Patterns")] 7 | public class Cluster : PackageBase 8 | { 9 | public string Id { get; set; } 10 | 11 | internal bool Matches(string str) 12 | { 13 | Contract.RequiresNotNull(str, nameof(str)); 14 | 15 | return Includes.Any(i => i.Matches(str)) && !Excludes.Any(e => e.Matches(str)); 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.Packaging/Spec/Exclude.cs: -------------------------------------------------------------------------------- 1 | namespace Plainion.GraphViz.Modules.CodeInspection.Packaging.Spec 2 | { 3 | public class Exclude : Wildcard 4 | { 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.Packaging/Spec/Include.cs: -------------------------------------------------------------------------------- 1 | namespace Plainion.GraphViz.Modules.CodeInspection.Packaging.Spec 2 | { 3 | public class Include : Wildcard 4 | { 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.Packaging/Spec/Package.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.ComponentModel; 3 | using System.Windows.Markup; 4 | 5 | namespace Plainion.GraphViz.Modules.CodeInspection.Packaging.Spec 6 | { 7 | [ContentProperty( "Patterns" )] 8 | public class Package : PackageBase 9 | { 10 | public Package() 11 | { 12 | Clusters = new List(); 13 | } 14 | 15 | [DefaultValue(null)] 16 | public string AutoClusters { get; set; } 17 | 18 | [DesignerSerializationVisibility( DesignerSerializationVisibility.Content )] 19 | public List Clusters { get; private set; } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.Packaging/Spec/SystemPackaging.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.ComponentModel; 3 | using System.Windows.Markup; 4 | 5 | namespace Plainion.GraphViz.Modules.CodeInspection.Packaging.Spec 6 | { 7 | [ContentProperty("Packages")] 8 | public class SystemPackaging 9 | { 10 | public SystemPackaging() 11 | { 12 | Packages = new List(); 13 | } 14 | 15 | public bool NetFramework { get; set; } 16 | 17 | public bool UsedTypesOnly { get; set; } 18 | 19 | public string AssemblyRoot { get; set; } 20 | 21 | [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] 22 | public List Packages { get; private set; } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.Packaging/XmlEditor/AttributeCompletionData.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Reflection; 3 | using ICSharpCode.AvalonEdit.Document; 4 | using ICSharpCode.AvalonEdit.Editing; 5 | 6 | namespace Plainion.GraphViz.Modules.CodeInspection.Packaging.XmlEditor; 7 | 8 | class AttributeCompletionData : AbstractCompletionData 9 | { 10 | public AttributeCompletionData(PropertyInfo property) 11 | : base(property.Name, property.PropertyType.Name) 12 | { 13 | } 14 | 15 | public override void Complete(TextArea textArea, ISegment completionSegment, EventArgs insertionRequestEventArgs) 16 | { 17 | textArea.Document.Replace(completionSegment, Text + "=\"\""); 18 | textArea.Caret.Offset -= 1; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.Packaging/XmlEditor/ElementCompletionData.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Plainion.GraphViz.Modules.CodeInspection.Packaging.XmlEditor; 4 | 5 | public class ElementCompletionData : AbstractCompletionData 6 | { 7 | public ElementCompletionData(Type type) 8 | : base(type.Name, type.Name) 9 | { 10 | Type = type; 11 | } 12 | 13 | public Type Type { get; private set; } 14 | } 15 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.Packaging/XmlEditor/PropertyElementCompletionData.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | 3 | namespace Plainion.GraphViz.Modules.CodeInspection.Packaging.XmlEditor; 4 | 5 | class PropertyElementCompletionData : AbstractCompletionData 6 | { 7 | public PropertyElementCompletionData(PropertyInfo property) 8 | : base(property.Name, property.PropertyType.Name) 9 | { 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.Packaging/XmlEditor/XmlEditor.xaml: -------------------------------------------------------------------------------- 1 |  10 | 17 | 18 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.PathFinder.Tests/Plainion.GraphViz.Modules.CodeInspection.PathFinder.Tests.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net8.0-windows 5 | false 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.PathFinder.Tests/Properties/AssemblyDefs.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.Versioning; 2 | 3 | [assembly: SupportedOSPlatform("windows7.0")] 4 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.PathFinder/Actors/Messages.cs: -------------------------------------------------------------------------------- 1 | using Plainion.GraphViz.Actors.Client; 2 | 3 | namespace Plainion.GraphViz.Modules.CodeInspection.PathFinder.Actors 4 | { 5 | class PathFinderRequest 6 | { 7 | public string ConfigFile { get; set; } 8 | public bool AssemblyReferencesOnly { get; set; } 9 | } 10 | 11 | class PathFinderResponse : FinishedMessage 12 | { 13 | public string DotFile { get; set; } 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.PathFinder/Actors/PathFinderClient.cs: -------------------------------------------------------------------------------- 1 | using System.Threading; 2 | using System.Threading.Tasks; 3 | using Plainion.GraphViz.Actors.Client; 4 | 5 | namespace Plainion.GraphViz.Modules.CodeInspection.PathFinder.Actors 6 | { 7 | class PathFinderClient : ActorClientBase 8 | { 9 | public async Task AnalyzeAsync(PathFinderRequest request, CancellationToken cancellationToken = default) 10 | { 11 | var response = await this.ProcessAsync(typeof(PathFinderActor), request, cancellationToken); 12 | 13 | if (response is PathFinderResponse m) 14 | { 15 | return m.DotFile; 16 | } 17 | else 18 | { 19 | return null; 20 | } 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.PathFinder/PathFinderMenuItem.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Controls; 2 | using Prism.Navigation.Regions; 3 | 4 | namespace Plainion.GraphViz.Modules.CodeInspection.PathFinder 5 | { 6 | [ViewSortHint(Viewer.Abstractions.RegionNames.AddIns + ".0040")] 7 | partial class PathFinderMenuItem : MenuItem 8 | { 9 | public PathFinderMenuItem(PathFinderMenuItemModel model ) 10 | { 11 | InitializeComponent(); 12 | 13 | DataContext = model; 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.PathFinder/PathFinderMenuItemModel.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Input; 2 | using Plainion.Prism.Interactivity.InteractionRequest; 3 | using Prism.Commands; 4 | using Prism.Mvvm; 5 | 6 | namespace Plainion.GraphViz.Modules.CodeInspection.PathFinder 7 | { 8 | class PathFinderMenuItemModel : BindableBase 9 | { 10 | public PathFinderMenuItemModel() 11 | { 12 | OpenPathFinderCommand = new DelegateCommand(OnOpenPathFinder); 13 | PathFinderRequest = new InteractionRequest(); 14 | } 15 | 16 | private void OnOpenPathFinder() 17 | { 18 | var notification = new Notification(); 19 | notification.Title = "PathFinder"; 20 | 21 | PathFinderRequest.Raise(notification, c => { }); 22 | } 23 | 24 | public ICommand OpenPathFinderCommand { get; private set; } 25 | 26 | public InteractionRequest PathFinderRequest { get; private set; } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.PathFinder/PathFinderView.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Controls; 2 | 3 | namespace Plainion.GraphViz.Modules.CodeInspection.PathFinder 4 | { 5 | partial class PathFinderView : UserControl 6 | { 7 | public PathFinderView( PathFinderViewModel model ) 8 | { 9 | InitializeComponent(); 10 | 11 | DataContext = model; 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.PathFinder/Properties/AssemblyDefs.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | using System.Runtime.Versioning; 3 | using System.Windows.Markup; 4 | 5 | [assembly: SupportedOSPlatform("windows7.0")] 6 | 7 | [assembly: InternalsVisibleTo( "Plainion.GraphViz.Modules.CodeInspection.PathFinder.Tests" )] 8 | 9 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection.PathFinder/RegionNames.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace Plainion.GraphViz.Modules.CodeInspection 3 | { 4 | static class RegionNames 5 | { 6 | public static readonly string PathFinder = "Region.PathFinder"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.CodeInspection/Properties/AssemblyDefs.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | using System.Runtime.Versioning; 3 | using System.Windows.Markup; 4 | 5 | [assembly: XmlnsDefinition( "http://github.com/ronin4net/plainion/GraphViz/Packaging/Spec", "Plainion.GraphViz.Modules.CodeInspection.Packaging.Spec" )] 6 | 7 | [assembly: SupportedOSPlatform("windows7.0")] 8 | 9 | [assembly: InternalsVisibleTo( "Plainion.GraphViz.Modules.CodeInspection.Tests" )] 10 | 11 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Documents.Tests/Plainion.GraphViz.Modules.Documents.Tests.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net8.0-windows 5 | false 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Documents.Tests/Properties/AssemblyDefs.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.Versioning; 2 | 3 | [assembly: SupportedOSPlatform("windows7.0")] 4 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Documents/DotLang/IMatcher.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace Plainion.GraphViz.Modules.Documents.DotLang 3 | { 4 | interface IMatcher 5 | { 6 | Token IsMatch( Tokenizer tokenizer ); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Documents/DotLang/MatchNewLine.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Text; 3 | 4 | namespace Plainion.GraphViz.Modules.Documents.DotLang 5 | { 6 | class MatchNewLine : MatcherBase 7 | { 8 | protected override Token IsMatchImpl( Tokenizer tokenizer ) 9 | { 10 | var str = new StringBuilder(); 11 | 12 | while( tokenizer.Current == '\r' || tokenizer.Current == '\n' ) 13 | { 14 | str.Append( tokenizer.Current ); 15 | 16 | tokenizer.Consume(); 17 | } 18 | 19 | if( str.ToString() == Environment.NewLine ) 20 | { 21 | return new Token( TokenType.NewLine ); 22 | } 23 | 24 | return null; 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Documents/DotLang/MatchWhiteSpace.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Text; 3 | 4 | namespace Plainion.GraphViz.Modules.Documents.DotLang 5 | { 6 | class MatchWhiteSpace : MatcherBase 7 | { 8 | protected override Token IsMatchImpl( Tokenizer tokenizer ) 9 | { 10 | var str = new StringBuilder(); 11 | 12 | while( char.IsWhiteSpace( tokenizer.Current ) ) 13 | { 14 | str.Append( tokenizer.Current ); 15 | 16 | tokenizer.Consume(); 17 | } 18 | 19 | if( str.Length > 0 ) 20 | { 21 | return new Token( TokenType.WhiteSpace, str.ToString() ); 22 | } 23 | 24 | return null; 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Documents/DotLang/MatcherBase.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace Plainion.GraphViz.Modules.Documents.DotLang 3 | { 4 | abstract class MatcherBase : IMatcher 5 | { 6 | public Token IsMatch( Tokenizer tokenizer ) 7 | { 8 | if( tokenizer.EndOfStream ) 9 | { 10 | return new Token( TokenType.EndOfStream ); 11 | } 12 | 13 | tokenizer.TakeSnapshot(); 14 | 15 | var match = IsMatchImpl( tokenizer ); 16 | 17 | if( match == null ) 18 | { 19 | tokenizer.RollbackSnapshot(); 20 | } 21 | else 22 | { 23 | tokenizer.CommitSnapshot(); 24 | } 25 | 26 | return match; 27 | } 28 | 29 | protected abstract Token IsMatchImpl( Tokenizer tokenizer ); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Documents/GraphMLDocument.cs: -------------------------------------------------------------------------------- 1 | using System.Linq; 2 | using System.Xml.Linq; 3 | 4 | namespace Plainion.GraphViz.Modules.Documents 5 | { 6 | class GraphMLDocument : AbstractGraphDocument 7 | { 8 | protected override void Load() 9 | { 10 | var root = XElement.Load( Filename ).Elements( XN( "graph" ) ).First(); 11 | 12 | foreach( var xmlNode in root.Elements( XN( "node" ) ) ) 13 | { 14 | TryAddNode( xmlNode.Attribute( "id" ).Value ); 15 | } 16 | 17 | foreach( var xmlLink in root.Elements( XN( "edge" ) ) ) 18 | { 19 | TryAddEdge( xmlLink.Attribute( "source" ).Value, xmlLink.Attribute( "target" ).Value ); 20 | } 21 | } 22 | 23 | private static XName XN( string localName ) 24 | { 25 | return XName.Get( localName, "http://graphml.graphdrawing.org/xmlns" ); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Documents/ICaptionDocument.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using Plainion.GraphViz.Presentation; 3 | 4 | namespace Plainion.GraphViz.Modules.Documents 5 | { 6 | public interface ICaptionDocument 7 | { 8 | IEnumerable Captions { get; } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Documents/IDocument.cs: -------------------------------------------------------------------------------- 1 | namespace Plainion.GraphViz.Modules.Documents 2 | { 3 | public interface IDocument 4 | { 5 | string Filename { get; } 6 | 7 | void Load( string path ); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Documents/IGraphDocument.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using Plainion.GraphViz.Viewer.Abstractions; 3 | using Plainion.Graphs; 4 | 5 | namespace Plainion.GraphViz.Modules.Documents 6 | { 7 | public interface IGraphDocument : IDocument 8 | { 9 | IGraph Graph { get; } 10 | 11 | /// 12 | /// Allows a document to read its content more tolerant and report failures additionally but without exceptions. 13 | /// 14 | IEnumerable FailedItems { get; } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Documents/ILayoutDocument.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using Plainion.GraphViz.Presentation; 3 | 4 | namespace Plainion.GraphViz.Modules.Documents 5 | { 6 | public interface ILayoutDocument 7 | { 8 | IEnumerable NodeLayouts { get; } 9 | IEnumerable EdgeLayouts { get; } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Documents/IStyleDocument.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using Plainion.GraphViz.Presentation; 3 | 4 | namespace Plainion.GraphViz.Modules.Documents 5 | { 6 | public interface IStyleDocument 7 | { 8 | IEnumerable NodeStyles { get; } 9 | IEnumerable EdgeStyles { get; } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Documents/OpenDocumentsView.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Controls; 2 | using Prism.Navigation.Regions; 3 | 4 | namespace Plainion.GraphViz.Modules.Documents 5 | { 6 | [ViewSortHint(Viewer.Abstractions.RegionNames.PrimaryToolBox + ".0010")] 7 | partial class OpenDocumentsView : UserControl 8 | { 9 | public OpenDocumentsView(OpenDocumentsViewModel model) 10 | { 11 | InitializeComponent(); 12 | 13 | DataContext = model; 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Documents/Plainion.GraphViz.Modules.Documents.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net8.0-windows 5 | true 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Documents/Plainion.GraphViz.Modules.Documents.csproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | ProjectFiles 5 | 6 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Documents/Properties/AssemblyDefs.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | using System.Runtime.Versioning; 3 | 4 | [assembly: SupportedOSPlatform("windows7.0")] 5 | 6 | [assembly: InternalsVisibleTo( "Plainion.GraphViz.Modules.Documents.Tests" )] 7 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Documents/Resources/Open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/src/Plainion.GraphViz.Modules.Documents/Resources/Open.png -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Documents/Resources/Save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/src/Plainion.GraphViz.Modules.Documents/Resources/Save.png -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Documents/SaveDocumentsView.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Controls; 2 | using Prism.Navigation.Regions; 3 | 4 | namespace Plainion.GraphViz.Modules.Documents 5 | { 6 | [ViewSortHint(Viewer.Abstractions.RegionNames.PrimaryToolBox + ".0020")] 7 | partial class SaveDocumentsView : UserControl 8 | { 9 | public SaveDocumentsView(SaveDocumentsViewModel model) 10 | { 11 | InitializeComponent(); 12 | 13 | DataContext = model; 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Markdown.Tests/Plainion.GraphViz.Modules.Markdown.Tests.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net8.0-windows 5 | false 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Markdown.Tests/Properties/AssemblyDefs.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.Versioning; 2 | 3 | [assembly: SupportedOSPlatform("windows7.0")] 4 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Markdown/Analyzer/AnalysisDocument.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace Plainion.GraphViz.Modules.Markdown.Analyzer 4 | { 5 | internal class AnalysisDocument 6 | { 7 | public IList Files { get; } = new List(); 8 | public IList FailedItems { get; } = new List(); 9 | } 10 | } -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Markdown/Analyzer/FailedFile.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Plainion.GraphViz.Modules.Markdown.Analyzer 4 | { 5 | internal class FailedFile 6 | { 7 | public string FullPath { get; init; } 8 | public Exception Exception { get; init; } 9 | } 10 | } -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Markdown/Analyzer/LinkResolverExtension.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Linq; 3 | using Plainion.GraphViz.Modules.Markdown.Analyzer.Markdown; 4 | using Plainion.GraphViz.Modules.Markdown.Analyzer.Resolver; 5 | 6 | namespace Plainion.GraphViz.Modules.Markdown.Analyzer 7 | { 8 | internal static class LinkResolverExtension 9 | { 10 | public static IReadOnlyCollection ResolveLinks(this ILinkResolver self, IEnumerable links, 11 | string file, string root) 12 | { 13 | return links.Select(l => self.ResolveLink(l.Url, file, root)).ToList(); 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Markdown/Analyzer/Markdown/DocLink.cs: -------------------------------------------------------------------------------- 1 | namespace Plainion.GraphViz.Modules.Markdown.Analyzer.Markdown 2 | { 3 | internal record DocLink : Link 4 | { 5 | public DocLink(string url, string label) : base(url, label) 6 | { 7 | } 8 | } 9 | } -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Markdown/Analyzer/Markdown/ImageLink.cs: -------------------------------------------------------------------------------- 1 | namespace Plainion.GraphViz.Modules.Markdown.Analyzer.Markdown 2 | { 3 | internal record ImageLink : Link 4 | { 5 | public ImageLink(string url, string label) : base(url, label) 6 | { 7 | } 8 | } 9 | } -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Markdown/Analyzer/Markdown/Link.cs: -------------------------------------------------------------------------------- 1 | namespace Plainion.GraphViz.Modules.Markdown.Analyzer.Markdown 2 | { 3 | internal abstract record Link 4 | { 5 | protected Link(string url, string label) 6 | { 7 | Contract.RequiresNotNullNotEmpty(url); 8 | 9 | Url = url; 10 | Label = label; 11 | } 12 | 13 | public string Url { get; } 14 | public string Label { get; } 15 | } 16 | } -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Markdown/Analyzer/Markdown/MDDocument.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace Plainion.GraphViz.Modules.Markdown.Analyzer.Markdown 4 | { 5 | internal class MDDocument 6 | { 7 | public MDDocument(IReadOnlyCollection links) 8 | { 9 | Contract.RequiresNotNull(links); 10 | 11 | Links = links; 12 | } 13 | 14 | public IReadOnlyCollection Links { get; } 15 | } 16 | } -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Markdown/Analyzer/Parser/AbstractParser.cs: -------------------------------------------------------------------------------- 1 | using System.IO.Abstractions; 2 | using Plainion.GraphViz.Modules.Markdown.Analyzer.Markdown; 3 | 4 | namespace Plainion.GraphViz.Modules.Markdown.Analyzer.Parser 5 | { 6 | internal abstract class AbstractParser : IMarkdownParser 7 | { 8 | private readonly IFileSystem myFileSystem; 9 | 10 | protected AbstractParser(IFileSystem fileSystem) 11 | { 12 | myFileSystem = fileSystem; 13 | } 14 | 15 | public MDDocument LoadFile(string file) 16 | { 17 | var markdown = myFileSystem.File.ReadAllText(file); 18 | 19 | return ParseMarkdown(markdown); 20 | } 21 | 22 | public MDDocument LoadMarkdown(string markdown) 23 | { 24 | return ParseMarkdown(markdown); 25 | } 26 | 27 | protected abstract MDDocument ParseMarkdown(string markdown); 28 | } 29 | } -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Markdown/Analyzer/Parser/IMarkdownParser.cs: -------------------------------------------------------------------------------- 1 | using Plainion.GraphViz.Modules.Markdown.Analyzer.Markdown; 2 | 3 | namespace Plainion.GraphViz.Modules.Markdown.Analyzer.Parser 4 | { 5 | internal interface IMarkdownParser 6 | { 7 | MDDocument LoadFile(string file); 8 | 9 | MDDocument LoadMarkdown(string markdown); 10 | } 11 | } -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Markdown/Analyzer/Resolver/ExternalLink.cs: -------------------------------------------------------------------------------- 1 | namespace Plainion.GraphViz.Modules.Markdown.Analyzer.Resolver 2 | { 3 | internal record ExternalLink : ResolvedLink 4 | { 5 | public ExternalLink(string url) : base(url) 6 | { 7 | } 8 | } 9 | } -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Markdown/Analyzer/Resolver/ILinkResolver.cs: -------------------------------------------------------------------------------- 1 | namespace Plainion.GraphViz.Modules.Markdown.Analyzer.Resolver 2 | { 3 | internal interface ILinkResolver 4 | { 5 | /// 6 | /// Resolves if the passed url is an external link (website, network share or just outside the analyzed folder) 7 | /// or an internal link. in case of an internal link the absolute path will be resolved. 8 | /// 9 | /// Absolute or relative url. 10 | /// The current processed file. 11 | /// Origin folder to be analyzed. 12 | /// The resolved link which is an absolute path. 13 | ResolvedLink ResolveLink(string url, string file, string root); 14 | } 15 | } -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Markdown/Analyzer/Resolver/InternalLink.cs: -------------------------------------------------------------------------------- 1 | namespace Plainion.GraphViz.Modules.Markdown.Analyzer.Resolver 2 | { 3 | /// 4 | /// Contains the absolute path to an internal link. 5 | /// 6 | internal record InternalLink : ResolvedLink 7 | { 8 | public InternalLink(string url) : base(url) 9 | { 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Markdown/Analyzer/Resolver/ResolvedLink.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Plainion.GraphViz.Modules.Markdown.Analyzer.Resolver 4 | { 5 | internal abstract record ResolvedLink 6 | { 7 | protected ResolvedLink(string url) 8 | { 9 | Contract.RequiresNotNullNotEmpty(url); 10 | 11 | if (!Uri.TryCreate(url, UriKind.Absolute, out var uri)) 12 | { 13 | throw new ArgumentException($"Url '{url}' is not an absolute uri."); 14 | } 15 | 16 | Uri = uri; 17 | } 18 | 19 | public Uri Uri { get; } 20 | } 21 | } -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Markdown/Analyzer/Verifier/ILinkVerifier.cs: -------------------------------------------------------------------------------- 1 | namespace Plainion.GraphViz.Modules.Markdown.Analyzer.Verifier 2 | { 3 | internal interface ILinkVerifier 4 | { 5 | public VerifiedLink VerifyLink(string link); 6 | } 7 | } -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Markdown/Analyzer/Verifier/InvalidLink.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Plainion.GraphViz.Modules.Markdown.Analyzer.Verifier 4 | { 5 | internal record InvalidLink : VerifiedLink 6 | { 7 | public InvalidLink(string path, Exception exception) : base(path) 8 | { 9 | Exception = exception; 10 | } 11 | 12 | public Exception Exception { get; } 13 | } 14 | } -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Markdown/Analyzer/Verifier/ValidLink.cs: -------------------------------------------------------------------------------- 1 | namespace Plainion.GraphViz.Modules.Markdown.Analyzer.Verifier 2 | { 3 | internal record ValidLink : VerifiedLink 4 | { 5 | public ValidLink(string path) : base(path) 6 | { 7 | } 8 | } 9 | } -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Markdown/Analyzer/Verifier/VerifiedLink.cs: -------------------------------------------------------------------------------- 1 | namespace Plainion.GraphViz.Modules.Markdown.Analyzer.Verifier 2 | { 3 | internal abstract record VerifiedLink 4 | { 5 | protected VerifiedLink(string path) 6 | { 7 | Contract.RequiresNotNullNotEmpty(path); 8 | 9 | Path = path; 10 | } 11 | 12 | public string Path { get; } 13 | } 14 | } -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Markdown/ConfigurationView.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Controls; 2 | 3 | namespace Plainion.GraphViz.Modules.Markdown 4 | { 5 | internal partial class ConfigurationView : UserControl 6 | { 7 | public ConfigurationView(ConfigurationViewModel model) 8 | { 9 | InitializeComponent(); 10 | 11 | DataContext = model; 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Markdown/Plainion.GraphViz.Modules.Markdown.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net8.0-windows 5 | true 6 | true 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Markdown/Properties/AssemblyDefs.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | using System.Runtime.Versioning; 3 | 4 | [assembly: SupportedOSPlatform("windows7.0")] 5 | [assembly: InternalsVisibleTo("Plainion.GraphViz.Modules.Markdown.Tests")] -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Markdown/RegionNames.cs: -------------------------------------------------------------------------------- 1 | namespace Plainion.GraphViz.Modules.Markdown 2 | { 3 | internal static class RegionNames 4 | { 5 | public static readonly string MarkdownDependencies = "Region.MarkdownDependencies"; 6 | } 7 | } -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Markdown/ToolsMenuItem.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Controls; 2 | using Prism.Navigation.Regions; 3 | 4 | namespace Plainion.GraphViz.Modules.Markdown 5 | { 6 | [ViewSortHint(Viewer.Abstractions.RegionNames.AddIns + ".0100")] 7 | internal partial class ToolsMenuItem : MenuItem 8 | { 9 | public ToolsMenuItem(ToolsMenuItemModel model) 10 | { 11 | InitializeComponent(); 12 | 13 | DataContext = model; 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Markdown/ToolsMenuItemModel.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Input; 2 | using Plainion.Prism.Interactivity.InteractionRequest; 3 | using Prism.Commands; 4 | using Prism.Mvvm; 5 | 6 | namespace Plainion.GraphViz.Modules.Markdown 7 | { 8 | internal class ToolsMenuItemModel : BindableBase 9 | { 10 | public ToolsMenuItemModel() 11 | { 12 | StartAnalysisCommand = new DelegateCommand(OnStartAnalysis); 13 | StartAnalysisRequest = new InteractionRequest(); 14 | } 15 | 16 | private void OnStartAnalysis() 17 | { 18 | var notification = new Notification 19 | { 20 | Title = "Markdown Files Dependencies" 21 | }; 22 | 23 | StartAnalysisRequest.Raise(notification, c => { }); 24 | } 25 | 26 | public ICommand StartAnalysisCommand { get; } 27 | 28 | public InteractionRequest StartAnalysisRequest { get; private set; } 29 | } 30 | } -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Metrics.Tests/Plainion.GraphViz.Modules.Metrics.Tests.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net8.0-windows 5 | false 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Metrics.Tests/Properties/AssemblyDefs.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.Versioning; 2 | 3 | [assembly: SupportedOSPlatform("windows7.0")] 4 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Metrics/Algorithms/Cycle.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Linq; 3 | using Plainion.Graphs; 4 | 5 | namespace Plainion.GraphViz.Modules.Metrics.Algorithms; 6 | 7 | public class Cycle 8 | { 9 | public required Node Start { get; init; } 10 | public required IReadOnlyCollection Edges { get; init; } 11 | 12 | // Start node is not repeated and only occurs once 13 | public IEnumerable Path => Edges.Select(x => x.Target); 14 | } 15 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Metrics/Algorithms/GraphItemMeasurement.cs: -------------------------------------------------------------------------------- 1 | using Plainion.Graphs; 2 | 3 | namespace Plainion.GraphViz.Modules.Metrics.Algorithms; 4 | 5 | class GraphItemMeasurement where T : IGraphItem 6 | { 7 | public required T Owner { get; init; } 8 | public required double Absolute { get; init; } 9 | public required double Normalized { get; init; } 10 | } -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Metrics/Algorithms/ShortestPaths.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Linq; 3 | 4 | namespace Plainion.GraphViz.Modules.Metrics.Algorithms; 5 | 6 | class ShortestPaths(IReadOnlyCollection paths) 7 | { 8 | public IReadOnlyCollection Paths { get; } = paths; 9 | 10 | public IReadOnlyCollection Get(string sourceId, string targetId) => 11 | Paths.Where(p => p.Start.Id == sourceId && p.End.Id == targetId).ToList(); 12 | 13 | public override string ToString() => string.Join("\n", Paths); 14 | } 15 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Metrics/Algorithms/ShortestUndirectedPaths.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Linq; 3 | 4 | namespace Plainion.GraphViz.Modules.Metrics.Algorithms; 5 | 6 | class ShortestUndirectedPaths 7 | { 8 | public IReadOnlyCollection Paths { get; } 9 | 10 | public ShortestUndirectedPaths(IReadOnlyCollection paths) 11 | { 12 | Paths = paths.Distinct().ToList(); // Remove duplicates 13 | } 14 | 15 | public IReadOnlyCollection Get(string sourceId, string targetId) => 16 | Paths.Where(p => p.Start.Id == sourceId && p.End.Id == targetId).ToList(); 17 | 18 | public override string ToString() => string.Join("\n", Paths); 19 | } 20 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Metrics/CycleVM.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using Plainion.GraphViz.Modules.Metrics.Algorithms; 3 | 4 | namespace Plainion.GraphViz.Modules.Metrics; 5 | 6 | internal class CycleVM 7 | { 8 | public required Cycle Model { get; init; } 9 | public required string Start { get; init; } 10 | public required IReadOnlyCollection Path { get; init; } 11 | } -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Metrics/GraphDensityVM.cs: -------------------------------------------------------------------------------- 1 | namespace Plainion.GraphViz.Modules.Metrics; 2 | 3 | internal class GraphDensityVM 4 | { 5 | public required int NodeCount { get; init; } 6 | public required int EdgeCount { get; init; } 7 | public required double Density { get; init; } 8 | } -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Metrics/GraphItemMeasurementVM.cs: -------------------------------------------------------------------------------- 1 | using Plainion.Graphs; 2 | 3 | namespace Plainion.GraphViz.Modules.Metrics; 4 | 5 | class GraphItemMeasurementVM 6 | { 7 | public required IGraphItem Model { get; init; } 8 | public required string Caption { get; init; } 9 | public required double Absolute { get; init; } 10 | public required double Normalized { get; init; } 11 | } 12 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Metrics/MetricsModule.cs: -------------------------------------------------------------------------------- 1 | using Prism.Ioc; 2 | using Prism.Modularity; 3 | using Prism.Navigation.Regions; 4 | 5 | namespace Plainion.GraphViz.Modules.Metrics; 6 | 7 | public class MetricsModule(IRegionManager regionManager) : IModule 8 | { 9 | public void RegisterTypes(IContainerRegistry containerRegistry) 10 | { 11 | regionManager.RegisterViewWithRegion(Viewer.Abstractions.RegionNames.AddIns, typeof(ToolsMenuItem)); 12 | regionManager.RegisterViewWithRegion(RegionNames.Metrics, typeof(MetricsView)); 13 | 14 | // workaround to get notified when the window closes 15 | containerRegistry.RegisterSingleton(); 16 | } 17 | 18 | public void OnInitialized(IContainerProvider containerProvider) { } 19 | } 20 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Metrics/MetricsView.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Controls; 2 | 3 | namespace Plainion.GraphViz.Modules.Metrics 4 | { 5 | partial class MetricsView : UserControl 6 | { 7 | public MetricsView(MetricsViewModel model) 8 | { 9 | InitializeComponent(); 10 | 11 | DataContext = model; 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Metrics/NodeDegreesVM.cs: -------------------------------------------------------------------------------- 1 | using Plainion.Graphs; 2 | 3 | namespace Plainion.GraphViz.Modules.Metrics; 4 | 5 | internal class NodeDegreesVM 6 | { 7 | public required Node Model { get; init; } 8 | public required string Caption { get; init; } 9 | 10 | public required int In { get; init; } 11 | public required int Out { get; init; } 12 | public required int Total { get; init; } 13 | } -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Metrics/Plainion.GraphViz.Modules.Metrics.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net8.0-windows 5 | true 6 | true 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Metrics/Plainion.GraphViz.Modules.Metrics.csproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | Designer 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Metrics/Properties/AssemblyDefs.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | using System.Runtime.Versioning; 3 | 4 | [assembly: SupportedOSPlatform("windows7.0")] 5 | 6 | [assembly: InternalsVisibleTo("Plainion.GraphViz.Modules.Metrics.Tests")] 7 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Metrics/RegionNames.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace Plainion.GraphViz.Modules.Metrics 3 | { 4 | public static class RegionNames 5 | { 6 | public static readonly string Metrics = "Region.Metrics"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Metrics/ToolsMenuItem.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Controls; 2 | using Prism.Navigation.Regions; 3 | 4 | namespace Plainion.GraphViz.Modules.Metrics 5 | { 6 | [ViewSortHint(Viewer.Abstractions.RegionNames.AddIns + ".2000")] 7 | internal partial class ToolsMenuItem : MenuItem 8 | { 9 | public ToolsMenuItem(ToolsMenuItemModel model) 10 | { 11 | InitializeComponent(); 12 | 13 | DataContext = model; 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Obfuscate/IObfuscator.cs: -------------------------------------------------------------------------------- 1 | namespace Plainion.GraphViz.Modules.Obfuscate; 2 | 3 | internal interface IObfuscator 4 | { 5 | string Obfuscate(string value); 6 | } -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Obfuscate/ObfuscateModule.cs: -------------------------------------------------------------------------------- 1 | using Prism.Ioc; 2 | using Prism.Modularity; 3 | using Prism.Navigation.Regions; 4 | 5 | namespace Plainion.GraphViz.Modules.Obfuscate; 6 | 7 | public class ObfuscateModule(IRegionManager regionManager) : IModule 8 | { 9 | public void RegisterTypes(IContainerRegistry containerRegistry) 10 | { 11 | regionManager.RegisterViewWithRegion(Viewer.Abstractions.RegionNames.AddIns, typeof(ToolsMenuItem)); 12 | } 13 | 14 | public void OnInitialized(IContainerProvider containerProvider) { } 15 | } 16 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Obfuscate/Plainion.GraphViz.Modules.Obfuscate.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net8.0-windows 5 | true 6 | true 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Obfuscate/Properties/AssemblyDefs.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.Versioning; 2 | 3 | [assembly: SupportedOSPlatform("windows7.0")] 4 | 5 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Obfuscate/SimpleObfuscator.cs: -------------------------------------------------------------------------------- 1 | namespace Plainion.GraphViz.Modules.Obfuscate; 2 | 3 | using System.Collections.Generic; 4 | 5 | internal class SimpleObfuscator : IObfuscator 6 | { 7 | private readonly Dictionary myMap = []; 8 | private int myCounter = 0; 9 | 10 | public string Obfuscate(string value) 11 | { 12 | if (myMap.TryGetValue(value, out var obfuscated)) 13 | { 14 | return obfuscated; 15 | } 16 | 17 | obfuscated = GetNextObfuscation(); 18 | myMap[value] = obfuscated; 19 | 20 | return obfuscated; 21 | } 22 | 23 | private string GetNextObfuscation() 24 | { 25 | int value = myCounter++; 26 | string result = ""; 27 | 28 | while (true) 29 | { 30 | result = (char)('A' + (value % 26)) + result; 31 | value = value / 26 - 1; 32 | 33 | if (value < 0) break; 34 | } 35 | 36 | return result; 37 | } 38 | } -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Obfuscate/ToolsMenuItem.xaml: -------------------------------------------------------------------------------- 1 |  9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Obfuscate/ToolsMenuItem.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Controls; 2 | using Prism.Navigation.Regions; 3 | 4 | namespace Plainion.GraphViz.Modules.Obfuscate; 5 | 6 | [ViewSortHint(Viewer.Abstractions.RegionNames.AddIns + ".1000")] 7 | partial class ToolsMenuItem : MenuItem 8 | { 9 | public ToolsMenuItem(ToolsMenuItemModel model) 10 | { 11 | InitializeComponent(); 12 | 13 | DataContext = model; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Properties/OpenPropertiesView.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Controls; 2 | 3 | namespace Plainion.GraphViz.Modules.Properties; 4 | 5 | partial class OpenPropertiesView : UserControl 6 | { 7 | public OpenPropertiesView(OpenPropertiesViewModel model) 8 | { 9 | InitializeComponent(); 10 | 11 | DataContext = model; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Properties/Plainion.GraphViz.Modules.Properties.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net8.0-windows 5 | true 6 | true 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Properties/Properties/AssemblyDefs.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.Versioning; 2 | 3 | [assembly: SupportedOSPlatform("windows7.0")] 4 | 5 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Properties/PropertiesModule.cs: -------------------------------------------------------------------------------- 1 | using Prism.Ioc; 2 | using Prism.Modularity; 3 | using Prism.Navigation.Regions; 4 | 5 | namespace Plainion.GraphViz.Modules.Properties; 6 | 7 | public class PropertiesModule(IRegionManager regionManager) : IModule 8 | { 9 | public void RegisterTypes(IContainerRegistry containerRegistry) 10 | { 11 | regionManager.RegisterViewWithRegion(Viewer.Abstractions.RegionNames.SecondaryToolBox, typeof(OpenPropertiesView)); 12 | regionManager.RegisterViewWithRegion(RegionNames.Properties, typeof(PropertiesView)); 13 | } 14 | 15 | public void OnInitialized(IContainerProvider containerProvider) { } 16 | } 17 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Properties/PropertiesView.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Controls; 2 | 3 | namespace Plainion.GraphViz.Modules.Properties 4 | { 5 | partial class PropertiesView : UserControl 6 | { 7 | public PropertiesView(PropertiesViewModel model) 8 | { 9 | InitializeComponent(); 10 | 11 | DataContext = model; 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Properties/RegionNames.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace Plainion.GraphViz.Modules.Properties 3 | { 4 | public static class RegionNames 5 | { 6 | public static readonly string Properties = "Region.Properties"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.Properties/Resources/Properties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/src/Plainion.GraphViz.Modules.Properties/Resources/Properties.png -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.SDK/Analysis1/AnalysisDocument.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace Plainion.GraphViz.Modules.SDK.Analysis1 4 | { 5 | class AnalysisDocument 6 | { 7 | } 8 | } -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.SDK/Analysis1/Analyzer.cs: -------------------------------------------------------------------------------- 1 | using System.Threading; 2 | using System.Threading.Tasks; 3 | 4 | namespace Plainion.GraphViz.Modules.SDK.Analysis1 5 | { 6 | class Analyzer 7 | { 8 | public Task AnalyzeAsync(string folderToAnalyze, CancellationToken token) 9 | { 10 | return Task.FromResult(new AnalysisDocument()); 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.SDK/Analysis1/ConfigurationView.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Controls; 2 | 3 | namespace Plainion.GraphViz.Modules.SDK.Analysis1 4 | { 5 | partial class ConfigurationView : UserControl 6 | { 7 | public ConfigurationView(ConfigurationViewModel model) 8 | { 9 | InitializeComponent(); 10 | 11 | DataContext = model; 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.SDK/Analysis1/ToolsMenuItem.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Controls; 2 | 3 | namespace Plainion.GraphViz.Modules.SDK.Analysis1 4 | { 5 | partial class ToolsMenuItem : MenuItem 6 | { 7 | public ToolsMenuItem(ToolsMenuItemModel model) 8 | { 9 | InitializeComponent(); 10 | 11 | DataContext = model; 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.SDK/Analysis1/ToolsMenuItemModel.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Input; 2 | using Plainion.Prism.Interactivity.InteractionRequest; 3 | using Prism.Commands; 4 | using Prism.Mvvm; 5 | 6 | namespace Plainion.GraphViz.Modules.SDK.Analysis1 7 | { 8 | class ToolsMenuItemModel : BindableBase 9 | { 10 | public ToolsMenuItemModel() 11 | { 12 | StartAnalysisCommand = new DelegateCommand(OnStartAnalysis); 13 | StartAnalysisRequest = new InteractionRequest(); 14 | } 15 | 16 | private void OnStartAnalysis() 17 | { 18 | var notification = new Notification(); 19 | notification.Title = "Analysis SDK"; 20 | 21 | StartAnalysisRequest.Raise(notification, c => { }); 22 | } 23 | 24 | public ICommand StartAnalysisCommand { get; } 25 | 26 | public InteractionRequest StartAnalysisRequest { get; private set; } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.SDK/Plainion.GraphViz.Modules.SDK.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net8.0-windows 5 | true 6 | true 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.SDK/Properties/AssemblyDefs.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.Versioning; 2 | 3 | [assembly: SupportedOSPlatform("windows7.0")] 4 | 5 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.SDK/ReadMe.md: -------------------------------------------------------------------------------- 1 | 2 | This project serves as a template for analysis modules added to Plainion.GraphViz. 3 | 4 | Assuming that multiple specific analysis will be hosted by a single module we 5 | suggest to use a separate folder for each analyis. 6 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.SDK/RegionNames.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace Plainion.GraphViz.Modules.SDK 3 | { 4 | static class RegionNames 5 | { 6 | public static readonly string SDKAnalysis1 = "Region.SDKAnalysis1"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.VsProjects/AnalysisDocument.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace Plainion.GraphViz.Modules.VsProjects 4 | { 5 | class AnalysisDocument 6 | { 7 | public IList Projects { get; } = new List(); 8 | public IList FailedItems { get; } = new List(); 9 | } 10 | } -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.VsProjects/ConfigurationView.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Controls; 2 | 3 | namespace Plainion.GraphViz.Modules.VsProjects 4 | { 5 | partial class ConfigurationView : UserControl 6 | { 7 | public ConfigurationView(ConfigurationViewModel model) 8 | { 9 | InitializeComponent(); 10 | 11 | DataContext = model; 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.VsProjects/FailedProject.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Plainion.GraphViz.Modules.VsProjects 4 | { 5 | class FailedProject 6 | { 7 | public string FullPath { get; init; } 8 | public Exception Exception { get; init; } 9 | } 10 | } -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.VsProjects/Plainion.GraphViz.Modules.VsProjects.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net8.0-windows 5 | true 6 | true 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.VsProjects/Properties/AssemblyDefs.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.Versioning; 2 | 3 | [assembly: SupportedOSPlatform("windows7.0")] 4 | 5 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.VsProjects/RegionNames.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace Plainion.GraphViz.Modules.VsProjects 3 | { 4 | static class RegionNames 5 | { 6 | public static readonly string VsProjectDependencies = "Region.VsProjectDependencies"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.VsProjects/ToolsMenuItem.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Controls; 2 | using Prism.Navigation.Regions; 3 | 4 | namespace Plainion.GraphViz.Modules.VsProjects 5 | { 6 | [ViewSortHint(Viewer.Abstractions.RegionNames.AddIns + ".0050")] 7 | partial class ToolsMenuItem : MenuItem 8 | { 9 | public ToolsMenuItem(ToolsMenuItemModel model) 10 | { 11 | InitializeComponent(); 12 | 13 | DataContext = model; 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Modules.VsProjects/ToolsMenuItemModel.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Input; 2 | using Plainion.Prism.Interactivity.InteractionRequest; 3 | using Prism.Commands; 4 | using Prism.Mvvm; 5 | 6 | namespace Plainion.GraphViz.Modules.VsProjects 7 | { 8 | class ToolsMenuItemModel : BindableBase 9 | { 10 | public ToolsMenuItemModel() 11 | { 12 | StartAnalysisCommand = new DelegateCommand(OnStartAnalysis); 13 | StartAnalysisRequest = new InteractionRequest(); 14 | } 15 | 16 | private void OnStartAnalysis() 17 | { 18 | var notification = new Notification(); 19 | notification.Title = "Visual Studio Project Dependencies"; 20 | 21 | StartAnalysisRequest.Raise(notification, c => { }); 22 | } 23 | 24 | public ICommand StartAnalysisCommand { get; } 25 | 26 | public InteractionRequest StartAnalysisRequest { get; private set; } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Tests/Plainion.GraphViz.Tests.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net8.0-windows 5 | true 6 | false 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Tests/Properties/AssemblyDefs.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.Versioning; 2 | 3 | [assembly: SupportedOSPlatform("windows7.0")] 4 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Viewer.Abstractions/FailedItem.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Plainion.GraphViz.Viewer.Abstractions 4 | { 5 | [Serializable] 6 | public class FailedItem 7 | { 8 | public FailedItem( string item, string reason ) 9 | { 10 | Item = item; 11 | FailureReason = reason; 12 | } 13 | 14 | public string Item { get; private set; } 15 | 16 | public string FailureReason { get; private set; } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Viewer.Abstractions/NodeFocusedEvent.cs: -------------------------------------------------------------------------------- 1 | using Plainion.Graphs; 2 | using Prism.Events; 3 | 4 | namespace Plainion.GraphViz.Viewer.Abstractions 5 | { 6 | /// 7 | /// Raised when a node has been put into user focus. 8 | /// 9 | public class NodeFocusedEvent : PubSubEvent 10 | { 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Viewer.Abstractions/Plainion.GraphViz.Viewer.Abstractions.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net8.0-windows 5 | true 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Viewer.Abstractions/Properties/AssemblyDefs.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.Versioning; 2 | 3 | [assembly: SupportedOSPlatform("windows7.0")] 4 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Viewer.Abstractions/RegionNames.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace Plainion.GraphViz.Viewer.Abstractions; 3 | 4 | public static class RegionNames 5 | { 6 | public const string AddIns = "Region.AddIns"; 7 | 8 | public const string PrimaryToolBox = "Region.ToolBox.Primary"; 9 | public const string SecondaryToolBox = "Region.ToolBox.Secondary"; 10 | } 11 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Viewer.Abstractions/Services/IDocumentLoader.cs: -------------------------------------------------------------------------------- 1 |  2 | using Plainion.GraphViz.Presentation; 3 | 4 | namespace Plainion.GraphViz.Viewer.Abstractions.Services 5 | { 6 | public interface IDocumentLoader 7 | { 8 | bool CanLoad(string filename); 9 | 10 | void Load(string filename); 11 | 12 | IGraphPresentation Read(string filename); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Viewer.Abstractions/Services/IPresentationCreationService.cs: -------------------------------------------------------------------------------- 1 | using Plainion.GraphViz.Presentation; 2 | 3 | namespace Plainion.GraphViz.Viewer.Abstractions.Services 4 | { 5 | public interface IPresentationCreationService 6 | { 7 | IGraphPresentation CreatePresentation(string dataRoot); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Viewer.Abstractions/Services/IStatusMessageService.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.ObjectModel; 2 | 3 | namespace Plainion.GraphViz.Viewer.Abstractions.Services 4 | { 5 | public interface IStatusMessageService 6 | { 7 | void Publish( StatusMessage message ); 8 | ObservableCollection Messages { get; } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Viewer.Abstractions/Services/StatusMessage.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace Plainion.GraphViz.Viewer.Abstractions.Services 3 | { 4 | public class StatusMessage 5 | { 6 | public StatusMessage( string message ) 7 | { 8 | Message = message; 9 | } 10 | 11 | public string Message { get; private set; } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Viewer.Abstractions/ViewModel/DefaultDomainModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Plainion.GraphViz.Presentation; 3 | 4 | namespace Plainion.GraphViz.Viewer.Abstractions.ViewModel 5 | { 6 | public class DefaultDomainModel : IDomainModel 7 | { 8 | private IGraphPresentation myPresentation; 9 | 10 | public IGraphPresentation Presentation 11 | { 12 | get { return myPresentation; } 13 | set 14 | { 15 | if (myPresentation != value) 16 | { 17 | myPresentation = value; 18 | PresentationChanged?.Invoke(null, EventArgs.Empty); 19 | } 20 | } 21 | } 22 | 23 | public event EventHandler PresentationChanged; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Viewer.Abstractions/ViewModel/IDomainModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel; 3 | using Plainion.GraphViz.Presentation; 4 | 5 | namespace Plainion.GraphViz.Viewer.Abstractions.ViewModel 6 | { 7 | /// 8 | /// Acts as major model and contains all relevant sub-models for the currently visualized graph 9 | /// 10 | public interface IDomainModel 11 | { 12 | IGraphPresentation Presentation { get; set; } 13 | event EventHandler PresentationChanged; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Viewer.Abstractions/ViewModel/NodeWithCaption.cs: -------------------------------------------------------------------------------- 1 | using Plainion.Graphs; 2 | 3 | namespace Plainion.GraphViz.Viewer.Abstractions.ViewModel 4 | { 5 | public class NodeWithCaption 6 | { 7 | public NodeWithCaption(Node node, string displayText) 8 | { 9 | Node = node; 10 | DisplayText = displayText; 11 | } 12 | 13 | public Node Node { get; private set; } 14 | public string DisplayText { get; private set; } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Viewer.Abstractions/ViewModel/ViewModelBase.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Plainion.Prism.Mvvm; 3 | 4 | namespace Plainion.GraphViz.Viewer.Abstractions.ViewModel 5 | { 6 | public abstract class ViewModelBase : ValidatableBindableBase 7 | { 8 | protected ViewModelBase(IDomainModel model) 9 | { 10 | Contract.RequiresNotNull(model, nameof(model)); 11 | 12 | Model = model; 13 | Model.PresentationChanged += OnPresentationChanged; 14 | } 15 | 16 | public IDomainModel Model { get; private set; } 17 | 18 | private void OnPresentationChanged(object sender, EventArgs e) 19 | { 20 | OnPresentationChanged(); 21 | } 22 | 23 | protected virtual void OnPresentationChanged() { } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Viewer/App.xaml: -------------------------------------------------------------------------------- 1 |  6 | 7 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Viewer/GraphIcon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/src/Plainion.GraphViz.Viewer/GraphIcon.ico -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Viewer/Plainion.GraphViz.Viewer.csproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | ProjectFiles 5 | 6 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Viewer/Plainion.GraphViz.Viewer.xaml: -------------------------------------------------------------------------------- 1 |  2 | 4 | 5 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Viewer/Properties/AssemblyDefs.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.Versioning; 2 | 3 | [assembly: SupportedOSPlatform("windows7.0")] 4 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Viewer/RegionNames.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace Plainion.GraphViz.Viewer 3 | { 4 | static class RegionNames 5 | { 6 | public static readonly string GraphViewer = "Region.GraphViewer"; 7 | public static readonly string SettingsEditor = "Region.Settings.Editor"; 8 | public static readonly string StatusMessagesViewer = "Region.StatusMessagesViewer"; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Viewer/Resources/Export.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/src/Plainion.GraphViz.Viewer/Resources/Export.png -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Viewer/Resources/GraphIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/src/Plainion.GraphViz.Viewer/Resources/GraphIcon.png -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Viewer/Resources/Print.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/src/Plainion.GraphViz.Viewer/Resources/Print.png -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Viewer/Resources/Refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/src/Plainion.GraphViz.Viewer/Resources/Refresh.png -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Viewer/Resources/Settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/src/Plainion.GraphViz.Viewer/Resources/Settings.png -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Viewer/Resources/StatusMessages.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plainionist/Plainion.GraphViz/f288f91748f71731ee5dcd61b89f33ad714a93d6/src/Plainion.GraphViz.Viewer/Resources/StatusMessages.png -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Viewer/Services/ConfigurationService.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Plainion.GraphViz.Viewer.Configuration; 3 | 4 | namespace Plainion.GraphViz.Viewer.Services 5 | { 6 | class ConfigurationService 7 | { 8 | public Config Config { get; private set; } 9 | 10 | public ConfigurationService() 11 | { 12 | Config = Config.LoadDefaults(); 13 | } 14 | 15 | public void Update( string dataRoot ) 16 | { 17 | Config = Config.Load( dataRoot ); 18 | 19 | if( ConfigChanged != null ) 20 | { 21 | ConfigChanged( this, EventArgs.Empty ); 22 | } 23 | } 24 | 25 | public event EventHandler ConfigChanged; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Viewer/Services/StatusMessageService.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.ObjectModel; 2 | using Plainion.GraphViz.Viewer.Abstractions.Services; 3 | 4 | namespace Plainion.GraphViz.Viewer.Services 5 | { 6 | class StatusMessageService : IStatusMessageService 7 | { 8 | public StatusMessageService() 9 | { 10 | Messages = new ObservableCollection(); 11 | } 12 | 13 | public void Publish( StatusMessage message ) 14 | { 15 | Messages.Add( message ); 16 | } 17 | 18 | public ObservableCollection Messages 19 | { 20 | get; 21 | private set; 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Viewer/ViewModels/ClusterWithCaption.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace Plainion.GraphViz.Viewer.ViewModels 3 | { 4 | class ClusterWithCaption 5 | { 6 | public string Id { get; set; } 7 | public string Caption { get; set; } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Viewer/ViewModels/StatusMessagesViewModel.cs: -------------------------------------------------------------------------------- 1 | using Plainion.GraphViz.Viewer.Abstractions.Services; 2 | using Prism.Mvvm; 3 | 4 | namespace Plainion.GraphViz.Viewer.ViewModels 5 | { 6 | class StatusMessagesViewModel : BindableBase 7 | { 8 | public StatusMessagesViewModel(IStatusMessageService statusMessageService) 9 | { 10 | StatusMessageService = statusMessageService; 11 | } 12 | 13 | public IStatusMessageService StatusMessageService { get; private set; } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Viewer/Views/GraphViewer.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Controls; 2 | using Plainion.GraphViz.Viewer.ViewModels; 3 | 4 | namespace Plainion.GraphViz.Viewer.Views 5 | { 6 | partial class GraphViewer : UserControl 7 | { 8 | public GraphViewer( GraphViewerModel model ) 9 | { 10 | InitializeComponent(); 11 | 12 | DataContext = model; 13 | } 14 | 15 | public GraphView GraphView { get { return myGraphView; } } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Viewer/Views/SettingsEditor.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Controls; 2 | using Plainion.GraphViz.Viewer.ViewModels; 3 | 4 | namespace Plainion.GraphViz.Viewer.Views 5 | { 6 | partial class SettingsEditor : UserControl 7 | { 8 | public SettingsEditor( SettingsEditorModel model ) 9 | { 10 | InitializeComponent(); 11 | 12 | DataContext = model; 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Viewer/Views/StatusMessagesView.xaml: -------------------------------------------------------------------------------- 1 |  5 | 6 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz.Viewer/Views/StatusMessagesView.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Controls; 2 | using Plainion.GraphViz.Viewer.ViewModels; 3 | 4 | namespace Plainion.GraphViz.Viewer.Views 5 | { 6 | partial class StatusMessagesView : UserControl 7 | { 8 | public StatusMessagesView( StatusMessagesViewModel model ) 9 | { 10 | InitializeComponent(); 11 | 12 | DataContext = model; 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz/Dot/DotGraphHeader.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace Plainion.GraphViz.Dot 3 | { 4 | public class DotGraphHeader 5 | { 6 | public double Height { get; set; } 7 | 8 | public double Width { get; set; } 9 | 10 | public int Scale { get; set; } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz/Dot/LayoutAlgorithm.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace Plainion.GraphViz.Dot 3 | { 4 | public enum LayoutAlgorithm 5 | { 6 | Hierarchy, 7 | Flow, 8 | ScalableForceDirectedPlancement, 9 | ForceDirectedPlacement, 10 | NeatSpring 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz/HelpLink.xaml: -------------------------------------------------------------------------------- 1 |  7 | 8 | 9 | Help 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz/HelpLink.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Diagnostics; 2 | using System.Windows; 3 | using System.Windows.Controls; 4 | 5 | namespace Plainion.GraphViz 6 | { 7 | public partial class HelpLink : UserControl 8 | { 9 | public HelpLink() 10 | { 11 | InitializeComponent(); 12 | } 13 | 14 | public static readonly DependencyProperty PageProperty = DependencyProperty.Register("Page", typeof(string), typeof(HelpLink)); 15 | 16 | public string Page 17 | { 18 | get { return (string)GetValue(PageProperty); } 19 | set { SetValue(PageProperty, value); } 20 | } 21 | 22 | private void OnTipsClick(object sender, RoutedEventArgs e) 23 | { 24 | Process.Start(new ProcessStartInfo 25 | { 26 | FileName = "https://plainionist.github.io/Plainion.GraphViz/", 27 | UseShellExecute = true 28 | }); 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz/IGraphViewExport.cs: -------------------------------------------------------------------------------- 1 | using System.IO; 2 | 3 | namespace Plainion.GraphViz 4 | { 5 | public interface IGraphViewExport 6 | { 7 | void ExportAsPng(Stream stream); 8 | } 9 | } -------------------------------------------------------------------------------- /src/Plainion.GraphViz/IGraphViewNavigation.cs: -------------------------------------------------------------------------------- 1 | using Plainion.Graphs; 2 | 3 | namespace Plainion.GraphViz 4 | { 5 | public interface IGraphViewNavigation 6 | { 7 | void NavigateTo(IGraphItem item); 8 | void HomeZoomPan(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz/ILayoutEngine.cs: -------------------------------------------------------------------------------- 1 | using Plainion.GraphViz.Presentation; 2 | 3 | namespace Plainion.GraphViz 4 | { 5 | public interface ILayoutEngine 6 | { 7 | void Relayout( IGraphPresentation presentation ); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz/Plainion.GraphViz.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net8.0-windows 5 | true 6 | latest 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz/Presentation/AbstractPropertySet.cs: -------------------------------------------------------------------------------- 1 | using Plainion.Graphs; 2 | 3 | namespace Plainion.GraphViz.Presentation 4 | { 5 | public abstract class AbstractPropertySet : NotifyPropertyChangedBase 6 | { 7 | protected AbstractPropertySet(string ownerId) 8 | { 9 | System.Contract.RequiresNotNull(ownerId); 10 | 11 | OwnerId = ownerId; 12 | } 13 | 14 | public string OwnerId { get; private set; } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz/Presentation/AbstractStyle.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace Plainion.GraphViz.Presentation 3 | { 4 | public abstract class AbstractStyle : AbstractPropertySet 5 | { 6 | private string myStyle; 7 | 8 | public AbstractStyle( string ownerId ) 9 | : base( ownerId ) 10 | { 11 | } 12 | 13 | // e.g. "solid" 14 | public string Style 15 | { 16 | get { return myStyle; } 17 | set { SetProperty( ref myStyle, value ); } 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz/Presentation/Bookmark.cs: -------------------------------------------------------------------------------- 1 | namespace Plainion.GraphViz.Presentation 2 | { 3 | public class Bookmark 4 | { 5 | public Bookmark(string caption, byte[] state) 6 | { 7 | Contract.RequiresNotNullNotEmpty(caption, nameof(caption)); 8 | Contract.RequiresNotNull(state, nameof(state)); 9 | 10 | Caption = caption; 11 | State = state; 12 | } 13 | 14 | public string Caption { get; private set; } 15 | internal byte[] State { get; private set; } 16 | } 17 | } -------------------------------------------------------------------------------- /src/Plainion.GraphViz/Presentation/Caption.cs: -------------------------------------------------------------------------------- 1 | namespace Plainion.GraphViz.Presentation 2 | { 3 | public class Caption : AbstractPropertySet 4 | { 5 | private string myDisplayText; 6 | 7 | public Caption(string ownerId, string label) 8 | : base(ownerId) 9 | { 10 | Label = string.IsNullOrEmpty(label) ? ownerId : label; 11 | DisplayText = Label; 12 | } 13 | 14 | public string Label { get; private set; } 15 | 16 | public string DisplayText 17 | { 18 | get { return myDisplayText; } 19 | set { SetProperty(ref myDisplayText, value); } 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz/Presentation/CaptionModule.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Plainion.GraphViz.Presentation 4 | { 5 | public class CaptionModule : PropertySetModule, ICaptionModule 6 | { 7 | public CaptionModule(Func defaultProvider) 8 | : base(defaultProvider) 9 | { 10 | } 11 | 12 | public ILabelConverter LabelConverter { get; set; } 13 | 14 | protected override void OnAdding(Caption item) 15 | { 16 | if (LabelConverter != null) 17 | { 18 | item.DisplayText = LabelConverter.Convert(item.Label); 19 | } 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz/Presentation/EdgeLayout.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Linq; 3 | using System.Windows; 4 | 5 | namespace Plainion.GraphViz.Presentation 6 | { 7 | public class EdgeLayout : AbstractPropertySet 8 | { 9 | private IEnumerable myPoints; 10 | private Point myLabelPosition; 11 | 12 | public EdgeLayout( string ownerId ) 13 | : base( ownerId ) 14 | { 15 | Points = null; 16 | } 17 | 18 | public IEnumerable Points 19 | { 20 | get { return myPoints; } 21 | set { SetProperty( ref myPoints, value != null ? value.ToList() : Enumerable.Empty(), "Points" ); } 22 | } 23 | 24 | public Point LabelPosition 25 | { 26 | get { return myLabelPosition; } 27 | set { SetProperty( ref myLabelPosition, value, "LabelPosition" ); } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz/Presentation/EdgeStyle.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Media; 2 | 3 | namespace Plainion.GraphViz.Presentation 4 | { 5 | public class EdgeStyle : AbstractStyle 6 | { 7 | private Brush myColor; 8 | 9 | public EdgeStyle(string ownerId) 10 | : base(ownerId) 11 | { 12 | Color = Brushes.Black; 13 | Style = "solid"; 14 | } 15 | 16 | public Brush Color 17 | { 18 | get { return myColor; } 19 | set { SetProperty(ref myColor, value); } 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz/Presentation/GenericLabelConverter.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Linq; 3 | 4 | namespace Plainion.GraphViz.Presentation 5 | { 6 | /// 7 | /// provides generic multi-pass label conversion 8 | /// 9 | public class GenericLabelConverter : ILabelConverter 10 | { 11 | private IEnumerable myConversionSteps; 12 | 13 | public GenericLabelConverter( IEnumerable steps ) 14 | { 15 | myConversionSteps = steps.ToList(); 16 | } 17 | 18 | public string Convert( string originalLabel ) 19 | { 20 | var label = originalLabel; 21 | 22 | foreach( var step in myConversionSteps ) 23 | { 24 | label = step.Convert( label ); 25 | } 26 | 27 | return label; 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz/Presentation/GraphAttribute.cs: -------------------------------------------------------------------------------- 1 | using Plainion.Graphs; 2 | using Plainion.GraphViz.Dot; 3 | 4 | namespace Plainion.GraphViz.Presentation; 5 | 6 | public class GraphAttribute : NotifyPropertyChangedBase 7 | { 8 | private string myValue; 9 | 10 | /// 11 | /// Value can be null or empty string 12 | /// 13 | public GraphAttribute(LayoutAlgorithm algorithm, string name, string value) 14 | { 15 | System.Contract.RequiresNotNullNotEmpty(name); 16 | 17 | Algorithm = algorithm; 18 | Name = name; 19 | Value = value; 20 | } 21 | 22 | public LayoutAlgorithm Algorithm { get; } 23 | public string Name { get; } 24 | public string Value 25 | { 26 | get { return myValue; } 27 | set 28 | { 29 | var normalizedValue = string.IsNullOrWhiteSpace(value) ? null : value.Trim(); 30 | SetProperty(ref myValue, normalizedValue); 31 | } 32 | } 33 | } 34 | 35 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz/Presentation/ICaptionModule.cs: -------------------------------------------------------------------------------- 1 |  2 | using Plainion.Graphs.Projections; 3 | 4 | namespace Plainion.GraphViz.Presentation 5 | { 6 | public interface ICaptionModule : IPropertySetModule 7 | { 8 | ILabelConverter LabelConverter { get; set; } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz/Presentation/IGraphAttributesModule.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using Plainion.GraphViz.Dot; 3 | 4 | namespace Plainion.GraphViz.Presentation; 5 | 6 | public interface IGraphAttributesModule : IModule 7 | { 8 | /// 9 | /// Empty values are considered as "not set" and are filtered out. 10 | /// 11 | IEnumerable ItemsFor(LayoutAlgorithm algo); 12 | } -------------------------------------------------------------------------------- /src/Plainion.GraphViz/Presentation/IGraphLayoutModule.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using Plainion.Graphs; 3 | using Plainion.GraphViz.Dot; 4 | 5 | namespace Plainion.GraphViz.Presentation 6 | { 7 | public interface IGraphLayoutModule : IModule 8 | { 9 | LayoutAlgorithm Algorithm { get; set; } 10 | 11 | void Add(NodeLayout layout); 12 | void Add(EdgeLayout layout); 13 | void Clear(); 14 | 15 | NodeLayout GetLayout(Node node); 16 | EdgeLayout GetLayout(Edge edge); 17 | 18 | void Set(IEnumerable nodeLayouts, IEnumerable edgeLayouts); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz/Presentation/IGraphPresentation.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Plainion.Graphs; 3 | using Plainion.Graphs.Algorithms; 4 | using Plainion.Graphs.Projections; 5 | 6 | namespace Plainion.GraphViz.Presentation; 7 | 8 | public interface IGraphPresentation : IModuleRepository, IDisposable, IGraphProjections, ICaptionProvider 9 | { 10 | new IGraph Graph { get; set; } 11 | 12 | void InvalidateLayout(); 13 | 14 | event EventHandler GraphVisibilityChanged; 15 | 16 | IGraphPresentation UnionWith(IGraphPresentation other, Func presentationCreator); 17 | } 18 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz/Presentation/IGraphTransformation.cs: -------------------------------------------------------------------------------- 1 | using Plainion.Graphs; 2 | 3 | namespace Plainion.GraphViz.Presentation; 4 | 5 | public interface IGraphTransformation 6 | { 7 | IGraph Transform(IGraph graph); 8 | } 9 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz/Presentation/ILabelConversionStep.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace Plainion.GraphViz.Presentation 3 | { 4 | public interface ILabelConversionStep 5 | { 6 | string Convert( string originalLabel ); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz/Presentation/ILabelConverter.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace Plainion.GraphViz.Presentation 3 | { 4 | /// 5 | /// Provides posibility for the application to do convertions on the label of a graph item. 6 | /// 7 | public interface ILabelConverter 8 | { 9 | string Convert( string originalLabel ); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz/Presentation/IModule.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Collections.Specialized; 3 | 4 | namespace Plainion.GraphViz.Presentation; 5 | 6 | public interface IModule : INotifyCollectionChanged 7 | { 8 | IEnumerable Items { get; } 9 | 10 | IModuleChangedObserver CreateObserver(); 11 | IModuleChangedJournal CreateJournal(); 12 | } 13 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz/Presentation/IModuleChangedJournal.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace Plainion.GraphViz.Presentation 4 | { 5 | public interface IModuleChangedJournal : IModuleChangedObserver 6 | { 7 | IEnumerable Entries { get; } 8 | 9 | bool IsEmpty { get; } 10 | 11 | void Clear(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz/Presentation/IModuleChangedObserver.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Plainion.GraphViz.Presentation 4 | { 5 | public interface IModuleChangedObserver : IDisposable 6 | { 7 | event EventHandler ModuleChanged; 8 | IDisposable Mute(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz/Presentation/IModuleRepository.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace Plainion.GraphViz.Presentation 3 | { 4 | public interface IModuleRepository 5 | { 6 | T GetModule(); 7 | 8 | IPropertySetModule GetPropertySetFor() where T : AbstractPropertySet; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz/Presentation/INodeMaskModule.cs: -------------------------------------------------------------------------------- 1 |  2 | using Plainion.Graphs.Projections; 3 | 4 | namespace Plainion.GraphViz.Presentation; 5 | 6 | public interface INodeMaskModule : IModule 7 | { 8 | void Push(INodeMask mask); 9 | 10 | void Insert(int pos, INodeMask mask); 11 | 12 | void MoveDown(INodeMask item); 13 | 14 | void MoveUp(INodeMask item); 15 | 16 | void Remove(INodeMask item); 17 | } 18 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz/Presentation/IPropertySetModule.cs: -------------------------------------------------------------------------------- 1 | namespace Plainion.GraphViz.Presentation; 2 | 3 | public interface IPropertySetModule : IModule 4 | { 5 | bool Contains(string id); 6 | T TryGet(string id); 7 | T Get(string id); 8 | 9 | void Add(T item); 10 | void Remove(string id); 11 | void Clear(); 12 | } 13 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz/Presentation/ITransformationModule.cs: -------------------------------------------------------------------------------- 1 | using Plainion.Graphs; 2 | 3 | namespace Plainion.GraphViz.Presentation 4 | { 5 | /// 6 | /// Allows transformation of the graph (e.g. folding of nodes) 7 | /// 8 | public interface ITransformationModule : IModule 9 | { 10 | void Add(IGraphTransformation transformation); 11 | 12 | void Clear(); 13 | 14 | IGraph Graph { get; } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz/Presentation/PropertySetComparer.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace Plainion.GraphViz.Presentation 4 | { 5 | class PropertySetComparer : IEqualityComparer 6 | { 7 | public bool Equals( AbstractPropertySet x, AbstractPropertySet y ) 8 | { 9 | return x.OwnerId == y.OwnerId; 10 | } 11 | 12 | public int GetHashCode( AbstractPropertySet obj ) 13 | { 14 | return obj.OwnerId.GetHashCode(); 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz/Presentation/Selection.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | 3 | namespace Plainion.GraphViz.Presentation 4 | { 5 | public class Selection : AbstractPropertySet 6 | { 7 | private bool myIsSelected; 8 | 9 | public Selection( string ownerId ) 10 | : base( ownerId ) 11 | { 12 | IsSelected = false; 13 | } 14 | 15 | public bool IsSelected 16 | { 17 | get { return myIsSelected; } 18 | set { SetProperty( ref myIsSelected, value, "IsSelected" ); } 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz/Presentation/ToolTipContent.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace Plainion.GraphViz.Presentation 3 | { 4 | public class ToolTipContent : AbstractPropertySet 5 | { 6 | private object myContent; 7 | 8 | public ToolTipContent( string ownerId, object content ) 9 | : base( ownerId ) 10 | { 11 | Content = content; 12 | } 13 | 14 | public object Content 15 | { 16 | get { return myContent; } 17 | set { SetProperty( ref myContent, value, "Content" ); } 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz/Profile.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | 4 | namespace Plainion.GraphViz 5 | { 6 | public class Profile : IDisposable 7 | { 8 | private readonly string myMessage; 9 | private readonly DateTime myStart; 10 | 11 | public Profile(string msg) 12 | { 13 | myMessage = msg; 14 | myStart = DateTime.UtcNow; 15 | } 16 | 17 | public void Dispose() 18 | { 19 | Debug.WriteLine(myMessage + ": " + (DateTime.UtcNow - myStart)); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz/Properties/AssemblyDefs.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | using System.Runtime.Versioning; 3 | 4 | [assembly: InternalsVisibleTo("Plainion.GraphViz.Tests")] 5 | [assembly: SupportedOSPlatform("windows7.0")] 6 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | // Auto-Generated by FAKE; do not edit 2 | // 3 | using System.Reflection; 4 | 5 | [assembly: AssemblyTitle("Plainion.GraphViz")] 6 | [assembly: AssemblyProduct("Plainion.GraphViz")] 7 | [assembly: AssemblyDescription("Plainion.GraphViz")] 8 | [assembly: AssemblyCopyright("Copyright @ 2025")] 9 | [assembly: AssemblyVersion("8.3")] 10 | [assembly: AssemblyFileVersion("8.3")] 11 | namespace System { 12 | internal static class AssemblyVersionInformation { 13 | internal const System.String AssemblyTitle = "Plainion.GraphViz"; 14 | internal const System.String AssemblyProduct = "Plainion.GraphViz"; 15 | internal const System.String AssemblyDescription = "Plainion.GraphViz"; 16 | internal const System.String AssemblyCopyright = "Copyright @ 2025"; 17 | internal const System.String AssemblyVersion = "8.3"; 18 | internal const System.String AssemblyFileVersion = "8.3"; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz/TipsPopup.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Windows; 3 | using System.Windows.Controls; 4 | using System.Windows.Documents; 5 | 6 | namespace Plainion.GraphViz 7 | { 8 | public partial class TipsPopup : UserControl 9 | { 10 | public TipsPopup() 11 | { 12 | InitializeComponent(); 13 | } 14 | 15 | public IEnumerable Bullets 16 | { 17 | get { return ( IEnumerable )GetValue( BulletsProperty ); } 18 | set { SetValue( BulletsProperty, value ); } 19 | } 20 | 21 | public static readonly DependencyProperty BulletsProperty = DependencyProperty.Register( "Bullets", typeof( IEnumerable ), typeof( TipsPopup ) ); 22 | 23 | private void OnTipsClick( object sender, RoutedEventArgs e ) 24 | { 25 | var tooltip = ( ( ToolTip )( ( Hyperlink )sender ).ToolTip ); 26 | tooltip.IsOpen = !tooltip.IsOpen; 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/Plainion.GraphViz/Visuals/IVisualPicking.cs: -------------------------------------------------------------------------------- 1 | using System.Windows; 2 | using Plainion.Graphs; 3 | 4 | namespace Plainion.GraphViz.Visuals 5 | { 6 | public interface IVisualPicking 7 | { 8 | IGraphItem PickMousePosition(); 9 | IGraphItem Pick( Point position ); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/Plainion.Graphs.Algorithms.Tests/ModelExtensions.cs: -------------------------------------------------------------------------------- 1 | using System.Linq; 2 | using Plainion.Graphs.Projections; 3 | 4 | namespace Plainion.Graphs.Algorithms.Tests; 5 | 6 | public static class ModelExtensions 7 | { 8 | public static Node GetNode(this IGraphProjections self, string id) => 9 | self.Graph.Nodes.Single(x => x.Id == id); 10 | 11 | public static Cluster GetCluster(this IGraphProjections self, string id) => 12 | self.Graph.Clusters.Single(x => x.Id == id); 13 | } 14 | -------------------------------------------------------------------------------- /src/Plainion.Graphs.Algorithms.Tests/Plainion.Graphs.Algorithms.Tests.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net8.0 5 | false 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/Plainion.Graphs.Algorithms/AbstractAlgorithm.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Plainion.Graphs.Projections; 3 | 4 | namespace Plainion.Graphs.Algorithms; 5 | 6 | public class AbstractAlgorithm 7 | { 8 | public AbstractAlgorithm(IGraphProjections projections) 9 | { 10 | Contract.RequiresNotNull(projections); 11 | 12 | Projections = projections; 13 | } 14 | 15 | protected IGraphProjections Projections { get; } 16 | } 17 | -------------------------------------------------------------------------------- /src/Plainion.Graphs.Algorithms/GetNodesOutsideCluster.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Linq; 3 | using Plainion.Graphs.Projections; 4 | 5 | namespace Plainion.Graphs.Algorithms; 6 | 7 | /// 8 | /// Returns all nodes which are not part of the given cluster. 9 | /// 10 | public class GetNodesOutsideCluster : AbstractAlgorithm 11 | { 12 | public GetNodesOutsideCluster(IGraphProjections projections) 13 | : base(projections) 14 | { 15 | } 16 | 17 | public IReadOnlyCollection Compute(string clusterId) 18 | { 19 | var graph = Projections.TransformedGraph; 20 | 21 | return graph.Nodes 22 | .Where(node => Projections.Picking.Pick(node)) 23 | .Where(node => !graph.Clusters.Any(c => c.Nodes.Any(n => n.Id == node.Id))) 24 | .Select(node => node.Id) 25 | .ToList(); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/Plainion.Graphs.Algorithms/ICaptionProvider.cs: -------------------------------------------------------------------------------- 1 | namespace Plainion.Graphs.Algorithms; 2 | 3 | public interface ICaptionProvider 4 | { 5 | string GetCaption(string id); 6 | } 7 | -------------------------------------------------------------------------------- /src/Plainion.Graphs.Algorithms/NullCaptionProvider.cs: -------------------------------------------------------------------------------- 1 | namespace Plainion.Graphs.Algorithms; 2 | 3 | public class NullCaptionProvider : ICaptionProvider 4 | { 5 | public string GetCaption(string id) => id; 6 | } -------------------------------------------------------------------------------- /src/Plainion.Graphs.Algorithms/Plainion.Graphs.Algorithms.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net8.0 5 | latest 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/Plainion.Graphs.Algorithms/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | // Auto-Generated by FAKE; do not edit 2 | // 3 | using System.Reflection; 4 | 5 | [assembly: AssemblyTitle("Plainion.Graphs.Algorithms")] 6 | [assembly: AssemblyProduct("Plainion.GraphViz")] 7 | [assembly: AssemblyDescription("Plainion.GraphViz")] 8 | [assembly: AssemblyCopyright("Copyright @ 2025")] 9 | [assembly: AssemblyVersion("8.3")] 10 | [assembly: AssemblyFileVersion("8.3")] 11 | namespace System { 12 | internal static class AssemblyVersionInformation { 13 | internal const System.String AssemblyTitle = "Plainion.Graphs.Algorithms"; 14 | internal const System.String AssemblyProduct = "Plainion.GraphViz"; 15 | internal const System.String AssemblyDescription = "Plainion.GraphViz"; 16 | internal const System.String AssemblyCopyright = "Copyright @ 2025"; 17 | internal const System.String AssemblyVersion = "8.3"; 18 | internal const System.String AssemblyFileVersion = "8.3"; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/Plainion.Graphs.Algorithms/RemoveClusters.cs: -------------------------------------------------------------------------------- 1 | using System.Linq; 2 | using Plainion.Graphs.Projections; 3 | 4 | namespace Plainion.Graphs.Algorithms; 5 | 6 | /// 7 | /// Generates "hide mask" removing all visible clusters and their nodes. 8 | /// 9 | public class RemoveClusters : AbstractAlgorithm 10 | { 11 | public RemoveClusters(IGraphProjections projections) 12 | : base(projections) 13 | { 14 | } 15 | 16 | public INodeMask Compute() 17 | { 18 | var graph = Projections.TransformedGraph; 19 | 20 | var clusterNodes = graph.Nodes 21 | // do not process hidden nodes 22 | .Where(Projections.Picking.Pick) 23 | .Where(node => !graph.Clusters.Any(c => c.Nodes.Any(n => n.Id == node.Id))); 24 | 25 | var mask = new NodeMask(); 26 | mask.IsShowMask = false; 27 | mask.Set(clusterNodes); 28 | mask.Label = "Nodes of clusters"; 29 | 30 | return mask; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/Plainion.Graphs/Cluster.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Diagnostics; 4 | using System.Linq; 5 | 6 | namespace Plainion.Graphs; 7 | 8 | [Serializable] 9 | [DebuggerDisplay("{Id}")] 10 | public class Cluster : IGraphItem, IEquatable 11 | { 12 | public Cluster(string id, IEnumerable nodes) 13 | { 14 | Contract.RequiresNotNullNotEmpty(id, nameof(id)); 15 | 16 | Id = id; 17 | 18 | Nodes = nodes.ToList(); 19 | } 20 | 21 | public string Id { get; } 22 | 23 | public IReadOnlyCollection Nodes { get; } 24 | 25 | public bool Equals(Cluster other) => other != null && Id == other.Id; 26 | public override bool Equals(object obj) => Equals(obj as Cluster); 27 | public override int GetHashCode() => Id.GetHashCode(); 28 | } 29 | -------------------------------------------------------------------------------- /src/Plainion.Graphs/IGraph.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace Plainion.Graphs; 4 | 5 | public interface IGraph 6 | { 7 | IReadOnlyCollection Nodes { get; } 8 | IReadOnlyCollection Edges { get; } 9 | IReadOnlyCollection Clusters { get; } 10 | 11 | Node FindNode(string nodeId); 12 | } 13 | -------------------------------------------------------------------------------- /src/Plainion.Graphs/IGraphItem.cs: -------------------------------------------------------------------------------- 1 | namespace Plainion.Graphs; 2 | 3 | /// 4 | /// GraphItem are NOT equal just because the ID is equal. Examples: folding and handling only visible edges in folding 5 | /// -> do NOT implement IEquatable 6 | /// 7 | public interface IGraphItem 8 | { 9 | string Id { get; } 10 | } 11 | -------------------------------------------------------------------------------- /src/Plainion.Graphs/Node.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Diagnostics; 4 | 5 | namespace Plainion.Graphs; 6 | 7 | [Serializable] 8 | [DebuggerDisplay("{Id}")] 9 | public class Node : IGraphItem, IEquatable 10 | { 11 | public Node(string id) 12 | { 13 | Contract.RequiresNotNullNotEmpty(id, nameof(id)); 14 | 15 | Id = id; 16 | 17 | In = []; 18 | Out = []; 19 | } 20 | 21 | public string Id { get; } 22 | 23 | public IList In { get; } 24 | public IList Out { get; } 25 | 26 | public bool Equals(Node other) => other != null && Id == other.Id; 27 | public override bool Equals(object obj) => Equals(obj as Node); 28 | public override int GetHashCode() => Id.GetHashCode(); 29 | } 30 | -------------------------------------------------------------------------------- /src/Plainion.Graphs/NotifyPropertyChangedBase.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | using System.Runtime.CompilerServices; 3 | 4 | namespace Plainion.Graphs; 5 | 6 | public class NotifyPropertyChangedBase : INotifyPropertyChanged 7 | { 8 | public event PropertyChangedEventHandler PropertyChanged; 9 | 10 | protected bool SetProperty(ref T storage, T value, [CallerMemberName] string propertyName = null) 11 | { 12 | if (Equals(storage, value)) 13 | { 14 | return false; 15 | } 16 | 17 | storage = value; 18 | 19 | OnPropertyChanged(propertyName); 20 | 21 | return true; 22 | } 23 | 24 | protected virtual void OnPropertyChanged(string propertyName) 25 | { 26 | PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/Plainion.Graphs/Plainion.Graphs.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net8.0 5 | latest 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/Plainion.Graphs/Projections/IClusterFolding.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace Plainion.Graphs.Projections; 4 | 5 | public interface IClusterFolding 6 | { 7 | IReadOnlyCollection Clusters { get; } 8 | 9 | IReadOnlyCollection GetNodes(string clusterId); 10 | 11 | void Add(string clusterId); 12 | void Add(IEnumerable clusterIds); 13 | void Remove(string clusterId); 14 | void Remove(IEnumerable clusterIds); 15 | 16 | void Toggle(string clusterId); 17 | 18 | string GetClusterNodeId(string clusterId); 19 | } 20 | -------------------------------------------------------------------------------- /src/Plainion.Graphs/Projections/IGraphPicking.cs: -------------------------------------------------------------------------------- 1 | namespace Plainion.Graphs.Projections; 2 | 3 | /// 4 | /// Returns true if the given element is visible according to the masks. 5 | /// 6 | public interface IGraphPicking 7 | { 8 | bool Pick(Node node); 9 | bool Pick(Edge edge); 10 | bool Pick(Cluster cluster); 11 | } 12 | -------------------------------------------------------------------------------- /src/Plainion.Graphs/Projections/IGraphProjections.cs: -------------------------------------------------------------------------------- 1 | namespace Plainion.Graphs.Projections; 2 | 3 | public interface IGraphProjections 4 | { 5 | IGraph Graph { get; } 6 | IGraph TransformedGraph { get; } 7 | 8 | IGraphPicking Picking { get; } 9 | IClusterFolding ClusterFolding { get; } 10 | } 11 | -------------------------------------------------------------------------------- /src/Plainion.Graphs/Projections/INodeMask.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | using System.Runtime.Serialization; 3 | 4 | namespace Plainion.Graphs.Projections; 5 | 6 | public interface INodeMask : INotifyPropertyChanged, ISerializable 7 | { 8 | string Label { get; set; } 9 | 10 | /// 11 | /// Indicates whether the mask defines the nodes to show or to hide 12 | /// Default: true 13 | /// 14 | bool IsShowMask { get; set; } 15 | 16 | /// 17 | /// Defines whether mask is considered when rendering the scene or not. 18 | /// this approach avoid having two models (all masks, rendered masks) in sync. 19 | /// Default: true 20 | /// 21 | bool IsApplied { get; set; } 22 | 23 | bool? IsSet(Node node); 24 | 25 | void Invert(IGraph graph, IGraphPicking picking); 26 | } 27 | -------------------------------------------------------------------------------- /src/Plainion.Graphs/Projections/NullGraphPicking.cs: -------------------------------------------------------------------------------- 1 | namespace Plainion.Graphs.Projections; 2 | 3 | /// 4 | /// Null-object pattern for . 5 | /// 6 | public class NullGraphPicking : IGraphPicking 7 | { 8 | public bool Pick(Node node) => true; 9 | public bool Pick(Edge edge) => true; 10 | public bool Pick(Cluster cluster) => true; 11 | } 12 | -------------------------------------------------------------------------------- /src/Plainion.Graphs/Projections/NullGraphProjections.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Plainion.Graphs.Projections; 4 | 5 | public class NullGraphProjections : IGraphProjections 6 | { 7 | public NullGraphProjections(IGraph graph) 8 | { 9 | Contract.RequiresNotNull(graph); 10 | 11 | Graph = graph; 12 | TransformedGraph = graph; 13 | 14 | Picking = new NullGraphPicking(); 15 | ClusterFolding = new ClusterFolding(this); 16 | } 17 | 18 | public IGraph Graph { get; } 19 | 20 | public IGraph TransformedGraph { get; } 21 | 22 | public IGraphPicking Picking { get; } 23 | 24 | public IClusterFolding ClusterFolding { get; } 25 | } -------------------------------------------------------------------------------- /src/Plainion.Graphs/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | // Auto-Generated by FAKE; do not edit 2 | // 3 | using System.Reflection; 4 | 5 | [assembly: AssemblyTitle("Plainion.Graphs")] 6 | [assembly: AssemblyProduct("Plainion.GraphViz")] 7 | [assembly: AssemblyDescription("Plainion.GraphViz")] 8 | [assembly: AssemblyCopyright("Copyright @ 2025")] 9 | [assembly: AssemblyVersion("8.3")] 10 | [assembly: AssemblyFileVersion("8.3")] 11 | namespace System { 12 | internal static class AssemblyVersionInformation { 13 | internal const System.String AssemblyTitle = "Plainion.Graphs"; 14 | internal const System.String AssemblyProduct = "Plainion.GraphViz"; 15 | internal const System.String AssemblyDescription = "Plainion.GraphViz"; 16 | internal const System.String AssemblyCopyright = "Copyright @ 2025"; 17 | internal const System.String AssemblyVersion = "8.3"; 18 | internal const System.String AssemblyFileVersion = "8.3"; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/Plainion.Graphs/SiblingsType.cs: -------------------------------------------------------------------------------- 1 | namespace Plainion.Graphs; 2 | 3 | public enum SiblingsType 4 | { 5 | None, 6 | Sources, 7 | Targets, 8 | Any 9 | } 10 | -------------------------------------------------------------------------------- /src/Plainion.Graphs/Undirected/Node.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Diagnostics; 4 | 5 | namespace Plainion.Graphs.Undirected; 6 | 7 | [DebuggerDisplay("{Id}")] 8 | public class Node : IGraphItem, IEquatable 9 | { 10 | public Node(string id) 11 | { 12 | System.Contract.RequiresNotNullNotEmpty(id); 13 | 14 | Id = id; 15 | 16 | Neighbors = []; 17 | } 18 | 19 | public string Id { get; } 20 | 21 | public IList Neighbors { get; } 22 | 23 | public bool Equals(Node other) => other != null && Id == other.Id; 24 | public override bool Equals(object obj) => Equals(obj as Node); 25 | public override int GetHashCode() => Id.GetHashCode(); 26 | } 27 | -------------------------------------------------------------------------------- /testData/DummyProject.Lib/AbstractBuilder.cs: -------------------------------------------------------------------------------- 1 | namespace DummyProject.Lib 2 | { 3 | public abstract class AbstractBuilder : IBuilder 4 | { 5 | public abstract void Build(); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /testData/DummyProject.Lib/DummyProject.Lib.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net8.0;net48 5 | 9.0 6 | 7 | 8 | -------------------------------------------------------------------------------- /testData/DummyProject.Lib/IBuilder.cs: -------------------------------------------------------------------------------- 1 | namespace DummyProject.Lib 2 | { 3 | public interface IBuilder 4 | { 5 | void Build(); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /testData/DummyProject/Builder.cs: -------------------------------------------------------------------------------- 1 | using DummyProject.Lib; 2 | 3 | namespace DummyProject 4 | { 5 | class Builder : AbstractBuilder 6 | { 7 | public override void Build() 8 | { 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /testData/DummyProject/Component.cs: -------------------------------------------------------------------------------- 1 | using DummyProject.Lib; 2 | 3 | namespace DummyProject 4 | { 5 | class Component 6 | { 7 | private readonly IBuilder myBuilder; 8 | 9 | public Component(IBuilder builder) 10 | { 11 | myBuilder = builder; 12 | } 13 | 14 | public void Init() 15 | { 16 | myBuilder.Build(); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /testData/DummyProject/DummyProject.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net8.0;net48 5 | 9.0 6 | 7 | 8 | 9 | 10 | 11 | 12 | --------------------------------------------------------------------------------