| Quintiq file version 2.0 | 
| #parent: CustomDrawComponentContainer/CustomDrawDataLayerComponent | 
| Response OnDrawObject ( | 
|   LibOpt_Component object | 
| ) id:Response_CustomDrawComponentContainer_CustomDrawDataLayerComponent_OnDrawObject | 
| { | 
|   #keys: '[139164.3.945949135]' | 
|   Body: | 
|   [* | 
|     scale_x := ValueHolderScaleX.Data(); | 
|     scale_y := ValueHolderScaleY.Data(); | 
|      | 
|     image := object.UIImage(); | 
|      | 
|     height := region.Height(); | 
|      | 
|     DEFAULT_OFFSET := 5; | 
|      | 
|     color := Form.GetColor( object ); | 
|       | 
|     surface.Brush().Color( color ); | 
|      | 
|     surface.Draw( shape ); | 
|      | 
|     surface.Brush().Color( Color::White() ); | 
|      | 
|     offset := minvalue( 5, [Number] ( DEFAULT_OFFSET * maxvalue( scale_x, scale_y ) ) ); | 
|     diameter := [Number] ( ( object.UIGraphNode().Height() - offset * 2 ) * minvalue( scale_x, scale_y ) ); | 
|     circle_offset_y := [Number] ( ( height - diameter ) / 2 ); | 
|     circle_offset_x := minvalue( [Number] ( scale_x * DEFAULT_OFFSET ), circle_offset_y ); | 
|     surface.Pen().Width( 0 ); | 
|     surface.Circle( circle_offset_x, circle_offset_y, diameter ); | 
|      | 
|     // Progress | 
|     if( object.Task( relsize ) > 0 ) | 
|     {                           | 
|       prog := object.Progress(); | 
|        | 
|       if( prog < 1.0 ) | 
|       { | 
|         surface.Brush().Color( color ); | 
|         surface.Circle( circle_offset_x + 2, circle_offset_y + 2, diameter - 4 ); | 
|        | 
|         surface.Brush().Color( Color::Color( 255, 255, 255, 0.75 ) ); | 
|         surface.Circle( circle_offset_x + 2, circle_offset_y + 2, diameter - 4 ); | 
|       }                                | 
|       surface.Brush().Color( color ); | 
|       if( prog < 0.0 ) | 
|       { | 
|         surface.Brush().Color( Color::Red() ); | 
|       } | 
|       surface.Pie( circle_offset_x + 2, circle_offset_y + 2, diameter - 4, diameter - 4, -90, [Number] ( 360 * prog ) ); | 
|        | 
|       surface.Brush().Color( Color::White() ); | 
|       surface.Circle( circle_offset_x + 4, circle_offset_y + 4, diameter - 8 ); | 
|     } | 
|      | 
|     status := object.Run().Status(); | 
|     if( status = LibOpt_RunStatus::Loaded() ) | 
|     { | 
|       image_size := [Number] ( diameter * sin( 0.25 * pi ) - 4 ); | 
|       image_offset := [Number] ( ( diameter - image_size ) / 2 ); | 
|        | 
|       surface.Image( circle_offset_x + image_offset, | 
|                      circle_offset_y + image_offset, | 
|                      image_size, image_size, image ); | 
|     } | 
|     else | 
|     { | 
|       nr_text := object.NrTimesCalled();                                        | 
|       format := TextFormat::Construct(); | 
|       format.AlignMiddle(); | 
|       format.AlignCenter(); | 
|       font_size := surface.Font().Size(); | 
|       surface.Font().Size( 100 ); | 
|       surface.Font().Bold( true ); | 
|       surface.TextColor( color ); | 
|       surface.TextFit( circle_offset_x + 6, circle_offset_y + 6, diameter - 12, diameter - 12, [String] nr_text, font_size, format ); | 
|       surface.Font().Size( font_size ); | 
|       surface.TextColor( Color::Black() ); | 
|     } | 
|      | 
|     if( not object.CanBeCalled() ) | 
|     { | 
|       overlaycolor := Color::Color( 255, 255, 255, 0.5 ); | 
|       surface.Brush().Color( overlaycolor ); | 
|       surface.Pen().Width( 1 ); | 
|       surface.Draw( shape ); | 
|     } | 
|      | 
|     format := TextFormat::Construct(); | 
|     format.WrapWords(); | 
|      | 
|     surface.Font().Bold( true ); | 
|      | 
|     text_region := region.CenterRect( region.Width() - offset * 2, region.Height() - offset * 2 ); | 
|     text_region := text_region.RightRect( text_region.Width() - diameter - circle_offset_x * 2 + offset, text_region.Height() ); | 
|      | 
|     lines := text.TrimBoth().Tokenize( String::NewLine() ); | 
|      | 
|     if( lines.Size() = 1 ) | 
|     { | 
|       format.AlignMiddle(); | 
|       surface.TextFit( text_region, lines.Element( 0 ), 1, format ); | 
|     } | 
|     else if( lines.Size() > 1 ) | 
|     { | 
|       format.AlignBottom(); | 
|       line_offset := 2; | 
|       line_height := [Number] ( ( text_region.Height() - line_offset * ( lines.Size() - 1 ) ) / lines.Size() ); | 
|       for( i := 0; i < lines.Size(); i++ ) | 
|       { | 
|         if( i = lines.Size() - 1 ) | 
|         { | 
|           format.AlignTop(); | 
|         } | 
|         line_region := text_region.BottomRect( text_region.Width(), text_region.Height() - ( line_offset + line_height ) * i ) | 
|                                   .TopRect( text_region.Width(), line_height ); | 
|         surface.TextFit( line_region, lines.Element( i ), 1, format ); | 
|         surface.Font().Bold( false ); | 
|         format.AlignMiddle(); | 
|       } | 
|     } | 
|   *] | 
|   CanBindMultiple: false | 
|   DefinitionID: 'Responsedef_CustomDrawDataLayer_OnDrawObject' | 
| } |