Quintiq file version 2.0
#parent: #root
Method AdjustTrees (
  output owning shadow[SCVConfiguration] scvConfig
) id:Method_FormSupplyChainVisualization_AdjustTrees
{
  #keys: '[132894.0.984127057]'
  Body:
  [*
    // Adjust trees position, this is the last step of populate Y position
    // If downstream tree taller, we adjust upstream tree, vice versa
    
    root := select( scvConfig, SCVNode, node,
                    node.IsRoot() );
    
    // To adjust the tree Y position, we pre-compute the root node position
    // from upstream and downstream, whoever is at the higher position, needs
    // to adjust its side lower 
    this.AdjustNodeYPos( &scvConfig, root, true /*isupstream*/ ); 
    upStreamY := root.Y();
    this.AdjustNodeYPos( &scvConfig, root, false /*isupstream*/ );
    downStreamY := root.Y();
    
    offset := upStreamY - downStreamY;
    isupstream := false;
    
    // If upStream is higher, move it down
    // vice versa
    if( offset < 0 )
    {
      isupstream := true;
    }
    
    // Adjust the whole side of the tree
    traverse( scvConfig, SCVNode, node,
              node.IsUpstream() = isupstream )
    {
      node.Y( node.Y() + abs( offset ) );
    }
    
    root.Y( ifexpr( offset < 0, downStreamY, upStreamY ) );
  *]
}
