Created
April 9, 2013 21:32
-
-
Save davidjgraph/5349594 to your computer and use it in GitHub Desktop.
Prototype workaround 2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
mxHierarchicalLayout.prototype.run = function(parent) | |
{ | |
// Separate out unconnected hierarchies | |
var hierarchyVertices = []; | |
var allVertexSet = []; | |
if (this.roots == null && parent != null) | |
{ | |
var filledVertexSet = Object(); | |
this.filterDescendants(parent, filledVertexSet); | |
this.roots = []; | |
var filledVertexSetEmpty = true; | |
// Poor man's isSetEmpty | |
for (var key in filledVertexSet) | |
{ | |
if (filledVertexSet[key] != null) | |
{ | |
filledVertexSetEmpty = false; | |
break; | |
} | |
} | |
while (!filledVertexSetEmpty) | |
{ | |
var candidateRoots = this.findRoots(parent, filledVertexSet); | |
// If the candidate root is an unconnected group cell, remove it from | |
// the layout. We may need a custom set that holds such groups and forces | |
// them to be processed for resizing and/or moving. | |
for (var i = 0; i < candidateRoots.length; i++) | |
{ | |
var vertexSet = Object(); | |
hierarchyVertices.push(vertexSet); | |
this.traverse(candidateRoots[i], true, null, allVertexSet, vertexSet, | |
hierarchyVertices, filledVertexSet); | |
} | |
for (var i = 0; i < candidateRoots.length; i++) | |
{ | |
this.roots.push(candidateRoots[i]); | |
} | |
filledVertexSetEmpty = true; | |
// Poor man's isSetEmpty | |
for (var key in filledVertexSet) | |
{ | |
if (filledVertexSet[key] != null) | |
{ | |
filledVertexSetEmpty = false; | |
break; | |
} | |
} | |
} | |
} | |
else | |
{ | |
// Find vertex set as directed traversal from roots | |
for (var i = 0; i < this.roots.length; i++) | |
{ | |
var vertexSet = Object(); | |
hierarchyVertices.push(vertexSet); | |
this.traverse(this.roots[i], true, null, allVertexSet, vertexSet, | |
hierarchyVertices, null); | |
} | |
} | |
// Iterate through the result removing parents who have children in this layout | |
// Perform a layout for each seperate hierarchy | |
// Track initial coordinate x-positioning | |
var initialX = 0; | |
for (var i = 0; i < hierarchyVertices.length; i++) | |
{ | |
var vertexSet = hierarchyVertices[i]; | |
var tmp = []; | |
for (var key in vertexSet) | |
{ | |
tmp.push(vertexSet[key]); | |
} | |
this.model = new mxGraphHierarchyModel(this, tmp, this.roots, | |
parent, this.tightenToSource); | |
this.cycleStage(parent); | |
this.layeringStage(); | |
this.crossingStage(parent); | |
initialX = this.placementStage(initialX, parent); | |
} | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment