Quintiq file version 2.0
#parent: CustomDrawComponentRoutingConfigurator/CustomDrawDataLayerOperationLinkEdgeRCVHidden
Response OnDrawObject (
  OperationLinkEdge object
) id:Response_CustomDrawComponentRoutingConfigurator_CustomDrawDataLayerOperationLinkEdgeRCVHidden_OnDrawObject
{
  #keys: '[124808.0.1235006012]'
  Body:
  [*
    // Draw operation link edge
    rcv := DataHolderRCView.Data();
    
    // Adjust line based on its orientations
    topdown := object.FromY() < object.ToY();
    leftright := object.FromX() < object.ToX();
    padding := 6;
    
    fromx := region.Left() + padding;
    tox := region.Width() - padding;
    
    if( topdown )
    {
      if( not leftright )
      {
        fromx := region.Width() - padding;
        tox := region.Left() + padding;
      }
    }
    else
    {
      if( leftright )
      {
        fromx := region.Width() - padding;
        tox := region.Left() + padding;
      }
    }
    
    surface.Brush().Reset(); // strange. without this line, the arrow head will not be filled.
    surface.Brush().Color( Color::LightGray() ); // to paint the solid arrowhead
    surface.Pen().Color( Color::Color( 255, 255, 255, 0.3 ) );
    
    // Highlight operation input outputs related to this edge
    highlight := object.IsLinkOf( DataHolderHighlightOperationInputOutputNode.Data() );
    if( highlight )
    {
      surface.Brush().Reset(); // strange. without this line, the arrow head will not be filled.
      surface.Pen().Color( Color::DarkGreen() );
      surface.Brush().Color( Color::DarkGreen() ); // to paint the solid arrowhead
    }
    
    surface.Pen().Style( PenSpecification::StyleDotted() );
    surface.Pen().Width( rcv.EdgeThickness() );
    
    // Draw the directional line
    line := GraphicalLine::LineTo( fromx, region.Top(), tox, region.Height() );
    line.ArrowToEnd( topdown ).ArrowPos( GraphicalLine::ArrowPosMiddle() );  
    surface.Draw( line );
  *]
  CanBindMultiple: false
  DefinitionID: 'Responsedef_CustomDrawDataLayer_OnDrawObject'
  Precondition:
  [*
    return not isnull( DataHolderRCView.Data() );
  *]
}
