I must be doing something simple wrong here.....

What I am doing:
creating a column chart entirely in AS, and controlling the colors, and
series, and legend in AS. The legend will be in a grid, instead of
automatic in the chart.
once the XML data is acquired, the makeserviceschart assembles the
chart, including choosing which data to include, and which colors to
use, and then finally calls  drawlegend, passing the grid and chart
objects, in order to assemble the legend in a Grid.

What doesn't work:
The legend gets the data name ( label) correct, but doesn't get the fill
color.
Back inside the makeserviceschart, I can't trace out the fill color
using getStyle either, even though I have just set it using setStyle.
The getStyle syntax is a cut&paste from the Adobe example code app:
http://blogs.adobe.com/flexdoc/2008/07/customized_legend_layout.html  
which DOES work on my system....

// SMALL SNIPPET

// set the color from the colorlist array of SolidColors
series1.setStyle("fill", colorlist[count]) ; //THIS WORKS CORRECTLY

// in the legend building func
// Apply the current series' displayName to the LegendItem's label.
                        li.label = colChart.series[z].displayName;
                                    display( li.label ) ;  // YEP THIS WORKS
                                    display( colChart.series.length) ;
// YEP THIS WORKS
                        // Get the current series' fill.
                        var sc:SolidColor =
colChart.series[z].getStyle("fill"); // NOPE NO COLORS SHOW UP
                                display("color sc = " +  sc ); // NOPE
TRACES "NULL"
                                display("series color fill = " +
colChart.series[z].getStyle("fill")  ); //NOPE TRACES "UNDEFINED"
                      // I tried toString()  and toString(16)  and sc.color


// BIG CODE SNIPPET

//THE CHART FUNCTION     
         public function makeserviceschart():void {
            var myChart:ColumnChart;
              var series1:ColumnSeries ;
              var mySeries:Array=new Array();
              var data_items:Array = new
Array("inpkts",..."inbytes","outbytes"); // dummy user-selected data choices
           
// THE DATA
             simpleServicesData = new ArrayCollection([]); //subset of
the XML
             // various data munging ops snipped out here

            myChart  = new ColumnChart();
            myChart.showDataTips = true;
            myChart.dataProvider = simpleServicesData;

            // Define the category axis.
            var hAxis:CategoryAxis = new CategoryAxis();
            hAxis.categoryField = "name" ;
            hAxis.dataProvider =  simpleServicesData;
            myChart.horizontalAxis = hAxis;
           
            // define the vertical axis
            var vAxis:LogAxis = new LogAxis();  // makes logarithmic
            vAxis.interval = 10 ;
            myChart.verticalAxis = vAxis;
     
            //create the colors
            var colorlist:Array =     new Array(
                new SolidColor(0x8dd3c7, .8),    ....,     );

            // Add the series:
               var count:int = 0 ;
            for each (var item:String in data_items){               
                series1 = new ColumnSeries();
                series1.xField="name";
                series1.yField= item ;
                series1.displayName = item;
                series1.setStyle("fill", colorlist[count]) ; //THIS
WORKS CORRECTLY
                mySeries.push(series1);               
                count++ ;
            }           
            // add all the series to the chart
            myChart.series = mySeries;

             // Attach chart and legend to the display list.
            // first kill off the previous version of the chart
              serviceschart.removeAllChildren();
            serviceschart.addChild(myChart);

            //Create a dynamically sized grid for numerous legend
items        
            drawlegend(myChart, serviceslegend) ;
        
     }
//THE LEGEND TO GRID FUNC called by makeserviceschart
        // taken from here:
http://blogs.adobe.com/flexdoc/2008/07/customized_legend_layout.html 
        private function drawlegend(colChart:ColumnChart,
myGrid:Grid):void {
            // empty grid object
            myGrid.removeAllChildren();
        
        //SNIPPED OUT  SETUP OF VARS
            for (var j:int = 0; j < numRows; j++) {
                var gr:GridRow = new GridRow();
                myGrid.addChild(gr);
           
                for (var k:int = 0; k < rowSize; k++) {
                    // As long as the series counter is less than the
number of series...
                    if (z < colChart.series.length) {
                        var gi:GridItem = new GridItem();
                        gr.addChild(gi);
                       
                        var li:LegendItem = new LegendItem();
                       
                        // Apply the current series' displayName to the
LegendItem's label.
                        li.label = colChart.series[z].displayName;
                                    display("li lable = " + li.label )
;  // YEP THIS WORKS
                                    display("chart series length = " +
colChart.series.length) ; // YEP THIS WORKS
                        // Get the current series' fill.
                        var sc:SolidColor =
colChart.series[z].getStyle("fill"); // NOPE NO COLORS SHOW UP
                                display("color sc = " +  sc ); // NOPE
TRACES "NULL"
                                display("series color fill = " +
colChart.series[z].getStyle("fill")  ); //NOPE TRACES "UNDEFINED"
                       
                        // Apply the current series' fill to the
corresponding LegendItem.
                        li.setStyle("fill", sc);

                        gi.width = 80;
                                           
                        // Add the LegendItem to the GridItem.
                        gi.addChild(li);
                       
                        // Increment any time a LegendItem is added.
                        z++;
                        //display("z counter = " + z ) ;
                    }
                }                           
            }
        }
       
   
  ]]></mx:Script>
   
        <mx:Panel id="serviceschart" title="Services Statistics"  />       
        <mx:Grid id="serviceslegend"   />    
           
      <!-- some more panels go here for the display output -->

///////////////
thanks
John

Reply via email to