| Quintiq file version 2.0 | 
| #parent: CustomDrawComponentContainer/CustomDrawDataLayerLink | 
| Response OnDrawObject ( | 
|   LibOpt_Link object | 
| ) id:Response_CustomDrawComponentContainer_CustomDrawDataLayerLink_OnDrawObject | 
| { | 
|   #keys: '[139164.3.980131598]' | 
|   Body: | 
|   [* | 
|     scale_x := ValueHolderScaleX.Data(); | 
|     scale_y := ValueHolderScaleY.Data(); | 
|      | 
|     // Fix issue that it thinks the Brush is already Black, but is actually White. | 
|     // This prevents me from making the Brush black (as it thinks it is already Black). | 
|     surface.Brush().Color( Color::White() ); | 
|      | 
|     // Retrieve UI Color of Link | 
|     color_string := object.TaskTransporter().UIColor(); | 
|     color := null( Color, owning ); | 
|      | 
|     // Convert color code to Decimal, if its format is Hexadecimal | 
|     if( color_string.SubString( 0, 1 ) = '#' ) | 
|     { | 
|       color_num := LibOpt_Utility::GetColorFromHex( color_string.SubString( 1, color_string.Length() - 1 ) ); | 
|       color := Color::Color( color_num ); | 
|     } | 
|     else | 
|     { | 
|       color := Color::Color( color_string ); | 
|     } | 
|      | 
|     // Set link color to grey, if the origin component cannot be called | 
|     if( not object.GetOrigin().CanBeCalled() ) | 
|     {                                | 
|       color := Color::Color( color, 0.5 ); | 
|     }   | 
|     surface.Pen().Color( color ); | 
|     surface.Brush().Color( color ); | 
|      | 
|     // Retrieve UI Style of Link | 
|     style_string := object.TaskTransporter().UIStyle(); | 
|     style := PenSpecification::StyleNull(); | 
|      | 
|     // Define the PenSpecification style depending on the UI Style of the Link | 
|     if( style_string = 'Solid' ) | 
|     { | 
|       style := PenSpecification::StyleSolid(); | 
|     } | 
|     else if( style_string = 'Dashed' ) | 
|     { | 
|       style := PenSpecification::StyleDashed(); | 
|     } | 
|     else if( style_string = 'Dotted' ) | 
|     { | 
|       style := PenSpecification::StyleDotted(); | 
|     } | 
|      | 
|     // Set the style of the Pen based on the PenSpecification style | 
|     surface.Pen().Style( style ); | 
|      | 
|     surface.Draw( shape ); | 
|      | 
|     text := text.TrimBoth(); | 
|     if( text <> '' ) | 
|     { | 
|       scale := minvalue( scale_x, scale_y ); | 
|       arrow_size := maxvalue( 3, 12 - maxvalue( 2, 2 / scale ) ); | 
|       arrow_size_x := [Number] ( arrow_size * scale / 2 / scale_x ); | 
|      | 
|       // Get the relative X coordinate of the outgoing part | 
|       x := object.First().First().X() - min( object, UIGraphArc.UIGraphArcPoint, p, p.X() - ifexpr( isnull( p.Next() ) and isnull( p.UIGraphArc().Next() ), arrow_size_x, 0 ) ); | 
|        | 
|       origin := object.First().Origin() | 
|       width := origin.Width() / ( origin.Outgoing( relsize ) + 1 ); | 
|        | 
|       format := TextFormat::Construct(); | 
|       format.AlignCenter(); | 
|       format.AlignMiddle(); | 
|        | 
|       surface.Fill( [Number] ( ( x - width / 2 ) * scale_x ), | 
|                     0, | 
|                     [Number] ( width * scale_x ), | 
|                     [Number] ( 12 * scale_y ), Color::White() );  | 
|        | 
|       surface.TextColor( color ); | 
|       surface.TextFit( [Number] ( ( x - width / 2 ) * scale_x ), | 
|                        [Number] ( 2 * scale_y ), | 
|                        [Number] ( width * scale_x ), | 
|                        [Number] ( 10 * scale_y ), | 
|                        text, 1, format ); | 
|     } | 
|   *] | 
|   CanBindMultiple: false | 
|   DefinitionID: 'Responsedef_CustomDrawDataLayer_OnDrawObject' | 
| } |