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
# 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
# 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
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
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
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