Vladimir
Vladimir

Reputation: 173

Flex AdvancedDataGrid

I want to set a gradient background for the selected item in my AdvancedDataGrid

How can I do it?

Thanks a lot Vladimir

Upvotes: 0

Views: 825

Answers (1)

Maria Sakharova
Maria Sakharova

Reputation: 1379

You could extend AdvancedDataGrid as in the example below:

import flash.display.GradientType;
import flash.display.Graphics;
import flash.display.Sprite;
import flash.geom.Matrix;   
import mx.controls.AdvancedDataGrid;
import mx.controls.listClasses.IListItemRenderer;
import mx.core.mx_internal;

use namespace mx_internal;
public class CustomAdvancedDataGrid extends AdvancedDataGrid
{
    public var secondaryColor : uint = 0xFFFFFF;

    protected override function drawSelectionIndicator(
        indicator:Sprite, x:Number, y:Number,
        width:Number, height:Number, color:uint,
        itemRenderer:IListItemRenderer) : void
    {
        if (isRowSelectionMode())
            width = unscaledWidth - viewMetrics.left - viewMetrics.right;

        var mat : Matrix = new Matrix();
        mat.createGradientBox(width,height,-90*Math.PI/180);

        var g:Graphics = Sprite(indicator).graphics;
        g.clear();
        g.beginGradientFill(GradientType.LINEAR, [color, secondaryColor], [1, 1], [0, 255], mat);
        g.drawRect(0, 0, width, height);
        g.endFill();

        indicator.x = x;
        indicator.y = y;
    }
}

Other functions you could consider overriding are: drawHighlightIndicator and drawCaretIndicator (which have the same structure). As for the secondaryColor you could leave it hard-coded, or define a style for it.

Upvotes: 3

Related Questions