| Quintiq file version 2.0 | 
| #parent: #root | 
| Function CalcX | 
| { | 
|   TextBody: | 
|   [* | 
|     // Adhi Jan-30-2016 (created) | 
|      | 
|     routingstep := this.RoutingStep(); | 
|     rcv := this.RoutingConfiguratorView(); | 
|      | 
|     value := guard( routingstep.X(), 0 ); | 
|      | 
|     if( not isnull( routingstep ) and not isnull( rcv ) ) | 
|     { | 
|       /* | 
|         To ensure centre alignment, we need to know the routing step with the highest number of operation | 
|         if this operation has the highest number of operation, then draw as usual. | 
|         Else, the logic will calculate the offset from x-position to make sure the operation are aligned in the centre | 
|       */ | 
|       routing := this.GetRouting(); | 
|       rsmaxwidth := routing.MaxNrOfOperations(); | 
|       rs := routingstep.Operation( relsize ); | 
|      | 
|       // If the routing step has the highest number of operation, draw like normal | 
|       if( rs = rsmaxwidth ) | 
|       { | 
|         value := value + rcv.OperationOffsetX(); | 
|       } | 
|       else | 
|       { | 
|       // Else, align to the centre | 
|         /* | 
|           If the number of operation within this routing is an even number | 
|           the middle part is offset | 
|           Else, the middle part is the middle point of the ((numberofoperation/2) + 1)th operation | 
|         */ | 
|         centeroffset := value | 
|                         + routingstep.Width() / 2; | 
|      | 
|         if( rs mod 2 = 0 ) | 
|         { | 
|           value := round( centeroffset | 
|                           - rcv.OperationOffsetX() / 2 | 
|                           - ( rs / 2 ) * rcv.OperationWidth() | 
|                           - ( ( rs / 2 ) - 1 ) * rcv.OperationOffsetX() ); | 
|         } | 
|         else | 
|         { | 
|           value := round( centeroffset | 
|                           - rcv.OperationWidth() / 2 | 
|                           - ( ( rs - 1 ) / 2 )* rcv.OperationWidth() | 
|                           - ( ( rs - 1 ) / 2 ) * rcv.OperationOffsetX() ); | 
|         } | 
|       } | 
|      | 
|       // If previous operation exists, just check the last x position + offset + operation width | 
|       if( not isnull( this.Previous() ) ) | 
|       { | 
|         value := this.Previous().X() | 
|                  + rcv.OperationOffsetX() | 
|                  + rcv.OperationWidth(); | 
|       } | 
|     } | 
|      | 
|      | 
|     this.X( value ); | 
|   *] | 
| } |