Скрыть элементы графика на основе некоторого значения - PullRequest
0 голосов
/ 21 сентября 2011

У меня есть график для отображения текста с помощью itemRenderer. У меня рендерер работает правильно. Теперь, что я хочу показать / скрыть некоторые графики, если они ниже / выше некоторого значения. Я использую компонент «Метка» в качестве «itemRenderer» и переопределяю функцию «данные» (пожалуйста, найдите мой компонент визуализации ниже ..).

Если размер поставщика данных на диаграмме больше 100, я хочу скрыть все «события» с «низкой» степенью серьезности. Для этого мне нужно получить ссылку на поставщика данных, но не знаю, как ...?

Кто-нибудь сталкивался с этой проблемой?

public class EventChartItemRenderer extends Label
{
    private var chartItem:ChartItem;
    private var evtLblTxt:String;
    private var txtBorderColor:uint;
    private var showHide:Boolean;

    public function EventChartItemRenderer()
    {
        super();
    }

    override public function set data(val:Object):void {

        chartItem = val as ChartItem;

        var event:DeviceEventDetails = chartItem.item as DeviceEventDetails;
        if(event.severity == 2){
            evtLblTxt = "2";
            txtBorderColor = 0xFFD685;
            showHide = false;
        }else if(event.severity == 4){
            evtLblTxt = "4";
            txtBorderColor = 0xE68D53;
            showHide = true;
        }else if(event.severity == 6){
            evtLblTxt = "6";
            txtBorderColor = 0xB870DB;
            showHide = true;
        }
    }

    override public function get data():Object {

        return chartItem;
    }

    override protected function commitProperties():void {

        super.commitProperties();
        if(!showHide) return;
        this.text = evtLblTxt;
        this.setStyle("color", txtBorderColor);
        this.setStyle("fontWeight", "bold");
    }

    override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {

        super.updateDisplayList(unscaledWidth, unscaledHeight);

        if(!showHide) return;
        var rc:Rectangle = new Rectangle(0, 0, unscaledWidth, unscaledHeight);
        var g:Graphics = graphics;
        g.clear();        
                    g.moveTo(rc.left, rc.top);
        g.lineStyle(1, txtBorderColor, 0.8);
        g.lineTo(rc.width, rc.top);
        g.lineTo(rc.width, rc.bottom+4);
        g.lineTo(rc.left, rc.bottom+4);
        g.lineTo(rc.left, rc.top);
        g.endFill();    
    }
}

Это на самом деле chartItem.element. И вам нужно привести его к «ChartElement», потому что «элемент» относится к интерфейсу «IChartElement» и имеет доступ к свойству «dataProvider». 'ChartDataProvider' только для записи. Итак, правильный способ доступа к нему ...

(chartItem.element как ChartElement) .dataProvider.

1 Ответ

0 голосов
/ 21 сентября 2011

ChartItem имеет свойство IChartElement с доступом к поставщику данных диаграммы:

chartItem.item.chartDataProvider.length > 100
...