I have a ColumnChart for which the dataProvider is an XML file. The
chart is displayed as expected, but when I click on a column on the
chart i want to display some information about that column in a text area.

However, I haven't been able to achieve that. My code is below:

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml";
layout="absolute" width="780"
        creationComplete="init();" >
        <mx:HTTPService id="chartFeed" url="{chart1URL}"
result="dataLoaded(event)" resultFormat="e4x"/>
  <mx:Script>
    <![CDATA[
        import mx.events.SliderEvent;
        import mx.events.DragEvent;
        import mx.controls.HSlider;
        import mx.charts.events.ChartItemEvent;
        import mx.controls.Spacer;
        import mx.charts.CandlestickChart;
        import mx.containers.Canvas;
        import mx.controls.Text;
        import mx.controls.CheckBox;
        import mx.containers.HBox;
        import mx.rpc.events.*;

     import mx.graphics.IFill;
     import mx.graphics.SolidColor;
     import mx.charts.ChartItem;
     import mx.charts.series.items.ColumnSeriesItem;
     
     [Bindable] private var chart1URL:String;
     [Bindable] private var topicInterest:XMLList;
     private var sliders:Array = new Array;

    private function init():void
     {
        chart1URL = "data/star1.xml";
                chartFeed.send();
     }
     
     private function dataLoaded(e:ResultEvent):void
     {
        topicInterest = e.result.element;
        var numTopics:int = topicInterest.length();
        trace("numTopics "+numTopics);
        var i:int;
        var topicHolder:HBox;
        for(i=0; i<numTopics; i++){
                topicHolder = new HBox;
                topicHolder.setStyle("horizontalGap", 10);
                var cBox:CheckBox = new CheckBox;
                var col:Canvas = new Canvas;
                var spacer:Spacer = new Spacer;
                var slider:HSlider = new HSlider;
                slider.id = i.toString();
                slider.minimum =-0.1;
                slider.maximum = 1.0
                //slider.allowTrackClick = true;
                slider.liveDragging = true;
                slider.tickInterval = 0.1;
                slider.value = Number([EMAIL PROTECTED]);
                sliders[i] = slider;
                //slider.width = 50;
                var theColor:Number = Number([EMAIL PROTECTED]);
                topicHolder.percentWidth = 100;
                cBox.label = [EMAIL PROTECTED];
                col.setStyle("backgroundColor", theColor);
                col.width = 20;
                col.height = 20;
                cBox.id = i.toString();
                cBox.selected = true;
                spacer.percentWidth= 100;
                topicHolder.addChild(col);
                topicHolder.addChild(cBox);
                topicHolder.addChild(spacer);
                topicHolder.addChild(slider);
                controls.addChild(topicHolder);
                
                cBox.addEventListener(MouseEvent.CLICK, onCBSelected);
                //currCSeries.addEventListener(MouseEvent.CLICK, onItemClick);
                //slider.addEventListener(SliderEvent.THUMB_RELEASE, 
onDragSlider);
                slider..addEventListener(SliderEvent.CHANGE, onDragSlider);
        }
     }
     
     private function onDragSlider(e:SliderEvent):void
     {
        var i:int = Number(e.currentTarget.id);
        var id:int = i+1;
        trace("val "+ topicInterest.(@id==id)[EMAIL PROTECTED]);
        trace("e.currentTarget.value "+ e.currentTarget.value);
        topicInterest.(@id==id)[EMAIL PROTECTED] = e.currentTarget.value;
     }
     
     private function onClickSlider(e:MouseEvent):void
     {
        var i:int = Number(e.currentTarget.id);
        var id:int = i+1;
        var aSlider:HSlider = e.currentTarget as HSlider;
        aSlider.addEventListener(SliderEvent.CHANGE, onDragSlider);
        trace("val "+ topicInterest.(@id==id)[EMAIL PROTECTED]);
        trace("e.currentTarget.value "+ sliders[i].value);
        //topicInterest.(@id==id)[EMAIL PROTECTED] = sliders[i].value;
     }
     
     private function onCBSelected(e:MouseEvent):void
     {
        var cBox:CheckBox = e.currentTarget as CheckBox;
        var i:int = Number(e.currentTarget.id);
        
        //cBox.selected = !cBox.selected;
        if(!cBox.selected) [EMAIL PROTECTED] = false;
        else [EMAIL PROTECTED] = true;
        myChart.dataProvider = topicInterest.(@display==true);
        //currCSeries.fillFunction
        trace("dp "+topicInterest.(@display==true));
        trace("dp "+myChart.getChildAt(0));
     }
     
    private function myFillFunction(element:ChartItem,
index:Number):IFill {
        var c:SolidColor = new SolidColor(0x00CC00);
        var item:ColumnSeriesItem = ColumnSeriesItem(element);
        if(index < topicInterest.(@display==true).length()){
                var name:String = currCSeries.items[index].xValue;
                var theColor:Number =
Number(topicInterest.(@topicName==name)[EMAIL PROTECTED]);
        }

                c.color=theColor;
        return c;
        
    }
    
    private function onItemClick():void
    {
        var index = currCSeries.getChildIndex();
        details.text = "hi there"+index;

    }
    
    ]]>
  </mx:Script>
  
 <mx:SeriesSlide 
        id="slideIn" 
        duration="500" 
        direction="up"
    />
    <mx:SeriesSlide 
        id="slideOut" 
        duration="400" 
        direction="down"
    />



  <mx:Panel id="chart" title="Using a custom fillFunction in a Column
Chart" width="400" height="300"
        x="10" y="10">
     <mx:ColumnChart id="myChart" 
        dataProvider="{topicInterest}" 
        showDataTips="true" 
        width="100%" height="100%" 
        
     >
        <mx:horizontalAxis>
           <mx:CategoryAxis 
                title="Topic"
                categoryField="@topicName"
           />
        </mx:horizontalAxis>
        <mx:verticalAxis>
            <mx:LinearAxis title="Some title here"/>
        </mx:verticalAxis>
        
        <mx:series>
           <mx:ColumnSeries id="currCSeries" 
                xField="@topicName" 
                yField="@value" 
                fillFunction="myFillFunction" 
                displayName="Some Name"  selectable="true"
click="onItemClick()"
                showDataEffect="slideIn"
                        hideDataEffect="slideOut"
           />
        </mx:series>
     </mx:ColumnChart>
     
  </mx:Panel>
  <mx:Panel id="controlBox" width="{application.width-chart.width-30}"
x="{chart.width+20}" y="10" title="Select topics to view on map:" >
        <mx:VBox id="controls" width="100%" height="100%" verticalGap="8"
paddingLeft="10"
         paddingRight="10" paddingTop="10" paddingBottom="10">
                
        </mx:VBox>
  </mx:Panel>
  <mx:Label x="10" y="332" text="Details" fontWeight="bold"/>
  <mx:TextArea x="10" y="358" width="537" height="91" id="details"
editable="false"/>
  
</mx:Application>


I customized the chart to have each column of a different color and
the values can be changed with an HSlider for each bar. But I still
have issues with selecting a column.

Thanks,

Gilbert

Reply via email to