Quintiq file version 2.0 #parent: CustomDrawRC/CustomDrawDataLayerOp Response OnDrawObject ( Operation object ) id:Response_CustomDrawRC_CustomDrawDataLayerOp_OnDrawObject { #keys: '[139394.0.1282162832]' CanBindMultiple: false DefinitionID: 'Responsedef_WebCustomDrawDataLayer_OnDrawObject' QuillAction { Body: [* // Draw operation imagesize := ifexpr( object.Unit().IconName() <> '', minvalue( region.BoundingRect().Height(), region.BoundingRect().Width() ), 0 ); //Initialize borders surface.Pen().Style( PenSpecification::StyleSolid() ); surface.Pen().Width( 1 ) surface.Pen().Color( ColorScheme.RoutingConfigurator_RoutingOutline() ); //Initialize filled colors //It is safe to use color scheme as the routing config is not user / scenario specific colorstart := ColorScheme.RoutingConfigurator_OperationFromColor(); colorend := ColorScheme.RoutingConfigurator_OperationToColor(); // Set color to black if operation is being disabled if( not object.IsEnabled() ) { colorstart := ColorScheme.RoutingConfigurator_Disabled(); colorend := ColorScheme.RoutingConfigurator_Disabled(); } surface.Brush().LinearGradient( region.BoundingRect(), colorstart, colorend, 0.0 ); surface.Fill( region.Shape() ); surface.Image( region.BoundingRect().Left(), region.BoundingRect().Top(), imagesize, imagesize, object.Unit().IconName() + '(32)' ); surface.Rect( region.BoundingRect().Left(), region.BoundingRect().Top(), region.BoundingRect().Width(), region.BoundingRect().Height(), ColorScheme.RoutingConfigurator_RoutingOutline() ); //Draw text rcv := MacroPlan.RoutingConfiguratorView(); surface.Font().Name( rcv.FontName() ); surface.Font().Size( rcv.FontSize() ); surface.TextColor( Color::Black() ); textformat := TextFormat::Construct( TextFormat::AlignLeft(), TextFormat::AlignMiddle() ); //doesnt work // Add pen width to push the text rightward more to avoid clipping with the border surface.TextZoom( imagesize + surface.Pen().Width(), 0, region.BoundingRect().Width() - imagesize , region.BoundingRect().Height(), text, textformat ); // Add offset for images //draw input output drop here! //guide to be drawn below the operation routing := guard( object.RoutingStep().Routing(), null( Routing ) ); if( not isnull( routing ) and not routing.HasInputOrOutput() ) { surface.Pen().Style( PenSpecification::StyleDotted() ); surface.Pen().Width( rcv.EdgeThickness() ) surface.Pen().Color( ColorScheme.RoutingConfigurator_DropHereHelp() ); surface.Brush().Color( ColorScheme.RoutingConfigurator_DropHereHelp() ); // to paint the solid arrowhead surface.TextColor( ColorScheme.RoutingConfigurator_DropHereHelp() ); lblx := region.BoundingRect().Left(); lbly := region.BoundingRect().Height() + 20; midh := [Number]( region.BoundingRect().Height() / 2 ); midw := [Number]( region.BoundingRect().Width() / 2 ); line := GraphicalLine::LineTo( midw, lbly, midw, midh ); line.ArrowToEnd( true ).ArrowPos( GraphicalLine::ArrowPosEnd() ); surface.Draw( line ); textformat.WrapWords(); surface.TextZoom( lblx, lbly, region.BoundingRect().Width(), region.BoundingRect().Height(), Translations::MP_Routing_DropHereIO(), textformat ); } *] GroupServerCalls: false } }