Mon 21 Jul 22:43:21 CEST 2025
This commit is contained in:
parent
c9cc994422
commit
7f35db95ee
|
@ -0,0 +1,220 @@
|
|||
/**
|
||||
* Copyright (c) 2006-2015, JGraph Ltd
|
||||
* Copyright (c) 2006-2015, Gaudenz Alder
|
||||
*/
|
||||
/**
|
||||
* Class: mxGraphHierarchyNode
|
||||
*
|
||||
* An abstraction of a hierarchical edge for the hierarchy layout
|
||||
*
|
||||
* Constructor: mxGraphHierarchyNode
|
||||
*
|
||||
* Constructs an internal node to represent the specified real graph cell
|
||||
*
|
||||
* Arguments:
|
||||
*
|
||||
* cell - the real graph cell this node represents
|
||||
*/
|
||||
function mxGraphHierarchyNode(cell)
|
||||
{
|
||||
mxGraphAbstractHierarchyCell.apply(this, arguments);
|
||||
this.cell = cell;
|
||||
this.id = mxObjectIdentity.get(cell);
|
||||
this.connectsAsTarget = [];
|
||||
this.connectsAsSource = [];
|
||||
};
|
||||
|
||||
/**
|
||||
* Extends mxGraphAbstractHierarchyCell.
|
||||
*/
|
||||
mxGraphHierarchyNode.prototype = new mxGraphAbstractHierarchyCell();
|
||||
mxGraphHierarchyNode.prototype.constructor = mxGraphHierarchyNode;
|
||||
|
||||
/**
|
||||
* Variable: cell
|
||||
*
|
||||
* The graph cell this object represents.
|
||||
*/
|
||||
mxGraphHierarchyNode.prototype.cell = null;
|
||||
|
||||
/**
|
||||
* Variable: id
|
||||
*
|
||||
* The object identity of the wrapped cell
|
||||
*/
|
||||
mxGraphHierarchyNode.prototype.id = null;
|
||||
|
||||
/**
|
||||
* Variable: connectsAsTarget
|
||||
*
|
||||
* Collection of hierarchy edges that have this node as a target
|
||||
*/
|
||||
mxGraphHierarchyNode.prototype.connectsAsTarget = null;
|
||||
|
||||
/**
|
||||
* Variable: connectsAsSource
|
||||
*
|
||||
* Collection of hierarchy edges that have this node as a source
|
||||
*/
|
||||
mxGraphHierarchyNode.prototype.connectsAsSource = null;
|
||||
|
||||
/**
|
||||
* Variable: hashCode
|
||||
*
|
||||
* Assigns a unique hashcode for each node. Used by the model dfs instead
|
||||
* of copying HashSets
|
||||
*/
|
||||
mxGraphHierarchyNode.prototype.hashCode = false;
|
||||
|
||||
/**
|
||||
* Function: getRankValue
|
||||
*
|
||||
* Returns the integer value of the layer that this node resides in
|
||||
*/
|
||||
mxGraphHierarchyNode.prototype.getRankValue = function(layer)
|
||||
{
|
||||
return this.maxRank;
|
||||
};
|
||||
|
||||
/**
|
||||
* Function: getNextLayerConnectedCells
|
||||
*
|
||||
* Returns the cells this cell connects to on the next layer up
|
||||
*/
|
||||
mxGraphHierarchyNode.prototype.getNextLayerConnectedCells = function(layer)
|
||||
{
|
||||
if (this.nextLayerConnectedCells == null)
|
||||
{
|
||||
this.nextLayerConnectedCells = [];
|
||||
this.nextLayerConnectedCells[0] = [];
|
||||
|
||||
for (var i = 0; i < this.connectsAsTarget.length; i++)
|
||||
{
|
||||
var edge = this.connectsAsTarget[i];
|
||||
|
||||
if (edge.maxRank == -1 || edge.maxRank == layer + 1)
|
||||
{
|
||||
// Either edge is not in any rank or
|
||||
// no dummy nodes in edge, add node of other side of edge
|
||||
this.nextLayerConnectedCells[0].push(edge.source);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Edge spans at least two layers, add edge
|
||||
this.nextLayerConnectedCells[0].push(edge);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return this.nextLayerConnectedCells[0];
|
||||
};
|
||||
|
||||
/**
|
||||
* Function: getPreviousLayerConnectedCells
|
||||
*
|
||||
* Returns the cells this cell connects to on the next layer down
|
||||
*/
|
||||
mxGraphHierarchyNode.prototype.getPreviousLayerConnectedCells = function(layer)
|
||||
{
|
||||
if (this.previousLayerConnectedCells == null)
|
||||
{
|
||||
this.previousLayerConnectedCells = [];
|
||||
this.previousLayerConnectedCells[0] = [];
|
||||
|
||||
for (var i = 0; i < this.connectsAsSource.length; i++)
|
||||
{
|
||||
var edge = this.connectsAsSource[i];
|
||||
|
||||
if (edge.minRank == -1 || edge.minRank == layer - 1)
|
||||
{
|
||||
// No dummy nodes in edge, add node of other side of edge
|
||||
this.previousLayerConnectedCells[0].push(edge.target);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Edge spans at least two layers, add edge
|
||||
this.previousLayerConnectedCells[0].push(edge);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return this.previousLayerConnectedCells[0];
|
||||
};
|
||||
|
||||
/**
|
||||
* Function: isVertex
|
||||
*
|
||||
* Returns true.
|
||||
*/
|
||||
mxGraphHierarchyNode.prototype.isVertex = function()
|
||||
{
|
||||
return true;
|
||||
};
|
||||
|
||||
/**
|
||||
* Function: getGeneralPurposeVariable
|
||||
*
|
||||
* Gets the value of temp for the specified layer
|
||||
*/
|
||||
mxGraphHierarchyNode.prototype.getGeneralPurposeVariable = function(layer)
|
||||
{
|
||||
return this.temp[0];
|
||||
};
|
||||
|
||||
/**
|
||||
* Function: setGeneralPurposeVariable
|
||||
*
|
||||
* Set the value of temp for the specified layer
|
||||
*/
|
||||
mxGraphHierarchyNode.prototype.setGeneralPurposeVariable = function(layer, value)
|
||||
{
|
||||
this.temp[0] = value;
|
||||
};
|
||||
|
||||
/**
|
||||
* Function: isAncestor
|
||||
*/
|
||||
mxGraphHierarchyNode.prototype.isAncestor = function(otherNode)
|
||||
{
|
||||
// Firstly, the hash code of this node needs to be shorter than the
|
||||
// other node
|
||||
if (otherNode != null && this.hashCode != null && otherNode.hashCode != null
|
||||
&& this.hashCode.length < otherNode.hashCode.length)
|
||||
{
|
||||
if (this.hashCode == otherNode.hashCode)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if (this.hashCode == null || this.hashCode == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Secondly, this hash code must match the start of the other
|
||||
// node's hash code. Arrays.equals cannot be used here since
|
||||
// the arrays are different length, and we do not want to
|
||||
// perform another array copy.
|
||||
for (var i = 0; i < this.hashCode.length; i++)
|
||||
{
|
||||
if (this.hashCode[i] != otherNode.hashCode[i])
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
/**
|
||||
* Function: getCoreCell
|
||||
*
|
||||
* Gets the core vertex associated with this wrapper
|
||||
*/
|
||||
mxGraphHierarchyNode.prototype.getCoreCell = function()
|
||||
{
|
||||
return this.cell;
|
||||
};
|
Loading…
Reference in New Issue
Block a user