X-Git-Url: http://nitlanguage.org diff --git a/src/model_viz.nit b/src/model_viz.nit index b89e549..20be8c3 100644 --- a/src/model_viz.nit +++ b/src/model_viz.nit @@ -30,7 +30,7 @@ class MProjectTree redef fun display(a) do if a isa MGroup then - if a.parent == null then return "{a.mproject.name} ({a.filepath})" + if a.parent == null then return "{a.mproject.name} ({a.filepath.to_s})" return a.name + " (group)" else if a isa MModule then return a.name @@ -39,7 +39,7 @@ class MProjectTree end end - var linex_comparator: nullable LinexComparator = null + private var linex_comparator: nullable LinexComparator = null # Sort modules and groups with their names fun sort_with_alpha @@ -62,7 +62,7 @@ end # Compare modules and groups using the # FIXME do not use Object, but a better common interface of MModule and MGroup private class LinexComparator - super AbstractSorter[Object] + super Comparator[Object] var mins = new HashMap [MGroup, nullable MModule] var maxs = new HashMap [MGroup, nullable MModule] fun min(o: Object): nullable MModule do @@ -135,6 +135,8 @@ end # Interessing elements must be selected. See `mmodules`, `` # Display configuration can be set. See `cluster_group`, `project_group` class MProjectDot + super Streamable + # The model where to look for information var model: Model @@ -146,7 +148,7 @@ class MProjectDot # Initially empty, modules can be added var mmodules = new HashSet[MModule] - private fun node_for(mmodule: MModule): nullable String + private fun node_for(mmodule: MModule): String do return "m_{mmodule.object_id}" end @@ -164,7 +166,7 @@ class MProjectDot if mgroup.parent == null then # is is a root group, so display the project if project_group then - o.write("subgraph cluster_{mgroup.object_id} \{\nlabel=\"{mgroup.mproject.name}\\n({mgroup.filepath})\"\ncolor=black\nstyle=dotted\n") + o.write("subgraph cluster_{mgroup.object_id} \{\nlabel=\"{mgroup.mproject.name}\\n({mgroup.filepath.to_s})\"\ncolor=black\nstyle=dotted\n") end else if cluster_group then @@ -210,12 +212,13 @@ class MProjectDot end end - # Generate the dot-file named `filepath` with the current configuration - fun render(filepath: String) + # Generate the dot content with the current configuration + redef fun write_to(stream) do # Collect interessing nodes for m in model.mmodules do # filter out modules outside wanted projects + if m.mgroup == null then continue if not mprojects.has(m.mgroup.mproject) then continue mmodules.add(m) @@ -234,13 +237,11 @@ class MProjectDot end end - print "generating {filepath}" - var dot = new OFStream.open(filepath) - dot.write("digraph g \{\n") - dot.write("rankdir=BT;node[shape=box];\n") + stream.write("digraph g \{\n") + stream.write("rankdir=BT;node[shape=box];\n") # Generate the nodes for p in model.mprojects do - dot_cluster(dot, p.root.as(not null)) + dot_cluster(stream, p.root.as(not null)) end # Generate the edges for m in mmodules do @@ -248,14 +249,12 @@ class MProjectDot var nm = node_for(m) var nsm = node_for(sm) if m.in_importation.direct_greaters.has(sm) then - dot.write("\t{nm} -> {nsm}[style=bold]\n") + stream.write("\t{nm} -> {nsm}[style=bold]\n") else - dot.write("\t{nm} -> {nsm}[style=solid]\n") + stream.write("\t{nm} -> {nsm}[style=solid]\n") end end end - dot.write("\}\n") - dot.close - # sys.system("xdot -f dot {filepath}") + stream.write("\}\n") end end